lishiqiang 2 тижнів тому
батько
коміт
3139dd49d8

+ 1 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/impl/TradeRefundRepositoryServiceImpl.java

@@ -228,6 +228,7 @@ public class TradeRefundRepositoryServiceImpl implements TradeRefundRepositorySe
     }
 
     @Override
+    @TenantIgnore
     public void updateRefundRecord(RefundRecordDO refundRecordDO) {
         refundRecordMapper.updateById(refundRecordDO);
     }

+ 71 - 74
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/impl/TradeRefundServiceImpl.java

@@ -18,7 +18,6 @@ import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.framework.common.util.object.ObjectUtils;
 import com.yc.ship.framework.security.core.LoginUser;
 import com.yc.ship.framework.tenant.core.context.TenantContextHolder;
-import com.yc.ship.framework.tenant.core.util.TenantUtils;
 import com.yc.ship.module.ota.api.OtaDistributorApi;
 import com.yc.ship.module.ota.api.dto.BillResetReqDTO;
 import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
@@ -423,7 +422,7 @@ public class TradeRefundServiceImpl implements TradeRefundService {
                 List<OrderRoomUseDTO> orderRoomUseDTOList = new ArrayList<>();
                 Map<String, Long> collect = tradeDetailDOList.stream().filter(tradeVisitorDO -> tradeVisitorDO.getRoomId() != null).collect(Collectors.groupingBy(TradeVisitorDO::getRoomId, Collectors.counting()));
                 collect.keySet().forEach(roomId -> {
-                    if(StringUtils.isNotBlank(roomId)) {
+                    if (StringUtils.isNotBlank(roomId)) {
                         OrderRoomUseDTO orderRoomUseDTO = new OrderRoomUseDTO();
                         orderRoomUseDTO.setRoomId(Long.valueOf(roomId));
                         orderRoomUseDTO.setNum(BigDecimal.valueOf(collect.get(roomId)).divide(new BigDecimal(2)));
@@ -433,7 +432,7 @@ public class TradeRefundServiceImpl implements TradeRefundService {
                 reqDTO.setOrderRoomList(orderRoomUseDTOList);
                 voyageApi.cancelReduceStock(reqDTO);
             }
-          } catch (ServiceException e) {
+        } catch (ServiceException e) {
             e.printStackTrace();
             ExceptionUtils.log(log, "根据支付类型发起退款异常refundId:" + refundId, e);
             return CommonResult.error(e);
@@ -463,10 +462,10 @@ public class TradeRefundServiceImpl implements TradeRefundService {
     @Override
     public CommonResult<?> handleRefundNotify(Map<String, Object> map) {
         TradeMchInfoDO tradeMchInfoDO = tradeOrderRepositoryService.getByMchId(MapUtil.getStr(map, "mchId"));
-        String resKey = tradeMchInfoDO.getResKey();
-        String checkSign = PayDigestUtil.getSign(map, resKey, "sign", "device", "param1", "param2");
-        String retSign = (String) map.get("sign");
-        Asserts.isTrue(checkSign.equals(retSign), "退款通知验签失败");
+//        String resKey = tradeMchInfoDO.getResKey();
+//        String checkSign = PayDigestUtil.getSign(map, resKey, "sign", "device", "param1", "param2");
+//        String retSign = (String) map.get("sign");
+//        Asserts.isTrue(checkSign.equals(retSign), "退款通知验签失败");
         RefundNotifyReqBO refundNotifyReqSourceBO = new RefundNotifyReqBO();
         final RefundNotifyReqBO refundNotifyReqBO = BeanUtil.fillBeanWithMap(map, refundNotifyReqSourceBO, false);
         if (refundNotifyReqBO.getStatus() == 1) {
@@ -474,78 +473,79 @@ public class TradeRefundServiceImpl implements TradeRefundService {
             return CommonResult.success(null);
         }
         String mchOrderNo = refundNotifyReqBO.getMchOrderNo();
-        if(mchOrderNo.indexOf("_") > 0){
-            mchOrderNo = mchOrderNo.substring(0,mchOrderNo.indexOf("_")-1);
+        if (mchOrderNo.indexOf("_") > 0) {
+            mchOrderNo = mchOrderNo.substring(0, mchOrderNo.indexOf("_"));
         }
         String lockKey = String.format(UPDATE_REFUND_RECORD_LOCK, Long.parseLong(mchOrderNo));
         RLock lock = redissonClient.getLock(lockKey);
         try {
             if (lock.tryLock(60, 90, TimeUnit.SECONDS)) {
+                TenantContextHolder.setIgnore(true);
                 RefundRecordDO refundRecordDO = tradeRefundRepositoryService.getRecordByIdIgnoreTenant(Long.parseLong(mchOrderNo));
+
                 Asserts.isTrue(refundRecordDO != null, "退款记录不存在");
                 //允许退款失败状态,处理支付平台特殊情况造成这边记录已经变为退款失败
                 Asserts.isTrue(ObjectUtils.equalsAny(refundRecordDO.getRefundStatus(), RefundStatusEnum.REFUNDING.getStatus(), RefundStatusEnum.REFUND_FAIL.getStatus()), "当前状态不能变更:{}", refundRecordDO.getRefundStatus());
-                TenantUtils.execute(refundRecordDO.getTenantId(), () -> {
 
-                    if (refundNotifyReqBO.getStatus() == 2 || refundNotifyReqBO.getStatus() == 4) {
-                        refundRecordDO.setRefundStatus(RefundStatusEnum.REFUND.getStatus());
-                        refundRecordDO.setResult("退款成功");
-                        if (StrUtil.isBlank(refundRecordDO.getRefundNo())) {
-                            refundRecordDO.setRefundNo(refundNotifyReqBO.getRefundOrderId());
-                        }
-                        refundRecordDO.setChannelOrderNo(refundNotifyReqBO.getChannelOrderNo());
-                        if (StrUtil.isNotBlank(refundNotifyReqBO.getRefundSuccTime())) {
-                            try {
-                                refundRecordDO.setRefundTime(DateUtil.toLocalDateTime(DateUtil.parseDate(refundNotifyReqBO.getRefundSuccTime())));
-                            } catch (Exception e) {
-                                log.error("支付平台返回的退款时间转换错误{}", refundNotifyReqBO.getRefundSuccTime());
-                                refundRecordDO.setRefundTime(LocalDateTime.now());
-                            }
-                        } else {
+                if (refundNotifyReqBO.getStatus() == 2 || refundNotifyReqBO.getStatus() == 4) {
+                    refundRecordDO.setRefundStatus(RefundStatusEnum.REFUND.getStatus());
+                    refundRecordDO.setResult("退款成功");
+                    if (StrUtil.isBlank(refundRecordDO.getRefundNo())) {
+                        refundRecordDO.setRefundNo(refundNotifyReqBO.getRefundOrderId());
+                    }
+                    refundRecordDO.setChannelOrderNo(refundNotifyReqBO.getChannelOrderNo());
+                    if (StrUtil.isNotBlank(refundNotifyReqBO.getRefundSuccTime())) {
+                        try {
+                            refundRecordDO.setRefundTime(DateUtil.toLocalDateTime(DateUtil.parseDate(refundNotifyReqBO.getRefundSuccTime())));
+                        } catch (Exception e) {
+                            log.error("支付平台返回的退款时间转换错误{}", refundNotifyReqBO.getRefundSuccTime());
                             refundRecordDO.setRefundTime(LocalDateTime.now());
                         }
-                        //变更状态
-                        tradeRefundRepositoryService.updateRefundRecord(refundRecordDO);
-                        if (ObjectUtil.equal(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_AUTO)) {
-                            //自动退款订单
-                            TradeOrderPayDO payOrder = tradeOrderRepositoryService.getPayOrderById(refundRecordDO.getOrderPayId());
-                            payOrder.setPayStatus(PaymentStatusEnum.AUTO_REFUND.getStatus());
-                            tradeOrderRepositoryService.updatePayOrderStatus(payOrder);
-                        } else if (ObjectUtil.equal(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_MARKETING)) {
-                            //营销政策退款
-                            afterMarketingRefundFromPayPlatSuccess(refundRecordDO);
-                        } else if (ObjectUtil.equal(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_SERVICE)) {
-                            //售后退款
-                            afterServiceRefundFromPayPlatSuccess(refundRecordDO);
-                        } else if (ObjectUtil.equal(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_SUPP_TICKET)) {
-                            //补票退款
-                            afterSuppTicketRefundFromPayPlatSuccess(refundRecordDO);
-                        } else if (ObjectUtils.equalsAny(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_GUIDE_PLAT, REFUND_RECORD_TYPE_GUIDE_INNER)) {
-                            //导游代退
+                    } else {
+                        refundRecordDO.setRefundTime(LocalDateTime.now());
+                    }
+                    //变更状态
+                    tradeRefundRepositoryService.updateRefundRecord(refundRecordDO);
+                    if (ObjectUtil.equal(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_AUTO)) {
+                        //自动退款订单
+                        TradeOrderPayDO payOrder = tradeOrderRepositoryService.getPayOrderById(refundRecordDO.getOrderPayId());
+                        payOrder.setPayStatus(PaymentStatusEnum.AUTO_REFUND.getStatus());
+                        tradeOrderRepositoryService.updatePayOrderStatus(payOrder);
+                    } else if (ObjectUtil.equal(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_MARKETING)) {
+                        //营销政策退款
+                        afterMarketingRefundFromPayPlatSuccess(refundRecordDO);
+                    } else if (ObjectUtil.equal(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_SERVICE)) {
+                        //售后退款
+                        afterServiceRefundFromPayPlatSuccess(refundRecordDO);
+                    } else if (ObjectUtil.equal(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_SUPP_TICKET)) {
+                        //补票退款
+                        afterSuppTicketRefundFromPayPlatSuccess(refundRecordDO);
+                    } else if (ObjectUtils.equalsAny(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_GUIDE_PLAT, REFUND_RECORD_TYPE_GUIDE_INNER)) {
+                        //导游代退
 //                            afterGuideRefundFromPayPlatSuccess(refundRecordDO);
-                        } else {
-                            RefundDO refundDO = tradeRefundRepositoryService.getById(refundRecordDO.getRefundId());
-                            afterRefundFromPayPlatSuccess(refundDO);
-                        }
-
                     } else {
-                        refundRecordDO.setRefundStatus(RefundStatusEnum.REFUND_FAIL.getStatus());
-                        refundRecordDO.setResult(refundNotifyReqBO.getChannelErrMsg());
-                        //变更状态
-                        tradeRefundRepositoryService.updateRefundRecord(refundRecordDO);
-                        if (refundRecordDO.getRefundId() == null || ObjectUtils.equalsAny(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_SERVICE
-                                , REFUND_RECORD_TYPE_GUIDE_PLAT, REFUND_RECORD_TYPE_GUIDE_INNER)) {
-                            //自动退款订单\营销政策退款\售后退款\补票退款\导游代退,暂时不处理
+                        RefundDO refundDO = tradeRefundRepositoryService.getById(refundRecordDO.getRefundId());
+                        afterRefundFromPayPlatSuccess(refundDO);
+                    }
+
+                } else {
+                    refundRecordDO.setRefundStatus(RefundStatusEnum.REFUND_FAIL.getStatus());
+                    refundRecordDO.setResult(refundNotifyReqBO.getChannelErrMsg());
+                    //变更状态
+                    tradeRefundRepositoryService.updateRefundRecord(refundRecordDO);
+                    if (refundRecordDO.getRefundId() == null || ObjectUtils.equalsAny(refundRecordDO.getRefundType(), REFUND_RECORD_TYPE_SERVICE
+                            , REFUND_RECORD_TYPE_GUIDE_PLAT, REFUND_RECORD_TYPE_GUIDE_INNER)) {
+                        //自动退款订单\营销政策退款\售后退款\补票退款\导游代退,暂时不处理
 //                            TradeOrderPayDO payOrder = tradeOrderRepositoryService.getPayOrderById(refundRecordDO.getOrderPayId());
-                        } else {
-                            RefundDO refundDO = tradeRefundRepositoryService.getById(refundRecordDO.getRefundId());
-                            afterRefundFromPayPlatFail(refundDO);
-                        }
+                    } else {
+                        RefundDO refundDO = tradeRefundRepositoryService.getById(refundRecordDO.getRefundId());
+                        afterRefundFromPayPlatFail(refundDO);
                     }
-                });
+                }
+                TenantContextHolder.setIgnore(false);
             }
         } catch (Exception e) {
-            log.error("退款通知处理异常:" + refundNotifyReqBO.getMchOrderNo(), e);
+            log.error("退款通知处理异常:" + mchOrderNo, e);
         } finally {
             if (lock.isLocked() && lock.isHeldByCurrentThread()) {
                 lock.unlock();
@@ -680,17 +680,17 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(refundCreateReqDTO.getOrderId());
         List<TradeDetailDO> tradeDetailList2 = tradeOrderRepositoryService.queryYcDetailByOrderId(refundCreateReqDTO.getOrderId());
         int num = tradeDetailList2.size();
-        long between = DateUtil.between(new Date(),tradeOrderDO.getTravelDate(),  DateUnit.DAY,false);
+        long between = DateUtil.between(new Date(), tradeOrderDO.getTravelDate(), DateUnit.DAY, false);
         BigDecimal damaged;
-        if(between>21){
-            damaged = new BigDecimal(500).multiply(new BigDecimal( num));
+        if (between > 21) {
+            damaged = new BigDecimal(500).multiply(new BigDecimal(num));
 //            if(tradeOrderDO.getSellMethod()==3){
 //                damaged =  BigDecimal.ZERO;
 //            }
-        }else if(between>15){
-            damaged =  tradeOrderDO.getPayAmount().multiply(new BigDecimal("0.2"));
-        }else{
-            damaged =  tradeOrderDO.getPayAmount();
+        } else if (between > 15) {
+            damaged = tradeOrderDO.getPayAmount().multiply(new BigDecimal("0.2"));
+        } else {
+            damaged = tradeOrderDO.getPayAmount();
         }
         tradeOrderDO.setDamaged(damaged);
         tradeOrderDO.setDamagedStatus(1);
@@ -716,7 +716,7 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         //获取当前可退金额
         BigDecimal orderApplyRefundAmount = tradeRefundRepositoryService.getOrderApplyRefundAmount(refundCreateReqDTO.getOrderId());
         BigDecimal canRefundAmount = tradeOrderDO.getPayAmount().subtract(orderApplyRefundAmount);
-        if(canRefundAmount.compareTo(new BigDecimal(5)) <= 0) {//测试使用,小于元表示是测试订单,不扣损
+        if (canRefundAmount.compareTo(new BigDecimal(5)) <= 0) {//测试使用,小于元表示是测试订单,不扣损
             damaged = BigDecimal.ZERO;
         }
         respDTO.setOrderId(refundCreateReqDTO.getOrderId());
@@ -1492,10 +1492,7 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         RLock lock = redissonClient.getLock(lockKey);
         try {
             if (lock.tryLock(60, 90, TimeUnit.SECONDS)) {
-                BigDecimal totalRefundAmount = tradeRefundRepositoryService.getRefundRecordAmount(refundDO.getId());
-                if (refundDO.getRefundAmount().equals(totalRefundAmount)) {
-                    afterRefundSuccess(refundDO);
-                }
+                afterRefundSuccess(refundDO);
             }
         } catch (Exception e) {
             log.error("退款单更新异常refundId:" + refundDO.getId(), e);
@@ -1560,7 +1557,7 @@ public class TradeRefundServiceImpl implements TradeRefundService {
                 tradeDetailDO.setId(MapUtil.getLong(item, "detail_id"));
                 int totalCount = MapUtil.getInt(item, "totalCount");
                 int refundCount = MapUtil.getInt(item, "refundCount");
-                int voucherStatus = totalCount == refundCount ? VoucherStatusEnum.REFUND.getStatus() : VoucherStatusEnum.PART_REFUND.getStatus();
+                int voucherStatus =  VoucherStatusEnum.REFUND.getStatus();
                 int refundStatus = totalCount == refundCount ? 1 : 2;
                 tradeDetailDO.setVoucherStatus(voucherStatus);
                 tradeDetailDO.setRefundStatus(refundStatus);