瀏覽代碼

合伙人升级bug修改

xuqiang 1 年之前
父節點
當前提交
3ffdcd24e5

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

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

+ 93 - 122
src/main/java/com/ydtech/modules/partner/CalculateCommissionUtils.java

@@ -51,47 +51,97 @@ public class CalculateCommissionUtils {
     public void init() {
     }
 
+    private static class CommissionValues {
+        BigDecimal sumPremium;
+        BigDecimal number;
 
-    public static String getReason(String grade, String userId,String issuerId) {
+        CommissionValues(BigDecimal sumPremium, BigDecimal number) {
+            this.sumPremium = sumPremium;
+            this.number = number;
+        }
+    }
+
+    private static CommissionValues calculateCommonValues(String grade, String userId, PartnerCommissionRules rules,String levelUserId) {
+        CommissionValidityPeriod period = getCommissionValidityPeriod(rules, userId, grade);
+        Set<String> userIdList;
+        userIdList = CalculateCommissionUtils.getUserIdList(levelUserId);
+        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;
+        switch (grade) {
+            case "2":
+            case "3":
+                number = partnerUserMapper.selectNumber(levelUserId, "4", period);
+                break;
+            case "4":
+                number = partnerUserMapper.selectNumber(levelUserId, "5", period);
+                break;
+            default:
+                number = 0;
+        }
+        return new CommissionValues(sumPremium, new BigDecimal(number));
+    }
+
+
+    public static String getReason(String grade, String userId,String levelUserId) {
         CommissionRulesVo rulesVo = commissionService.queryAll();
         if (rulesVo == null) return null;
         if (StringUtils.equals("1", grade)){
             return null;
         }
-        QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("user_id", issuerId);
-        PartnerUser issuerUser = partnerUserMapper.selectOne(queryWrapper);
+        //String levelUserId = querySuperiorAndSubordinate(issuerId, grade, userId);
         if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
-            return   obtainReason(grade, rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(),issuerUser);
+            return   obtainReason(grade, rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(),levelUserId);
         }
         if (StringUtils.equals("4", grade)){
-           return obtainReason(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),issuerUser);
+           return obtainReason(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),levelUserId);
         }
         return null;
     }
 
 
+    public static String querySuperiorAndSubordinate(String issuerId,String grade){
+        String levelUserId = "";
+        QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("user_id", issuerId);
+        PartnerUser issuerUser = partnerUserMapper.selectOne(queryWrapper);
+        if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)) {
+            levelUserId = getLevelUserId(issuerUser.getUserId(), issuerUser.getGrade(), "3");
+        } else {
+            levelUserId = getLevelUserId(issuerUser.getUserId(), issuerUser.getGrade(), "4");
+        }
+        return levelUserId;
+    }
+
 
-    public static BigDecimal calculateCommission(String grade, String userId,String issuerId) {
+    public static BigDecimal calculateCommission(String grade, String userId,String levelUserId) {
         CommissionRulesVo rulesVo = commissionService.queryAll();
         if (rulesVo == null) return BigDecimal.ZERO;
         BigDecimal gl = BigDecimal.ZERO;
-
-        QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("user_id", issuerId);
-        PartnerUser issuerIdUser = partnerUserMapper.selectOne(queryWrapper);
-
-        if (StringUtils.equals("1", grade)) {
-            return new BigDecimal(rulesVo.getOriginator());
-        }
+        //String levelUserId = querySuperiorAndSubordinate(issuerId, grade, userId);
         if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
-            gl = ladderCommission(grade,rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(),issuerIdUser);
+            gl = ladderCommission(grade,rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(), levelUserId);
         }
         BigDecimal hh = BigDecimal.ZERO;
-        if (StringUtils.equals("4", grade)){
-            hh = ladderCommission(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),issuerIdUser);
+        if (StringUtils.equals("4", grade) || StringUtils.equals("3", grade)){
+            hh = ladderCommission(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),levelUserId);
         }
+        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());
+        }
         if (StringUtils.equals("2", grade)) {
             PartnerCommissionRules administrator = rulesVo.getAdministrator();
             if (isZero(gl)){
@@ -120,6 +170,8 @@ public class CalculateCommissionUtils {
         return BigDecimal.ZERO;
     }
 
+
+
     private static boolean isZero(BigDecimal value) {
         return value.compareTo(BigDecimal.ZERO) == 0;
     }
@@ -128,58 +180,17 @@ public class CalculateCommissionUtils {
         return new BigDecimal(a).subtract(new BigDecimal(b));
     }
 
-    public static BigDecimal ladderCommission(String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,PartnerUser issuerIdUser) {
-        CommissionValidityPeriod period = getCommissionValidityPeriod(rules, userId, grade);
+    public static BigDecimal ladderCommission(String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,String levelUserId) {
+        CommissionValues values = calculateCommonValues(grade, userId, rules, levelUserId);
         List<PartnerRulesRatio> sortedList = rulesRatioList.stream()
                 .sorted(Comparator.comparing(PartnerRulesRatio::getKickback).reversed())
                 .collect(Collectors.toList());
-        BigDecimal sumPremium = BigDecimal.ZERO;
-        Set<String> userIdList;
-//        if (StringUtils.equals("2",grade)){
-//            String gzsList = partnerUserMapper.getGzsList(issuerId);
-//            userIdList = getUserIdList(gzsList);
-//        }
-//        if (StringUtils.equals("3",grade)){
-//            String tdList = partnerUserMapper.getTdList(issuerId);
-//            userIdList = getUserIdList(tdList);
-//        }
-//        if (StringUtils.equals("4",grade)){
-//            String tdList = partnerUserMapper.getTdList(issuerId);
-//            userIdList = getUserIdList(tdList);
-//        }
-        String levelUserId;
-        if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
-            levelUserId = getLevelUserId(issuerIdUser.getUserId(), issuerIdUser.getGrade(), "3");
-        }else {
-            levelUserId = getLevelUserId(issuerIdUser.getUserId(), issuerIdUser.getGrade(), "4");
-        }
-        userIdList = CalculateCommissionUtils.getUserIdList(levelUserId);
-        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;
-        switch (grade) {
-            case "2":
-            case "3":
-                number = partnerUserMapper.selectNumber(levelUserId, "4", period);
-                break;
-            case "4":
-                number = partnerUserMapper.selectNumber(levelUserId, "5", period);
-                break;
-            default:
-                number = 0;
-        }
-        return obtainReason( sortedList, number,  sumPremium);
+        return obtainReason(sortedList, values.number, values.sumPremium);
     }
 
 
-    public static BigDecimal obtainReason(List<PartnerRulesRatio> sortedList,Integer number, BigDecimal sumPremium){
-        BigDecimal numberBD = BigDecimal.valueOf(number);
+
+    public static BigDecimal obtainReason(List<PartnerRulesRatio> sortedList,BigDecimal numberBD, BigDecimal sumPremium){
         for (PartnerRulesRatio ratio : sortedList) {
             int allSatisfied = ratio.getAllSatisfied();
             List<PartnerRatio> ratioList = ratio.getPartnerRatioList();
@@ -215,55 +226,13 @@ public class CalculateCommissionUtils {
         return BigDecimal.ZERO;
     }
 
-    public static String getLevelUserId(String userId,Integer grade,String queryLevel){
-        PartnerUser partnerUser = partnerUserMapper.getLevelUserId(userId,grade);
-        while (partnerUser != null){
-            Integer userGrade = partnerUser.getGrade();
-            if (StringUtils.equals(String.valueOf(userGrade),queryLevel)){
-                return partnerUser.getUserId();
-            }
-            userGrade --;
-            getLevelUserId(partnerUser.getReferrerId(),userGrade,queryLevel);
-        }
-        return null;
-    }
-
-
-    public static String obtainReason(String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,PartnerUser issuerUser) {
-        CommissionValidityPeriod period = getCommissionValidityPeriod(rules, userId, grade);
+    public static String obtainReason(String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,String levelUserId) {
         List<PartnerRulesRatio> sortedList = rulesRatioList.stream()
                 .sorted(Comparator.comparing(PartnerRulesRatio::getKickback).reversed())
                 .collect(Collectors.toList());
-        BigDecimal sumPremium = BigDecimal.ZERO;
-        Set<String> userIdList;
-        String levelUserId;
-        if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
-            levelUserId = getLevelUserId(issuerUser.getUserId(), issuerUser.getGrade(),"3");
-        }else {
-            levelUserId = getLevelUserId(issuerUser.getUserId(), issuerUser.getGrade(),"4");
-        }
-        userIdList = CalculateCommissionUtils.getUserIdList(levelUserId);
-        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;
-        switch (grade) {
-            case "2":
-            case "3":
-                number = partnerUserMapper.selectNumber(levelUserId, "4", period);
-                break;
-            case "4":
-                number = partnerUserMapper.selectNumber(levelUserId, "5", period);
-                break;
-            default:
-                number = 0;
-        }
-        BigDecimal numberBD = BigDecimal.valueOf(number);
+        CommissionValues values = calculateCommonValues(grade, userId, rules,levelUserId);
+        BigDecimal numberBD = values.number;
+        BigDecimal sumPremium = values.sumPremium;
         for (PartnerRulesRatio ratio : sortedList) {
             int allSatisfied = ratio.getAllSatisfied();
             List<PartnerRatio> ratioList = ratio.getPartnerRatioList();
@@ -302,19 +271,21 @@ public class CalculateCommissionUtils {
         return null;
     }
 
-    public static String aaa(String grade){
-        switch ( grade){
-            case "1":
-                return "普通会员";
-            case "2":
-                return "高级会员";
-            case "3":
-                return "下属团队出单保费";
-            case "4":
-                return "工作室";
-            default:
-                return "";
+    public static String getLevelUserId(String userId,Integer grade,String queryLevel){
+        PartnerUser partnerUser = partnerUserMapper.getLevelUserId(userId,grade);
+        while (partnerUser != null){
+            Integer userGrade = partnerUser.getGrade();
+            if (userGrade != null && userGrade.toString().equals(queryLevel)){
+                return partnerUser.getUserId();
+            }
+            userId = partnerUser.getReferrerId();
+            if (userId == null) {
+                return null;
+            }
+            grade--;
+            partnerUser = partnerUserMapper.getLevelUserId(userId, grade);
         }
+        return null;
     }
 
 

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

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

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

@@ -54,11 +54,36 @@ public class UpdateRatioUtils {
     public void loginBefore(String userId){
         Map<Integer, PartnerUser> allByUserId = getAllByUserId(userId);
         allByUserId.forEach((key, value) -> {
-            BigDecimal latest = calculateCommission(String.valueOf(key),value.getUserId(),allByUserId);
+
+            String grade = String.valueOf(key);
+            String string = getString(allByUserId, grade);
+            BigDecimal latest = CalculateCommissionUtils.calculateCommission(grade, value.getUserId(),string);
+            //BigDecimal latest = calculateCommission(String.valueOf(key),value.getUserId(),allByUserId);
             initializeCommissionRatio(value, latest);
         });
     }
 
+
+    public static String getString(Map<Integer, PartnerUser> allByUserId, String grade) {
+        Integer userIdKey = null;
+        if (StringUtils.equals("1", grade)) {
+            userIdKey = 2;
+        } else if (StringUtils.equals("2", grade)) {
+            userIdKey = 3;
+        } else if (StringUtils.equals("3", grade) || StringUtils.equals("4", grade)) {
+            userIdKey = 4;
+        }
+        if (userIdKey != null) {
+            PartnerUser s = allByUserId.get(userIdKey);
+            if (!Objects.isNull(s)) {
+                return s.getUserId();
+            }
+        }
+        return null;
+    }
+
+
+
     private void initializeCommissionRatio(PartnerUser value, BigDecimal latest) {
         BigDecimal mostRecent = SpringUtil.getBean(PartnerKickbackChangeService.class).mostRecentRecord(value.getUserId(),String.valueOf(value.getGrade()));
         if (mostRecent ==  null){
@@ -96,7 +121,9 @@ public class UpdateRatioUtils {
         for (Map.Entry<Integer, PartnerUser> entry : map.entrySet()) {
             String key = String.valueOf(entry.getKey());
             PartnerUser value = entry.getValue();
-            BigDecimal latest = calculateCommission(key,value.getUserId(),map);
+            String string = getString(map, key);
+            BigDecimal latest = CalculateCommissionUtils.calculateCommission(String.valueOf(key), value.getUserId(), string);
+            //BigDecimal latest = calculateCommission(key,value.getUserId(),map);
             BigDecimal mostRecent = SpringUtil.getBean(PartnerKickbackChangeService.class).mostRecentRecord(value.getUserId(),key);
             getPartnerKickbackChange(latest, mostRecent, value, kickbackChange,map);
         }
@@ -131,7 +158,7 @@ public class UpdateRatioUtils {
         for (Map.Entry<Integer, PartnerUser> entry : map.entrySet()) {
             String key = String.valueOf(entry.getKey());
             PartnerUser value = entry.getValue();
-            BigDecimal latest = calculateCommission(key,value.getUserId(),map);
+            BigDecimal latest = CalculateCommissionUtils.calculateCommission(key,value.getUserId(),null);
             initializeCommissionRatio(value, latest);
 
         }
@@ -163,21 +190,14 @@ public class UpdateRatioUtils {
         change.setUserGrade(String.valueOf(details.getGrade()));
         change.setOriginalCommission(mostRecent);
         change.setAfterChange(bigDecimal);
-        String reason = getReason(String.valueOf(details.getGrade()), details.getUserId(),map);
+        String string = getString(map, String.valueOf(details.getGrade()));
+        String reason = CalculateCommissionUtils.getReason(String.valueOf(details.getGrade()), details.getUserId(),string);
         change.setChangeReason(reason);
         change.setDeptId(details.getDeptId());
         change.setChangeTime(new Date());
         return change;
     }
 
-    public String getValue(Map<Integer, String> map, Integer grade) {
-        if (map == null) {
-            return "";
-        }
-        String value = map.get(grade);
-        return value != null ? value : "";
-    }
-
 
     public static BigDecimal calculateCommission(String grade, String userId,Map<Integer, PartnerUser> map) {
         CommissionRulesVo rulesVo = commissionService.queryAll();

+ 1 - 1
src/main/java/com/ydtech/modules/partner/controller/NewAppPartnerController.java

@@ -48,7 +48,7 @@ public class NewAppPartnerController extends BaseController {
     @ApiOperation(value = "APP首页信息")
     public HttpResult<AppPartnerNumVo> getHomePage(@RequestBody AppHomeParams params){
         params.setUserId(getUserId());
-        SpringUtil.getBean(UpdateRatioUtils.class).loginChange(getUserId());
+        //SpringUtil.getBean(UpdateRatioUtils.class).loginChange(getUserId());
         return partnerUserService.getHomePage(params);
     }
 

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

@@ -14,7 +14,7 @@ import java.math.BigDecimal;
 @Mapper
 public interface PartnerKickbackChangeMapper extends BaseMapper<PartnerKickbackChange> {
 
-    @Select("SELECT after_change FROM partner_kickback_change WHERE user_id = #{userId} and user_grade = #{grade} ORDER BY change_time DESC LIMIT 1")
+    @Select("SELECT IFNULL(after_change,original_commission) AS result FROM partner_kickback_change WHERE user_id = #{userId} and user_grade = #{grade} ORDER BY change_time DESC LIMIT 1")
     BigDecimal mostRecentRecord(@Param("userId") String userId,@Param("grade")String grade);
 
     @Select("SELECT " +

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

@@ -141,4 +141,7 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
 
     @Select("SELECT * FROM partner_user WHERE user_id = #{userId} AND grade = #{grade}")
     PartnerUser getLevelUserId(@Param("userId") String userId,@Param("grade") Integer grade);
+
+    @Select("SELECT user_id FROM partner_user WHERE user_id = (SELECT referrer_id FROM partner_user WHERE user_id = #{userId} AND grade = #{grade}) AND grade = 3")
+    String searchRecommenders(@Param("userId") String userId,@Param("grade") String grade);
 }