UpdateRatioUtils.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package com.ydtech.modules.partner;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import cn.hutool.extra.spring.SpringUtil;
  4. import com.ydtech.modules.partner.dao.PartnerUserMapper;
  5. import com.ydtech.modules.partner.model.*;
  6. import com.ydtech.modules.partner.service.PartnerKickbackChangeService;
  7. import com.ydtech.utils.StringUtils;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Component;
  12. import javax.annotation.PostConstruct;
  13. import java.math.BigDecimal;
  14. import java.util.*;
  15. @Component
  16. public class UpdateRatioUtils {
  17. private static final Logger log = LoggerFactory.getLogger(UpdateRatioUtils.class);
  18. private static PartnerUserMapper partnerUserMapper;
  19. private static PartnerKickbackChangeService kickbackChangeService;
  20. @Autowired
  21. public void setCommissionService(PartnerUserMapper partnerUserMapper,
  22. PartnerKickbackChangeService kickbackChangeService) {
  23. UpdateRatioUtils.partnerUserMapper = partnerUserMapper;
  24. UpdateRatioUtils.kickbackChangeService = kickbackChangeService;
  25. }
  26. @PostConstruct
  27. public void init() {
  28. }
  29. public void loginBefore(String userId){
  30. Map<Integer, PartnerUser> allByUserId = getAllByUserId(userId);
  31. if (isExist(allByUserId)){
  32. allByUserId.forEach((key, value) -> {
  33. String grade = String.valueOf(key);
  34. BigDecimal latest = CalculateCommissionUtils.calculateCommission(grade, value.getUserId(),allByUserId.get(3).getUserId(),allByUserId.get(4).getUserId());
  35. initializeCommissionRatio(value, latest);
  36. });
  37. }
  38. }
  39. public static String getString(Map<Integer, PartnerUser> allByUserId, String grade) {
  40. Integer userIdKey = null;
  41. if (StringUtils.equals("1", grade)) {
  42. userIdKey = 2;
  43. } else if (StringUtils.equals("2", grade)) {
  44. userIdKey = 3;
  45. } else if (StringUtils.equals("3", grade) || StringUtils.equals("4", grade)) {
  46. userIdKey = 4;
  47. }
  48. if (userIdKey != null) {
  49. PartnerUser s = allByUserId.get(userIdKey);
  50. if (!Objects.isNull(s)) {
  51. return s.getUserId();
  52. }
  53. }
  54. return null;
  55. }
  56. private void initializeCommissionRatio(PartnerUser value, BigDecimal latest) {
  57. BigDecimal mostRecent = SpringUtil.getBean(PartnerKickbackChangeService.class).mostRecentRecord(value.getUserId(),String.valueOf(value.getGrade()));
  58. if (mostRecent == null){
  59. PartnerKickbackChange change = new PartnerKickbackChange();
  60. change.setUserId(value.getUserId());
  61. change.setUserGrade(String.valueOf(value.getGrade()));
  62. change.setOriginalCommission(latest);
  63. change.setAfterChange(null);
  64. change.setDeptId(value.getDeptId());
  65. change.setChangeTime(new Date());
  66. kickbackChangeService.saveKickbackChange(change);
  67. }
  68. }
  69. public void loginChange(String userId){
  70. Map<Integer, PartnerUser> allByUserId = getAllByUserId(userId);
  71. saveChange(allByUserId);
  72. }
  73. public Map<Integer, PartnerUser> getAllByUserId(String userId) {
  74. Map<Integer, PartnerUser> map = new HashMap<>();
  75. List<PartnerUser> userList = partnerUserMapper.queryByUserId(userId);
  76. if (CollectionUtil.isNotEmpty(userList)) {
  77. for (PartnerUser user : userList) {
  78. getMap(map, user);
  79. }
  80. }
  81. return map;
  82. }
  83. private void saveChange(Map<Integer, PartnerUser> map) {
  84. if (isExist(map)){
  85. List<PartnerKickbackChange> kickbackChange = new ArrayList<>();
  86. for (Map.Entry<Integer, PartnerUser> entry : map.entrySet()) {
  87. String key = String.valueOf(entry.getKey());
  88. PartnerUser value = entry.getValue();
  89. BigDecimal latest = CalculateCommissionUtils.calculateCommission(String.valueOf(key), value.getUserId(), map.get(3).getUserId(), map.get(4).getUserId());
  90. BigDecimal mostRecent = SpringUtil.getBean(PartnerKickbackChangeService.class).mostRecentRecord(value.getUserId(),key);
  91. getPartnerKickbackChange(latest, mostRecent, value, kickbackChange,map);
  92. }
  93. for (PartnerKickbackChange change : kickbackChange) {
  94. kickbackChangeService.saveKickbackChange(change);
  95. }
  96. }
  97. }
  98. private static void getMap(Map<Integer, PartnerUser> map, PartnerUser user) {
  99. map.put(user.getGrade(), user);
  100. while (true) {
  101. Integer userGrade = user.getGrade();
  102. int i = userGrade - 1;
  103. if (0 == i) {
  104. break;
  105. }
  106. user = partnerUserMapper.queryUser(user.getReferrerId(),i );
  107. if (user == null) {
  108. break;
  109. }
  110. map.put(user.getGrade(),user);
  111. }
  112. }
  113. public boolean isExist(Map<Integer, PartnerUser> map) {
  114. int[] keysToCheck = {3,4};
  115. return Arrays.stream(keysToCheck).allMatch(map::containsKey);
  116. }
  117. public void before(String referrerId, Integer grade){
  118. Map<Integer, PartnerUser> map = new HashMap<>();
  119. PartnerUser user = partnerUserMapper.queryUser(referrerId, grade);
  120. if (user != null) {
  121. getMap(map, user);
  122. }
  123. if (isExist(map)){
  124. for (Map.Entry<Integer, PartnerUser> entry : map.entrySet()) {
  125. String key = String.valueOf(entry.getKey());
  126. PartnerUser value = entry.getValue();
  127. BigDecimal latest = CalculateCommissionUtils.calculateCommission(key,value.getUserId(),map.get(3).getUserId(),map.get(4).getUserId());
  128. initializeCommissionRatio(value, latest);
  129. }
  130. }
  131. }
  132. public void addChangeRecord(String userId){
  133. Map<Integer, PartnerUser> allByUserId = getAllByUserId(userId);
  134. saveChange(allByUserId);
  135. }
  136. public static void getPartnerKickbackChange(BigDecimal latest,BigDecimal mostRecent,PartnerUser details,List<PartnerKickbackChange> list,Map<Integer, PartnerUser> map){
  137. if (mostRecent == null){
  138. PartnerKickbackChange change = getChange(null, latest, details,map);
  139. list.add( change);
  140. }else {
  141. if (latest.compareTo(mostRecent) != 0){
  142. PartnerKickbackChange change = getChange(latest, mostRecent, details,map);
  143. list.add( change);
  144. }
  145. }
  146. }
  147. private static PartnerKickbackChange getChange(BigDecimal bigDecimal, BigDecimal mostRecent, PartnerUser details,Map<Integer, PartnerUser> map) {
  148. PartnerKickbackChange change = new PartnerKickbackChange();
  149. change.setUserId(details.getUserId());
  150. change.setUserGrade(String.valueOf(details.getGrade()));
  151. change.setOriginalCommission(mostRecent);
  152. change.setAfterChange(bigDecimal);
  153. String reason = CalculateCommissionUtils.getReason(String.valueOf(details.getGrade()), details.getUserId(),map.get(3).getUserId(), map.get(4).getUserId());
  154. change.setChangeReason(reason);
  155. change.setDeptId(details.getDeptId());
  156. change.setChangeTime(new Date());
  157. return change;
  158. }
  159. }