瀏覽代碼

合伙人bug修改

xuqiang 1 年之前
父節點
當前提交
05f475a083

+ 4 - 1
src/main/java/com/ydtech/modules/admin/controller/SysUserController.java

@@ -40,6 +40,7 @@ import com.ydtech.modules.message.constants.MessageTypeConstants;
 import com.ydtech.modules.message.service.MessageSecretaryService;
 import com.ydtech.modules.order.entity.po.InsUploadFiles;
 import com.ydtech.modules.order.service.InsUploadFilesService;
+import com.ydtech.modules.partner.UpdateRatioUtils;
 import com.ydtech.modules.partner.dao.PartnerUserMapper;
 import com.ydtech.modules.partner.model.PartnerUser;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
@@ -592,7 +593,9 @@ public class SysUserController extends BaseController {
         SysUserTrack sysUserTrack = new SysUserTrack(sysUser);
 
         sysUserTrackService.save(sysUserTrack);
-
+        if (1 == sysUser.getNewApp()){
+            SpringUtil.getBean(UpdateRatioUtils.class).addChangeRecord(sysUser.getId());
+        }
         return HttpResult.ok("审批成功",sysUserService.updateById(sysUser));
     }
 

+ 1 - 2
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -1303,11 +1303,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             SpringUtil.getBean(RecordUserUtils.class)
                     .addRecord(userId, Optional.ofNullable(sysUser1.getName()).orElse("admin"));
         }
-        SpringUtil.getBean(UpdateRatioUtils.class).before(sysUser.getReferrerId(),sysUser.getGrade());
         // 保存新的合伙人数据
         PartnerUser partnerUser = addNewPartnerRule(sysUser);
         partnerUserService.insert(partnerUser);
-        SpringUtil.getBean(UpdateRatioUtils.class).addChangeRecord(sysUser.getReferrerId(),sysUser.getGrade(), partnerUser);
+        SpringUtil.getBean(UpdateRatioUtils.class).before(partnerUser.getUserId(),partnerUser.getGrade());
         return HttpResult.ok("新增成功", sysUserMapper.selectById(userId));
     }
 

+ 17 - 17
src/main/java/com/ydtech/modules/partner/CalculateCommissionUtils.java

@@ -22,6 +22,7 @@ import javax.annotation.PostConstruct;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.*;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -316,17 +317,17 @@ public class CalculateCommissionUtils {
             if (assessmentTime == null) {
                 partnerUserMapper.updateAssessmentTime(userId);
                 assessmentTime = partnerUserMapper.selectAssessmentTime(userId, grade);
-                if (assessmentTime == null) return period;
-            }else {
-                if (isAfterNDays(assessmentTime, rules.getFixedDays())) {
-                    updateAssessmentTimeRecursively(assessmentTime,rules.getFixedDays(),userId );
-                    assessmentTime = partnerUserMapper.selectAssessmentTime(userId, grade);
+                if (Objects.isNull(assessmentTime)){
+                    return period;
                 }
             }
+            if (!isWithinDays(assessmentTime, rules.getFixedDays())) {
+                updateAssessmentTimeRecursively(assessmentTime,rules.getFixedDays(),userId );
+                assessmentTime = partnerUserMapper.selectAssessmentTime(userId, grade);
+            }
             period.setStartDate(dateFormat.format(assessmentTime));
             period.setEndDate(dateFormat.format(addDays(assessmentTime, rules.getFixedDays())));
         } else if (StringUtils.equals("3", rules.getValidityPeriod())) {
-
             Date fixedCycle = partnerUserMapper.selectFixedCycleTime(userId, grade);
             if (fixedCycle == null) {
                 partnerUserMapper.updateFixedCycleTime(userId);
@@ -341,24 +342,23 @@ public class CalculateCommissionUtils {
         return period;
     }
 
+
+    public static boolean isWithinDays(Date date, int days) {
+        LocalDate targetDate = date.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDate();
+        return Math.abs(ChronoUnit.DAYS.between(LocalDate.now(), targetDate)) <= days;
+    }
+
+
     private static void updateAssessmentTimeRecursively(Date assessmentTime, int days, String userId) {
-        Date currentDate = new Date();
         Date newDate = addDaysToday(assessmentTime, days);
-        while (newDate.before(currentDate) && !newDate.toInstant()
-                .atZone(ZoneId.systemDefault())
-                .toLocalDate().isEqual(LocalDate.now())) {
+        while (!isWithinDays(newDate, days)) {
             newDate = addDaysToday(newDate, days);
         }
         partnerUserMapper.updateAssessmentTimeByDate(userId, newDate);
     }
 
-    public static boolean isAfterNDays(Date targetDate, int days) {
-        LocalDateTime targetDateTime = targetDate.toInstant()
-                .atZone(ZoneId.systemDefault())
-                .toLocalDateTime();
-        return LocalDateTime.now().isAfter(targetDateTime.plusDays(days));
-    }
-
 
     public static Date addDaysToday(Date date, int days) {
         LocalDateTime localDate = date.toInstant()

+ 40 - 25
src/main/java/com/ydtech/modules/partner/UpdateRatioUtils.java

@@ -17,9 +17,7 @@ import com.ydtech.utils.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
-
 import javax.annotation.PostConstruct;
 import java.math.BigDecimal;
 import java.util.*;
@@ -53,9 +51,36 @@ public class UpdateRatioUtils {
     public void init() {
     }
 
+    public void loginBefore(String userId){
+        Map<Integer, PartnerUser> allByUserId = getAllByUserId(userId);
+        allByUserId.forEach((key, value) -> {
+            BigDecimal latest = calculateCommission(String.valueOf(key),value.getUserId(),allByUserId);
+            initializeCommissionRatio(value, latest);
+        });
+    }
+
+    private void initializeCommissionRatio(PartnerUser value, BigDecimal latest) {
+        BigDecimal mostRecent = SpringUtil.getBean(PartnerKickbackChangeService.class).mostRecentRecord(value.getUserId());
+        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);
+        }
+    }
 
-    @Async
     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)) {
@@ -63,8 +88,7 @@ public class UpdateRatioUtils {
                 getMap(map, user);
             }
         }
-        saveChange(map);
-
+        return map;
     }
 
     private static void saveChange(Map<Integer, PartnerUser> map) {
@@ -108,31 +132,16 @@ public class UpdateRatioUtils {
             String key = String.valueOf(entry.getKey());
             PartnerUser value = entry.getValue();
             BigDecimal latest = calculateCommission(key,value.getUserId(),map);
-            BigDecimal mostRecent = SpringUtil.getBean(PartnerKickbackChangeService.class).mostRecentRecord(value.getUserId());
-            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);
-            }
+            initializeCommissionRatio(value, latest);
 
         }
 
 
     }
 
-    public  void addChangeRecord(String referrerId, Integer grade, PartnerUser partnerUser){
-        Map<Integer, PartnerUser> map = new HashMap<>();
-        PartnerUser user = partnerUserMapper.queryUser(referrerId, grade);
-        map.put(partnerUser.getGrade(), partnerUser);
-        if (user != null) {
-            getMap(map, user);
-        }
-        saveChange(map);
+    public  void addChangeRecord(String userId){
+        Map<Integer, PartnerUser> allByUserId = getAllByUserId(userId);
+        saveChange(allByUserId);
 
     }
 
@@ -339,13 +348,19 @@ public class UpdateRatioUtils {
                 .collect(Collectors.toList());
         BigDecimal sumPremium = BigDecimal.ZERO;
         Set<String> userIdList = new HashSet<>(0);
-        if (StringUtils.equals("3",grade) || StringUtils.equals("2",grade)){
+        if (StringUtils.equals("2",grade)){
             PartnerUser s = map.get(3);
             if (!Objects.isNull(s)){
                 userIdList = CalculateCommissionUtils.getUserIdList(s.getUserId());
             }
 
         }
+        if (StringUtils.equals("3",grade)){
+            PartnerUser s = map.get(4);
+            if (!Objects.isNull(s)){
+                userIdList = CalculateCommissionUtils.getUserIdList(s.getUserId());
+            }
+        }
         if (StringUtils.equals("4",grade)){
             PartnerUser s = map.get(4);
             if (!Objects.isNull(s)){