zoujiajian 1 tahun lalu
induk
melakukan
94b9b1b845

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/VipOrderDon.java

@@ -21,6 +21,8 @@ import java.util.Date;
 @Setter
 public class VipOrderDon extends BaseEntity{
 
+	private Long goodsId;
+
 	/** 订单号 */
 	private String orderNo ;
 

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

@@ -1204,7 +1204,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
      */
     public void deductDsPoints(OrderDon orderDon) {
         if (orderDon.getIsDistribute()) {
-            DistributeWaitingSendPoints distributeWaitingSendPoints = distributeWaitingSendPointsMapper.selectOne(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class).eq(DistributeWaitingSendPoints::getOrderId, orderDon.getId()).last("limit 1"));
+            DistributeWaitingSendPoints distributeWaitingSendPoints = distributeWaitingSendPointsMapper.selectOne(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class).eq(DistributeWaitingSendPoints::getOrderId, orderDon.getId()).eq(DistributeWaitingSendPoints::getIsVip,Boolean.FALSE).last("limit 1"));
             if (distributeWaitingSendPoints != null) {
                 BigDecimal money = orderDon.getMoney();
                 BigDecimal refundMoney = orderDon.getRefundMoney();

+ 67 - 8
netflix-service/src/main/java/com/cyksj/service/mange/vip/impl/CmsVipOrderServiceImpl.java

@@ -5,15 +5,14 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
-import com.cyksj.mapper.GoodsDonSkuMapper;
-import com.cyksj.mapper.GroupsMapper;
 import com.cyksj.mapper.GroupsRelationMapper;
+import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
+import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
 import com.cyksj.mapper.vip.RefundVipOrderDonMapper;
 import com.cyksj.mapper.vip.VipOrderDonMapper;
 import com.cyksj.mapper.vip.VipUserMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.OrderRefundReq;
-import com.cyksj.service.mange.MirrorUserCleatService;
 import com.cyksj.service.mange.vip.CmsVipOrderService;
 import com.cyksj.service.order.OrderRefundService;
 import com.cyksj.service.relation.GroupRelationClearService;
@@ -23,6 +22,7 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Date;
 import java.util.List;
 import java.util.Optional;
@@ -46,11 +46,7 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 
 	private final GroupsRelationMapper relationMapper;
 
-	private final GoodsDonSkuMapper skuMapper;
-
-	private final GroupsMapper groupsMapper;
-
-	private final MirrorUserCleatService mirrorUserCleatService;
+	private final DistributeWaitingSendPointsMapper distributeWaitingSendPointsMapper;
 
 	private final GroupRelationClearService groupRelationClearService;
 
@@ -58,6 +54,8 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 
 	private final UserBindRelationService userBindRelationService;
 
+	private final UserDistributeMapper userDistributeMapper;
+
 	@Override
 	public void refundOrders(OrderRefundReq refundReq) throws Exception {
 		VipOrderDon orderDon = vipOrderDonMapper.selectById(refundReq.getOrderId());
@@ -111,6 +109,67 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
 			clearVipMirrorUser(vipUser.getUserId(), subExpiryTime);
 			vipUserMapper.updateById(vipUser);
 		}
+		if (StrUtil.isNotBlank(refundType) && !refundType.equals(VipOrderDon.Type.BALANCE.getType())) {
+			//分销提成积分扣除
+			deductVipDsPoints(orderDon);
+		}
+	}
+
+	private void deductVipDsPoints(VipOrderDon orderDon) {
+		if (orderDon.getIsDistribute()) {
+			DistributeWaitingSendPoints distributeWaitingSendPoints = distributeWaitingSendPointsMapper.selectOne(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class).eq(DistributeWaitingSendPoints::getOrderId, orderDon.getId()).eq(DistributeWaitingSendPoints::getIsVip, Boolean.TRUE).last("limit 1"));
+			if (distributeWaitingSendPoints != null) {
+				BigDecimal money = orderDon.getMoney();
+				BigDecimal refundMoney = orderDon.getRefundMoney();
+				//已发送 发送中 部分 全额退款
+				DistributeWaitingSendPoints.Status sendStatus = distributeWaitingSendPoints.getSendStatus();
+				BigDecimal points = distributeWaitingSendPoints.getPoints();
+				if (sendStatus == DistributeWaitingSendPoints.Status.waiting) {
+					Integer thisGoodsRate = distributeWaitingSendPoints.getRate();
+					if (thisGoodsRate == null || thisGoodsRate == 0) {
+						thisGoodsRate = Optional.ofNullable(userDistributeMapper.getDistributeGoodsRateByUidAndGid(orderDon.getUserId(), orderDon.getGoodsId())).orElse(0);
+					}
+					if (thisGoodsRate > 0) {
+						BigDecimal refundRate = refundMoney.divide(money, 2, RoundingMode.DOWN);
+						//退掉比例的提成
+						BigDecimal needSubPoints = points.multiply(refundRate);
+						distributeWaitingSendPoints.setRefundPoints(needSubPoints);
+						//剩余积分
+						BigDecimal remainPoints = points.subtract(needSubPoints);
+						distributeWaitingSendPoints.setPoints(remainPoints);
+						//原先获取积分也扣除
+						if (distributeWaitingSendPoints.getOriPoints().compareTo(BigDecimal.ZERO) > 0) {
+							BigDecimal oriNeedSubPoints = distributeWaitingSendPoints.getOriPoints().multiply(refundRate);
+							distributeWaitingSendPoints.setOriPoints(distributeWaitingSendPoints.getOriPoints().subtract(oriNeedSubPoints));
+						}
+						distributeWaitingSendPointsMapper.updateById(distributeWaitingSendPoints);
+					}
+				} else if (sendStatus == DistributeWaitingSendPoints.Status.success) {
+					//已发送的提成 部分退款 全额退款 需要扣除用户积分
+					//扣除固定推广者积分
+					Integer thisGoodsRate = distributeWaitingSendPoints.getRate();
+					if (thisGoodsRate == null || thisGoodsRate == 0) {
+						thisGoodsRate = Optional.ofNullable(userDistributeMapper.getDistributeGoodsRateByUidAndGid(orderDon.getUserId(), orderDon.getGoodsId())).orElse(0);
+					}
+					if (thisGoodsRate > 0) {
+						BigDecimal refundRate = refundMoney.divide(money, 2, RoundingMode.DOWN);
+						//退掉比例的提成
+						BigDecimal needSubPoints = points.multiply(refundRate);
+						userBenefitsService.deductDistributePoints(orderDon.getId(), distributeWaitingSendPoints.getSharedId(), needSubPoints);
+						//部分退款
+						distributeWaitingSendPoints.setRefundPoints(needSubPoints);
+						distributeWaitingSendPoints.setPoints(points.subtract(needSubPoints));
+						//原先获取积分也扣除
+						if (distributeWaitingSendPoints.getOriPoints().compareTo(BigDecimal.ZERO) > 0) {
+							BigDecimal oriNeedSubPoints = distributeWaitingSendPoints.getOriPoints().multiply(refundRate);
+							distributeWaitingSendPoints.setOriPoints(distributeWaitingSendPoints.getOriPoints().subtract(oriNeedSubPoints));
+						}
+						distributeWaitingSendPointsMapper.updateById(distributeWaitingSendPoints);
+					}
+
+				}
+			}
+		}
 	}
 
 	private void recordRefundOrder(VipOrderDon orderDon, String outRefundNo, BigDecimal refundMoney, String operator, String chatImg, String refundType) {

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/VipOrderDonServiceImpl.java

@@ -164,6 +164,7 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 		deductOrderMoney(orderDon, user, payRequest);
 		//设置订单支付商品信息
 		orderDon.setPayTitle(Constant.VIP_TITLE);
+		orderDon.setGoodsId(Constant.VIP_RELATE_GOODS_ID);
 		this.saveOrUpdate(orderDon);
 
 		Long orderId = orderDon.getId();
@@ -272,6 +273,7 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 		deductOrderMoney(orderDon, user, payRequest);
 		//设置订单支付商品信息
 		orderDon.setPayTitle(Constant.VIP_TITLE);
+		orderDon.setGoodsId(Constant.VIP_RELATE_GOODS_ID);
 
 		this.saveOrUpdate(orderDon);