Răsfoiți Sursa

合伙人升级bug修改

xuqiang 1 an în urmă
părinte
comite
360f2b599e

+ 1 - 2
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -382,8 +382,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         details.setJqpremium(insAreaCompany.getJqpremium());
         details.setSypremium(insAreaCompany.getSypremium());
         details.setJypremium(insAreaCompany.getJypremium());
-        String subordinate = CalculateCommissionUtils.querySuperiorAndSubordinate(userId,String.valueOf(partnerUser.getGrade()));
-        BigDecimal bigDecimal = CalculateCommissionUtils.calculateCommission(String.valueOf(partnerUser.getGrade()), partnerUser.getUserId(), subordinate);
+        BigDecimal bigDecimal = CalculateCommissionUtils.calculateCommission(String.valueOf(partnerUser.getGrade()), partnerUser.getUserId(), userId);
         details.setProportional(String.valueOf(bigDecimal));
         details.setExtractFee(details.getSumpremium().multiply(bigDecimal.divide(new BigDecimal("100"))).setScale(2, RoundingMode.DOWN));
         details.setStatus(0);

+ 85 - 1
src/main/java/com/ydtech/modules/partner/CalculateCommissionUtils.java

@@ -59,7 +59,43 @@ public class CalculateCommissionUtils {
 
     private static CommissionValues calculateCommonValues(String grade, String userId, PartnerCommissionRules rules,String levelUserId,String type) {
         CommissionValidityPeriod period = getCommissionValidityPeriod(rules, userId, grade);
-        Set<String> userIdList = Collections.emptySet();;
+        Set<String> userIdList = Collections.emptySet();
+        String superiorID = "";
+        if (StringUtils.equals("gzs", type)){
+            superiorID = superiorsByIssuing(levelUserId,null,4);
+            userIdList = partnerUserMapper.querySubordinateUserId(superiorID);
+        }else if (StringUtils.equals("hh", type)){
+            superiorID = superiorsByIssuing(levelUserId,null,3);
+            userIdList = partnerUserMapper.querySubordinate(superiorID);
+        }
+        BigDecimal sumPremium = BigDecimal.ZERO;
+        if (CollectionUtil.isNotEmpty(userIdList)) {
+            QueryWrapper<PartnerPremiumDetails> queryWrapper = new QueryWrapper<>();
+            queryWrapper.in("user_id", userIdList);
+            if (StringUtils.isNotEmpty(period.getStartDate()) && StringUtils.isNotEmpty(period.getEndDate())) {
+                queryWrapper.between("create_time", period.getStartDate(), period.getEndDate());
+            }
+            BigDecimal totalSumPremium = partnerPremiumDetailsMapper.selectTotalSumPremium(queryWrapper);
+            sumPremium = Optional.ofNullable(totalSumPremium).orElse(BigDecimal.ZERO);
+        }
+        Integer number = 0;
+
+        if (StringUtils.equals("gzs", type)){
+            number = partnerUserMapper.selectNumber(superiorID, "5", period);
+        }else if (StringUtils.equals("hh", type)){
+            number = partnerUserMapper.selectNumber(superiorID, "4", period);
+        }
+        if (log.isInfoEnabled()) {
+            log.info("用户id{}++{}级用户++出单人的上级用户{}++统计的保单金额{}++统计的邀请人数{}",
+                    userId, grade, superiorID, sumPremium, number);
+        }
+        return new CommissionValues(sumPremium, new BigDecimal(number));
+    }
+
+
+    private static CommissionValues calculateCommonValues2(String grade, String userId, PartnerCommissionRules rules,String levelUserId,String type) {
+        CommissionValidityPeriod period = getCommissionValidityPeriod(rules, userId, grade);
+        Set<String> userIdList = Collections.emptySet();
         if (StringUtils.equals("gzs", type)){
             userIdList = partnerUserMapper.querySubordinateUserId(levelUserId);
         }else if (StringUtils.equals("hh", type)){
@@ -89,6 +125,23 @@ public class CalculateCommissionUtils {
         return new CommissionValues(sumPremium, new BigDecimal(number));
     }
 
+    public static String superiorsByIssuing(String userId,Integer grade,Integer queryLevel) {
+        QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("user_id", userId);
+        if (grade != null){
+            grade --;
+            queryWrapper.eq("grade", grade);
+        }
+        PartnerUser user = partnerUserMapper.selectOne(queryWrapper);
+        if (user == null){
+            return null;
+        }
+        if (user.getGrade() == queryLevel){
+            return user.getUserId();
+        }else {
+            return superiorsByIssuing(user.getReferrerId(),user.getGrade(),queryLevel);
+        }
+    }
 
     public static String getReason(String grade, String userId,String levelUserId) {
         CommissionRulesVo rulesVo = commissionService.queryAll();
@@ -136,6 +189,22 @@ public class CalculateCommissionUtils {
     }
 
 
+    public static BigDecimal calculateCommission2(String grade, String userId,String levelUserId) {
+        CommissionRulesVo rulesVo = commissionService.queryAll();
+        if (rulesVo == null) return BigDecimal.ZERO;
+        BigDecimal gl = BigDecimal.ZERO;
+        if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
+            gl = ladderCommission2(grade,rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(), levelUserId,"hh");
+        }
+        BigDecimal hh = BigDecimal.ZERO;
+        if (StringUtils.equals("4", grade) || StringUtils.equals("3", grade)){
+            hh = ladderCommission2(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),levelUserId,"gzs");
+        }
+        log.info("用户id:{}++{}级用户++gl:{}++hh:{}", userId, grade,gl, hh);
+        return calculateProportion(grade,rulesVo,gl,hh);
+    }
+
+
     public static BigDecimal calculateProportion(String grade, CommissionRulesVo rulesVo,BigDecimal gl,BigDecimal hh) {
         if (StringUtils.equals("1", grade)) {
             return new BigDecimal(rulesVo.getOriginator());
@@ -193,6 +262,21 @@ public class CalculateCommissionUtils {
     }
 
 
+    public static BigDecimal ladderCommission2(String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,String levelUserId,String type) {
+        CommissionValues values = calculateCommonValues2(grade, userId, rules, levelUserId,type);
+        List<PartnerRulesRatio> sortedList = rulesRatioList.stream()
+                .sorted(Comparator.comparing(PartnerRulesRatio::getKickback).reversed())
+                .collect(Collectors.toList());
+        for (PartnerRulesRatio ratio : sortedList) {
+            BigDecimal result = handleRatioCondition(ratio, values.number, values.sumPremium);
+            if (result.compareTo(BigDecimal.ZERO) > 0) {
+                return result;
+            }
+        }
+        return BigDecimal.ZERO;
+    }
+
+
     private static BigDecimal handleRatioCondition(PartnerRulesRatio ratio, BigDecimal numberBD, BigDecimal sumPremium) {
         List<PartnerRatio> ratioList = ratio.getPartnerRatioList();
         if (CollectionUtil.isEmpty(ratioList)) return BigDecimal.ZERO;

+ 1 - 2
src/main/java/com/ydtech/modules/partner/KickbackChangeUtils.java

@@ -26,8 +26,7 @@ public class KickbackChangeUtils {
     public void updatePersonnel(List<PartnerPremiumDetails> list){
         List<PartnerKickbackChange> kickbackChange = new ArrayList<>();
         for (PartnerPremiumDetails details : list) {
-            String subordinate = CalculateCommissionUtils.querySuperiorAndSubordinate(details.getIssuerId(),String.valueOf(details.getSource()));
-            BigDecimal latest = CalculateCommissionUtils.calculateCommission(String.valueOf(details.getSource()),details.getUserId(),subordinate);
+            BigDecimal latest = CalculateCommissionUtils.calculateCommission(String.valueOf(details.getSource()),details.getUserId(),details.getIssuerId());
             BigDecimal mostRecent = kickbackChangeService.mostRecentRecord(details.getUserId(),String.valueOf(details.getSource()));
             BigDecimal bigDecimal = mostRecent == null ? new BigDecimal(details.getProportional()) : mostRecent;
             getPartnerKickbackChange(latest, bigDecimal, details, kickbackChange);

+ 3 - 3
src/main/java/com/ydtech/modules/partner/UpdateRatioUtils.java

@@ -39,7 +39,7 @@ public class UpdateRatioUtils {
         allByUserId.forEach((key, value) -> {
             String grade = String.valueOf(key);
             String string = getString(allByUserId, grade);
-            BigDecimal latest = CalculateCommissionUtils.calculateCommission(grade, value.getUserId(),string);
+            BigDecimal latest = CalculateCommissionUtils.calculateCommission2(grade, value.getUserId(),string);
             initializeCommissionRatio(value, latest);
         });
     }
@@ -103,7 +103,7 @@ public class UpdateRatioUtils {
             String key = String.valueOf(entry.getKey());
             PartnerUser value = entry.getValue();
             String string = getString(map, key);
-            BigDecimal latest = CalculateCommissionUtils.calculateCommission(String.valueOf(key), value.getUserId(), string);
+            BigDecimal latest = CalculateCommissionUtils.calculateCommission2(String.valueOf(key), value.getUserId(), string);
             BigDecimal mostRecent = SpringUtil.getBean(PartnerKickbackChangeService.class).mostRecentRecord(value.getUserId(),key);
             getPartnerKickbackChange(latest, mostRecent, value, kickbackChange,map);
         }
@@ -138,7 +138,7 @@ public class UpdateRatioUtils {
         for (Map.Entry<Integer, PartnerUser> entry : map.entrySet()) {
             String key = String.valueOf(entry.getKey());
             PartnerUser value = entry.getValue();
-            BigDecimal latest = CalculateCommissionUtils.calculateCommission(key,value.getUserId(),null);
+            BigDecimal latest = CalculateCommissionUtils.calculateCommission2(key,value.getUserId(),null);
             initializeCommissionRatio(value, latest);
         }
     }

+ 2 - 6
src/main/java/com/ydtech/modules/partner/dao/PartnerPremiumDetailsMapper.java

@@ -1,16 +1,12 @@
 package com.ydtech.modules.partner.dao;
 
 
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.modules.partner.model.PartnerPremiumDetails;
 import org.apache.ibatis.annotations.*;
-import org.apache.ibatis.type.JdbcType;
-
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
@@ -23,7 +19,7 @@ public interface PartnerPremiumDetailsMapper extends BaseMapper<PartnerPremiumDe
     List<Map<String,Object>> selectTotalSumPremiumGroupBy(@Param("ew") QueryWrapper<PartnerPremiumDetails> queryWrapper);
 
 
-    @Select("SELECT SUM(DISTINCT sumpremium) FROM partner_premium_details ${ew.customSqlSegment} ")
+    @Select("SELECT SUM(sumpremium) FROM partner_premium_details ${ew.customSqlSegment} ")
     BigDecimal selectTotalSumPremium(@Param("ew") QueryWrapper<PartnerPremiumDetails> queryWrapper);
 
     @Select("SELECT " +
@@ -46,7 +42,7 @@ public interface PartnerPremiumDetailsMapper extends BaseMapper<PartnerPremiumDe
             " LEFT JOIN sys_user u ON u.id = d.user_id  ${ew.customSqlSegment}")
     Page<PartnerPremiumDetails> queryPage(@Param("page") Page page, @Param("ew") Wrapper<PartnerPremiumDetails> queryWrapper);
 
-    @Select("SELECT user_id AS userId,SUM(DISTINCT sumpremium) AS premium,SUM(extract_fee) AS commission FROM partner_premium_details ${ew.customSqlSegment} ")
+    @Select("SELECT user_id AS userId,SUM( sumpremium) AS premium,SUM(extract_fee) AS commission FROM partner_premium_details ${ew.customSqlSegment} ")
     List<Map<String,Object>> selectCombinedStatistics(@Param("ew")QueryWrapper<PartnerPremiumDetails> wrapper);
 
 

+ 1 - 0
src/main/java/com/ydtech/modules/partner/dao/PartnerUserMapper.java

@@ -148,4 +148,5 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
 
     @Select(" SELECT p.id,p.user_id,p.grade,p.name,p.create_time FROM partner_user p LEFT JOIN sys_user u ON u.id = p .user_id ${ew.customSqlSegment}")
     List<PartnerUser> selectListVo(@Param("ew") QueryWrapper<PartnerUser> queryWrapper);
+
 }

+ 2 - 2
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerUserServiceImpl.java

@@ -960,7 +960,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         }
         BigDecimal totalAmountSafe = BigDecimal.ZERO;
         for (PartnerUser partnerUser : partnerUsers) {
-            BigDecimal bigDecimal = CalculateCommissionUtils.calculateCommission(String.valueOf(partnerUser.getGrade()),partnerUser.getUserId(),"");
+            BigDecimal bigDecimal = CalculateCommissionUtils.calculateCommission2(String.valueOf(partnerUser.getGrade()),partnerUser.getUserId(),"");
             totalAmountSafe = totalAmountSafe.add(bigDecimal);
         }
         JSONObject jsonObject = new JSONObject();
@@ -973,7 +973,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
             JSONObject object = new JSONObject();
             object.put("grade",user.getGrade());
             object.put("gradeName",rule.getOrDefault(user.getGrade(),""));
-            object.put("commissionRate",CalculateCommissionUtils.calculateCommission(String.valueOf(user.getGrade()),user.getUserId(),""));
+            object.put("commissionRate",CalculateCommissionUtils.calculateCommission2(String.valueOf(user.getGrade()),user.getUserId(),""));
             list.add(object);
         }
         jsonObject.put("data",list);

+ 1 - 1
src/main/resources/mapper/modules/partner/PartnerUserMapper.xml

@@ -1053,7 +1053,7 @@ select grade,grade_name from  partner_rule
                 grade,
                 CAST(user_id AS CHAR(200)) AS path
             FROM partner_user
-            WHERE referrer_id IN(SELECT user_id FROM partner_user WHERE user_id = #{levelUserId} AND grade = '4') AND grade = '5'
+            WHERE referrer_id IN(SELECT user_id FROM partner_user WHERE referrer_id = #{levelUserId} AND grade = '4') AND grade = '5'
             UNION ALL
             SELECT
                 t.user_id,