Procházet zdrojové kódy

1.调整自动更改超时订单定时任务;
2.修复订单支付时间取值错误问题;

codingliang před 3 měsíci
rodič
revize
e76a50edce

+ 6 - 2
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -713,7 +713,9 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
         String currentTimeStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
         order.setOrderCode(generateOrderCode());
         order.setIsPay(1);
-        order.setPayTime(currentTimeStr);
+        if (StrUtil.isBlank(order.getPayTime())) {
+            order.setPayTime(currentTimeStr);
+        }
 
         // 店铺信息
         GoodsShop goodsShop = shopMessageService.getShopInfoById(order.getShopId());
@@ -2873,9 +2875,10 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
                             tbOrder.setStatus(5);
                         } else if ("1".equals(respCode)) {
                             PayDetails payDetails = payDetailsService.getByOrderNo(orderNumber);
+                            String payTime = response2.getTransDate() + " " + response2.getTransTime();
                             if (!ObjectUtil.isNull(payDetails)) {
                                 payDetails.setState(PayStateEnums.PAY_SUCCESS.getStateCode());
-                                payDetails.setPayTime(response2.getTransDate() + " " + response2.getTransTime());
+                                payDetails.setPayTime(payTime);
                                 payDetails.setTradeNo(response2.getChannelOrderno());
                                 payDetails.setRemark("Scheduled RHT PAY SUCCESS");
                                 payDetailsService.updateDetail(payDetails);
@@ -2883,6 +2886,7 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
                                 log.error("超时任务处理订单【{}】支付成功,但未获取到支付订单!支付通知信息:{}", orderNumber, response2);
                             }
                             tbOrder.setPayType(1);
+                            tbOrder.setPayTime(payTime);
                             updateOrderAfterPaySuccess(tbOrder);
                         }
 

+ 5 - 5
src/main/java/com/sqx/modules/pay/service/impl/NewPayServiceImpl.java

@@ -230,7 +230,7 @@ public class NewPayServiceImpl implements NewPayService {
 
                 PaySceneEnum payScene = PaySceneEnum.getBySceneCode(payDetails.getClassify());
                 switch (payScene) {
-                    case ORDER_PAY: handleTakeoutOrderPaySuccess(orderNo); break;
+                    case ORDER_PAY: handleTakeoutOrderPaySuccess(payDetails); break;
                     case BALANCE_RECHARGE: handleBalanceRechargePaySuccess(payDetails); break;
                     case BOND_PAY: handleBondPaySuccess(payDetails); break;
                     case VIP_PAY: handleVipPaySuccess(payDetails); break;
@@ -287,15 +287,15 @@ public class NewPayServiceImpl implements NewPayService {
 
     /**
      * 处理外卖订单支付成功通知
-     * @param orderNo 订单编号
+     * @param payDetails 支付信息
      */
-    private void handleTakeoutOrderPaySuccess(String orderNo) {
+    private void handleTakeoutOrderPaySuccess(PayDetails payDetails) {
         AppOrderService appOrderService = SpringContextUtils.getBean(AppOrderService.class);
 
         // 根据订单编号查询订单
-        TbOrder order = appOrderService.selectOrderByNum(orderNo);
-        // 1 表示微信支付
+        TbOrder order = appOrderService.selectOrderByNum(payDetails.getOrderId());
         order.setPayType(1);
+        order.setPayTime(payDetails.getPayTime());
         // 订单支付成功,修改订单状态
         appOrderService.updateOrderAfterPaySuccess(order);
     }

+ 34 - 61
src/main/java/com/sqx/scheduler/order/OrderScheduler.java

@@ -2,19 +2,18 @@ package com.sqx.scheduler.order;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.ekyong.www.pay.pay.qrcode.api.RhtQrcodePayApi;
 import com.ekyong.www.pay.pay.qrcode.bean.QrcodeQueryRequestBean;
 import com.ekyong.www.pay.pay.qrcode.bean.QrcodeQueryResponseBean;
-import com.github.wxpay.sdk.WXPay;
 import com.sqx.modules.common.entity.CommonInfo;
 import com.sqx.modules.common.service.CommonInfoService;
 import com.sqx.modules.goods.entity.GoodsShop;
 import com.sqx.modules.goods.service.GoodsShopService;
 import com.sqx.modules.order.entity.TbOrder;
 import com.sqx.modules.order.service.AppOrderService;
-import com.sqx.modules.pay.config.WXConfig;
 import com.sqx.modules.pay.config.WechatPayConfig;
 import com.sqx.modules.pay.entity.PayDetails;
 import com.sqx.modules.pay.enums.PayStateEnums;
@@ -213,22 +212,14 @@ public class OrderScheduler {
         lock.lock();
         try {
             log.info("超时订单自动取消任务开始运行");
-            //加5分钟在前端强制取消前执行
-            long time = new Date().getTime()+5*60*1000;
+            // 加5分钟在前端强制取消前执行 ??
+            long time = new Date().getTime() + 5*60*1000;
             List<TbOrder> orderList = orderService.changeTimeOutOrder(time);
 
             if (orderList.size() == 0) {
                 log.info("没有符合条件的超时订单,超时订单自动取消任务运行....");
                 return;
             }
-            WXConfig config = new WXConfig();
-//            当前都是小程序支付
-            config.setAppId(commonInfoService.findOne(74).getValue());
-            //微信商户key
-            config.setKey(commonInfoService.findOne(250).getValue());
-            //微信商户号mchId
-            config.setMchId(commonInfoService.findOne(251).getValue());
-            WXPay wxpay = new WXPay(config);
 
             WechatPayConfig wechatMchConfig = WechatPayConfig.builder()
                     .appId(commonInfoService.findOne(45).getValue())
@@ -238,66 +229,48 @@ public class OrderScheduler {
                     .build();
 
             RhtQrcodePayApi qrcodePay = new RhtQrcodePayApi(wechatMchConfig.getMchId(), wechatMchConfig.getMchKey(), RHT_PAY_BASE_URL);
-
-
             ArrayList<TbOrder> orders = new ArrayList<>();
             for (TbOrder tbOrder : orderList) {
-//                将订单状态作为判断条件
-                Integer state = tbOrder.getStatus();
-                if (0 == state) {
-//                    状态为待支付需要调用支付系统订单查询接口判断支付系统对应的订单状态
+                String orderNumber = tbOrder.getOrderNumber();
+                try {
+                    // 状态为待支付需要调用支付系统订单查询接口判断支付系统对应的订单状态
                     Map<String, String> data = new HashMap<>();
-                    String orderNumber = tbOrder.getOrderNumber();
-                    //商户订单号
+                    // 商户订单号
                     data.put("out_trade_no", orderNumber);
-                    Map<String, String> response = wxpay.orderQuery(data);
-                    String trade_state = response.get("trade_state");
-                    //SUCCESS—支付成功,REFUND—转入退款,NOTPAY—未支付,CLOSED—已关闭,REVOKED—已撤销(刷卡支付),USERPAYING--用户支付中,PAYERROR--支付失败(其他原因,如银行返回失败)
-                    if (ObjectUtils.isNotEmpty(trade_state)) {
-                        if ("NOTPAY".equals(trade_state)) {
-                            tbOrder.setStatus(5);
-                            orders.add(tbOrder);
-                        }else if ("SUCCESS".equals(trade_state)){
-                            tbOrder.setPayType(1);
-                            orderService.updateOrderAfterPaySuccess(tbOrder);
+                    QrcodeQueryRequestBean qqrb = new QrcodeQueryRequestBean();
+                    qqrb.setTraceno(orderNumber);// 商户流水号
+                    QrcodeQueryResponseBean response2 = qrcodePay.query(qqrb);
+                    String respCode = response2.getRespCode();
+                    log.info("超时任务处理订单【{}】查询支付结果,支付通知信息:{}", orderNumber, response2);
+                    // 0未支付,1支付成功,2支付失败,4退款中,5退款成功,6退款失败
+                    if (StrUtil.equals("1", respCode)){
+                        String payTime = response2.getTransDate()+ " " + response2.getTransTime();
+                        PayDetails payDetails = payDetailsService.getByOrderNo(orderNumber);
+                        if (!ObjectUtil.isNull(payDetails)) {
+                            payDetails.setState(PayStateEnums.PAY_SUCCESS.getStateCode());
+                            payDetails.setPayTime(payTime);
+                            payDetails.setTradeNo(response2.getChannelOrderno());
+                            payDetails.setRemark("Scheduled RHT PAY SUCCESS");
+                            payDetailsService.updateDetail(payDetails);
+                        }else {
+                            log.error("超时任务处理订单【{}】支付成功,但未获取到支付订单!支付通知信息:{}", orderNumber, response2);
                         }
-                    }else {
-                        QrcodeQueryRequestBean qqrb = new QrcodeQueryRequestBean();
-                        qqrb.setTraceno(orderNumber);// 商户流水号
-                        QrcodeQueryResponseBean response2 = qrcodePay.query(qqrb);
-                        String respCode = response2.getRespCode();
-                        log.info("超时任务处理订单【{}】查询支付结果,支付通知信息:{}", orderNumber, response2);
-//                        0未支付,1支付成功,2支付失败,4退款中,5退款成功,6退款失败
-                        if ("0".equals(respCode)) {
-                            tbOrder.setStatus(5);
-                            orders.add(tbOrder);
-                        }else if ("1".equals(respCode)){
-                            PayDetails payDetails = payDetailsService.getByOrderNo(orderNumber);
-                            if (!ObjectUtil.isNull(payDetails)) {
-                                payDetails.setState(PayStateEnums.PAY_SUCCESS.getStateCode());
-                                payDetails.setPayTime(response2.getTransDate()+ " " + response2.getTransTime());
-                                payDetails.setTradeNo(response2.getChannelOrderno());
-                                payDetails.setRemark("Scheduled RHT PAY SUCCESS");
-                                payDetailsService.updateDetail(payDetails);
-                            }else {
-                                log.error("超时任务处理订单【{}】支付成功,但未获取到支付订单!支付通知信息:{}", orderNumber, response2);
-                            }
-                            tbOrder.setPayType(1);
-                            orderService.updateOrderAfterPaySuccess(tbOrder);
-                        }
-
+                        tbOrder.setPayTime(payTime);
+                        tbOrder.setPayType(1);
+                        orderService.updateOrderAfterPaySuccess(tbOrder);
+                    } else {
+                        tbOrder.setStatus(5);
+                        orders.add(tbOrder);
                     }
-                } else {
-                    tbOrder.setStatus(5);
-                    orders.add(tbOrder);
+                } catch (Exception e) {
+                    log.error("超时任务处理订单【{}】查询支付结果失败,失败原因:{}", orderNumber, e.getMessage());
+                    e.printStackTrace();
                 }
             }
-            //list为空不要执行
+            // list为空不要执行
             if(!orders.isEmpty()){
                 orderService.updateBatchById(orders);
             }
-
-
             log.info("超时订单自动取消运行成功");
         } catch (Exception e) {
             log.error("超时订单自动取消任务运行失败失败原因:{}", e.getMessage());