1
0

3 Commits 2732e96b50 ... 72ae7c8b4a

Autor SHA1 Mensagem Data
  lishiqiang 72ae7c8b4a Merge branch 'main' of http://47.98.207.247:3000/lsq/ship-ota-server 2 weeks atrás
  lishiqiang 7045926fd6 取消订单退款 2 weeks atrás
  lishiqiang d9603b03d3 取消订单退款 2 weeks atrás

+ 1 - 0
ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/enums/TradeOrderOperateTypeEnum.java

@@ -48,6 +48,7 @@ public enum TradeOrderOperateTypeEnum {
     ORDER_BC_PAY(33, "订单补差价支付,支付方式:{payType},金额:{payAmount}"),
     ORDER_AUDIT_LOG(34, "订单进入审核"),
     ORDER_REMARK_UPDATE(35, "修改订单备注,修改记录:{content},结果:{result}"),
+    ORDER_CANCEL_REFUND(36, "取消订单退款,修改记录:{content},结果:{result}"),
     ;
 
     /**

+ 7 - 4
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/impl/TradeOrderPayServiceImpl.java

@@ -33,10 +33,7 @@ import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderReqVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderRespVO;
 import com.yc.ship.module.trade.dal.dataobject.order.*;
 import com.yc.ship.module.trade.dal.dataobject.supplier.TradeSupplierOrderDO;
-import com.yc.ship.module.trade.dal.mysql.order.TradeOrderLogMapper;
-import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
-import com.yc.ship.module.trade.dal.mysql.order.TradeOrderTotalMapper;
-import com.yc.ship.module.trade.dal.mysql.order.TradeVisitorMapper;
+import com.yc.ship.module.trade.dal.mysql.order.*;
 import com.yc.ship.module.trade.enums.*;
 import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
 import com.yc.ship.module.trade.framework.aop.TradeOrderLogAspect;
@@ -125,6 +122,8 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
 
     @Resource
     private TradeOrderMapper tradeOrderMapper;
+    @Resource
+    private TradeOrderPayMapper tradeOrderPayMapper;
 
     @Resource
     private TradeOrderLogMapper tradeOrderLogMapper;
@@ -845,6 +844,10 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
                 .set(TradeOrderDO::getOrderStatus, orderStatus)
                 .set(TradeOrderDO::getDeposiStatus, 2)
                 .set(TradeOrderDO::getDeposiPayTime, LocalDateTime.now()));
+
+        tradeOrderPayMapper.update(new LambdaUpdateWrapper<TradeOrderPayDO>()
+                .eq(TradeOrderPayDO::getId, tradeOrderPayDO.getId())
+                .set(TradeOrderPayDO::getPayStatus, PaymentStatusEnum.PAID.getStatus()));
         //保存订单日志
         TradeOrderLogUtils.setOrderInfo(tradeOrderDO.getId(), orderStatus, tradeOrderDO.getOrderStatus(), MapUtil.<String, Object>builder().put("payType", PayTypeEnum.valueOf(tradeOrderPayDO.getPaymentType()).getName()).put("payAmount", tradeOrderPayDO.getPayAmount()).build());
     }

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

@@ -35,6 +35,7 @@ import com.yc.ship.module.trade.dal.dataobject.bill.BillStoreDO;
 import com.yc.ship.module.trade.dal.dataobject.order.*;
 import com.yc.ship.module.trade.dal.dataobject.refund.*;
 import com.yc.ship.module.trade.dal.dataobject.supplier.SupplierRefundDO;
+import com.yc.ship.module.trade.dal.mysql.order.TradeOrderLogMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeOrderTotalMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeVisitorMapper;
@@ -102,6 +103,8 @@ public class TradeRefundServiceImpl implements TradeRefundService {
     @Resource
     private TradeRefundRepositoryService tradeRefundRepositoryService;
     @Resource
+    private TradeOrderLogMapper tradeOrderLogMapper;
+    @Resource
     private Map<String, PayTypeService> payTypeServiceMap;
     @Resource
     private PayPlatService payPlatService;
@@ -380,71 +383,97 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         try {
             //如果失败更新退款记录状态为退款失败,成功状态由通知变更
             List<TradeOrderPayDO> tradeOrderPayList = tradeOrderRepositoryService.getPayOrderByOrderId(tradeOrderDO.getId());
-            for (TradeOrderPayDO payOrderDO : tradeOrderPayList) {
-                if(totalAmount.compareTo(BigDecimal.ZERO) <= 0){
-                    break;
-                }
-                RefundDO refundDO = new RefundDO();
-                if(payOrderDO.getPayAmount().compareTo(totalAmount) >= 0){
-                    refundDO.setRefundAmount(amount);
-                    refundDO.setOriginAmount(amount);
-                }else{
-                    refundDO.setRefundAmount(payOrderDO.getPayAmount());
-                    refundDO.setOriginAmount(payOrderDO.getPayAmount());
-                    //还剩多少
-                    totalAmount = totalAmount.subtract(payOrderDO.getPayAmount());
-                }
-                refundDO.setOrderId(orderId);
-                refundDO.setRefundChannel(6);
-                refundDO.setId(IdWorker.getId());
-                refundDO.setSellMethod(tradeOrderDO.getSellMethod());
-                refundDO.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus());
-                refundDO.setRefundMethod(3);
-                refundDO.setRefundBackType(0);
-                refundDO.setRefundReason("取消订单退押金");
-                refundDO.setRefundUser(tradeOrderDO.getSellerId());
-                refundDO.setFee(BigDecimal.ZERO);
-                refundDO.setOrderStatus(tradeOrderDO.getOrderStatus());
-                refundDO.setTenantId(1L);
-                refundDO.setCreator(getLoginUserId()+"");
-                refundDO.setCreateTime(LocalDateTime.now());
-                refundDO.setDeleted(false);
-                refundMapper.insert(refundDO);
-
-                RefundRecordDO refundRecordDO = new  RefundRecordDO();
-                refundRecordDO.setOrderPayId(payOrderDO.getId());
-                refundRecordDO.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus());
-                refundRecordDO.setMerchantNo(payOrderDO.getMerchantNo());
-                refundRecordDO.setChannelId(payOrderDO.getChannelId());
-                refundRecordDO.setPaymentType(payOrderDO.getPaymentType());
-                refundRecordDO.setRefundId(refundDO.getId());
-                refundRecordDO.setRefundAmount(refundDO.getRefundAmount());
-                refundRecordDO.setTenantId(payOrderDO.getTenantId());
-                refundRecordDO.setPaymentNo(payOrderDO.getPaymentNo());
-                refundRecordDO.setRealPayOrderId(payOrderDO.getId());
-                refundRecordDO.setRefundBackType(0);
-                tradeRefundRepositoryService.saveRefundRecord(refundRecordDO);
-                if(payOrderDO.getPaymentType() == 1 || payOrderDO.getPaymentType() == 2) {
-                    TradeMchInfoDO tradeMchInfoDO = tradeOrderRepositoryService.getByMchId(refundRecordDO.getMerchantNo());
-                    Map result = payPlatService.createRefundOrder(refundRecordDO, refundDO, payOrderDO, tradeMchInfoDO);
-                    Asserts.isTrue(StrUtil.equals(SUCCESS, MapUtils.getString(result, "retCode")), "调用支付平台退款失败");
-                    String refundOrderId = MapUtil.getStr(result, "refundOrderId");
-                    if (StrUtil.isNotBlank(refundOrderId)) {
-                        refundRecordDO.setRefundNo(refundOrderId);
+            log.error("refundByOrderId开始退款"+orderId+";"+(tradeOrderPayList!=null?tradeOrderPayList.size():0));
+            if (tradeOrderPayList != null) {
+                for (TradeOrderPayDO payOrderDO : tradeOrderPayList) {
+                    if(totalAmount.compareTo(BigDecimal.ZERO) <= 0){
+                        break;
+                    }
+                    RefundDO refundDO = new RefundDO();
+                    if(payOrderDO.getPayAmount().compareTo(totalAmount) >= 0){
+                        refundDO.setRefundAmount(amount);
+                        refundDO.setOriginAmount(amount);
+                    }else{
+                        refundDO.setRefundAmount(payOrderDO.getPayAmount());
+                        refundDO.setOriginAmount(payOrderDO.getPayAmount());
+                        //还剩多少
+                        totalAmount = totalAmount.subtract(payOrderDO.getPayAmount());
+                    }
+                    refundDO.setOrderId(orderId);
+                    refundDO.setRefundChannel(6);
+                    refundDO.setId(IdWorker.getId(refundDO));
+                    refundDO.setSellMethod(tradeOrderDO.getSellMethod());
+                    refundDO.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus());
+                    refundDO.setRefundMethod(3);
+                    refundDO.setRefundBackType(0);
+                    refundDO.setRefundReason("取消订单退押金");
+                    refundDO.setRefundUser(tradeOrderDO.getSellerId());
+                    refundDO.setFee(BigDecimal.ZERO);
+                    refundDO.setOrderStatus(tradeOrderDO.getOrderStatus());
+                    refundDO.setTenantId(1L);
+                    refundDO.setCreator(getLoginUserId()+"");
+                    refundDO.setCreateTime(LocalDateTime.now());
+                    refundDO.setDeleted(false);
+                    refundMapper.insert(refundDO);
+
+                    RefundRecordDO refundRecordDO = new  RefundRecordDO();
+                    refundRecordDO.setId(IdWorker.getId(refundRecordDO));
+                    refundRecordDO.setOrderPayId(payOrderDO.getId());
+                    refundRecordDO.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus());
+                    refundRecordDO.setMerchantNo(payOrderDO.getMerchantNo());
+                    refundRecordDO.setChannelId(payOrderDO.getChannelId());
+                    refundRecordDO.setPaymentType(payOrderDO.getPaymentType());
+                    refundRecordDO.setRefundId(refundDO.getId());
+                    refundRecordDO.setRefundAmount(refundDO.getRefundAmount());
+                    refundRecordDO.setTenantId(payOrderDO.getTenantId());
+                    refundRecordDO.setPaymentNo(payOrderDO.getPaymentNo());
+                    refundRecordDO.setRealPayOrderId(payOrderDO.getId());
+                    refundRecordDO.setRefundBackType(0);
+                    tradeRefundRepositoryService.saveRefundRecord(refundRecordDO);
+                    if(payOrderDO.getPaymentType() == 1 || payOrderDO.getPaymentType() == 2) {
+                        log.error(tradeOrderDO.getOrderNo()+ "定金退款开始调用支付平台退款"+refundDO.getRefundAmount());
+                        TradeMchInfoDO tradeMchInfoDO = tradeOrderRepositoryService.getByMchId(refundRecordDO.getMerchantNo());
+                        Map result = payPlatService.createRefundOrder(refundRecordDO, refundDO, payOrderDO, tradeMchInfoDO);
+                        Asserts.isTrue(StrUtil.equals(SUCCESS, MapUtils.getString(result, "retCode")), "调用支付平台退款失败");
+                        String refundOrderId = MapUtil.getStr(result, "refundOrderId");
+                        if (StrUtil.isNotBlank(refundOrderId)) {
+                            refundRecordDO.setRefundNo(refundOrderId);
+                            refundRecordDO.setRefundStatus(RefundStatusEnum.REFUND.getStatus());
+                            tradeRefundRepositoryService.updateRefundRecord(refundRecordDO);
+                        }
+                        TradeOrderLogDO tradeOrderLogDO = new TradeOrderLogDO();
+                        tradeOrderLogDO.setId(IdWorker.getId());
+                        tradeOrderLogDO.setOrderId(tradeOrderDO.getId());
+                        tradeOrderLogDO.setUserId(getLoginUserId());
+                        tradeOrderLogDO.setUserType(2);
+                        tradeOrderLogDO.setOperateType(TradeOrderOperateTypeEnum.ORDER_CANCEL_REFUND.getType());
+                        tradeOrderLogDO.setBeforeStatus(tradeOrderDO.getOrderStatus());
+                        tradeOrderLogDO.setAfterStatus(TradeOrderStatusEnum.CANCELED.getStatus());
+                        tradeOrderLogDO.setContent("取消订单退款,金额"+refundDO.getRefundAmount());
+                        tradeOrderLogMapper.insert(tradeOrderLogDO);
+                    }else{
+                        log.error(tradeOrderDO.getOrderNo()+ "定金退款开始调用余额授信退款"+refundDO.getRefundAmount());
+                        PayTypeEnum payType = PayTypeEnum.valueOf(refundRecordDO.getPaymentType());
+                        if (StrUtil.isNotBlank(payType.getServiceName()) && refundRecordDO.getRefundBackType() == REFUND_BACK_TYPE_ORIGINAL && (refundRecordDO.getRefundAmount().compareTo(BigDecimal.ZERO) > 0)) {
+                            PayTypeService payTypeService = payTypeServiceMap.get(payType.getServiceName());
+                            Long tradeId = payTypeService.refund(refundDO, refundRecordDO);
+                            //更新退款记录(退款成功)
+                            refundRecordDO.setRefundNo(tradeId.toString());
+                        }
+                        refundRecordDO.setRefundTime(LocalDateTime.now());
                         refundRecordDO.setRefundStatus(RefundStatusEnum.REFUND.getStatus());
                         tradeRefundRepositoryService.updateRefundRecord(refundRecordDO);
+                        TradeOrderLogDO tradeOrderLogDO = new TradeOrderLogDO();
+                        tradeOrderLogDO.setId(IdWorker.getId());
+                        tradeOrderLogDO.setOrderId(tradeOrderDO.getId());
+                        tradeOrderLogDO.setUserId(getLoginUserId());
+                        tradeOrderLogDO.setUserType(2);
+                        tradeOrderLogDO.setOperateType(TradeOrderOperateTypeEnum.ORDER_CANCEL_REFUND.getType());
+                        tradeOrderLogDO.setBeforeStatus(tradeOrderDO.getOrderStatus());
+                        tradeOrderLogDO.setAfterStatus(TradeOrderStatusEnum.CANCELED.getStatus());
+                        tradeOrderLogDO.setContent("取消订单退款,金额"+refundDO.getRefundAmount());
+                        tradeOrderLogMapper.insert(tradeOrderLogDO);
                     }
-                }else{
-                    PayTypeEnum payType = PayTypeEnum.valueOf(refundRecordDO.getPaymentType());
-                    if (StrUtil.isNotBlank(payType.getServiceName()) && refundRecordDO.getRefundBackType() == REFUND_BACK_TYPE_ORIGINAL && (refundRecordDO.getRefundAmount().compareTo(BigDecimal.ZERO) > 0)) {
-                        PayTypeService payTypeService = payTypeServiceMap.get(payType.getServiceName());
-                        Long tradeId = payTypeService.refund(refundDO, refundRecordDO);
-                        //更新退款记录(退款成功)
-                        refundRecordDO.setRefundNo(tradeId.toString());
-                    }
-                    refundRecordDO.setRefundTime(LocalDateTime.now());
-                    refundRecordDO.setRefundStatus(RefundStatusEnum.REFUND.getStatus());
-                    tradeRefundRepositoryService.updateRefundRecord(refundRecordDO);
                 }
             }
         } catch (ServiceException e) {
@@ -1580,6 +1609,10 @@ public class TradeRefundServiceImpl implements TradeRefundService {
      * @param refundDO
      */
     private void afterRefundFromPayPlatSuccess(RefundDO refundDO) {
+        if(refundDO.getSellMethod()==3){
+            //取消订单退款不处理订单状态
+            return;
+        }
         //已退金额与退款金额一致则全部退款
         String lockKey = String.format(UPDATE_REFUND_LOCK, refundDO.getId());
         RLock lock = redissonClient.getLock(lockKey);