Explorar o código

关单逻辑修改

liweifan %!s(int64=3) %!d(string=hai) anos
pai
achega
ea61534a8e

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderPaymentService.java

@@ -44,7 +44,7 @@ public interface UserOrderPaymentService extends IService<UserOrderPayment> {
      * @updateTime 2022/5/6 14:49
      * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
      */
-    UserOrderPayment onlyClosePayment(String orderNo, String reason);
+    Boolean onlyClosePayment(String orderNo, String reason);
     /***
      * 关闭付款单
      * @author liweifan
@@ -53,7 +53,7 @@ public interface UserOrderPaymentService extends IService<UserOrderPayment> {
      * @updateTime 2022/5/6 14:49
      * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
      */
-    UserOrderPayment closePaymentAndReqOpen(String orderNo, String reason);
+    Boolean closePaymentAndReqOpen(String orderNo, String reason);
 
 
     /***

+ 36 - 33
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java

@@ -65,27 +65,19 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
 
     @Override
     public UserOrderPayment detailByOrderNo(String orderNo, PayChannelEnum payChannel, TradeStatusEnum status) {
-        return baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery()
-                .eq(UserOrderPayment::getOrderNo, orderNo)
-                .eq(UserOrderPayment::getPayChannel, payChannel)
-                .eq(UserOrderPayment::getStatus, status));
+        return baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery().eq(UserOrderPayment::getOrderNo, orderNo).eq(UserOrderPayment::getPayChannel, payChannel).eq(UserOrderPayment::getStatus, status));
     }
 
     @Override
     public UserOrderPayment detailByTransNoOrPaymentNo(String transNo, String paymentNo) {
-        return baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery().and(
-                wrapper -> wrapper.eq(UserOrderPayment::getTransNo, transNo)
-                        .or().eq(UserOrderPayment::getPaymentNo, paymentNo)
-        ));
+        return baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery().and(wrapper -> wrapper.eq(UserOrderPayment::getTransNo, transNo).or().eq(UserOrderPayment::getPaymentNo, paymentNo)));
     }
 
     @Override
-    public UserOrderPayment onlyClosePayment(String orderNo, String reason) {
-        UserOrderPayment orderPayment = baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery()
-                .eq(UserOrderPayment::getOrderNo, orderNo)
-                .eq(UserOrderPayment::getStatus, TradeStatusEnum.pending));
+    public Boolean onlyClosePayment(String orderNo, String reason) {
+        UserOrderPayment orderPayment = baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery().eq(UserOrderPayment::getOrderNo, orderNo).eq(UserOrderPayment::getStatus, TradeStatusEnum.pending));
         if (null == orderPayment) {
-            return orderPayment;
+            return true;
         }
 
         //更新付款单
@@ -94,21 +86,25 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         orderPayment.setUpdateTime(new Date());
 
         updateById(orderPayment);
-        return orderPayment;
+        return true;
     }
 
 
     @Override
-    public UserOrderPayment closePaymentAndReqOpen(String orderNo, String reason) {
-        UserOrderPayment orderPayment = onlyClosePayment(orderNo, reason);
+    public Boolean closePaymentAndReqOpen(String orderNo, String reason) {
+        UserOrderPayment orderPayment = baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery().eq(UserOrderPayment::getOrderNo, orderNo).eq(UserOrderPayment::getStatus, TradeStatusEnum.pending));
         if (null == orderPayment) {
-            return orderPayment;
+            return true;
         }
+
+        //更新付款单
+        orderPayment.setStatus(TradeStatusEnum.close);
+        orderPayment.setPayFailMsg(StringUtil.isEmpty(reason) ? "交易取消" : reason);
+        orderPayment.setUpdateTime(new Date());
+
         //发送支付关单请求
-        if (!StringUtil.isEmpty(orderPayment.getTransNo())
-                || !StringUtil.isEmpty(orderPayment.getPaymentNo())) {
-            ClosePayment param = new ClosePayment(orderPayment.getOpenType(),
-                    PaymentClientEnum.valueOf(orderPayment.getPaymentClient()), orderPayment.getPayChannel());
+        if (!StringUtil.isEmpty(orderPayment.getTransNo()) || !StringUtil.isEmpty(orderPayment.getPaymentNo())) {
+            ClosePayment param = new ClosePayment(orderPayment.getOpenType(), PaymentClientEnum.valueOf(orderPayment.getPaymentClient()), orderPayment.getPayChannel());
             param.setId(orderPayment.getTransNo());
             param.setPaymentNo(orderPayment.getPaymentNo());
             param.setReason(reason);
@@ -130,7 +126,12 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
                 e.printStackTrace();
             }
         }
-        return orderPayment;
+        updateById(orderPayment);
+        if (TradeStatusEnum.succeeded.equals(orderPayment.getCloseStatus())) {
+            return true;
+        } else {
+            return false;
+        }
     }
 
 
@@ -203,8 +204,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
     @Override
     public void executePaymentCallBack(PaymentCallBack data) {
         UserOrderVo userOrderVo = userOrderService.getUserOrderByPaymentNoOrTransNo(data.getPaymentNo(), data.getId());
-        if (OrderStatusEnum.WAIT_PAY.equals(userOrderVo.getStatus())
-                || OrderStatusEnum.PAYING.equals(userOrderVo.getStatus())) {
+        if (OrderStatusEnum.WAIT_PAY.equals(userOrderVo.getStatus()) || OrderStatusEnum.PAYING.equals(userOrderVo.getStatus())) {
             if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//支付成功
                 paymentSucceededHandle(data);
             } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//支付失败
@@ -216,8 +216,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
     @Override
     public void closePaymentCallBack(PaymentCallBack data) {
         UserOrderVo userOrderVo = userOrderService.getUserOrderByPaymentNoOrTransNo(data.getPaymentNo(), data.getId());
-        if (OrderStatusEnum.WAIT_PAY.equals(userOrderVo.getStatus())
-                || OrderStatusEnum.PAYING.equals(userOrderVo.getStatus())) {
+        if (OrderStatusEnum.WAIT_PAY.equals(userOrderVo.getStatus()) || OrderStatusEnum.PAYING.equals(userOrderVo.getStatus())) {
             if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//关单成功
                 paymentCloseSucceededHandle(data);
             } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//关单失败
@@ -243,9 +242,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         orderPayment.setOrderNo(payment.getOrderNo());
         orderPayment.setPaymentNo(payment.getPaymentNo());
         orderPayment.setTransNo(payment.getId());
-        orderPayment.setPayAmt(
-                new BigDecimal(payment.getPayAmt()).setScale(2, RoundingMode.HALF_UP)
-        );
+        orderPayment.setPayAmt(new BigDecimal(payment.getPayAmt()).setScale(2, RoundingMode.HALF_UP));
         orderPayment.setPayInfo(payment.getPayInfo());
         orderPayment.setStatus(TradeStatusEnum.pending);
 
@@ -274,8 +271,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
             log.error("支付回调,订单未找到。 req is {}", JSONObject.toJSONString(data));
             return;
         }
-        if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY)
-                || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
+        if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY) || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
             userOrderService.orderSuccess(detail, data);
         }
 
@@ -310,8 +306,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
             log.error("支付回调,订单未找到。 req is {}", JSONObject.toJSONString(data));
             return;
         }
-        if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY)
-                || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
+        if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY) || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
             userOrderService.doOrderCancel(detail, OrderStatusEnum.FAIL, "支付回调失败:" + errMsg);
             //关闭付款单
             onlyClosePayment(detail.getOrderNo(), "支付回调失败:" + errMsg);
@@ -332,6 +327,14 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         orderPayment.setCloseStatus(TradeStatusEnum.succeeded);
         orderPayment.setUpdateTime(new Date());
         updateById(orderPayment);
+
+        //若当前关单回调是当前订单付款单,则可以关单
+        UserOrderVo detail = userOrderService.getUserOrderByPaymentNoOrTransNo(data.getPaymentNo(), data.getId());
+        if (null != detail && OrderStatusEnum.PAYING.equals(detail.getStatus())
+                && orderPayment.getPaymentNo().equals(detail.getPaymentNo())) {
+            //关闭订单
+            userOrderService.doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单取消");
+        }
     }
 
     /***

+ 18 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -192,9 +192,11 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 && !OrderStatusEnum.PAYING.equals(detail.getStatus())) {
             return HttpResponseResult.failed("订单已关闭");
         }
-        orderPaymentService.closePaymentAndReqOpen(payReq.getOrderNo(), "用户取消订单");
-        //关闭订单
-        doOrderCancel(detail, OrderStatusEnum.CLOSE, StringUtil.isEmpty(payReq.getReason()) ? "用户取消订单" : payReq.getReason());
+        Boolean close = orderPaymentService.closePaymentAndReqOpen(payReq.getOrderNo(), "用户取消订单");
+        if(close){
+            //关闭订单
+            doOrderCancel(detail, OrderStatusEnum.CLOSE, StringUtil.isEmpty(payReq.getReason()) ? "用户取消订单" : payReq.getReason());
+        }
         return HttpResponseResult.succeed(true);
     }
 
@@ -377,7 +379,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             return;
         }
         UserOrderPayment userOrderPayment = orderPaymentService.detailByTransNoOrPaymentNo(detail.getTransNo(), detail.getPaymentNo());
-        if (null != userOrderPayment && TradeStatusEnum.pending.equals(userOrderPayment.getStatus())) {
+        if (null == userOrderPayment) {
+            //关闭订单
+            doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
+        } else if (TradeStatusEnum.pending.equals(userOrderPayment.getStatus())) {
             Payment param = new Payment(detail.getOpenType(),
                     PaymentClientEnum.valueOf(userOrderPayment.getPaymentClient()), detail.getPayChannel());
             param.setId(detail.getTransNo());
@@ -385,16 +390,18 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             BaseResult<Payment> res = paymentClient.queryPayment(param);
             //支付成功
             if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(res.getData().getStatus())
-                    && (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus()) || OrderStatusEnum.PAYING.equals(detail.getStatus()))
-            ) {
+                    && (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus()) || OrderStatusEnum.PAYING.equals(detail.getStatus()))) {
+                //订单已经完成,则完成订单
                 orderSuccess(detail);
-                return;
+            } else {
+                //关闭订单付款单
+                Boolean close = orderPaymentService.closePaymentAndReqOpen(orderNo, "订单超时");
+                if (close) {
+                    //关闭订单
+                    doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
+                }
             }
         }
-        //关闭订单
-        doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
-        //关闭订单付款单
-        orderPaymentService.closePaymentAndReqOpen(orderNo, "订单超时");
     }
 
     private HttpResponseResult<OrderPayRes> doOrderPay(OrderPayReq payReq, UserOrderVo detail) throws Exception {

+ 18 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -169,10 +169,21 @@
         SELECT
             <include refid="baseColumns"/>
         FROM user_order t
+        left join user_order_payment p on t.order_no_ = p.order_no_ and (p.status_ = 'pending' or p.status_ = 'succeeded')
         <where>
             <if test="null != param.status and '' != param.status">
                 AND t.status_ = #{param.status}
             </if>
+            <if test="param.startTime != null">
+                AND (
+                    (p.id_ is null and t.create_time_ &gt;= #{param.startTime}) or (p.id_ is not null and p.create_time_ &gt;= #{param.startTime})
+                )
+            </if>
+            <if test="param.endTime != null">
+                AND (
+                    (p.id_ is null and t.create_time_ &lt; #{param.endTime}) or (p.id_ is not null and p.create_time_ &lt; #{param.endTime})
+                )
+            </if>
         </where>
         order by t.create_time_
     </select>
@@ -225,9 +236,15 @@
     </select>
     <select id="getUserOrderByPaymentNoOrTransNo" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
-            <include refid="baseColumns"/>
+            <include refid="baseColumns"/>,
+            p1.open_type_ as openType,
+            p1.payment_client_ as paymentClient,
+            p1.pay_channel_ as payChannel,
+            p1.trans_no_ as transNo,
+            p1.payment_no_ as paymentNo
         FROM user_order t
         left join user_order_payment p on t.order_no_ = p.order_no_
+        left join user_order_payment p1 on t.order_no_ = p1.order_no_ and (p1.status_ = 'pending' or p1.status_ = 'succeeded')
         <where>
             <choose>
                 <when test="paymentNo != null and paymentNo != ''">