zoujiajian 1 år sedan
förälder
incheckning
be87e2e21a

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/mapper/UserMapper.java

@@ -80,4 +80,7 @@ public interface UserMapper extends BaseMapper<User> {
 
     @Update("update user set mp_money = mp_money + #{addMoney} where id = #{userId} and mp_money = #{mpMoney}")
     Integer addMpMoney(@Param("userId") Long userId, @Param("mpMoney") BigDecimal mpMoney, @Param("addMoney") BigDecimal addMoney);
+
+    @Update("update user set mp_money = mp_money - #{deductMoney} where id = #{userId} and mp_money = #{mpMoney}")
+    Integer subUserMirrorShopMoney(@Param("userId") Long userId, @Param("mpMoney") BigDecimal mpMoney, @Param("deductMoney") BigDecimal deductMoney);
 }

+ 16 - 19
netflix-dao/src/main/java/com/cyksj/model/entity/UserMirrorShopDistributeWaitingSendPoints.java

@@ -1,6 +1,5 @@
 package com.cyksj.model.entity;
 
-import com.cyksj.model.BaseEntity;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -8,49 +7,47 @@ import java.math.BigDecimal;
 import java.util.Date;
 
 /*
- *项目名: yhlxj
- *文件名: YhShopDistributeWaitingSendPoints
+ *项目名: netflix
+ *文件名: UserMirrorShopDistributeWaitingSendPoints
  *创建者: JavaZou
- *创建时间:2023/9/14 14:01
+ *创建时间:2022/11/15 12:11
  */
 @Getter
 @Setter
-public class UserMirrorShopDistributeWaitingSendPoints extends BaseEntity {
+public class UserMirrorShopDistributeWaitingSendPoints extends BaseEntity{
 	/**
-	 * 店铺用户id
+	 * 分销订单产生用户id
 	 */
 	private Long userId;
 
 	/**
-	 * 店铺主id
+	 * 店铺主user_id
 	 */
 	private Long shopUserId;
 
 	private Long orderId;
 
-	private Long skuId;
-
-	/**
-	 * 分成金额
-	 */
 	private BigDecimal money;
 
-	/**
-	 * 订单退款扣除的分成金额
-	 */
 	private BigDecimal refundMoney;
 
 	/**
-	 * 提成比例
+	 * 退款状态不再发
 	 */
-	private Integer rate;
+	private Status sendStatus;
+
+	private Integer version;
 
 	private Date sendTime;
 
-	private Status sendStatus;
+	/**
+	 * 获取提成比例
+	 */
+	private Integer rate;
 
+	@Getter
 	public enum Status{
-		close("店铺分销订单关闭,积分奖励不分发"),
+		close("分销订单关闭,积分奖励不分发"),
 		success("积分发送成功"),
 		waiting("积分等待发送"),
 		not_exist("用户不存在,导致发送失败"),

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

@@ -37,6 +37,8 @@ import com.cyksj.mapper.manage.distribute.sub.UserDistributeSubMapper;
 import com.cyksj.mapper.manage.distribute.sub.UserDistributeSubRewardsMapper;
 import com.cyksj.mapper.manage.distribute.sub.UserDistributeSubWaitingMapper;
 import com.cyksj.mapper.manage.sys.WorkOrderMapper;
+import com.cyksj.mapper.mirrorshop.UserMirrorShopDistributeWaitingSendPointsMapper;
+import com.cyksj.mapper.mirrorshop.UserMirrorShopMapper;
 import com.cyksj.mapper.shop.YhShopUserDistributeBusinessOrderDonRecordMapper;
 import com.cyksj.mapper.stock.GoodsSkuStockRelateMapper;
 import com.cyksj.model.entity.*;
@@ -203,6 +205,10 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final LumaUserMapper lumaUserMapper;
 
+    private final UserMirrorShopMapper userMirrorShopMapper;
+
+    private final UserMirrorShopDistributeWaitingSendPointsMapper userMirrorShopDistributeWaitingSendPointsMapper;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -1016,6 +1022,8 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                 deductDsPoints(orderDon);
                 //店铺 分销提成金额扣除
                 yhShopDistributeService.deductDsMoney(orderDon);
+                //镜像店铺 分销提成金额扣除
+                deductUserMirrorShopMoney(orderDon);
             }
 
             if (orderDon.getIsFixedDistribute()) {
@@ -1428,4 +1436,61 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             });
         });
     }
+
+    /**
+     * 扣除用户镜像店铺提成
+     */
+    private void deductUserMirrorShopMoney(OrderDon orderDon) {
+        UserMirrorShopDistributeWaitingSendPoints distributeWaitingSendPoints = userMirrorShopDistributeWaitingSendPointsMapper.selectOne(Wrappers.lambdaQuery(UserMirrorShopDistributeWaitingSendPoints.class)
+                .eq(UserMirrorShopDistributeWaitingSendPoints::getOrderId, orderDon.getId())
+                .last("limit 1"));
+        if (distributeWaitingSendPoints != null) {
+            BigDecimal money = orderDon.getMoney();
+            BigDecimal refundMoney = orderDon.getRefundMoney();
+            //已发送 发送中 部分 全额退款
+            UserMirrorShopDistributeWaitingSendPoints.Status sendStatus = distributeWaitingSendPoints.getSendStatus();
+            BigDecimal take_money = distributeWaitingSendPoints.getMoney();
+            if (sendStatus == UserMirrorShopDistributeWaitingSendPoints.Status.waiting) {
+                if (refundMoney.compareTo(money) == 0) {
+                    //待发送状态 全额退款
+                    distributeWaitingSendPoints.setSendStatus(UserMirrorShopDistributeWaitingSendPoints.Status.close);
+                    distributeWaitingSendPoints.setRefundMoney(take_money);
+                    distributeWaitingSendPoints.setMoney(BigDecimal.ZERO);
+                    userMirrorShopDistributeWaitingSendPointsMapper.updateById(distributeWaitingSendPoints);
+                    return;
+                }
+                Integer rate = distributeWaitingSendPoints.getRate();
+                if (rate > 0) {
+                    BigDecimal needDeductMoney = refundMoney.multiply(BigDecimal.valueOf(rate).divide(BigDecimal.valueOf(100)));
+                    distributeWaitingSendPoints.setRefundMoney(needDeductMoney);
+                    //剩余积分
+                    distributeWaitingSendPoints.setMoney(take_money.subtract(needDeductMoney));
+                    userMirrorShopDistributeWaitingSendPointsMapper.updateById(distributeWaitingSendPoints);
+                }
+            } else if (sendStatus == UserMirrorShopDistributeWaitingSendPoints.Status.success) {
+                //已发送的提成 部分退款 全额退款 需要扣除用户积分
+                //扣除固定推广者积分
+                if (refundMoney.compareTo(money) == 0) {
+                    //扣除店铺主 已有的提成金额
+                    userBenefitsService.deductUserMirrorShopTakeMoney(orderDon.getId(), distributeWaitingSendPoints.getShopUserId(), take_money);
+                    distributeWaitingSendPoints.setRefundMoney(take_money);
+                    distributeWaitingSendPoints.setMoney(BigDecimal.ZERO);
+                    distributeWaitingSendPoints.setSendStatus(UserMirrorShopDistributeWaitingSendPoints.Status.close);
+                    userMirrorShopDistributeWaitingSendPointsMapper.updateById(distributeWaitingSendPoints);
+                    return;
+                }
+                Integer rate = distributeWaitingSendPoints.getRate();
+                if (rate > 0) {
+                    BigDecimal needDeductMoney = refundMoney.multiply(BigDecimal.valueOf(rate).divide(BigDecimal.valueOf(100)));
+                    //扣除店铺主 已有的提成金额
+                    userBenefitsService.deductUserMirrorShopTakeMoney(orderDon.getId(), distributeWaitingSendPoints.getShopUserId(), needDeductMoney);
+                    //部分退款
+                    distributeWaitingSendPoints.setRefundMoney(needDeductMoney);
+                    distributeWaitingSendPoints.setMoney(take_money.subtract(needDeductMoney));
+                    userMirrorShopDistributeWaitingSendPointsMapper.updateById(distributeWaitingSendPoints);
+                }
+
+            }
+        }
+    }
 }

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

@@ -57,6 +57,7 @@ import com.cyksj.mapper.manage.distribute.sub.UserDistributeSubRewardsMapper;
 import com.cyksj.mapper.manage.distribute.sub.UserDistributeSubWaitingMapper;
 import com.cyksj.mapper.market.task.TaskTypeMapper;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
+import com.cyksj.mapper.mirrorshop.UserMirrorShopDistributeWaitingSendPointsMapper;
 import com.cyksj.mapper.mirrorshop.UserMirrorShopMapper;
 import com.cyksj.mapper.mirrorshop.UserMirrorShopOrderRelateMapper;
 import com.cyksj.mapper.mirrorshop.UserMirrorShopUserDistributeSharedMapper;
@@ -340,6 +341,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final UserMirrorShopOrderRelateMapper userMirrorShopOrderRelateMapper;
 
+	private final UserMirrorShopDistributeWaitingSendPointsMapper userMirrorShopDistributeWaitingSendPointsMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -2698,6 +2701,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 				//HBO GO车队满员 车队自动下架
 				setTripDownIfFull(orderDon);
+				//用户镜像店铺分销订单
+				handleUserMirrorSHopOrderDon(orderDon);
 			} catch (Exception e) {
 				log.error("回调修改订单信息错误,orderId:{},error:{}", orderDon.getId(), StringUtil.getErrorText(e));
 			}
@@ -2753,6 +2758,34 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 	}
 
+	private void handleUserMirrorSHopOrderDon(OrderDon orderDon) {
+		Long orderId = orderDon.getId();
+		UserMirrorShopOrderRelate userMirrorShopOrderRelate = userMirrorShopOrderRelateMapper.selectOne(Wrappers.lambdaQuery(UserMirrorShopOrderRelate.class)
+				.eq(UserMirrorShopOrderRelate::getOrderId, orderId)
+				.last("limit 1"));
+		if (userMirrorShopOrderRelate != null) {
+			Long mpId = userMirrorShopOrderRelate.getMpId();
+			UserMirrorShop userMirrorShop = userMirrorShopMapper.selectById(mpId);
+			if (userMirrorShop == null) {
+				return;
+			}
+			log.info("用户镜像店铺:{}订单:{}分销,发放提成", userMirrorShop.getName(), orderId);
+			SysConfig config = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
+					.eq(SysConfig::getSysKey, Constant.MIRROR_SHOP_COMMISSION)
+					.last("limit 1"));
+			UserMirrorShopDistributeConfigDto shopDistributeConfigDto = Jsons.parseObject(config, UserMirrorShopDistributeConfigDto.class);
+			Integer consumeRate = shopDistributeConfigDto.getConsumeRate();
+
+			UserMirrorShopDistributeWaitingSendPoints waitingSendPoints = new UserMirrorShopDistributeWaitingSendPoints();
+			waitingSendPoints.setOrderId(orderId);
+			waitingSendPoints.setShopUserId(userMirrorShop.getUserId());
+			waitingSendPoints.setSendStatus(UserMirrorShopDistributeWaitingSendPoints.Status.waiting);
+			waitingSendPoints.setMoney(BigDecimal.valueOf(consumeRate).divide(BigDecimal.valueOf(100).multiply(orderDon.getMoney())));
+			waitingSendPoints.setRate(consumeRate);
+			userMirrorShopDistributeWaitingSendPointsMapper.insert(waitingSendPoints);
+		}
+	}
+
 	private void setTripDownIfFull(OrderDon orderDon) {
 		if (orderDon.getGoodsId() == 8l) {
 			Long relationId = orderDon.getRelationId();

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/user/UserBenefitsService.java

@@ -54,4 +54,6 @@ public interface UserBenefitsService {
 	 * 增加镜像加盟商提成金额
 	 */
 	void addMpMoney(Long userId, BigDecimal money);
+
+	void deductUserMirrorShopTakeMoney(Long orderId, Long shopUserId, BigDecimal deductMoney);
 }

+ 16 - 0
netflix-service/src/main/java/com/cyksj/service/user/impl/UserBenefitsServiceImpl.java

@@ -201,6 +201,22 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 		}
 	}
 
+	@Override
+	public void deductUserMirrorShopTakeMoney(Long orderId, Long shopUserId, BigDecimal deductMoney) {
+		if (deductMoney.compareTo(BigDecimal.ZERO) <= 0) {
+			return;
+		}
+		while (true) {
+			User user = userMapper.selectById(shopUserId);
+			if (user == null) break;
+			BigDecimal mpMoney = user.getMpMoney();
+			Integer success = userMapper.subUserMirrorShopMoney(shopUserId, mpMoney, deductMoney);
+			if (success == 1){
+				break;
+			}
+		}
+	}
+
 	private void deductYhsMoneyRecord(Long orderId, Long shopUserId, BigDecimal deductMoney) {
 		try {
 			YhShopDistributeOrdersDeductPointsRecord record = new YhShopDistributeOrdersDeductPointsRecord();