Bläddra i källkod

失效车票退款

zoujiajian 2 år sedan
förälder
incheckning
f25e1bc748

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/request/OrderRefundReq.java

@@ -40,5 +40,7 @@ public class OrderRefundReq {
 	 */
 	private BigDecimal refundBalance;
 
+	private Boolean isOnly;
+
 	private String operator;
 }

+ 10 - 4
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -332,7 +332,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
         String outNo = orderRefundService.centerRefund(refundReq, orderDon);
         orderDon.setRefundDesc(refundReq.getRefundDesc());
         //记录退款信息
-        commonRefund(orderDon, refundReq.getRefundMoney(), refundReq.getOperator(), goodsDon, sku, outNo, refundType);
+        commonRefund(orderDon, refundReq.getRefundMoney(), refundReq.getOperator(), goodsDon, sku, outNo, refundType, refundReq.getIsOnly(), refundReq.getRefundBalance());
         //修改订单状态
         orderDon.setStatus(OrderDon.Status.refund);
         orderDonMapper.updateById(orderDon);
@@ -695,7 +695,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
     /**
      * 退款后 处理关联
      */
-    public void commonRefund(OrderDon orderDon, BigDecimal refundMoney, String operator, GoodsDon goodsDon, GoodsDonSku sku, String outNo, String refundType) {
+    public void commonRefund(OrderDon orderDon, BigDecimal refundMoney, String operator, GoodsDon goodsDon, GoodsDonSku sku, String outNo, String refundType, Boolean isOnly, BigDecimal refundBalance) {
         TASK_POOL.execute(() -> {
             orderRefundService.refundRecord(orderDon, refundMoney, operator, goodsDon, sku, outNo, refundType);
             //退款一次
@@ -710,8 +710,14 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             if (orderDon.getCouponUserId() != 0) {
                 couponFontService.updateOrderDonCouponStatus(orderDon);
             }
+            //退等比例月
+            if (isOnly != null && isOnly) {
+                userBenefitsService.addUserBalance(orderDon.getUserId(), refundBalance, UserBalanceSourceRecord.Source.refund, orderDon.getYhsId());
+                BigDecimal orderDonRefundBalance = Optional.ofNullable(orderDon.getRefundBalance()).orElse(BigDecimal.ZERO);
+                orderDon.setRefundBalance(orderDonRefundBalance.add(refundBalance));
+            }
             //若存在余额支付,退还余额
-            if (orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+            if (isOnly == null && orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
                 userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getBalance(), UserBalanceSourceRecord.Source.balance, orderDon.getYhsId());
             }
             try {
@@ -725,7 +731,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                 log.error("wx减少抽奖机会错误,orderId:{},error:{}", orderDon.getId(), e);
             }
             if (OrderDon.Type.BALANCE.getType().equals(refundType)) {
-                if (orderDon.getMoney().compareTo(BigDecimal.ZERO) > 0) {
+                if (isOnly == null && orderDon.getMoney().compareTo(BigDecimal.ZERO) > 0) {
                     userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getRefundBalance(), UserBalanceSourceRecord.Source.refund, orderDon.getYhsId());
                 }
             } else {

+ 8 - 1
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -662,7 +662,7 @@ public class GroupRelationController {
                 .notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
                 .orderByDesc(OrderDon::getId)
                 .last("limit 1"));
-        if (orderDon != null) {
+        if (orderDon == null) {
             throw BusinessRuntimeException.getInstance("你对应车票的订单不存在");
         }
         GoodsDonSku sku = goodsDonSkuMapper.selectById(orderDon.getSkuId());
@@ -673,6 +673,7 @@ public class GroupRelationController {
         long remainDay = DateUtil.between(DateTime.now(), expiryTime, DateUnit.DAY);
         BigDecimal money = orderDon.getMoney();
         BigDecimal refundMoney = null;
+        BigDecimal refundBalance= null;
         String refundType = null;
         if (money.compareTo(BigDecimal.ZERO) > 0) {
             BigDecimal dayMoney = money.divide(BigDecimal.valueOf(sku.getMonths()).multiply(BigDecimal.valueOf(30)), 2, RoundingMode.HALF_DOWN);
@@ -680,9 +681,15 @@ public class GroupRelationController {
             refundType = "money";
         }
         OrderRefundReq refundReq = new OrderRefundReq();
+        if (orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+            BigDecimal dayMoney = orderDon.getBalance().divide(BigDecimal.valueOf(sku.getMonths()).multiply(BigDecimal.valueOf(30)), 2, RoundingMode.HALF_DOWN);
+            refundBalance = BigDecimal.valueOf(remainDay).multiply(dayMoney);
+            refundReq.setIsOnly(true);
+        }
         refundReq.setOrderId(orderDon.getId());
         refundReq.setRefundDesc("失效车票退款");
         refundReq.setRefundMoney(Optional.ofNullable(refundMoney).orElse(BigDecimal.ZERO));
+        refundReq.setRefundBalance(Optional.ofNullable(refundBalance).orElse(BigDecimal.ZERO));
         refundReq.setRefundType(Optional.ofNullable(refundType).orElse("balance"));
         cmsOrderDonService.unifiedRefund(refundReq);
         return GatewayResponse.SUCCESS.newBuilder().toResult();