瀏覽代碼

fix(WFTOrderService): 优化订单退款状态更新逻辑

- 查询订单时支持订单状态为已支付和部分退款
- 根据累计退款金额判断并设置订单为全额退款或部分退款状态
- 更新退款金额字段以反映当前的累计退款总额
- 统一退款成功后订单状态更新策略,提高退款状态准确性
- 保留原有全额退款状态逻辑,添加部分退款状态处理代码
wzq 22 小時之前
父節點
當前提交
4a5bd56055
共有 1 個文件被更改,包括 31 次插入8 次删除
  1. 31 8
      src/main/java/com/zsElectric/boot/business/service/WFTOrderService.java

+ 31 - 8
src/main/java/com/zsElectric/boot/business/service/WFTOrderService.java

@@ -779,7 +779,7 @@ public class WFTOrderService {
         //查询一年内已支付的所有券订单
         List<UserOrderInfo> userOrderInfoList = userOrderInfoMapper.selectList(Wrappers.<UserOrderInfo>lambdaQuery()
                 .eq(UserOrderInfo::getUserId, userId)
-                .eq(UserOrderInfo::getOrderStatus, SystemConstants.STATUS_TWO)
+                .in(UserOrderInfo::getOrderStatus, SystemConstants.STATUS_TWO,SystemConstants.STATUS_FIVE)
                 .between(UserOrderInfo::getCreateTime, LocalDateTime.now().minusYears(1), LocalDateTime.now())
         );
 
@@ -806,8 +806,15 @@ public class WFTOrderService {
                         SystemConstants.ACCOUNT_LOG_REFUND_NOTE,
                         userOrderInfo.getId()
                 );
-                //修改订单状态
-                userOrderInfo.setOrderStatus(SystemConstants.STATUS_FOUR);
+                //修改订单状态(判断是全额退款还是部分退款)
+                BigDecimal totalRefundMoney = alreadyRefundMoney.add(refundMoney);
+                if (totalRefundMoney.compareTo(userOrderInfo.getOrderMoney()) >= 0) {
+                    // 退款金额等于或大于订单金额,全额退款
+                    userOrderInfo.setOrderStatus(SystemConstants.STATUS_FOUR);
+                } else {
+                    // 退款金额小于订单金额,部分退款
+                    userOrderInfo.setOrderStatus(SystemConstants.STATUS_FIVE);
+                }
                 userOrderInfoMapper.updateById(userOrderInfo);
                 refundMoney = BigDecimal.ZERO;
                 break;
@@ -823,8 +830,15 @@ public class WFTOrderService {
                         SystemConstants.ACCOUNT_LOG_REFUND_NOTE,
                         userOrderInfo.getId()
                 );
-                //修改订单状态
-                userOrderInfo.setOrderStatus(SystemConstants.STATUS_FOUR);
+                //修改订单状态(判断是全额退款还是部分退款)
+                BigDecimal totalRefundMoney = alreadyRefundMoney.add(canRefundMoney);
+                if (totalRefundMoney.compareTo(userOrderInfo.getOrderMoney()) >= 0) {
+                    // 退款金额等于订单金额,全额退款
+                    userOrderInfo.setOrderStatus(SystemConstants.STATUS_FOUR);
+                } else {
+                    // 退款金额小于订单金额,部分退款
+                    userOrderInfo.setOrderStatus(SystemConstants.STATUS_FIVE);
+                }
                 userOrderInfoMapper.updateById(userOrderInfo);
                 refundMoney = refundMoney.subtract(canRefundMoney);
             }
@@ -867,10 +881,19 @@ public class WFTOrderService {
             if(Objects.equals(refund.get("result_code"), "0")){
                 log.info("退款成功!");
                 log.info("订单:{},退款成功!原因:{}", userOrderInfo.getOrderNo(), reason);
-                //修改订单状态
-                userOrderInfo.setOrderStatus(SystemConstants.STATUS_FIVE);
+                //计算累计退款金额
                 BigDecimal currentRefundMoney = userOrderInfo.getRefundMoney() == null ? BigDecimal.ZERO : userOrderInfo.getRefundMoney();
-                userOrderInfo.setRefundMoney(currentRefundMoney.add(refundAmount));
+                BigDecimal totalRefundMoney = currentRefundMoney.add(refundAmount);
+                
+                //修改订单状态(判断是全额退款还是部分退款)
+                if (totalRefundMoney.compareTo(userOrderInfo.getOrderMoney()) >= 0) {
+                    // 退款金额等于或大于订单金额,全额退款
+                    userOrderInfo.setOrderStatus(SystemConstants.STATUS_FOUR);
+                } else {
+                    // 退款金额小于订单金额,部分退款
+                    userOrderInfo.setOrderStatus(SystemConstants.STATUS_FIVE);
+                }
+                userOrderInfo.setRefundMoney(totalRefundMoney);
                 userOrderInfo.setRefundTime(LocalDateTime.now());
                 userOrderInfoMapper.updateById(userOrderInfo);
             } else{