Jelajahi Sumber

下级渠道功能

zoujiajian 2 tahun lalu
induk
melakukan
5382650a1a
20 mengubah file dengan 494 tambahan dan 9 penghapusan
  1. 2 0
      netflix-dao/src/main/java/com/cyksj/mapper/OrderDonMapper.java
  2. 6 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributeMoneyApplyMapper.java
  3. 14 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/sub/UserDistributeSubMapper.java
  4. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/sub/UserDistributeSubRewardsMapper.java
  5. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/sub/UserDistributeSubWaitingMapper.java
  6. 24 0
      netflix-dao/src/main/java/com/cyksj/model/entity/DistributeMoneyApply.java
  7. 5 0
      netflix-dao/src/main/java/com/cyksj/model/entity/User.java
  8. 23 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeSub.java
  9. 55 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeSubRewards.java
  10. 68 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeSubWaiting.java
  11. 5 0
      netflix-dao/src/main/java/com/cyksj/model/request/UserDistributeReq.java
  12. 30 0
      netflix-dao/src/main/java/com/cyksj/model/views/CpsDistributeSubView.java
  13. 42 0
      netflix-dao/src/main/java/com/cyksj/model/views/UserDistributeSubDetailView.java
  14. 26 0
      netflix-dao/src/main/java/com/cyksj/model/views/UserSubApplyMoneyDetailView.java
  15. 10 0
      netflix-dao/src/main/resources/mapper/OrderDonMapper.xml
  16. 14 0
      netflix-dao/src/main/resources/mapper/UserDistributeSubMapper.xml
  17. 36 9
      netflix-service/src/main/java/com/cyksj/service/distribute/impl/DistributeServiceImpl.java
  18. 61 0
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
  19. 35 0
      netflix-web/src/main/java/com/cyksj/web/controller/cps/CpsDistribtueDataController.java
  20. 12 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/distribute/DistributeController.java

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/mapper/OrderDonMapper.java

@@ -72,4 +72,6 @@ public interface OrderDonMapper extends BaseMapper<OrderDon> {
 	Page<CorpTagUserOrderDataView> getTagUserTimeOrderData(@Param("page") Page<Object> objectPage, @Param("tagIdStr") String tagIdStr, @Param("toDate") String toDate, @Param("startTime") String startTime, @Param("endTime") String endTime);
 
 	List<RealGoodsSourceData> getRealGoodsSourceData(@Param("isGeneral") Boolean isGeneral, @Param("startDate") String startDate, @Param("endDate") String endDate);
+
+	BigDecimal selectSubChannelOrderMoney(@Param("sharedId") Long sharedId, @Param("limitTime") Date limitTime);
 }

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributeMoneyApplyMapper.java

@@ -2,6 +2,9 @@ package com.cyksj.mapper.manage.distribute;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.cyksj.model.entity.DistributeMoneyApply;
+import org.apache.ibatis.annotations.Select;
+
+import java.math.BigDecimal;
 
 /*
  *项目名: netflix
@@ -10,4 +13,7 @@ import com.cyksj.model.entity.DistributeMoneyApply;
  *创建时间:2022/11/14 14:00
  */
 public interface DistributeMoneyApplyMapper extends BaseMapper<DistributeMoneyApply> {
+
+	@Select("select sum(money) from distribute_money_apply where user_id = #{cpsUserId} and verify_status = 'success' and m_type = 'sub'")
+	BigDecimal getSubGotAppyMoney(long cpsUserId);
 }

+ 14 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/sub/UserDistributeSubMapper.java

@@ -0,0 +1,14 @@
+package com.cyksj.mapper.manage.distribute.sub;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserDistributeSub;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeSubMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/3/28 17:45
+ */
+public interface UserDistributeSubMapper extends BaseMapper<UserDistributeSub> {
+	UserDistributeSub getSubRelate(Long userId);
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/sub/UserDistributeSubRewardsMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute.sub;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserDistributeSubRewards;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeSubRewardsMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/3/28 18:06
+ */
+public interface UserDistributeSubRewardsMapper extends BaseMapper<UserDistributeSubRewards> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/sub/UserDistributeSubWaitingMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute.sub;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserDistributeSubWaiting;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeSubWaitingMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/3/28 18:06
+ */
+public interface UserDistributeSubWaitingMapper extends BaseMapper<UserDistributeSubWaiting> {
+}

+ 24 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/DistributeMoneyApply.java

@@ -27,6 +27,11 @@ public class DistributeMoneyApply extends BaseEntity {
 
 	private Status verifyStatus;
 
+	/**
+	 * 功能类型
+	 */
+	private MType mType;
+
 	private Type type;
 
 	private String account;
@@ -88,4 +93,23 @@ public class DistributeMoneyApply extends BaseEntity {
 			return Arrays.stream(Status.values()).filter(st -> st.name().equals(status)).findFirst().orElse(null);
 		}
 	}
+
+	@Getter
+	public enum MType {
+		ds("用户分销"),
+		sub("下级渠道分销"),
+		;
+		String desc;
+
+		MType(String desc) {
+			this.desc = desc;
+		}
+
+		public MType getType(String value) {
+			if (StrUtil.isEmpty(value)) {
+				return null;
+			}
+			return Arrays.stream(MType.values()).filter(type -> type.name().equals(value)).findFirst().get();
+		}
+	}
 }

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/User.java

@@ -67,6 +67,11 @@ public class User extends BaseEntity implements Serializable{
      */
     private BigDecimal yhsMoney;
 
+    /**
+     * 用户下级渠道提成金额
+     */
+    private BigDecimal subApplyMoney;
+
     /**
      * 推广id
      */

+ 23 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeSub.java

@@ -0,0 +1,23 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeSub
+ * 创建者: JavaZou
+ * 创建时间:2024/3/28 17:36
+ */
+@Getter
+@Setter
+public class UserDistributeSub extends BaseEntity{
+	private Long distributeId;
+
+	private Long userId;
+
+	/**
+	 *下级渠道用户id
+	 */
+	private Long subUserId;
+}

+ 55 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeSubRewards.java

@@ -0,0 +1,55 @@
+package com.cyksj.model.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeSubRewards
+ * 创建者: JavaZou
+ * 创建时间:2024/3/28 17:46
+ */
+@Getter
+@Setter
+public class UserDistributeSubRewards extends BaseEntity{
+	private Integer level;
+
+	/**
+	 * 目标金额
+	 */
+	private BigDecimal targetAmount;
+
+	/**
+	 * 月时间限制
+	 */
+	private Integer months;
+
+	/**
+	 * 奖励金额
+	 */
+	private BigDecimal money;
+
+	/**
+	 * 流星级奖励:新渠道前三月累计销售额达到1,000元,您获得30元奖励。
+	 * 月球级奖励:当前三月销售额提升至5,000元,您将获得额外145元奖励,使总奖励达到175元。
+	 * 行星级奖励:当前三月销售额增至10,000元时,您再获得额外225元,总奖励累计为400元。
+	 * 恒星级奖励:当前三月销售额达到20,000元,您将获得额外500元,使总奖金达到900元。
+	 * 黑洞级奖励:当前三月销售额达到50,000元,您获得额外1,600元,总奖金累积为2,500元。
+	 * 银河级奖励:前6个月销售额达到100,000元,您将额外获得3,500元,总计奖金为6,000元。
+	 */
+	@Getter
+	@AllArgsConstructor
+	public enum RewardLevel {
+		meteor("流星级"),
+		moon("月球级"),
+		planet("行星级"),
+		stars("恒星级"),
+		blackHole("黑洞级"),
+		galaxy("银河级");
+		;
+		private String msg;
+	}
+}

+ 68 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeSubWaiting.java

@@ -0,0 +1,68 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeSubWaiting
+ * 创建者: JavaZou
+ * 创建时间:2024/3/28 18:02
+ */
+@Getter
+@Setter
+public class UserDistributeSubWaiting extends BaseEntity {
+	/**
+	 * 待发人
+	 */
+	private Long userId;
+
+	/**
+	 * 分销订单产生人
+	 */
+	private Long subUserId;
+
+	/**
+	 * 奖励金额
+	 */
+	private BigDecimal money;
+
+	/**
+	 * 发送状态
+	 */
+	private Status sendStatus;
+
+	private Integer level;
+
+	/**
+	 * 月份
+	 */
+	private Integer months;
+
+	/**
+	 * 锁标识
+	 */
+	private Integer version;
+
+	/**
+	 * 发送时间
+	 */
+	private Date sendTime;
+
+	@Getter
+	public enum Status {
+		close("目标额不达标"),
+		success("成功"),
+		waiting("待发"),
+		;
+		String desc;
+
+		Status(String desc) {
+			this.desc = desc;
+		}
+	}
+
+}

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/request/UserDistributeReq.java

@@ -58,4 +58,9 @@ public class UserDistributeReq {
 	 * 设备分销
 	 */
 	private UserDistributeEquipment epRate;
+
+	/**
+	 * 下级渠道
+	 */
+	private List<UserDistributeSub> userDistributeSubs;
 }

+ 30 - 0
netflix-dao/src/main/java/com/cyksj/model/views/CpsDistributeSubView.java

@@ -0,0 +1,30 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: CpsDistributeSubView
+ * 创建者: JavaZou
+ * 创建时间:2024/3/29 10:32
+ */
+@Getter
+@Setter
+@SearchBean(tables = "user_distribute_sub",
+		where = ":uid:")
+public class CpsDistributeSubView {
+	@DbField("sub_user_id")
+	private Long subUserId;
+
+	@DbIgnore
+	private UserDistributeSubDetailView detailView;
+
+	@DbField("created_time")
+	private Date invitedTime;
+}

+ 42 - 0
netflix-dao/src/main/java/com/cyksj/model/views/UserDistributeSubDetailView.java

@@ -0,0 +1,42 @@
+package com.cyksj.model.views;
+
+import com.cyksj.model.entity.UserDistributeSubRewards;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeSubDetailView
+ * 创建者: JavaZou
+ * 创建时间:2024/3/29 11:12
+ */
+@Getter
+@Setter
+@SearchBean(tables = "user_distribute_sub_waiting uw",
+		where = "uw.send_status in ('waiting','success') and sub_user_id = :sid:")
+public class UserDistributeSubDetailView {
+
+	@DbField("sum(money)")
+	private BigDecimal totalMoney = BigDecimal.ZERO;
+
+	@DbField("select level from user_distribute_sub_rewards ur where sub_user_id = :sid: and ur.level > max(uw.level) limit 1")
+	private Integer nextLevel;
+
+	@DbIgnore
+	private String nextLevelDesc;
+
+	public String getNextLevelDesc() {
+		if (nextLevel != null) {
+			this.nextLevelDesc = UserDistributeSubRewards.RewardLevel.values()[nextLevel].getMsg();
+		}
+		if (totalMoney.compareTo(BigDecimal.ZERO) == 0) {
+			return UserDistributeSubRewards.RewardLevel.meteor.getMsg();
+		}
+		return null;
+	}
+}

+ 26 - 0
netflix-dao/src/main/java/com/cyksj/model/views/UserSubApplyMoneyDetailView.java

@@ -0,0 +1,26 @@
+package com.cyksj.model.views;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserSubApplyMoneyDetailView
+ * 创建者: JavaZou
+ * 创建时间:2024/3/29 11:40
+ */
+@Getter
+@Setter
+public class UserSubApplyMoneyDetailView {
+	/**
+	 * 已提现金额
+	 */
+	private BigDecimal gotMoney;
+
+	/**
+	 * 可提现金额
+	 */
+	private BigDecimal canApplyMoney;
+}

+ 10 - 0
netflix-dao/src/main/resources/mapper/OrderDonMapper.xml

@@ -422,4 +422,14 @@
         and o.label_source != ''
         group by o.label_source
     </select>
+
+    <select id="selectSubChannelOrderMoney" resultType="java.math.BigDecimal">
+        select sum(o.money) - sum(ifnull(o.refund_money, 0))
+        from distribute_waiting_send_points dp
+                 inner join order_don o on o.id = dp.order_id
+        where dp.shared_id = #{sharedId}
+          and o.goods_id != 15
+            and o.status not in ('close', 'noPayment')
+        and o.created_time &lt; #{limitTime}
+    </select>
 </mapper>

+ 14 - 0
netflix-dao/src/main/resources/mapper/UserDistributeSubMapper.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.cyksj.mapper.manage.distribute.sub.UserDistributeSubMapper">
+
+
+    <select id="getSubRelate" resultType="com.cyksj.model.entity.UserDistributeSub">
+        select us.*
+        from (select shared_id
+              from user_distribute_shared
+              where user_id = #{userId} limit 1) s
+                 inner join user_distribute_sub us
+                            on s.shared_id = us.sub_user_id
+    </select>
+</mapper>

+ 36 - 9
netflix-service/src/main/java/com/cyksj/service/distribute/impl/DistributeServiceImpl.java

@@ -15,6 +15,7 @@ import com.cyksj.mapper.manage.coupon.CouponDistributePopularizeMapper;
 import com.cyksj.mapper.manage.coupon.CouponMapper;
 import com.cyksj.mapper.manage.distribute.*;
 import com.cyksj.mapper.manage.distribute.equipment.UserDistributeEquipmentMapper;
+import com.cyksj.mapper.manage.distribute.sub.UserDistributeSubMapper;
 import com.cyksj.mapper.market.task.TaskTypeMapper;
 import com.cyksj.mapper.shop.YhShopMapper;
 import com.cyksj.mapper.shop.YhShopUserPlatDistributeRateMapper;
@@ -78,6 +79,8 @@ public class DistributeServiceImpl implements DistributeService {
 
 	private final UserDistributeEquipmentMapper userDistributeEquipmentMapper;
 
+	private final UserDistributeSubMapper userDistributeSubMapper;
+
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
 	public void insertDistribute(UserDistributeReq userDistributeReq) {
@@ -147,15 +150,8 @@ public class DistributeServiceImpl implements DistributeService {
 				}
 			}
 		}
-		List<CouponDistributePopularize> couponRelates = userDistributeReq.getCouponRelates();
-		handlerDistributeCouponRelate(userDistribute.getId(), couponRelates);
-
-		//渠道目标额配置
-		List<UserDistributeTargetAlert> targets = userDistributeReq.getTargets();
-		handlerDistributeTargetAlert(userDistribute.getId(), targets);
-
-		//设备分销
-		handlerSpecialEquipmentRate(userDistributeReq.getEpRate(), userDistribute);
+		//渠道附加功能
+		handlerDistributeOtherFunc(userDistribute, userDistributeReq);
 	}
 
 	@Override
@@ -283,6 +279,13 @@ public class DistributeServiceImpl implements DistributeService {
 				}
 			}
 		}
+		handlerDistributeOtherFunc(userDistribute, userDistributeReq);
+	}
+
+	/**
+	 * 渠道附加功能
+	 */
+	public void handlerDistributeOtherFunc(UserDistribute userDistribute, UserDistributeReq userDistributeReq) {
 		//处理优惠券关联
 		handlerDistributeCouponRelate(userDistribute.getId(), userDistributeReq.getCouponRelates());
 
@@ -291,6 +294,9 @@ public class DistributeServiceImpl implements DistributeService {
 
 		//设备分销
 		handlerSpecialEquipmentRate(userDistributeReq.getEpRate(), userDistribute);
+
+		//下级渠道绑定
+		handlerDistributeSub(userDistributeReq.getUserDistributeSubs(), userDistribute);
 	}
 
 	@Override
@@ -535,4 +541,25 @@ public class DistributeServiceImpl implements DistributeService {
 					.eq(UserDistributeEquipment::getDistributeId, distributeId));
 		}
 	}
+
+	/**
+	 * 下级渠道
+	 */
+	private void handlerDistributeSub(List<UserDistributeSub> userDistributeSubs, UserDistribute userDistribute) {
+		if (CollUtil.isNotEmpty(userDistributeSubs)) {
+			Long distributeId = userDistribute.getId();
+			userDistributeSubs.forEach(sub -> {
+				sub.setDistributeId(distributeId);
+				sub.setUserId(userDistribute.getUserId());
+				if (sub.getId() == null) {
+					try {
+						userDistributeSubMapper.insert(sub);
+					} catch (DuplicateKeyException e) {
+					}
+				} else {
+					userDistributeSubMapper.updateById(sub);
+				}
+			});
+		}
+	}
 }

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

@@ -48,6 +48,9 @@ import com.cyksj.mapper.manage.coupon.CouponSkuMapper;
 import com.cyksj.mapper.manage.coupon.CouponUserMapper;
 import com.cyksj.mapper.manage.distribute.*;
 import com.cyksj.mapper.manage.distribute.equipment.UserDistributeEquipmentMapper;
+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.market.task.TaskTypeMapper;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
 import com.cyksj.mapper.shop.YhShopGoodsSkuMapper;
@@ -269,6 +272,12 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final UserCertRecordMapper userCertRecordMapper;
 
+	private final UserDistributeSubMapper userDistributeSubMapper;
+
+	private final UserDistributeSubRewardsMapper userDistributeSubRewardsMapper;
+
+	private final UserDistributeSubWaitingMapper userDistributeSubWaitingMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -2372,6 +2381,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 						}
 					}
 				}
+				//下级渠道目标额达标 提成金额发放
+				sendSubDistributeRewards(orderDon);
 			} catch (Exception e) {
 				log.error("回调修改订单信息错误,orderId:{},error:{}", orderDon.getId(), StringUtil.getErrorText(e));
 			}
@@ -2904,4 +2915,54 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		return takeMoney;
 	}
+
+	/**
+	 * 下级渠道奖励
+	 */
+	public void sendSubDistributeRewards(OrderDon orderDon) {
+		if (orderDon.getIsDistribute()) {
+			UserDistributeSub userDistributeSub = userDistributeSubMapper.getSubRelate(orderDon.getUserId());
+			if (userDistributeSub != null) {
+				//分销用户id
+				Long userId = userDistributeSub.getUserId();
+				//下级渠道用户id
+				Long subUserId = userDistributeSub.getSubUserId();
+
+				UserDistributeSubWaiting userDistributeSubWaiting = userDistributeSubWaitingMapper.selectOne(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
+						.eq(UserDistributeSubWaiting::getUserId, userId)
+						.orderByDesc(UserDistributeSubWaiting::getLevel).last("limit 1"));
+				//小于最大奖励级别
+				if (userDistributeSubWaiting == null || userDistributeSubWaiting.getLevel() < UserDistributeSubRewards.RewardLevel.values().length) {
+					List<UserDistributeSubRewards> userDistributeSubRewards = userDistributeSubRewardsMapper.selectList(Wrappers.lambdaQuery(UserDistributeSubRewards.class)
+							.gt(userDistributeSubWaiting != null, UserDistributeSubRewards::getLevel, userDistributeSubWaiting.getLevel())
+							.orderByAsc(UserDistributeSubRewards::getLevel));
+					for (UserDistributeSubRewards userDistributeSubReward : userDistributeSubRewards) {
+						log.info("当前级别:{}对应的目标金额是{}", userDistributeSubReward.getLevel(), userDistributeSubReward.getTargetAmount().divide(BigDecimal.valueOf(100)));
+						Integer rewardLevel = userDistributeSubReward.getLevel();
+						Integer months = userDistributeSubReward.getMonths();
+						BigDecimal targetAmount = userDistributeSubReward.getTargetAmount();
+						//是否达到目标额
+						BigDecimal subOrderMoney = orderDonMapper.selectSubChannelOrderMoney(subUserId, DateUtil.offsetMonth(userDistributeSub.getCreatedTime(), months));
+						if (subOrderMoney != null && subOrderMoney.compareTo(targetAmount) >= 0) {
+							try {
+								//达标 发放提成
+								UserDistributeSubWaiting newSubWaiting = new UserDistributeSubWaiting();
+								newSubWaiting.setMoney(userDistributeSubReward.getMoney());
+								newSubWaiting.setUserId(userId);
+								newSubWaiting.setSubUserId(subUserId);
+								newSubWaiting.setSendStatus(UserDistributeSubWaiting.Status.waiting);
+								newSubWaiting.setSendTime(DateUtil.offsetDay(DateTime.now(), 3));
+								newSubWaiting.setMonths(months);
+								newSubWaiting.setLevel(rewardLevel);
+								userDistributeSubWaitingMapper.insert(newSubWaiting);
+								log.info("分销用户:{}下级渠道:{}达到:{}销售额,发送奖励成功", userId, subUserId, UserDistributeSubRewards.RewardLevel.values()[rewardLevel].getMsg());
+							} catch (DuplicateKeyException e) {
+							}
+						}
+					}
+				}
+			}
+
+		}
+	}
 }

+ 35 - 0
netflix-web/src/main/java/com/cyksj/web/controller/cps/CpsDistribtueDataController.java

@@ -6,6 +6,8 @@ import cn.hutool.core.util.StrUtil;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GoodsDonMapper;
+import com.cyksj.mapper.UserMapper;
+import com.cyksj.mapper.manage.distribute.DistributeMoneyApplyMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
 import com.cyksj.model.entity.DistributeMoneyApply;
 import com.cyksj.model.entity.DistributeWaitingSendPoints;
@@ -53,6 +55,10 @@ public class CpsDistribtueDataController {
 
 	private final UserDistributeMapper userDistributeMapper;
 
+	private final UserMapper userMapper;
+
+	private final DistributeMoneyApplyMapper distributeMoneyApplyMapper;
+
 	/**
 	 * 个人分销平台数据详情
 	 */
@@ -205,4 +211,33 @@ public class CpsDistribtueDataController {
 		}
 		return GatewayResponse.SUCCESS.newBuilder().toResult(brokenLineObjView);
 	}
+
+	/**
+	 * 渠道关于下级渠道提现详情
+	 */
+	@GetMapping("/get/sub/applyMoney/detail")
+	public Result<UserSubApplyMoneyDetailView> getSubApplyMoneyDetail() {
+		long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
+		UserSubApplyMoneyDetailView userSubApplyMoneyDetailView = new UserSubApplyMoneyDetailView();
+		BigDecimal gotMoney = distributeMoneyApplyMapper.getSubGotAppyMoney(cpsUserId);
+		userSubApplyMoneyDetailView.setGotMoney(gotMoney);
+		User user = userMapper.selectById(cpsUserId);
+		userSubApplyMoneyDetailView.setCanApplyMoney(user.getSubApplyMoney());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(userSubApplyMoneyDetailView);
+	}
+
+	/**
+	 * 下级渠道数据
+	 */
+	@GetMapping("/get/sub")
+	public Result<SearchResult<CpsDistributeSubView>> getSubDistributeData() {
+		long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
+		MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+		builder.put("uid", String.format("user_id = %s", cpsUserId));
+		SearchResult<CpsDistributeSubView> search = beanSearcher.search(CpsDistributeSubView.class, builder.build());
+		search.getDataList().forEach(data -> {
+			data.setDetailView(beanSearcher.searchFirst(UserDistributeSubDetailView.class, MapUtils.builder().put("sid", data.getSubUserId()).build()));
+		});
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
 }

+ 12 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/distribute/DistributeController.java

@@ -205,6 +205,18 @@ public class DistributeController {
 		return GatewayResponse.SUCCESS.newBuilder().toResult(rateDetailView);
 	}
 
+	/**
+	 * 下级渠道
+	 */
+	@GetMapping("/get/sub/{distributeId}")
+	public Result<SearchResult<UserDistributeSub>> getSub(@PathVariable Long distributeId) {
+		SearchResult<UserDistributeSub> search = beanSearcher.search(UserDistributeSub.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(UserDistributeSub::getDistributeId, distributeId)
+				.orderBy(UserDistributeSub::getCreatedTime).desc()
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
 	/**
 	 * 固定渠道平台分销详情 趋势图
 	 */