Ver código fonte

fix 下级分销订单提成退款

zoujiajian 2 anos atrás
pai
commit
902413f5b6

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

@@ -37,11 +37,6 @@ public class UserDistributeSubWaiting extends BaseEntity {
 
 	private Integer level;
 
-	/**
-	 * 月份
-	 */
-	private Integer months;
-
 	/**
 	 * 锁标识
 	 */

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

@@ -32,6 +32,9 @@ import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeBusinessOrderDonRecordMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
 import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserDistributeTransportBenefitsMapper;
+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.shop.YhShopUserDistributeBusinessOrderDonRecordMapper;
 import com.cyksj.mapper.stock.GoodsSkuStockRelateMapper;
@@ -73,6 +76,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * @author chan
@@ -167,6 +171,12 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final ChatgptUserMapper chatgptUserMapper;
 
+    private final UserDistributeSubMapper userDistributeSubMapper;
+
+    private final UserDistributeSubWaitingMapper subWaitingMapper;
+
+    private final UserDistributeSubRewardsMapper userDistributeSubRewardsMapper;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -841,6 +851,35 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                 chatgptUserMapper.delete(Wrappers.lambdaQuery(ChatgptUser.class)
                         .eq(ChatgptUser::getRelationId, orderDon.getRelationId()));
             }
+            //是否是分销订单
+            //处理下级渠道分销提成
+            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()));
+                            }
+                        });
+                    }
+                }
+            }
         });
     }
 

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

@@ -2948,16 +2948,26 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 						BigDecimal subOrderMoney = orderDonMapper.selectSubChannelOrderMoney(subUserId, userDistributeSub.getCreatedTime(), 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);
+								UserDistributeSubWaiting waiting = Optional.ofNullable(userDistributeSubWaitingMapper.selectOne(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
+										.eq(UserDistributeSubWaiting::getUserId, userId)
+										.eq(UserDistributeSubWaiting::getSubUserId, subUserId).last("limit 1"))).orElse(new UserDistributeSubWaiting());
+								if (waiting.getId() != null) {
+									if (waiting.getSendStatus() == UserDistributeSubWaiting.Status.close) {
+										userDistributeSubWaitingMapper.update(null, Wrappers.lambdaUpdate(UserDistributeSubWaiting.class)
+												.set(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.waiting)
+												.eq(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.close)
+												.eq(UserDistributeSubWaiting::getId, waiting.getId()));
+									}
+								} else {
+									waiting.setMoney(userDistributeSubReward.getMoney());
+									waiting.setUserId(userId);
+									waiting.setSubUserId(subUserId);
+									waiting.setSendStatus(UserDistributeSubWaiting.Status.waiting);
+									waiting.setSendTime(DateUtil.offsetDay(DateTime.now(), 3));
+									waiting.setMonths(months);
+									waiting.setLevel(rewardLevel);
+									userDistributeSubWaitingMapper.insert(waiting);
+								}
 								log.info("分销用户:{}下级渠道:{}达到:{}销售额,发送奖励成功", userId, subUserId, UserDistributeSubRewards.RewardLevel.values()[rewardLevel].getMsg());
 							} catch (DuplicateKeyException e) {
 							}