Browse Source

受损优化

lishiqiang 6 days atrás
parent
commit
409dfc6203

+ 5 - 0
ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/enums/ApiConstants.java

@@ -122,6 +122,11 @@ public class ApiConstants {
      */
     public static final int PAY_ORDER_TYPE_OTHER = 1;
 
+    /**
+     * 支付单-订单类型 定金支付
+     */
+    public static final int PAY_ORDER_TYPE_DEPOSI = 2;
+
     /**
      * redis 缓存,时间方案最小时间
      */

+ 1 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/OrderTotalRespVO.java

@@ -104,6 +104,7 @@ public class OrderTotalRespVO {
     @Schema(description = "定金")
     private BigDecimal deposi;
 
+
     @Schema(description = "受损金额")
     private BigDecimal damaged;
 

+ 9 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/ShipTradeOrderCreateReqVO.java

@@ -90,6 +90,15 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Schema(description = "定金")
     private BigDecimal deposi;
 
+    @Schema(description = "实付已经金额")
+    private BigDecimal realPayAmount;
+
+    @Schema(description = "政策优惠金额")
+    private BigDecimal freeAmount;
+
+    @Schema(description = "是否需要补缴费 1是 0 否")
+    private Integer isSupplementary;
+
     @Schema(description = "受损金额")
     private BigDecimal damaged;
 

+ 9 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderPdaRespVO.java

@@ -441,6 +441,15 @@ public class TradeOrderPdaRespVO {
     @Schema(description = "定金")
     private BigDecimal deposi;
 
+    @Schema(description = "实付已经金额")
+    private BigDecimal realPayAmount;
+
+    @Schema(description = "政策优惠金额")
+    private BigDecimal freeAmount;
+
+    @Schema(description = "是否需要补缴费 1是 0 否")
+    private Integer isSupplementary;
+
     @Schema(description = "受损金额")
     private BigDecimal damaged;
 

+ 9 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespNewVO.java

@@ -215,6 +215,15 @@ public class TradeOrderRespNewVO {
     @Schema(description = "定金")
     private BigDecimal deposi;
 
+    @Schema(description = "实付已经金额")
+    private BigDecimal realPayAmount;
+
+    @Schema(description = "政策优惠金额")
+    private BigDecimal freeAmount;
+
+    @Schema(description = "是否需要补缴费 1是 0 否")
+    private Integer isSupplementary;
+
     @Schema(description = "受损金额")
     private BigDecimal damaged;
 

+ 9 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespVO.java

@@ -526,6 +526,15 @@ public class TradeOrderRespVO {
     @Schema(description = "定金")
     private BigDecimal deposi;
 
+    @Schema(description = "实付已经金额")
+    private BigDecimal realPayAmount;
+
+    @Schema(description = "政策优惠金额")
+    private BigDecimal freeAmount;
+
+    @Schema(description = "是否需要补缴费 1是 0 否")
+    private Integer isSupplementary;
+
     @Schema(description = "受损金额")
     private BigDecimal damaged;
 

+ 9 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/order/TradeOrderDO.java

@@ -336,6 +336,15 @@ public class TradeOrderDO extends TenantBaseDO {
     @ForUpdate(fieldName = "定金")
     private BigDecimal deposi;
 
+    @ForUpdate(fieldName = "实付已经金额")
+    private BigDecimal realPayAmount;
+
+    @ForUpdate(fieldName = "政策优惠金额")
+    private BigDecimal freeAmount;
+
+    @ForUpdate(fieldName = "是否需要补缴费 1是 0 否")
+    private Integer isSupplementary;
+
     @ForUpdate(fieldName = "受损金额")
     private BigDecimal damaged;
 

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

@@ -422,7 +422,6 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 AtomicReference<BigDecimal> amount = new AtomicReference<>(BigDecimal.ZERO);
                 try {
                     List<OrderPolicyDO> orderPolicyList = orderPolicyMapper.selectList(OrderPolicyDO::getOrderId, orderId);
-
                     if (!orderPolicyList.isEmpty()) {
                         orderPolicyList.forEach(item -> {
                             amount.set(amount.get().add(item.getAmount()));
@@ -439,6 +438,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                         .set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
                         .set(TradeOrderDO::getDeposiStatus, 1)
                         .set(TradeOrderDO::getPayAmount, tradeOrderDO.getPayAmount().subtract(amount.get()))
+                        .set(TradeOrderDO::getFreeAmount, amount.get())
                         .eq(TradeOrderDO::getId, orderId)
                 );
                 Map<String, Object> extMap = new HashMap<>();
@@ -571,15 +571,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             tradeOrderAuditMapper.insert(tradeOrderAuditDO);
 
             if (tradeOrderDO.getAuditStatus() + 1 > tradeOrderDO.getAuditType()) {
-                tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
-                        .set(TradeOrderDO::getAuditStatus, tradeOrderDO.getAuditStatus() + 1)
-                        .set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
-                        .set(TradeOrderDO::getDamagedStatus, 2)
-                        .set(TradeOrderDO::getDamaged, damaged)
-                        .eq(TradeOrderDO::getId, orderId)
-                );
-                tradeOrderPayService.cancelOrder(orderId);
-
+                BigDecimal supplementAmount = tradeOrderDO.getRealPayAmount().subtract(damaged);
+                int isSupplement = supplementAmount.compareTo(BigDecimal.ZERO) > 0 ? 1 : 0;
                 try {
                     Map map = new HashMap();
                     map.put("orderNo", tradeOrderDO.getOrderNo());
@@ -597,14 +590,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                         realPay = tradeOrderDO.getPayAmount();
                     }
 
-                    BigDecimal payAmount = tradeOrderDO.getPayAmount();
-                    BigDecimal refundAmount = payAmount.multiply(damaged);
-
-                    BigDecimal multiply = refundAmount.multiply(realPay).compareTo(BigDecimal.ZERO) > 0 ? refundAmount.multiply(realPay):BigDecimal.ZERO;
-
                     map.put("wyAmount", damaged);
-                    map.put("wyRefundAmount", refundAmount);
-                    map.put("wyPayAmount", multiply);
+                    map.put("wyRefundAmount", isSupplement==0?supplementAmount:BigDecimal.ZERO);
+                    map.put("wyPayAmount", isSupplement==1?supplementAmount.abs():BigDecimal.ZERO);
                     map.put("startTime", DateUtil.formatDate(tradeOrderDO.getTravelDate()));
                     NotifySendSingleToUserReqDTO reqDTO = new NotifySendSingleToUserReqDTO();
                     reqDTO.setTemplateParams(map);
@@ -618,8 +606,25 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                     log.error("发送短信异常", e);
                 }
 
+                tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
+                        .set(TradeOrderDO::getAuditStatus, tradeOrderDO.getAuditStatus() + 1)
+                        .set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
+                        .set(TradeOrderDO::getDamagedStatus, 2)
+                        .set(TradeOrderDO::getSupplementAmount, supplementAmount)
+                        .set(TradeOrderDO::getDamaged, damaged)
+                        //是否需要补缴费 1是 0 否
+                        .set(TradeOrderDO::getIsSupplementary, isSupplement)
+                        .eq(TradeOrderDO::getId, orderId)
+                );
+                tradeOrderPayService.cancelOrder(orderId);
                 Map<String, Object> extMap = new HashMap<>();
-                extMap.put("result", "审核通过");
+                String result = "审核通过";
+                if(isSupplement==1){
+                    result += "需要补缴"+supplementAmount;
+                }else{
+                    result += "退押金"+supplementAmount;
+                }
+                extMap.put("result", result);
                 TradeOrderLogUtils.setOrderInfo(orderId, tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.UNPAID.getStatus(), extMap);
             } else {
                 AuditUserDO auditUserDO = auditUserMapper.selectOne(new QueryWrapper<AuditUserDO>().eq("type", tradeOrderDO.getAuditType()).eq("audit_status", tradeOrderDO.getAuditStatus() + 1).last("limit 1"));

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

@@ -195,6 +195,7 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
                             //2.创建定金支付交易单
                             payOrderReqVO.setPayAmount(tradeOrder.getDeposi());
                             TradeOrderPayDO tradeOrderPayDO = buildOrderPay(tradeOrder, payOrderReqVO);
+                            tradeOrderPayDO.setOrderType(PAY_ORDER_TYPE_DEPOSI);
                             payOrderReqVO.setStoreId(tradeOrder.getStoreId());
                             tradeOrderRepositoryService.savePayOrder(tradeOrderPayDO);
                             payOrderReqVO.setAccountName(tradeOrder.getSourceName());
@@ -699,8 +700,13 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_DEPOSI_PAY)
     public void updateDeposiOrderPaid(TradeOrderDO tradeOrderDO, TradeOrderPayDO tradeOrderPayDO) {
         Integer orderStatus = tradeOrderDO.getOrderStatus();
+        BigDecimal realPayAmount = (tradeOrderDO.getRealPayAmount()==null?BigDecimal.ZERO:tradeOrderDO.getRealPayAmount()).add(tradeOrderDO.getRealPayAmount());
         tradeOrderMapper.update(new LambdaUpdateWrapper<TradeOrderDO>()
-                .eq(TradeOrderDO::getId, tradeOrderDO.getId()).set(TradeOrderDO::getOrderStatus, orderStatus).set(TradeOrderDO::getDeposiStatus, 2).set(TradeOrderDO::getDeposiPayTime, LocalDateTime.now()));
+                .eq(TradeOrderDO::getId, tradeOrderDO.getId())
+                .eq(TradeOrderDO::getRealPayAmount, realPayAmount)
+                .set(TradeOrderDO::getOrderStatus, orderStatus)
+                .set(TradeOrderDO::getDeposiStatus, 2)
+                .set(TradeOrderDO::getDeposiPayTime, LocalDateTime.now()));
         //保存订单日志
         TradeOrderLogUtils.setOrderInfo(tradeOrderDO.getId(), orderStatus, tradeOrderDO.getOrderStatus(), MapUtil.<String, Object>builder().put("payType", PayTypeEnum.valueOf(tradeOrderPayDO.getPaymentType()).getName()).put("payAmount", tradeOrderPayDO.getPayAmount()).build());
     }

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

@@ -739,10 +739,6 @@ public class TradeRefundServiceImpl implements TradeRefundService {
     private void validateBeforeRefund(TradeOrderDO tradeOrderDO, RefundDO refundDO) {
         //验证退款渠道
         validateRefundChannel(tradeOrderDO, refundDO);
-        //增加订单此时不能退款,等待合并后才能退
-        TradeOrderBindDO bindOrder = tradeOrderRepositoryService.getBindOrder(tradeOrderDO.getId(), TradeOrderBindEnum.ADD_ORDER.getType());
-        Asserts.isTrue(bindOrder == null, "订单{}为增加订单,需要等待订单合并后在主订单进行退款", tradeOrderDO.getOrderNo());
-
         int num = tradeOrderRepositoryService.getInvoiceOrderCount(tradeOrderDO.getOrderNo());
         Asserts.isTrue(num <= 0, "订单{}已经出开票,不能发起退款", tradeOrderDO.getOrderNo());