|
|
@@ -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;
|