Ver código fonte

下单流程优化,退款通知修改

lishiqiang 2 semanas atrás
pai
commit
19c7cb63e5

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

@@ -252,6 +252,7 @@ public class TradeOrderRepositoryServiceImpl implements TradeOrderRepositoryServ
     public void updateOrderAfterAllSupplierPay(TradeOrderDO tradeOrderDO) {
         LambdaUpdateWrapper<TradeOrderDO> orderUpdateWrapper = new LambdaUpdateWrapper<TradeOrderDO>()
                 .set(TradeOrderDO::getOrderStatus, tradeOrderDO.getOrderStatus())
+                .set(TradeOrderDO::getPayStatus, tradeOrderDO.getPayStatus())
                 .set(TradeOrderDO::getTravelStatus, TradeOrderTravelEnum.Not_Traveled.getStatus())
                 .eq(TradeOrderDO::getId, tradeOrderDO.getId());
         tradeOrderMapper.update(orderUpdateWrapper);

+ 13 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

@@ -449,8 +449,12 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 }catch (Exception e){
                     log.error("政策执行异常", e);
                 }
+                int orderStatus = TradeOrderStatusEnum.UNPAID.getStatus();
+                if(tradeOrderDO.getPayStatus()==1){
+                    orderStatus = 6;
+                }
                 tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
-                        .set(TradeOrderDO::getOrderStatus, TradeOrderStatusEnum.UNPAID.getStatus())
+                        .set(TradeOrderDO::getOrderStatus, orderStatus)
                         .set(TradeOrderDO::getAuditStatus, tradeOrderDO.getAuditStatus() + 1)
                         .set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
                         .set(TradeOrderDO::getDeposiStatus, 1)
@@ -543,10 +547,14 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 TradeOrderLogUtils.setOrderInfo(orderId, tradeOrderDO.getOrderStatus(), lastTradeOrder.getOrderStatus(), extMap);
 
             }else{
+                int orderStatus = TradeOrderStatusEnum.YD.getStatus();
+                if(tradeOrderDO.getPayStatus()==1){
+                    orderStatus = 6;
+                }
                 //针对第一次提交就进入审核的情况下,如果审核拒绝 订单状态直接修改为留位状态
                 tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
                         .set(TradeOrderDO::getAuditStatus, 0)
-                        .set(TradeOrderDO::getOrderStatus, TradeOrderStatusEnum.YD.getStatus())
+                        .set(TradeOrderDO::getOrderStatus, orderStatus)
                         .set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
                         .set(TradeOrderDO::getDeposiStatus, 0)
                         .eq(TradeOrderDO::getId, orderId)
@@ -2112,6 +2120,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 }
             }
 
+            if(tradeOrderDO.getPayStatus()==1 && tradeOrderDO.getPayAmount().subtract(shipTradeOrderCreateReqVO.getPayAmount()).compareTo(BigDecimal.ZERO)!=0){
+                return CommonResult.error(500, "已支付订单金额发生变化"+tradeOrderDO.getPayAmount()+"->"+shipTradeOrderCreateReqVO.getPayAmount());
+            }
 
             String changedFields1 = com.yc.ship.module.trade.utils.BeanUtils.getChangedFields(oldTradeOrderTotal, tradeOrderTotalDO);
             System.err.println("changedFields1=" + changedFields1);

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

@@ -749,37 +749,15 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
         //验证订单状态
         Long orderId = tradeOrderPayDO.getOrderId();
         TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(orderId);
-        //验证订单是否已全部支付完成
-        BigDecimal hadPayAmount = tradeOrderRepositoryService.getHadPayAmount(orderId);
-
-        if (ObjectUtil.equal(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.CANCELED.getStatus()) || hadPayAmount.compareTo(tradeOrderDO.getPayAmount()) > 0) {
-            //如果此时订单已经被系统取消,则应自动退款。 如果支付金额大于订单金额也自动退款
-            log.error("当前订单已不能支付,自动退款,订单{},支付单{},状态{},金额{}", orderId, tradeOrderPayDO.getId(), tradeOrderDO.getOrderStatus(), hadPayAmount);
-//            tradeRefundService.autoRefundByPayOrder(tradeOrderPayDO.getId());
-            return CommonResult.error(ORDER_PAY_AUTO_REFUND);
+        //订单变更为已支付
+        updateOrderPaid(tradeOrderDO, tradeOrderPayDO);
+        //向供应商出票
+        CommonResult<?> result = tradeSupplierService.payOrder(tradeOrderDO);
+        if (result.isError()) {
+            tradeSupplierCallbackService.afterAnyOrderPayFail(tradeOrderDO);
+            return result;
         }
-
-        Asserts.isTrue(ObjectUtils.equalsAny(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.UNPAID.getStatus(), TradeOrderStatusEnum.PAYING.getStatus(), TradeOrderStatusEnum.YD.getStatus()), "{}当前状态{}不能被修改为已支付", orderId, tradeOrderDO.getOrderStatus());
-
-
-        //如果是改签订单只需要支付差额
-        boolean isChangeOrderPay = tradeOrderDO.getIsChangeOrder() != null && tradeOrderDO.getIsChangeOrder() == ORDER_CHANGE_TYPE_NEW;
-        if (hadPayAmount.compareTo(tradeOrderDO.getPayAmount()) >= 0 || isChangeOrderPay) {
-            //订单变更为已支付
-            updateOrderPaid(tradeOrderDO, tradeOrderPayDO);
-            //向供应商出票
-            CommonResult<?> result = tradeSupplierService.payOrder(tradeOrderDO);
-            if (result.isError()) {
-                tradeSupplierCallbackService.afterAnyOrderPayFail(tradeOrderDO);
-                return result;
-            }
-            tradeSupplierCallbackService.afterAllOrderPay(tradeOrderDO);
-
-        } else {
-
-            updateOrderPaying(tradeOrderDO, tradeOrderPayDO);
-        }
-
+        tradeSupplierCallbackService.afterAllOrderPay(tradeOrderDO);
         return CommonResult.success(null);
     }
 

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

@@ -473,11 +473,15 @@ public class TradeRefundServiceImpl implements TradeRefundService {
             //退款中不做处理
             return CommonResult.success(null);
         }
-        String lockKey = String.format(UPDATE_REFUND_RECORD_LOCK, Long.parseLong(refundNotifyReqBO.getMchOrderNo()));
+        String mchOrderNo = refundNotifyReqBO.getMchOrderNo();
+        if(mchOrderNo.indexOf("_") > 0){
+            mchOrderNo = mchOrderNo.substring(0,mchOrderNo.indexOf("_")-1);
+        }
+        String lockKey = String.format(UPDATE_REFUND_RECORD_LOCK, Long.parseLong(mchOrderNo));
         RLock lock = redissonClient.getLock(lockKey);
         try {
             if (lock.tryLock(60, 90, TimeUnit.SECONDS)) {
-                RefundRecordDO refundRecordDO = tradeRefundRepositoryService.getRecordByIdIgnoreTenant(Long.parseLong(refundNotifyReqBO.getMchOrderNo()));
+                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());

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

@@ -98,6 +98,7 @@ public class TradeSupplierCallbackServiceImpl implements TradeSupplierCallbackSe
         Integer orderStatus = tradeOrderDO.getOrderStatus();
         //更新订单状态
         tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.UNUSED.getStatus());
+        tradeOrderDO.setPayStatus(1);
         tradeOrderRepositoryService.updateOrderAfterAllSupplierPay(tradeOrderDO);
         //发送出票成功消息
         tradePublishUtils.publishProcessSuccessMsg(tradeOrderDO.getId().toString());