zoujiajian пре 1 година
родитељ
комит
1aec3c7363

+ 8 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/RefundOrderDon.java

@@ -44,8 +44,16 @@ public class RefundOrderDon extends BaseEntity{
 	 */
 	private BigDecimal totalFee;
 
+	/**
+	 * 现金
+	 */
 	private BigDecimal refundFee;
 
+	/**
+	 * 余额
+	 */
+	private BigDecimal refundBalance;
+
 	private String refundDesc;
 
 	/**

+ 8 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/RefundVipOrderDon.java

@@ -30,8 +30,16 @@ public class RefundVipOrderDon extends BaseEntity{
 	 */
 	private BigDecimal totalFee;
 
+	/**
+	 * 退款现金
+	 */
 	private BigDecimal refundFee;
 
+	/**
+	 * 退款余额
+	 */
+	BigDecimal refundBalance;
+
 	private String refundDesc;
 
 	/**

+ 14 - 1
netflix-dao/src/main/java/com/cyksj/model/request/OrderRefundReq.java

@@ -32,7 +32,7 @@ public class OrderRefundReq {
 
 	/**
 	 * 退款类型
-	 * 订单金额、余额
+	 * 订单金额、余额、金额和余额混合bxj
 	 */
 	private String refundType;
 
@@ -69,4 +69,17 @@ public class OrderRefundReq {
 	 * 加购订单退款车票ids
 	 */
 	private List<Long> dpRelationIds;
+
+	@Getter
+	public enum RefundType {
+		balance("余额退款"),
+		money("现金退款"),
+		bxj("余额现金"),
+		;
+		String desc;
+
+		RefundType(String desc) {
+			this.desc = desc;
+		}
+	}
 }

+ 24 - 11
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -968,10 +968,11 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             }
         }
         BigDecimal refundMoney = refundReq.getRefundMoney();
+        BigDecimal refundBalance = refundReq.getRefundBalance();
         BigDecimal money = orderDon.getMoney();
+        BigDecimal balance = orderDon.getBalance();
         //余额退款
         if (OrderDon.Type.BALANCE.getType().equals(refundType)) {
-            BigDecimal balance = orderDon.getBalance();
             refundMoney = orderDonRefundBalance.add(refundMoney);
             if (OrderDon.Type.BALANCE == orderDon.getType() && refundMoney.compareTo(balance) > 0) {
                 throw BusinessRuntimeException.getInstance("退款余额大于订单支付余额");
@@ -981,6 +982,18 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             }
             orderDon.setRefundBalance(refundMoney);
             orderDon.setRefundMoney(BigDecimal.ZERO);
+        } else if (OrderRefundReq.RefundType.bxj.name().equals(refundType)) {
+            refundBalance = refundBalance.add(orderDonRefundBalance);
+            if (refundBalance.compareTo(balance) > 0) {
+                throw BusinessRuntimeException.getInstance("退款余额大于订单支付余额");
+            }
+            orderDon.setRefundBalance(refundBalance);
+
+            refundMoney = orderDonRefundMoney.add(refundMoney);
+            if (refundMoney.compareTo(money) > 0) {
+                throw BusinessRuntimeException.getInstance("退款金额大于订单支付金额");
+            }
+            orderDon.setRefundMoney(refundMoney);
         } else {
             //退金额
             refundMoney = orderDonRefundMoney.add(refundMoney);
@@ -1015,7 +1028,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, Boolean isOnly, BigDecimal refundBalance, String chatImg, BigDecimal deductBalance, List<Long> dpRelationIds) {
-        orderRefundService.refundRecord(orderDon, refundMoney, operator, goodsDon, sku, outNo, refundType, chatImg);
+        orderRefundService.refundRecord(orderDon, refundMoney, refundBalance, operator, goodsDon, sku, outNo, refundType, chatImg);
         //退款一次
         goodsDonStockService.upStockRelate(null, orderDon.getId(), "refund");
         try {
@@ -1038,14 +1051,14 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
         }
 
         //若存在余额支付,退还余额
-        if (isOnly == null && orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-            BigDecimal addBalance = orderDon.getBalance();
-            //需额外扣除余额
-            if (deductBalance != null && deductBalance.compareTo(BigDecimal.ZERO) > 0) {
-                addBalance = addBalance.subtract(deductBalance);
-            }
-            userBenefitsService.addUserBalance(orderDon.getUserId(), addBalance, UserBalanceSourceRecord.Source.refund, orderDon.getYhsId(), orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.refund.getDesc(), true);
-        }
+//        if (isOnly == null && orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+//            BigDecimal addBalance = orderDon.getBalance();
+//            //需额外扣除余额
+//            if (deductBalance != null && deductBalance.compareTo(BigDecimal.ZERO) > 0) {
+//                addBalance = addBalance.subtract(deductBalance);
+//            }
+//            userBenefitsService.addUserBalance(orderDon.getUserId(), addBalance, UserBalanceSourceRecord.Source.refund, orderDon.getYhsId(), orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.refund.getDesc(), true);
+//        }
 
         try {
             marketFrontService.subSpecificChanceNum(orderDon.getUserId(), orderDon.getId(), orderDon.getGoodsId(), orderDon.getUpdateTime());
@@ -1372,7 +1385,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             orderDonMapper.updateById(orderDon);
         }
 
-        orderRefundService.refundRecord(orderDon, refundMoney, orderRefundReq.getOperator(), goodsDon, sku, outNo, refundType, null);
+        orderRefundService.refundRecord(orderDon, refundMoney, orderRefundReq.getRefundBalance(), orderRefundReq.getOperator(), goodsDon, sku, outNo, refundType, null);
     }
 
     @Override

+ 30 - 12
netflix-service/src/main/java/com/cyksj/service/mange/vip/impl/CmsVipOrderServiceImpl.java

@@ -80,7 +80,7 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 
 	private void commonRefund(VipOrderDon orderDon, BigDecimal refundMoney, String operator, String outNo, String refundType, Boolean isOnly, BigDecimal refundBalance, String chatImg, BigDecimal deductBalance) {
 		//记录退款
-		recordRefundOrder(orderDon, outNo, refundMoney, operator, chatImg, refundType);
+		recordRefundOrder(orderDon, outNo, refundMoney, refundBalance, operator, chatImg, refundType);
 		//退等比例
 		if (isOnly != null && isOnly) {
 			userBenefitsService.addUserBalance(orderDon.getUserId(), refundBalance, UserBalanceSourceRecord.Source.vip_refund, null, orderDon.getId(), orderDon.getPayTitle() + UserBalanceSourceRecord.Source.vip_refund.getDesc(), true);
@@ -88,14 +88,14 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 			orderDon.setRefundBalance(orderDonRefundBalance.add(refundBalance));
 		}
 		//若存在余额支付,退还余额
-		if (isOnly == null && orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-			BigDecimal addBalance = orderDon.getBalance();
-			//需额外扣除余额
-			if (deductBalance != null && deductBalance.compareTo(BigDecimal.ZERO) > 0) {
-				addBalance = addBalance.subtract(deductBalance);
-			}
-			userBenefitsService.addUserBalance(orderDon.getUserId(), addBalance, UserBalanceSourceRecord.Source.vip_refund, null, orderDon.getId(), orderDon.getPayTitle() + UserBalanceSourceRecord.Source.vip_refund.getDesc(), true);
-		}
+//		if (isOnly == null && orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+//			BigDecimal addBalance = orderDon.getBalance();
+//			//需额外扣除余额
+//			if (deductBalance != null && deductBalance.compareTo(BigDecimal.ZERO) > 0) {
+//				addBalance = addBalance.subtract(deductBalance);
+//			}
+//			userBenefitsService.addUserBalance(orderDon.getUserId(), addBalance, UserBalanceSourceRecord.Source.vip_refund, null, orderDon.getId(), orderDon.getPayTitle() + UserBalanceSourceRecord.Source.vip_refund.getDesc(), true);
+//		}
 		//扣除会员时长
 		List<Long> userIdList = userBindRelationService.getRelationUserIdList(orderDon.getUserId(), null);
 		VipUser vipUser = vipUserMapper.selectOne(Wrappers.lambdaQuery(VipUser.class)
@@ -194,7 +194,7 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 		}
 	}
 
-	private void recordRefundOrder(VipOrderDon orderDon, String outRefundNo, BigDecimal refundMoney, String operator, String chatImg, String refundType) {
+	private void recordRefundOrder(VipOrderDon orderDon, String outRefundNo, BigDecimal refundMoney, BigDecimal refundBalance, String operator, String chatImg, String refundType) {
 		RefundVipOrderDon refund = new RefundVipOrderDon();
 		refund.setOrderId(orderDon.getId());
 		refund.setOutRefundNo(outRefundNo);
@@ -212,6 +212,11 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 			refund.setRefundMethod(refundType);
 			refund.setRefundFee(orderDon.getRefundBalance());
 		}
+		//余额现金退款
+		if (OrderRefundReq.RefundType.bxj.name().equals(refundType)) {
+			refund.setRefundMethod(OrderRefundReq.RefundType.bxj.name());
+			refund.setRefundBalance(refundBalance);
+		}
 		refundVipOrderDonMapper.insert(refund);
 	}
 
@@ -231,12 +236,13 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 		}
 		String refundType = refundReq.getRefundType();
 		BigDecimal refundMoney = refundReq.getRefundMoney();
+		BigDecimal refundBalance = refundReq.getRefundBalance();
 		BigDecimal money = orderDon.getMoney();
+		BigDecimal balance = orderDon.getBalance();
 		BigDecimal orderDonRefundMoney = Optional.ofNullable(orderDon.getRefundMoney()).orElse(BigDecimal.ZERO);
 		BigDecimal orderDonRefundBalance = Optional.ofNullable(orderDon.getRefundBalance()).orElse(BigDecimal.ZERO);
 		//余额退款
 		if (OrderDon.Type.BALANCE.getType().equals(refundType)) {
-			BigDecimal balance = orderDon.getBalance();
 			refundMoney = orderDonRefundBalance.add(refundMoney);
 			if (VipOrderDon.Type.BALANCE == orderDon.getType() && refundMoney.compareTo(balance) > 0) {
 				throw BusinessRuntimeException.getInstance("退款余额大于订单支付余额");
@@ -246,7 +252,19 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 			}
 			orderDon.setRefundBalance(refundMoney);
 			orderDon.setRefundMoney(BigDecimal.ZERO);
-		} else {
+		} else if (OrderRefundReq.RefundType.bxj.name().equals(refundType)) {
+			refundBalance = refundBalance.add(orderDonRefundBalance);
+			if (refundBalance.compareTo(balance) > 0) {
+				throw BusinessRuntimeException.getInstance("退款余额大于订单支付余额");
+			}
+			orderDon.setRefundBalance(refundBalance);
+
+			refundMoney = orderDonRefundMoney.add(refundMoney);
+			if (refundMoney.compareTo(money) > 0) {
+				throw BusinessRuntimeException.getInstance("退款金额大于订单支付金额");
+			}
+			orderDon.setRefundMoney(refundMoney);
+		}else {
 			//退金额
 			refundMoney = orderDonRefundMoney.add(refundMoney);
 			if (refundMoney.compareTo(money) > 0) {

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/order/OrderRefundService.java

@@ -19,7 +19,7 @@ public interface OrderRefundService {
 	/**
 	 * 退款记录
 	 */
-	void refundRecord(OrderDon orderDon, BigDecimal refundMoney, String operator, GoodsDon goodsDon, GoodsDonSku sku, String outRefundNo, String refundType, String chatImg);
+	void refundRecord(OrderDon orderDon, BigDecimal refundMoney, BigDecimal refundBalance, String operator, GoodsDon goodsDon, GoodsDonSku sku, String outRefundNo, String refundType, String chatImg);
 	/**
 	 * 套餐包退款记录
 	 */

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -3409,7 +3409,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		clearUserLockingRelation(groupsRelationMapper.selectById(orderDon.getRelationId()), orderDon);
 
 		//记录退款
-		orderRefundService.refundRecord(orderDon, orderRefundReq.getRefundMoney(), null, goodsDon, sku, outNo, orderDon.getType().getType(), null);
+		orderRefundService.refundRecord(orderDon, orderRefundReq.getRefundMoney(), orderRefundReq.getRefundBalance(), null, goodsDon, sku, outNo, orderDon.getType().getType(), null);
 		return;
 	}
 

+ 6 - 1
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderRefundServiceImpl.java

@@ -102,7 +102,7 @@ public class OrderRefundServiceImpl implements OrderRefundService {
 	}
 
 	@Override
-	public void refundRecord(OrderDon orderDon, BigDecimal refundMoney, String operator, GoodsDon goodsDon, GoodsDonSku sku, String outRefundNo, String refundType, String chatImg) {
+	public void refundRecord(OrderDon orderDon, BigDecimal refundMoney, BigDecimal refundBalance, String operator, GoodsDon goodsDon, GoodsDonSku sku, String outRefundNo, String refundType, String chatImg) {
 		RefundOrderDon refund = new RefundOrderDon();
 		refund.setOrderId(orderDon.getId());
 		refund.setOutRefundNo(outRefundNo);
@@ -124,6 +124,11 @@ public class OrderRefundServiceImpl implements OrderRefundService {
 			refund.setRefundMethod(refundType);
 			refund.setRefundFee(orderDon.getRefundBalance());
 		}
+		//余额现金退款
+		if (OrderRefundReq.RefundType.bxj.name().equals(refundType)) {
+			refund.setRefundMethod(OrderRefundReq.RefundType.bxj.name());
+			refund.setRefundBalance(refundBalance);
+		}
 		refundOrderDonMapper.insert(refund);
 	}
 

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -1760,7 +1760,7 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 		orderDon.setRefundMoney(refundMoney);
 		GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
 		orderDonMapper.updateById(orderDon);
-		orderRefundService.refundRecord(orderDon, refundMoney, "系统", goodsDon, sku, outNo, orderDon.getType().name(), null);
+		orderRefundService.refundRecord(orderDon, refundMoney, null, "系统", goodsDon, sku, outNo, orderDon.getType().name(), null);
 		//清除车票
 		GroupsRelation relation = groupsRelationMapper.selectById(relationId);
 		clearService.clearTicket(relation, UserTicketClearedRecord.Source.refund);

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/scheduler/impl/SchedulerServiceImpl.java

@@ -220,7 +220,7 @@ public class SchedulerServiceImpl implements SchedulerService {
 							if (sku == null) return;
 							skuMap.putIfAbsent(orderDon.getSkuId(), sku);
 						}
-						orderRefundService.refundRecord(orderDon, orderDon.getRefundMoney(), null, goodsDon, sku, StrUtil.EMPTY, "balance", null);
+						orderRefundService.refundRecord(orderDon, orderDon.getRefundMoney(), null, null, goodsDon, sku, StrUtil.EMPTY, "balance", null);
 						return;
 					}
 					changeTickerRelation(item_groupsId, relationView, source, relationView.getYhsId());

+ 2 - 2
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/AccountTempController.java

@@ -231,7 +231,7 @@ public class AccountTempController {
 							orderDonMapper.updateById(orderDon);
 							clearUserLockingRelation(relationMapper.selectById(orderDon.getRelationId()), orderDon);
 							//记录退款
-							orderRefundService.refundRecord(orderDon, orderRefundReq.getRefundMoney(), null, goodsDon, sku, outNo, orderDon.getType().getType(), null);
+							orderRefundService.refundRecord(orderDon, orderRefundReq.getRefundMoney(), null, null, goodsDon, sku, outNo, orderDon.getType().getType(), null);
 						} catch (Exception e) {
 							orderRefundReq.setRefundType("balance");
 							userBenefitsService.addUserBalance(relation.getUserId(), refundMoney, UserBalanceSourceRecord.Source.clear_valid, relation.getYhsId(), orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.clear_valid.getDesc(), true);
@@ -240,7 +240,7 @@ public class AccountTempController {
 							orderDon.setRefundBalance(refundMoney);
 							orderDon.setRefundMoney(BigDecimal.ZERO);
 							orderDonMapper.updateById(orderDon);
-							orderRefundService.refundRecord(orderDon, orderRefundReq.getRefundMoney(), null, goodsDon, sku, outNo, "balance", null);
+							orderRefundService.refundRecord(orderDon, orderRefundReq.getRefundMoney(), null, null, goodsDon, sku, outNo, "balance", null);
 						}
 					});