Explorar el Código

修改碰撞表

Harper hace 10 meses
padre
commit
98310bb149

+ 1 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharepath/vo/TreeNode.java

@@ -20,6 +20,7 @@ public class TreeNode {
     private Integer value; // 节点值,某些节点可能没有值
     private Long parentId; // 父亲Id
     private Boolean hasSon;
+    private Integer sort;
     private List<TreeNode> children; // 子节点列表
 
     public Boolean getHasSon() {

+ 1 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcService.java

@@ -61,6 +61,6 @@ public interface OrderCalcService {
     void calc(List<DistriOrderMessage> tradeOrderDO);
 
 
-    List<OrderCalcDO> queryTodayCalcByUserIds(LocalDateTime todayStart, LocalDateTime todayEnd);
+    List<OrderCalcDO> queryTodayCalcByUserIds(LocalDateTime todayStart, LocalDateTime todayEnd,List<Long> userList);
 
 }

+ 11 - 9
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java

@@ -149,8 +149,10 @@ public class OrderCalcServiceImpl implements OrderCalcService {
     }
 
     @Override
-    public List<OrderCalcDO> queryTodayCalcByUserIds(LocalDateTime todayStart, LocalDateTime todayEnd) {
-        return orderCalcMapper.selectList(new LambdaQueryWrapperX<OrderCalcDO>().betweenIfPresent(OrderCalcDO::getCreateTime, todayStart, todayEnd));
+    public List<OrderCalcDO> queryTodayCalcByUserIds(LocalDateTime todayStart, LocalDateTime todayEnd, List<Long> userList) {
+        return orderCalcMapper.selectList(new LambdaQueryWrapperX<OrderCalcDO>()
+                .betweenIfPresent(OrderCalcDO::getCreateTime, todayStart, todayEnd)
+                .in(OrderCalcDO::getUserId, userList));
     }
 
     private void calc(List<DistriOrderMessage> tradeOrderDO, OrderPercentageDO orderPercentageDO, String percentTemplate) {
@@ -217,13 +219,13 @@ public class OrderCalcServiceImpl implements OrderCalcService {
             BigDecimal highQuota = grossProfit.multiply(new BigDecimal("3")).setScale(4, RoundingMode.DOWN);
 
             // 乘以 10000 并转换为整数
-            Long grossProfitInt = (long) grossProfit.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).intValueExact();
-            Long ancestorQuotaInt = (long) ancestorQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).intValueExact();
-            Long descendantQuotaInt = (long) descendantQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).intValueExact();
-            Long bonusQuotaInt = (long) bonusQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).intValueExact();
-            Long highQuotaInt = (long) highQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).intValueExact();
-            Long grossProfitAfterBonusInt = (long) grossProfitAfterBonus.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).intValueExact();
-            Long platformQuotaInt = (long) platformQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).intValueExact();
+            Long grossProfitInt = grossProfit.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
+            Long ancestorQuotaInt = ancestorQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
+            Long descendantQuotaInt = descendantQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
+            Long bonusQuotaInt = bonusQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
+            Long highQuotaInt = highQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
+            Long grossProfitAfterBonusInt = grossProfitAfterBonus.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
+            Long platformQuotaInt = platformQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
 
 
             // 获取当前下单人关系

+ 55 - 3
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathServiceImpl.java

@@ -230,6 +230,7 @@ public class SharePathServiceImpl implements SharePathService {
                 .deep(k.getDepth())
                 .parentId(k.getAncestor())
                 .userId(k.getDescendant())
+                .sort(k.getSort())
                 .nickname(k.getDescNickName()).build()).collect(Collectors.toList());
     }
 
@@ -271,7 +272,10 @@ public class SharePathServiceImpl implements SharePathService {
 
     @Override
     public List<OrderCalcDO> selectSons(Long userId, List<Long> userIds) {
-        List<Long> allDescendants = sharePathMapper.findAllDescendants(userId);
+        List<SharePathDO> sharePathDOS = sharePathMapper.selectList(new LambdaQueryWrapperX<SharePathDO>()
+                .eq(SharePathDO::getAncestor, userId));
+        List<Long> allDescendants = sharePathDOS.stream().map(SharePathDO::getDescendant).collect(Collectors.toList());
+//        List<Long> allDescendants = sharePathMapper.findAllDescendants(userId);
         if (allDescendants.isEmpty()) {
             return Collections.emptyList();
         }
@@ -292,14 +296,28 @@ public class SharePathServiceImpl implements SharePathService {
         LocalDateTime todayStart = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT); // 今天的开始时间,即午夜12点
         LocalDateTime todayEnd = todayStart.plusDays(1);
 
-        return orderCalcService.queryTodayCalcByUserIds(todayStart, todayEnd);
+        return orderCalcService.queryTodayCalcByUserIds(todayStart, todayEnd, unionList);
 
     }
 
     @Override
     public List<OrderCalcDO> selectBrothers(Long userId, List<Long> userIds) {
+        List<Long> sortedSiblings = new ArrayList<>();
+        // 先查询出他的父亲
+        SharePathDO sharePathDO = sharePathMapper.selectOne(new LambdaQueryWrapperX<SharePathDO>().eq(SharePathDO::getDepth, 1).eq(SharePathDO::getDescendant, userId));
+        if (sharePathDO == null) {
+            sortedSiblings = sharePathMapper.findLessSortedSiblings(userId);
+        } else {
+            // 再根据父亲查询他的所有儿子
+            List<SharePathDO> sharePathDOS = sharePathMapper.selectList(new LambdaQueryWrapperX<SharePathDO>()
+                    .eq(SharePathDO::getDepth, 1)
+                    .eq(SharePathDO::getAncestor, sharePathDO.getAncestor()));
+            //最后再进行排序
+            sortedSiblings = filterByDescendant(sharePathDOS, userId);
+            // 查询兄弟的所有儿子
+            sortedSiblings.addAll(findSons(sortedSiblings));
+        }
 
-        List<Long> sortedSiblings = sharePathMapper.findLessSortedSiblings(userId);
         if (sortedSiblings.isEmpty()) {
             return Collections.emptyList();
         }
@@ -312,6 +330,40 @@ public class SharePathServiceImpl implements SharePathService {
         return calcQuota(unionList);
     }
 
+    private List<Long> findSons(List<Long> sortedSiblings) {
+        List<Long> longs = new ArrayList<>();
+        for (Long sortedSibling : sortedSiblings) {
+            List<SharePathDO> sharePathDOS = sharePathMapper.selectList(new LambdaQueryWrapperX<SharePathDO>()
+                    .eq(SharePathDO::getAncestor, sortedSibling));
+            if (sharePathDOS.isEmpty()) {
+                continue;
+            }
+            List<Long> collect = sharePathDOS.stream().map(SharePathDO::getDescendant).collect(Collectors.toList());
+            longs.addAll(collect);
+        }
+        return longs.stream().distinct().collect(Collectors.toList());
+    }
+
+
+    public List<Long> filterByDescendant(List<SharePathDO> sharePaths, Long descendantId) {
+        // 首先,找到特定 descendantId 的 sort 值
+        SharePathDO reference = sharePaths.stream()
+                .filter(sharePath -> sharePath.getDescendant().equals(descendantId))
+                .findFirst()
+                .orElse(null);
+
+        if (reference == null) {
+            throw new IllegalArgumentException("Descendant with ID " + descendantId + " not found");
+        }
+
+        // 过滤出所有 sort 值大于找到的 sort 值的记录
+        return sharePaths.stream()
+                .filter(sharePath -> sharePath.getSort() > reference.getSort())
+                .map(SharePathDO::getDescendant)
+                .collect(Collectors.toList());
+    }
+
+
     @Override
     public Long queryParentBySonUserId(Long userId) {
 

+ 0 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/sharepath/SharePathMapper.xml

@@ -94,7 +94,6 @@
                  JOIN distri_share_path b ON a.ancestor = b.ancestor
         WHERE b.descendant = #{descendantId}
           AND a.sort &gt; b.sort
-          AND b.depth = 1
     </select>