Просмотр исходного кода

Merge branch 'sub_func' into dev

zoujiajian 2 лет назад
Родитель
Сommit
315d6d1d6e

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

@@ -853,34 +853,41 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             }
             //是否是分销订单
             //处理下级渠道分销提成
-            if (orderDon.getIsFixedDistribute()) {
-                UserDistributeSub subRelate = userDistributeSubMapper.getSubRelate(orderDon.getUserId());
-                if (subRelate != null) {
-                    List<UserDistributeSubWaiting> subWaitings = subWaitingMapper.selectList(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
-                            .eq(UserDistributeSubWaiting::getSubUserId, subRelate.getSubUserId())
-                            .eq(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.waiting));
-                    if (CollUtil.isNotEmpty(subWaitings)) {
-                        List<UserDistributeSubRewards> userDistributeSubRewards = userDistributeSubRewardsMapper.selectList(null);
-                        Map<Integer, List<UserDistributeSubRewards>> rewardLevelMap = userDistributeSubRewards.stream().collect(Collectors.groupingBy(UserDistributeSubRewards::getLevel));
-                        subWaitings.forEach(wait -> {
-                            List<UserDistributeSubRewards> thisLevelList = rewardLevelMap.get(wait.getLevel());
-                            if (thisLevelList == null) {
-                                return;
-                            }
-                            UserDistributeSubRewards thisLevel = thisLevelList.get(0);
-                            Integer months = thisLevel.getMonths();
-                            BigDecimal subOrderMoney = orderDonMapper.selectSubChannelOrderMoney(wait.getSubUserId(), subRelate.getCreatedTime(), DateUtil.offsetMonth(subRelate.getCreatedTime(), months));
-                            if (subOrderMoney.compareTo(thisLevel.getTargetAmount()) < 0) {
-                                subWaitingMapper.update(null, Wrappers.lambdaUpdate(UserDistributeSubWaiting.class)
-                                        .set(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.close)
-                                        .eq(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.waiting)
-                                        .eq(UserDistributeSubWaiting::getId, wait.getId()));
-                            }
-                        });
-                    }
+            handleSubRewards(orderDon);
+        });
+    }
+
+    //处理下级渠道分销提成
+    public void handleSubRewards(OrderDon orderDon) {
+        //是否是分销订单
+        //处理下级渠道分销提成
+        if (orderDon.getIsDistribute()) {
+            UserDistributeSub subRelate = userDistributeSubMapper.getSubRelate(orderDon.getUserId());
+            if (subRelate != null) {
+                List<UserDistributeSubWaiting> subWaitings = subWaitingMapper.selectList(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
+                        .eq(UserDistributeSubWaiting::getSubUserId, subRelate.getSubUserId())
+                        .eq(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.waiting));
+                if (CollUtil.isNotEmpty(subWaitings)) {
+                    List<UserDistributeSubRewards> userDistributeSubRewards = userDistributeSubRewardsMapper.selectList(null);
+                    Map<Integer, List<UserDistributeSubRewards>> rewardLevelMap = userDistributeSubRewards.stream().collect(Collectors.groupingBy(UserDistributeSubRewards::getLevel));
+                    subWaitings.forEach(wait -> {
+                        List<UserDistributeSubRewards> thisLevelList = rewardLevelMap.get(wait.getLevel());
+                        if (thisLevelList == null) {
+                            return;
+                        }
+                        UserDistributeSubRewards thisLevel = thisLevelList.get(0);
+                        Integer months = thisLevel.getMonths();
+                        BigDecimal subOrderMoney = orderDonMapper.selectSubChannelOrderMoney(wait.getSubUserId(), subRelate.getCreatedTime(), DateUtil.offsetMonth(subRelate.getCreatedTime(), months));
+                        if (subOrderMoney.compareTo(thisLevel.getTargetAmount()) < 0) {
+                            subWaitingMapper.update(null, Wrappers.lambdaUpdate(UserDistributeSubWaiting.class)
+                                    .set(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.close)
+                                    .eq(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.waiting)
+                                    .eq(UserDistributeSubWaiting::getId, wait.getId()));
+                        }
+                    });
                 }
             }
-        });
+        }
     }
 
     /**

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

@@ -19,7 +19,6 @@ import com.alipay.api.request.AlipayTradeQueryRequest;
 import com.alipay.api.response.AlipayFundTransCommonQueryResponse;
 import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse;
 import com.alipay.api.response.AlipayTradeQueryResponse;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.common.EnvCommonService;
@@ -109,6 +108,7 @@ import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
 
 /**
  * @author chan
@@ -2929,16 +2929,13 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				//下级渠道用户id
 				Long subUserId = userDistributeSub.getSubUserId();
 
-				UserDistributeSubWaiting userDistributeSubWaiting = userDistributeSubWaitingMapper.selectOne(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
+				List<Integer> existLevels = userDistributeSubWaitingMapper.selectList(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
 						.eq(UserDistributeSubWaiting::getUserId, userId)
-						.orderByDesc(UserDistributeSubWaiting::getLevel).last("limit 1"));
-				//小于最大奖励级别
-				if (userDistributeSubWaiting == null || userDistributeSubWaiting.getLevel() < UserDistributeSubRewards.RewardLevel.values().length) {
-					LambdaQueryWrapper<UserDistributeSubRewards> wrapper = Wrappers.lambdaQuery(UserDistributeSubRewards.class);
-					if (userDistributeSubWaiting != null) {
-						wrapper.gt(UserDistributeSubRewards::getLevel, userDistributeSubWaiting.getLevel());
-					}
-					List<UserDistributeSubRewards> userDistributeSubRewards = userDistributeSubRewardsMapper.selectList(wrapper.orderByAsc(UserDistributeSubRewards::getLevel));
+						.eq(UserDistributeSubWaiting::getSubUserId, subUserId)
+						.in(UserDistributeSubWaiting::getSendStatus, List.of(UserDistributeSubWaiting.Status.waiting, UserDistributeSubWaiting.Status.success))
+						.select(UserDistributeSubWaiting::getLevel).last("limit 1")).stream().map(UserDistributeSubWaiting::getLevel).collect(Collectors.toList());
+				List<UserDistributeSubRewards> userDistributeSubRewards = userDistributeSubRewardsMapper.selectList(Wrappers.lambdaQuery(UserDistributeSubRewards.class)
+						.notIn(CollUtil.isNotEmpty(existLevels), UserDistributeSubRewards::getLevel, existLevels));
 					for (UserDistributeSubRewards userDistributeSubReward : userDistributeSubRewards) {
 						log.info("当前级别:{}对应的目标金额是{}", userDistributeSubReward.getLevel(), userDistributeSubReward.getTargetAmount().divide(BigDecimal.valueOf(100)));
 						Integer rewardLevel = userDistributeSubReward.getLevel();
@@ -2950,7 +2947,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 							try {
 								UserDistributeSubWaiting waiting = Optional.ofNullable(userDistributeSubWaitingMapper.selectOne(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
 										.eq(UserDistributeSubWaiting::getUserId, userId)
-										.eq(UserDistributeSubWaiting::getSubUserId, subUserId).last("limit 1"))).orElse(new UserDistributeSubWaiting());
+										.eq(UserDistributeSubWaiting::getSubUserId, subUserId)
+										.eq(UserDistributeSubWaiting::getLevel, rewardLevel)
+										.last("limit 1"))).orElse(new UserDistributeSubWaiting());
 								if (waiting.getId() != null) {
 									if (waiting.getSendStatus() == UserDistributeSubWaiting.Status.close) {
 										userDistributeSubWaitingMapper.update(null, Wrappers.lambdaUpdate(UserDistributeSubWaiting.class)
@@ -2972,7 +2971,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 							}
 						}
 					}
-				}
 			}
 
 		}