|
@@ -57,49 +57,15 @@ 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();
|
|
|
|
|
- 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);
|
|
|
|
|
|
|
+ private static CommissionValues calculateCommonValues(String grade, String userId, PartnerCommissionRules rules,String type,String userId3,String userId4) {
|
|
|
|
|
+ CommissionValidityPeriod period = new CommissionValidityPeriod();
|
|
|
Set<String> userIdList = Collections.emptySet();
|
|
Set<String> userIdList = Collections.emptySet();
|
|
|
if (StringUtils.equals("gzs", type)){
|
|
if (StringUtils.equals("gzs", type)){
|
|
|
- userIdList = partnerUserMapper.querySubordinateUserId(levelUserId);
|
|
|
|
|
|
|
+ period = getCommissionValidityPeriod(rules, userId4, "4");
|
|
|
|
|
+ userIdList = partnerUserMapper.querySubordinateUserId(userId4);
|
|
|
}else if (StringUtils.equals("hh", type)){
|
|
}else if (StringUtils.equals("hh", type)){
|
|
|
- userIdList = partnerUserMapper.querySubordinate(levelUserId);
|
|
|
|
|
|
|
+ period = getCommissionValidityPeriod(rules, userId3, "3");
|
|
|
|
|
+ userIdList = partnerUserMapper.querySubordinate(userId3);
|
|
|
}
|
|
}
|
|
|
BigDecimal sumPremium = BigDecimal.ZERO;
|
|
BigDecimal sumPremium = BigDecimal.ZERO;
|
|
|
if (CollectionUtil.isNotEmpty(userIdList)) {
|
|
if (CollectionUtil.isNotEmpty(userIdList)) {
|
|
@@ -114,91 +80,55 @@ public class CalculateCommissionUtils {
|
|
|
Integer number = 0;
|
|
Integer number = 0;
|
|
|
|
|
|
|
|
if (StringUtils.equals("gzs", type)){
|
|
if (StringUtils.equals("gzs", type)){
|
|
|
- number = partnerUserMapper.selectNumber(levelUserId, "5", period);
|
|
|
|
|
|
|
+ number = partnerUserMapper.selectNumber(userId4, "5", period);
|
|
|
}else if (StringUtils.equals("hh", type)){
|
|
}else if (StringUtils.equals("hh", type)){
|
|
|
- number = partnerUserMapper.selectNumber(levelUserId, "4", period);
|
|
|
|
|
|
|
+ number = partnerUserMapper.selectNumber(userId3, "4", period);
|
|
|
}
|
|
}
|
|
|
if (log.isInfoEnabled()) {
|
|
if (log.isInfoEnabled()) {
|
|
|
log.info("用户id{}++{}级用户++出单人的上级用户{}++统计的保单金额{}++统计的邀请人数{}",
|
|
log.info("用户id{}++{}级用户++出单人的上级用户{}++统计的保单金额{}++统计的邀请人数{}",
|
|
|
- userId, grade, levelUserId, sumPremium, number);
|
|
|
|
|
|
|
+ userId, grade, userId3, sumPremium, number);
|
|
|
}
|
|
}
|
|
|
return new CommissionValues(sumPremium, new BigDecimal(number));
|
|
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) {
|
|
|
|
|
|
|
+ public static String getReason(String grade, String userId,String userId3,String userId4) {
|
|
|
CommissionRulesVo rulesVo = commissionService.queryAll();
|
|
CommissionRulesVo rulesVo = commissionService.queryAll();
|
|
|
if (rulesVo == null) return null;
|
|
if (rulesVo == null) return null;
|
|
|
if (StringUtils.equals("1", grade)){
|
|
if (StringUtils.equals("1", grade)){
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
|
|
if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
|
|
|
- return obtainReason(grade, rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(),levelUserId,"hh");
|
|
|
|
|
|
|
+ return obtainReason(grade, rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(),"hh",userId3,userId4);
|
|
|
}
|
|
}
|
|
|
if (StringUtils.equals("4", grade)){
|
|
if (StringUtils.equals("4", grade)){
|
|
|
- return obtainReason(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),levelUserId,"gzs");
|
|
|
|
|
|
|
+ return obtainReason(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),"gzs",userId3,userId4);
|
|
|
}
|
|
}
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
public static String querySuperiorAndSubordinate(String issuerId,String grade){
|
|
public static String querySuperiorAndSubordinate(String issuerId,String grade){
|
|
|
- String levelUserId;
|
|
|
|
|
QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
|
|
QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
|
|
|
queryWrapper.eq("user_id", issuerId);
|
|
queryWrapper.eq("user_id", issuerId);
|
|
|
PartnerUser issuerUser = partnerUserMapper.selectOne(queryWrapper);
|
|
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 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 = ladderCommission(grade,rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(), levelUserId,"hh");
|
|
|
|
|
- }
|
|
|
|
|
- BigDecimal hh = BigDecimal.ZERO;
|
|
|
|
|
- if (StringUtils.equals("4", grade) || StringUtils.equals("3", grade)){
|
|
|
|
|
- hh = ladderCommission(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),levelUserId,"gzs");
|
|
|
|
|
|
|
+ if (Objects.isNull(issuerUser)){
|
|
|
|
|
+ return null;
|
|
|
}
|
|
}
|
|
|
- log.info("用户id:{}++{}级用户++gl:{}++hh:{}", userId, grade,gl, hh);
|
|
|
|
|
- return calculateProportion(grade,rulesVo,gl,hh);
|
|
|
|
|
|
|
+ return getLevelUserId(issuerUser.getUserId(), issuerUser.getGrade(), grade);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- public static BigDecimal calculateCommission2(String grade, String userId,String levelUserId) {
|
|
|
|
|
|
|
+ public static BigDecimal calculateCommission(String grade, String userId,String userId3,String userId4) {
|
|
|
CommissionRulesVo rulesVo = commissionService.queryAll();
|
|
CommissionRulesVo rulesVo = commissionService.queryAll();
|
|
|
if (rulesVo == null) return BigDecimal.ZERO;
|
|
if (rulesVo == null) return BigDecimal.ZERO;
|
|
|
BigDecimal gl = BigDecimal.ZERO;
|
|
BigDecimal gl = BigDecimal.ZERO;
|
|
|
if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
|
|
if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
|
|
|
- gl = ladderCommission2(grade,rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(), levelUserId,"hh");
|
|
|
|
|
|
|
+ gl = ladderCommission(grade,rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(),"hh", userId3, userId4);
|
|
|
}
|
|
}
|
|
|
BigDecimal hh = BigDecimal.ZERO;
|
|
BigDecimal hh = BigDecimal.ZERO;
|
|
|
if (StringUtils.equals("4", grade) || StringUtils.equals("3", grade)){
|
|
if (StringUtils.equals("4", grade) || StringUtils.equals("3", grade)){
|
|
|
- hh = ladderCommission2(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),levelUserId,"gzs");
|
|
|
|
|
|
|
+ hh = ladderCommission(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),"gzs",userId3, userId4);
|
|
|
}
|
|
}
|
|
|
log.info("用户id:{}++{}级用户++gl:{}++hh:{}", userId, grade,gl, hh);
|
|
log.info("用户id:{}++{}级用户++gl:{}++hh:{}", userId, grade,gl, hh);
|
|
|
return calculateProportion(grade,rulesVo,gl,hh);
|
|
return calculateProportion(grade,rulesVo,gl,hh);
|
|
@@ -247,23 +177,9 @@ public class CalculateCommissionUtils {
|
|
|
return new BigDecimal(a).subtract(new BigDecimal(b));
|
|
return new BigDecimal(a).subtract(new BigDecimal(b));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public static BigDecimal ladderCommission(String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,String levelUserId,String type) {
|
|
|
|
|
- CommissionValues values = calculateCommonValues(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;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- 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);
|
|
|
|
|
|
|
+ public static BigDecimal ladderCommission(String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,
|
|
|
|
|
+ String type,String userId3,String userId4) {
|
|
|
|
|
+ CommissionValues values = calculateCommonValues(grade, userId, rules,type,userId3,userId4);
|
|
|
List<PartnerRulesRatio> sortedList = rulesRatioList.stream()
|
|
List<PartnerRulesRatio> sortedList = rulesRatioList.stream()
|
|
|
.sorted(Comparator.comparing(PartnerRulesRatio::getKickback).reversed())
|
|
.sorted(Comparator.comparing(PartnerRulesRatio::getKickback).reversed())
|
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
@@ -312,11 +228,11 @@ public class CalculateCommissionUtils {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- public static String obtainReason(String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,String levelUserId,String type) {
|
|
|
|
|
|
|
+ public static String obtainReason(String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,String type,String userId3,String userId4) {
|
|
|
List<PartnerRulesRatio> sortedList = rulesRatioList.stream()
|
|
List<PartnerRulesRatio> sortedList = rulesRatioList.stream()
|
|
|
.sorted(Comparator.comparing(PartnerRulesRatio::getKickback).reversed())
|
|
.sorted(Comparator.comparing(PartnerRulesRatio::getKickback).reversed())
|
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
|
- CommissionValues values = calculateCommonValues(grade, userId, rules,levelUserId,type);
|
|
|
|
|
|
|
+ CommissionValues values = calculateCommonValues(grade, userId, rules,type,userId3,userId4);
|
|
|
BigDecimal numberBD = values.number;
|
|
BigDecimal numberBD = values.number;
|
|
|
BigDecimal sumPremium = values.sumPremium;
|
|
BigDecimal sumPremium = values.sumPremium;
|
|
|
for (PartnerRulesRatio ratio : sortedList) {
|
|
for (PartnerRulesRatio ratio : sortedList) {
|