Преглед на файлове

Revert "优化微信支付订单查询"

This reverts commit 18ec0b49aef26387b3b5760d6616f2f2ff0f6eb9.
lighter преди 1 година
родител
ревизия
a7456559e9

+ 2 - 2
src/main/java/thyyxxk/wxservice_server/config/exception/BizException.java

@@ -26,9 +26,9 @@ public class BizException extends RuntimeException {
     }
 
     public BizException(String cause) {
-        super(ExceptionEnum.BUSINESS_INTERRUPT.getMessage(),
+        super(ExceptionEnum.INTERNAL_SERVER_ERROR.getMessage(),
                 new Throwable(cause));
-        this.errorEnum = ExceptionEnum.BUSINESS_INTERRUPT;
+        this.errorEnum = ExceptionEnum.INTERNAL_SERVER_ERROR;
     }
 
     @Override

+ 0 - 1
src/main/java/thyyxxk/wxservice_server/config/exception/ExceptionEnum.java

@@ -20,7 +20,6 @@ public enum ExceptionEnum {
     NULL_POINTER(1002, "空指针异常!"),
     NETWORK_ERROR(1003, "网络异常!"),
     NO_DATA_EXIST(1004, "没有查询到有效数据!"),
-    BUSINESS_INTERRUPT(1005, "业务中止。"),
     /**
      * 以下是需要弹窗提示的错误
      * */

+ 4 - 1
src/main/java/thyyxxk/wxservice_server/controller/WxApiController.java

@@ -63,8 +63,11 @@ public class WxApiController {
 
     @PassToken
     @GetMapping("/queryOrderState")
-    public ResultVo<String> queryOrderState(@RequestParam("tradeNo") String tradeNo) throws Exception {
+    public ResultVo<String> queryOrderState(@RequestParam("tradeNo") String tradeNo) {
         String payTime = service.queryOrderState(tradeNo);
+        if (payTime.contains("ERROR:")) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, payTime);
+        }
         return ResultVoUtil.success(payTime);
     }
 

+ 0 - 6
src/main/java/thyyxxk/wxservice_server/controller/WxPayNotifyController.java

@@ -37,10 +37,4 @@ public class WxPayNotifyController {
                 .httpServletRequest(httpServletRequest).build();
         new WeChatPayService().decryptNotify(request);
     }
-
-    @PassToken
-    @GetMapping("/testNotify")
-    public void testNotify(@RequestParam("tradeNo") String tradeNo) {
-        service.testNotify(tradeNo);
-    }
 }

+ 2 - 2
src/main/java/thyyxxk/wxservice_server/scheduled/QueryOrderStateTask.java

@@ -40,7 +40,7 @@ public class QueryOrderStateTask {
 
     @PassToken
     @GetMapping("/start")
-    public ResultVo<String> setCanScheduleRun(@RequestParam("value") boolean value) throws Exception {
+    public ResultVo<String> setCanScheduleRun(@RequestParam("value") boolean value) {
         canScheduleRun = value;
         if (canScheduleRun) {
             queryOrderState();
@@ -51,7 +51,7 @@ public class QueryOrderStateTask {
     }
 
     @Scheduled(fixedRate = 180 * 1000)
-    public void queryOrderState() throws Exception {
+    public void queryOrderState() {
         if (canScheduleRun && production) {
             List<TradeNo> tradeNos = dao.selectTradeNosForScheduleTask();
             log.info("定时查询订单支付状态:{}", tradeNos);

+ 67 - 62
src/main/java/thyyxxk/wxservice_server/service/WxApiService.java

@@ -7,7 +7,6 @@ import com.wechat.pay.java.service.payments.model.Transaction;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import thyyxxk.wxservice_server.config.exception.BizException;
 import thyyxxk.wxservice_server.config.exception.ExceptionEnum;
 import thyyxxk.wxservice_server.constant.OrderType;
 import thyyxxk.wxservice_server.constant.medins.Insutype;
@@ -138,71 +137,77 @@ public class WxApiService {
         return ResultVoUtil.success(response);
     }
 
-    public String queryOrderState(String tradeNo) throws Exception {
-        while (TradeVectorUtil.tradeNoBeingQuery(tradeNo) || TradeVectorUtil.tradeNoBeingRefund(tradeNo)) {
-            log.info("订单号:{} 正在查询状态中,进入等待区。", tradeNo);
-            TimeUnit.SECONDS.sleep(3);
-        }
-        WxPayOrder order = dao.selectOrderByTradeNo(tradeNo);
-        if (null == order) {
-            throw new BizException("订单不存在。【订单号:" + tradeNo + "】");
-        }
-        OrderType orderType = OrderType.get(order.getOrderType());
-        int hasSaved = 0;
-        if (orderType == OrderType.REGISTRATION || orderType == OrderType.CLINIC_REGISTER) {
-            hasSaved = dao.alreadyPaidRegisterFee(order.getTradeNo());
-        } else if (orderType == OrderType.OUTPATIENT) {
-            hasSaved = dao.alreadyPayed(order.getTradeNo());
-        }
-        if (hasSaved == 1) {
-            dao.updateSuccessHisStatus(tradeNo);
-            if (orderType == OrderType.REGISTRATION) {
-                log.info("订单号:{} 的挂号信息已保存,无需再次查询订单状态。", order.getTradeNo());
+    public String queryOrderState(String tradeNo) {
+        try {
+            while (TradeVectorUtil.tradeNoBeingQuery(tradeNo) || TradeVectorUtil.tradeNoBeingRefund(tradeNo)) {
+                log.info("订单号:{} 正在查询状态中,进入等待区。", tradeNo);
+                TimeUnit.SECONDS.sleep(3);
+            }
+            TradeVectorUtil.addBeingQuery(tradeNo);
+            WxPayOrder order = dao.selectOrderByTradeNo(tradeNo);
+            if (null == order) {
+                return "ERROR:订单不存在。【订单号:" + tradeNo + "】";
+            }
+            OrderType orderType = OrderType.get(order.getOrderType());
+            int hasSaved = 0;
+            if (orderType == OrderType.REGISTRATION || orderType == OrderType.CLINIC_REGISTER) {
+                hasSaved = dao.alreadyPaidRegisterFee(order.getTradeNo());
+            } else if (orderType == OrderType.OUTPATIENT) {
+                hasSaved = dao.alreadyPayed(order.getTradeNo());
+            }
+            if (hasSaved == 1) {
+                dao.updateSuccessHisStatus(tradeNo);
+                if (orderType == OrderType.REGISTRATION) {
+                    log.info("订单号:{} 的挂号信息已保存,无需再次查询订单状态。", order.getTradeNo());
+                    return DateUtil.formatDatetime(order.getPayDatetime());
+                }
+                log.info("订单号:{} 的门诊缴费信息已保存,无需再次查询订单状态。", order.getTradeNo());
                 return DateUtil.formatDatetime(order.getPayDatetime());
             }
-            log.info("订单号:{} 的门诊缴费信息已保存,无需再次查询订单状态。", order.getTradeNo());
-            return DateUtil.formatDatetime(order.getPayDatetime());
-        }
-        TradeVectorUtil.addBeingQuery(tradeNo);
-        Transaction transaction;
-        if (order.getCashpayAmt().compareTo(BigDecimal.ZERO) == 0) {
-            transaction = new Transaction();
-            transaction.setTradeState(Transaction.TradeStateEnum.SUCCESS);
-            transaction.setSuccessTime(DateUtil.formatDatetime(new Date()));
-        } else {
-            WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
-                    .outTradeNo(tradeNo).build();
-            transaction = new WeChatPayService().queryOrderState(request);
-        }
-        Transaction.TradeStateEnum tradeState = transaction.getTradeState();
-        if (tradeState == Transaction.TradeStateEnum.SUCCESS) {
-            String successTime = transaction.getSuccessTime()
-                    .split("\\+")[0].replace("T", " ");
-            dao.updatePayStatusAndPayTime(tradeNo, tradeState, successTime);
-            TradeVectorUtil.removeBeingQuery(tradeNo);
-            switch (orderType) {
-                case CLINIC_REGISTER:
-                    return savePayResultService.saveClinicRegister(order, successTime);
-                case REGISTRATION:
-                    return savePayResultService.saveAppointment(order, successTime);
-                case OUTPATIENT:
-                    return savePayResultService.saveMzChargeInfo(order, successTime);
-                case INPATIENT_PRE_PAY:
-                    return savePayResultService.saveZyYjjInfo(order, successTime);
-                case SELF_HELP_MACHINE:
-                case PACS_PRINT:
-                    return "订单已支付。";
-                case INSPECTIONS:
-                    savePayResultService.notifyCytj(order, successTime);
-                    return "订单已支付。";
-                case COUPON_PURCHASE:
-                    return savePayResultService.saveCouponPurchase(order, successTime);
-                default:
-                    throw new BizException("未识别到的订单类型,请联系服务中心。");
+
+            Transaction transaction;
+            if (order.getCashpayAmt().compareTo(BigDecimal.ZERO) == 0) {
+                transaction = new Transaction();
+                transaction.setTradeState(Transaction.TradeStateEnum.SUCCESS);
+                transaction.setSuccessTime(DateUtil.formatDatetime(new Date()));
+            } else {
+                WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
+                        .outTradeNo(tradeNo).build();
+                transaction = new WeChatPayService().queryOrderState(request);
             }
+            Transaction.TradeStateEnum tradeState = transaction.getTradeState();
+            if (tradeState == Transaction.TradeStateEnum.SUCCESS) {
+                String successTime = transaction.getSuccessTime()
+                        .split("\\+")[0].replace("T", " ");
+                dao.updatePayStatusAndPayTime(tradeNo, tradeState, successTime);
+                switch (orderType) {
+                    case CLINIC_REGISTER:
+                        return savePayResultService.saveClinicRegister(order, successTime);
+                    case REGISTRATION:
+                        return savePayResultService.saveAppointment(order, successTime);
+                    case OUTPATIENT:
+                        return savePayResultService.saveMzChargeInfo(order, successTime);
+                    case INPATIENT_PRE_PAY:
+                        return savePayResultService.saveZyYjjInfo(order, successTime);
+                    case SELF_HELP_MACHINE:
+                        return "订单已支付。";
+                    case INSPECTIONS:
+                        savePayResultService.notifyCytj(order, successTime);
+                        return "订单已支付。";
+                    case COUPON_PURCHASE:
+                        return savePayResultService.saveCouponPurchase(order, successTime);
+                    default:
+                        return "ERROR:未识别到的订单类型,请联系服务中心。";
+                }
+            }
+            dao.updatePayStatusAndQueryTimes(tradeNo, tradeState);
+            return "ERROR:" + transaction.getTradeStateDesc();
+        } catch (Exception e) {
+            log.error("查询订单状态出错:", e);
+            return "ERROR:服务器错误,请联系管理员处理。【订单号:" + tradeNo + "】";
+        } finally {
+            TradeVectorUtil.removeBeingQuery(tradeNo);
         }
-        dao.updatePayStatusAndQueryTimes(tradeNo, tradeState);
-        throw new BizException(transaction.getTradeStateDesc());
     }
 
     public void notifyCytj(String tradeNo) {

+ 0 - 9
src/main/java/thyyxxk/wxservice_server/service/WxPayNotifyService.java

@@ -7,7 +7,6 @@ import org.springframework.stereotype.Service;
 import thyyxxk.wxservice_server.constant.OrderType;
 import thyyxxk.wxservice_server.dao.WxApiDao;
 import thyyxxk.wxservice_server.entity.wxapi.WxPayOrder;
-import thyyxxk.wxservice_server.factory.cytj.CytjService;
 import thyyxxk.wxservice_server.factory.wechatpay.WeChatPayService;
 import thyyxxk.wxservice_server.factory.wechatpay.model.WechatPayGlobalRequest;
 import thyyxxk.wxservice_server.utils.DateUtil;
@@ -76,12 +75,4 @@ public class WxPayNotifyService {
                 savePayResultService.notifyCytj(order, successTime);
         }
     }
-
-    public void testNotify(String tradeNo) {
-        WxPayOrder order = dao.selectOrderByTradeNo(tradeNo);
-        if (null != order && order.getTradeState() == Transaction.TradeStateEnum.SUCCESS) {
-            String payTime = DateUtil.formatDatetime(order.getPayDatetime());
-            new CytjService().notifyPaymentSuccess(order, payTime);
-        }
-    }
 }