lighter hace 2 años
padre
commit
911f895a13

+ 11 - 0
src/main/java/thyyxxk/wxservice_server/constant/TradeState.java

@@ -47,4 +47,15 @@ public enum TradeState {
         return UNREACHABLE;
     }
 
+    public static TradeState getByCode(Integer value) {
+        if (null == value) {
+            return UNREACHABLE;
+        }
+        for (TradeState state : TradeState.values()) {
+            if (state.getCode() == value) {
+                return state;
+            }
+        }
+        return UNREACHABLE;
+    }
 }

+ 29 - 15
src/main/java/thyyxxk/wxservice_server/service/PowersiPhysicalCheckService.java

@@ -123,24 +123,38 @@ public class PowersiPhysicalCheckService {
         if (null == resultCode) {
             return ResultVoUtil.fail(ExceptionEnum.NETWORK_ERROR);
         }
-        if (resultCode.getInteger("code") == 0) {
-            JSONArray rows = rawdata.getJSONArray("rows");
-            if (null != rows && rows.size() > 0) {
-                List<JSONObject> list = JSONArray.parseArray(rows.toJSONString(), JSONObject.class);
-                if (null != list.get(0).get("检查日期")) {
-                    list.sort(Comparator.comparing(obj -> obj.getLong("检查日期")));
-                    for (JSONObject item : list) {
-                        item.put("checkTime", DateUtil.parseTimestamp(item.getLong("检查日期")));
-                    }
-                }
-                for (JSONObject item : list) {
-                    item.put("name", item.getString("体检单元名称"));
+        Integer code = resultCode.getInteger("code");
+        if (null == code) {
+            return ResultVoUtil.fail(ExceptionEnum.NETWORK_ERROR);
+        }
+        if (0 != code) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, resultCode.getString("message"));
+        }
+        JSONArray rows = rawdata.getJSONArray("rows");
+        if (null == rows || rows.size() == 0) {
+            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
+        }
+        List<JSONObject> list = JSONArray.parseArray(rows.toJSONString(), JSONObject.class);
+        long checkTimestamp = 0L;
+        for (JSONObject item : list) {
+            Long checkTime = item.getLong("检查日期");
+            if (null != checkTime && checkTime > checkTimestamp) {
+                checkTimestamp = checkTime;
+            }
+            item.put("name", item.getString("体检单元名称"));
+        }
+        if (checkTimestamp != 0L) {
+            for (JSONObject item : list) {
+                Long checkTime = item.getLong("检查日期");
+                if (null == checkTime) {
+                    checkTime = checkTimestamp;
+                    item.put("检查日期", checkTimestamp);
                 }
-                return ResultVoUtil.success(list);
+                item.put("checkTime", DateUtil.parseTimestamp(checkTime));
             }
-            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
+            list.sort(Comparator.comparing(obj -> obj.getLong("检查日期")));
         }
-        return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, resultCode.getString("message"));
+        return ResultVoUtil.success(list);
     }
 
     private ResultVo<JSONObject> getExamResult(String tjid) {

+ 8 - 5
src/main/java/thyyxxk/wxservice_server/service/SavePayResultService.java

@@ -148,12 +148,15 @@ public class SavePayResultService {
             return ResultVoUtil.success("保存门诊缴费信息成功。");
         }
         PureCodeName status = dao.selectPayStatus(tradeNo);
-        if (null != status && (status.getStatus() == TradeState.REFUND.getCode() || StringUtil.notBlank(status.getName()))) {
-            TradeVectorUtil.removeRefunded(tradeNo);
-            if (status.getStatus() != TradeState.REFUND.getCode()) {
-                dao.updateRefundStatus(tradeNo);
+        log.info("【订单号:{}】查询订单是否已退款结果:{}", tradeNo, status);
+        if (null != status) {
+            if (StringUtil.notBlank(status.getName()) || status.getStatus() == TradeState.REFUND.getCode()) {
+                if (status.getStatus() != TradeState.REFUND.getCode()) {
+                    dao.updateRefundStatus(tradeNo);
+                }
+                TradeVectorUtil.removeRefunded(tradeNo);
+                return ResultVoUtil.success("因系统原因,订单已退款。请稍后重新缴费或前往一楼收费窗口缴费。");
             }
-            return ResultVoUtil.success("因系统原因,订单已退款。请稍后重新缴费或前往一楼收费窗口缴费。");
         }
         if (TradeVectorUtil.tradeNoRefunded(tradeNo)) {
             dao.updateRefundStatus(tradeNo);

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

@@ -40,6 +40,14 @@ public class WxPayNotifyService {
         log.info("微信扫码支付通知解密:{}", ciphertext);
         JSONObject payer = cipherObj.getJSONObject("payer");
         String tradeNo = cipherObj.getString("out_trade_no");
+        WxPayOrder order = dao.selectOrderByTradeNo(tradeNo);
+        if (null != order) {
+            TradeState tradeState = TradeState.getByCode(order.getPayStatus());
+            if (tradeState == TradeState.SUCCESS || tradeState == TradeState.REFUND) {
+                log.info("订单号【{}】已解密过,无需继续解密。", tradeNo);
+                return;
+            }
+        }
         if (TradeVectorUtil.tradeNoBeingQuery(tradeNo)) {
             log.info("订单号【{}】正在业务中,无需继续解密。", tradeNo);
             return;
@@ -53,7 +61,7 @@ public class WxPayNotifyService {
         String successTime = cipherObj.getString("success_time")
                 .split("\\+")[0].replace("T", " ");
         dao.updatePayStatusAndPayTimeAndOpenId(tradeNo, tradeState.getCode(), successTime, openId);
-        WxPayOrder order = dao.selectOrderByTradeNo(tradeNo);
+        order = dao.selectOrderByTradeNo(tradeNo);
         OrderType orderType = OrderType.get(order.getOrderType());
         switch (orderType) {
             case OUTPATIENT: