|
@@ -52,23 +52,20 @@ public class CalculateCommissionUtils {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
-// public Map<String,BigDecimal> calculateUserProportion(String grade,String userId){
|
|
|
|
|
-// HashMap<Object, Object> map = new HashMap<>();
|
|
|
|
|
-//
|
|
|
|
|
-// }
|
|
|
|
|
-
|
|
|
|
|
public static String getReason(String grade, String userId,String issuerId) {
|
|
public static String getReason(String grade, String userId,String issuerId) {
|
|
|
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;
|
|
|
}
|
|
}
|
|
|
|
|
+ QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
|
|
|
|
|
+ queryWrapper.eq("user_id", issuerId);
|
|
|
|
|
+ PartnerUser issuerUser = partnerUserMapper.selectOne(queryWrapper);
|
|
|
if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
|
|
if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
|
|
|
- return obtainReason("gl" , grade,
|
|
|
|
|
- rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(),issuerId);
|
|
|
|
|
|
|
+ return obtainReason(grade, rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(),issuerUser);
|
|
|
}
|
|
}
|
|
|
- if (StringUtils.equals("3", grade) || StringUtils.equals("4", grade)){
|
|
|
|
|
- return obtainReason(StringUtils.equals("3",grade) ? "levelGzs" :"gzs",grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),issuerId);
|
|
|
|
|
|
|
+ if (StringUtils.equals("4", grade)){
|
|
|
|
|
+ return obtainReason(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),issuerUser);
|
|
|
}
|
|
}
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
@@ -79,20 +76,22 @@ public class CalculateCommissionUtils {
|
|
|
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("1", grade)){
|
|
|
|
|
- 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());
|
|
|
}
|
|
}
|
|
|
if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
|
|
if (StringUtils.equals("2", grade) || StringUtils.equals("3", grade)){
|
|
|
- gl = ladderCommission("gl" , grade,
|
|
|
|
|
- rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(),issuerId);
|
|
|
|
|
|
|
+ gl = ladderCommission(grade,rulesVo.getAdministrator().getRulesRatioList(), userId, rulesVo.getAdministrator(),issuerIdUser);
|
|
|
}
|
|
}
|
|
|
BigDecimal hh = BigDecimal.ZERO;
|
|
BigDecimal hh = BigDecimal.ZERO;
|
|
|
- if (StringUtils.equals("3", grade) || StringUtils.equals("4", grade)){
|
|
|
|
|
- hh = ladderCommission(StringUtils.equals("3",grade) ? "levelGzs" :"gzs",grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),issuerId);
|
|
|
|
|
- }
|
|
|
|
|
- if (StringUtils.equals("1", grade)) {
|
|
|
|
|
- return new BigDecimal(rulesVo.getOriginator());
|
|
|
|
|
|
|
+ if (StringUtils.equals("4", grade)){
|
|
|
|
|
+ hh = ladderCommission(grade, rulesVo.getPartner().getRulesRatioList(), userId, rulesVo.getPartner(),issuerIdUser);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
if (StringUtils.equals("2", grade)) {
|
|
if (StringUtils.equals("2", grade)) {
|
|
|
PartnerCommissionRules administrator = rulesVo.getAdministrator();
|
|
PartnerCommissionRules administrator = rulesVo.getAdministrator();
|
|
|
if (isZero(gl)){
|
|
if (isZero(gl)){
|
|
@@ -129,25 +128,32 @@ public class CalculateCommissionUtils {
|
|
|
return new BigDecimal(a).subtract(new BigDecimal(b));
|
|
return new BigDecimal(a).subtract(new BigDecimal(b));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public static BigDecimal ladderCommission(String type,String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,String issuerId) {
|
|
|
|
|
|
|
+ public static BigDecimal ladderCommission(String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,PartnerUser issuerIdUser) {
|
|
|
CommissionValidityPeriod period = getCommissionValidityPeriod(rules, userId, grade);
|
|
CommissionValidityPeriod period = getCommissionValidityPeriod(rules, userId, grade);
|
|
|
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());
|
|
|
BigDecimal sumPremium = BigDecimal.ZERO;
|
|
BigDecimal sumPremium = BigDecimal.ZERO;
|
|
|
- Set<String> userIdList = new HashSet<>(0);
|
|
|
|
|
- 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);
|
|
|
|
|
|
|
+ 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<>();
|
|
if (CollectionUtil.isNotEmpty(userIdList)){ QueryWrapper<PartnerPremiumDetails> queryWrapper = new QueryWrapper<>();
|
|
|
queryWrapper.in("user_id", userIdList);
|
|
queryWrapper.in("user_id", userIdList);
|
|
|
if (StringUtils.isNotEmpty(period.getStartDate()) && StringUtils.isNotEmpty(period.getEndDate())) {
|
|
if (StringUtils.isNotEmpty(period.getStartDate()) && StringUtils.isNotEmpty(period.getEndDate())) {
|
|
@@ -157,20 +163,22 @@ public class CalculateCommissionUtils {
|
|
|
sumPremium = Optional.ofNullable(totalSumPremium).orElse(BigDecimal.ZERO);
|
|
sumPremium = Optional.ofNullable(totalSumPremium).orElse(BigDecimal.ZERO);
|
|
|
}
|
|
}
|
|
|
Integer number;
|
|
Integer number;
|
|
|
- switch (type) {
|
|
|
|
|
- case "gl":
|
|
|
|
|
- String id = partnerUserMapper.queryManager(issuerId);
|
|
|
|
|
- number = partnerUserMapper.selectNumber(id, "4", period);
|
|
|
|
|
- break;
|
|
|
|
|
- case "levelGzs":
|
|
|
|
|
- number = partnerUserMapper.selectNumber3(issuerId, "5", period);
|
|
|
|
|
|
|
+ switch (grade) {
|
|
|
|
|
+ case "2":
|
|
|
|
|
+ case "3":
|
|
|
|
|
+ number = partnerUserMapper.selectNumber(levelUserId, "4", period);
|
|
|
break;
|
|
break;
|
|
|
- case "gzs":
|
|
|
|
|
- number = partnerUserMapper.selectByUserIdNumber(userId, "5", period);
|
|
|
|
|
|
|
+ case "4":
|
|
|
|
|
+ number = partnerUserMapper.selectNumber(levelUserId, "5", period);
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
- return BigDecimal.ZERO;
|
|
|
|
|
|
|
+ number = 0;
|
|
|
}
|
|
}
|
|
|
|
|
+ return obtainReason( sortedList, number, sumPremium);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ public static BigDecimal obtainReason(List<PartnerRulesRatio> sortedList,Integer number, BigDecimal sumPremium){
|
|
|
BigDecimal numberBD = BigDecimal.valueOf(number);
|
|
BigDecimal numberBD = BigDecimal.valueOf(number);
|
|
|
for (PartnerRulesRatio ratio : sortedList) {
|
|
for (PartnerRulesRatio ratio : sortedList) {
|
|
|
int allSatisfied = ratio.getAllSatisfied();
|
|
int allSatisfied = ratio.getAllSatisfied();
|
|
@@ -207,28 +215,34 @@ public class CalculateCommissionUtils {
|
|
|
return BigDecimal.ZERO;
|
|
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 type,String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,String issuerId) {
|
|
|
|
|
|
|
+ public static String obtainReason(String grade, List<PartnerRulesRatio> rulesRatioList, String userId, PartnerCommissionRules rules,PartnerUser issuerUser) {
|
|
|
CommissionValidityPeriod period = getCommissionValidityPeriod(rules, userId, grade);
|
|
CommissionValidityPeriod period = getCommissionValidityPeriod(rules, userId, grade);
|
|
|
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());
|
|
|
BigDecimal sumPremium = BigDecimal.ZERO;
|
|
BigDecimal sumPremium = BigDecimal.ZERO;
|
|
|
- Set<String> userIdList = new HashSet<>(0);
|
|
|
|
|
- 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);
|
|
|
|
|
|
|
+ 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<>();
|
|
if (CollectionUtil.isNotEmpty(userIdList)){ QueryWrapper<PartnerPremiumDetails> queryWrapper = new QueryWrapper<>();
|
|
|
queryWrapper.in("user_id", userIdList);
|
|
queryWrapper.in("user_id", userIdList);
|
|
|
if (StringUtils.isNotEmpty(period.getStartDate()) && StringUtils.isNotEmpty(period.getEndDate())) {
|
|
if (StringUtils.isNotEmpty(period.getStartDate()) && StringUtils.isNotEmpty(period.getEndDate())) {
|
|
@@ -238,19 +252,16 @@ public class CalculateCommissionUtils {
|
|
|
sumPremium = Optional.ofNullable(totalSumPremium).orElse(BigDecimal.ZERO);
|
|
sumPremium = Optional.ofNullable(totalSumPremium).orElse(BigDecimal.ZERO);
|
|
|
}
|
|
}
|
|
|
Integer number;
|
|
Integer number;
|
|
|
- switch (type) {
|
|
|
|
|
- case "gl":
|
|
|
|
|
- String id = partnerUserMapper.queryManager(issuerId);
|
|
|
|
|
- number = partnerUserMapper.selectNumber(id, "4", period);
|
|
|
|
|
- break;
|
|
|
|
|
- case "levelGzs":
|
|
|
|
|
- number = partnerUserMapper.selectNumber3(issuerId, "5", period);
|
|
|
|
|
|
|
+ switch (grade) {
|
|
|
|
|
+ case "2":
|
|
|
|
|
+ case "3":
|
|
|
|
|
+ number = partnerUserMapper.selectNumber(levelUserId, "4", period);
|
|
|
break;
|
|
break;
|
|
|
- case "gzs":
|
|
|
|
|
- number = partnerUserMapper.selectByUserIdNumber(userId, "5", period);
|
|
|
|
|
|
|
+ case "4":
|
|
|
|
|
+ number = partnerUserMapper.selectNumber(levelUserId, "5", period);
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
- return "";
|
|
|
|
|
|
|
+ number = 0;
|
|
|
}
|
|
}
|
|
|
BigDecimal numberBD = BigDecimal.valueOf(number);
|
|
BigDecimal numberBD = BigDecimal.valueOf(number);
|
|
|
for (PartnerRulesRatio ratio : sortedList) {
|
|
for (PartnerRulesRatio ratio : sortedList) {
|