| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- package com.ydtech.modules.partner;
- import cn.hutool.core.collection.CollectionUtil;
- import cn.hutool.extra.spring.SpringUtil;
- import com.ydtech.modules.partner.dao.PartnerUserMapper;
- import com.ydtech.modules.partner.model.*;
- import com.ydtech.modules.partner.service.PartnerKickbackChangeService;
- import com.ydtech.utils.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import javax.annotation.PostConstruct;
- import java.math.BigDecimal;
- import java.util.*;
- @Component
- public class UpdateRatioUtils {
- private static final Logger log = LoggerFactory.getLogger(UpdateRatioUtils.class);
- private static PartnerUserMapper partnerUserMapper;
- private static PartnerKickbackChangeService kickbackChangeService;
- @Autowired
- public void setCommissionService(PartnerUserMapper partnerUserMapper,
- PartnerKickbackChangeService kickbackChangeService) {
- UpdateRatioUtils.partnerUserMapper = partnerUserMapper;
- UpdateRatioUtils.kickbackChangeService = kickbackChangeService;
- }
- @PostConstruct
- public void init() {
- }
- public void loginBefore(String userId){
- Map<Integer, PartnerUser> allByUserId = getAllByUserId(userId);
- if (isExist(allByUserId)){
- allByUserId.forEach((key, value) -> {
- String grade = String.valueOf(key);
- BigDecimal latest = CalculateCommissionUtils.calculateCommission(grade, value.getUserId(),allByUserId.get(3).getUserId(),allByUserId.get(4).getUserId());
- 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){
- PartnerKickbackChange change = new PartnerKickbackChange();
- change.setUserId(value.getUserId());
- change.setUserGrade(String.valueOf(value.getGrade()));
- change.setOriginalCommission(latest);
- change.setAfterChange(null);
- change.setDeptId(value.getDeptId());
- change.setChangeTime(new Date());
- kickbackChangeService.saveKickbackChange(change);
- }
- }
- public void loginChange(String userId){
- Map<Integer, PartnerUser> allByUserId = getAllByUserId(userId);
- saveChange(allByUserId);
- }
- public Map<Integer, PartnerUser> getAllByUserId(String userId) {
- Map<Integer, PartnerUser> map = new HashMap<>();
- List<PartnerUser> userList = partnerUserMapper.queryByUserId(userId);
- if (CollectionUtil.isNotEmpty(userList)) {
- for (PartnerUser user : userList) {
- getMap(map, user);
- }
- }
- return map;
- }
- private void saveChange(Map<Integer, PartnerUser> map) {
- if (isExist(map)){
- List<PartnerKickbackChange> kickbackChange = new ArrayList<>();
- for (Map.Entry<Integer, PartnerUser> entry : map.entrySet()) {
- String key = String.valueOf(entry.getKey());
- PartnerUser value = entry.getValue();
- BigDecimal latest = CalculateCommissionUtils.calculateCommission(String.valueOf(key), value.getUserId(), map.get(3).getUserId(), map.get(4).getUserId());
- BigDecimal mostRecent = SpringUtil.getBean(PartnerKickbackChangeService.class).mostRecentRecord(value.getUserId(),key);
- getPartnerKickbackChange(latest, mostRecent, value, kickbackChange,map);
- }
- for (PartnerKickbackChange change : kickbackChange) {
- kickbackChangeService.saveKickbackChange(change);
- }
- }
- }
- private static void getMap(Map<Integer, PartnerUser> map, PartnerUser user) {
- map.put(user.getGrade(), user);
- while (true) {
- Integer userGrade = user.getGrade();
- int i = userGrade - 1;
- if (0 == i) {
- break;
- }
- user = partnerUserMapper.queryUser(user.getReferrerId(),i );
- if (user == null) {
- break;
- }
- map.put(user.getGrade(),user);
- }
- }
- public boolean isExist(Map<Integer, PartnerUser> map) {
- int[] keysToCheck = {3,4};
- return Arrays.stream(keysToCheck).allMatch(map::containsKey);
- }
- public void before(String referrerId, Integer grade){
- Map<Integer, PartnerUser> map = new HashMap<>();
- PartnerUser user = partnerUserMapper.queryUser(referrerId, grade);
- if (user != null) {
- getMap(map, user);
- }
- if (isExist(map)){
- for (Map.Entry<Integer, PartnerUser> entry : map.entrySet()) {
- String key = String.valueOf(entry.getKey());
- PartnerUser value = entry.getValue();
- BigDecimal latest = CalculateCommissionUtils.calculateCommission(key,value.getUserId(),map.get(3).getUserId(),map.get(4).getUserId());
- initializeCommissionRatio(value, latest);
- }
- }
- }
- public void addChangeRecord(String userId){
- Map<Integer, PartnerUser> allByUserId = getAllByUserId(userId);
- saveChange(allByUserId);
- }
- public static void getPartnerKickbackChange(BigDecimal latest,BigDecimal mostRecent,PartnerUser details,List<PartnerKickbackChange> list,Map<Integer, PartnerUser> map){
- if (mostRecent == null){
- PartnerKickbackChange change = getChange(null, latest, details,map);
- list.add( change);
- }else {
- if (latest.compareTo(mostRecent) != 0){
- PartnerKickbackChange change = getChange(latest, mostRecent, details,map);
- list.add( change);
- }
- }
- }
- private static PartnerKickbackChange getChange(BigDecimal bigDecimal, BigDecimal mostRecent, PartnerUser details,Map<Integer, PartnerUser> map) {
- PartnerKickbackChange change = new PartnerKickbackChange();
- change.setUserId(details.getUserId());
- change.setUserGrade(String.valueOf(details.getGrade()));
- change.setOriginalCommission(mostRecent);
- change.setAfterChange(bigDecimal);
- String reason = CalculateCommissionUtils.getReason(String.valueOf(details.getGrade()), details.getUserId(),map.get(3).getUserId(), map.get(4).getUserId());
- change.setChangeReason(reason);
- change.setDeptId(details.getDeptId());
- change.setChangeTime(new Date());
- return change;
- }
- }
|