zoujiajian 1 yıl önce
ebeveyn
işleme
18c9028aaa

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/views/CmsVipOrderDonView.java

@@ -64,6 +64,12 @@ public class CmsVipOrderDonView {
 	@DbField("o.money")
 	private BigDecimal money;
 
+	/**
+	 * 实际抵扣金额
+	 */
+	@DbField("o.actually_deduct_money")
+	private BigDecimal actuallyDeductMoney = BigDecimal.ZERO;
+
 	@DbField("o.balance")
 	private BigDecimal balance;
 

+ 5 - 0
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -1060,6 +1060,11 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 //            userBenefitsService.addUserBalance(orderDon.getUserId(), addBalance, UserBalanceSourceRecord.Source.refund, orderDon.getYhsId(), orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.refund.getDesc(), true);
 //        }
 
+        //余额现金混合退款
+        if (OrderRefundReq.RefundType.bxj.name().equals(refundType)) {
+            userBenefitsService.addUserBalance(orderDon.getUserId(), refundBalance, UserBalanceSourceRecord.Source.refund, null, orderDon.getId(), orderDon.getPayTitle() + UserBalanceSourceRecord.Source.refund.getDesc(), true);
+        }
+
         try {
             marketFrontService.subSpecificChanceNum(orderDon.getUserId(), orderDon.getId(), orderDon.getGoodsId(), orderDon.getUpdateTime());
             if (goodsDon.getType() == 2 && !orderDon.getIsDistribute()) {

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

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.mapper.GroupsRelationMapper;
+import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
 import com.cyksj.mapper.vip.RefundVipOrderDonMapper;
@@ -56,12 +57,16 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 
 	private final UserDistributeMapper userDistributeMapper;
 
+	private final CmsUserMapper cmsUserMapper;
+
 	@Override
 	public void refundOrders(OrderRefundReq refundReq) throws Exception {
 		VipOrderDon orderDon = vipOrderDonMapper.selectById(refundReq.getOrderId());
 		if (StrUtil.isEmpty(refundReq.getRefundType())) {
 			refundReq.setRefundType("money");
 		}
+		Long adminId = refundReq.getAdminId();
+		Optional.ofNullable(cmsUserMapper.selectById(adminId)).ifPresent(cmsUser -> refundReq.setOperator(cmsUser.getNickname()));
 		String refundType = refundReq.getRefundType();
 		//校验订单是否符合退款
 		checkOrderRefund(orderDon, refundReq);
@@ -96,6 +101,10 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 //			}
 //			userBenefitsService.addUserBalance(orderDon.getUserId(), addBalance, UserBalanceSourceRecord.Source.vip_refund, null, orderDon.getId(), orderDon.getPayTitle() + UserBalanceSourceRecord.Source.vip_refund.getDesc(), true);
 //		}
+		//余额现金混合退款
+		if (OrderRefundReq.RefundType.bxj.name().equals(refundType)) {
+			userBenefitsService.addUserBalance(orderDon.getUserId(), refundBalance, 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)
@@ -111,10 +120,6 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 				Integer extendsDays = orderDon.getExtendsDays();
 				DateTime now = DateTime.now();
 				if (remainExpiryTime.compareTo(now) > 0 && extendsDays > 0) {
-					Long remainDays = DateUtil.betweenDay(remainExpiryTime, now, false) + 1;
-					BigDecimal daySingle = orderDon.getDeductMoney().divide(BigDecimal.valueOf(orderDon.getNum() * 30), 0, RoundingMode.UP);
-					BigDecimal addBalance = daySingle.multiply(BigDecimal.valueOf(remainDays));
-					userBenefitsService.addUserBalance(orderDon.getUserId(), addBalance, UserBalanceSourceRecord.Source.vip_refund, null, orderDon.getId(), orderDon.getPayTitle() + UserBalanceSourceRecord.Source.vip_refund.getDesc(), true);
 					subExpiryTime = now;
 				}
 			}
@@ -253,6 +258,9 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 			orderDon.setRefundBalance(refundMoney);
 			orderDon.setRefundMoney(BigDecimal.ZERO);
 		} else if (OrderRefundReq.RefundType.bxj.name().equals(refundType)) {
+			//该订单实际可抵扣金额 可退成余额
+			BigDecimal actuallyDeductMoney = Optional.ofNullable(orderDon.getActuallyDeductMoney()).orElse(BigDecimal.ZERO);
+			balance = balance.add(actuallyDeductMoney);
 			refundBalance = refundBalance.add(orderDonRefundBalance);
 			if (refundBalance.compareTo(balance) > 0) {
 				throw BusinessRuntimeException.getInstance("退款余额大于订单支付余额");