Przeglądaj źródła

合伙人bug修改

xuqiang 1 rok temu
rodzic
commit
e1469d065b

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

@@ -1303,11 +1303,11 @@ 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);
-        UpdateRatioUtils.addDetailes(sysUser.getReferrerId(),sysUser.getGrade(), partnerUser);
+        SpringUtil.getBean(UpdateRatioUtils.class).addChangeRecord(sysUser.getReferrerId(),sysUser.getGrade(), partnerUser);
         return HttpResult.ok("新增成功", sysUserMapper.selectById(userId));
     }
 

+ 8 - 43
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.order.service.impl;
 import java.util.Date;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -71,6 +72,7 @@ import com.ydtech.modules.order.entity.vo.yangguang.YgQuoteAccidentVo;
 import com.ydtech.modules.order.entity.vo.zj.ZjQuoteAccidentVo;
 import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.partner.CalculateCommissionUtils;
+import com.ydtech.modules.partner.KickbackChangeUtils;
 import com.ydtech.modules.partner.dao.PartnerPremiumDetailsMapper;
 import com.ydtech.modules.partner.model.PartnerKickbackChange;
 import com.ydtech.modules.partner.model.PartnerPartnerAccount;
@@ -232,11 +234,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     @Autowired
     private PartnerUserService partnerUserService;
 
-    @Autowired
-    private SysSwitchConfigService sysSwitchConfigService;
 
-    @Autowired
-    private PartnerKickbackChangeService kickbackChangeService;
 
     public InsOrdersServiceImpl(OrderComponents orderComponents, SysUserService sysUserService,
                                 SysUserRoleService sysUserRoleService,
@@ -330,7 +328,6 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         String userId = insOrders.getUserid();
         List<PartnerUser> partnerUser = partnerUserService.selectByUserId(userId);
         List<PartnerPremiumDetails> list = new ArrayList<>();
-        List<PartnerKickbackChange> kickbackChange = new ArrayList<>();
         for (PartnerUser user : partnerUser) {
             PartnerPremiumDetails details = new PartnerPremiumDetails();
             details.setUserId(user.getUserId());
@@ -355,49 +352,16 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             details.setLicenseno(insOrders.getLicenseno());
             details.setSource(user.getGrade());
             list.add( details);
-            saveFeeLevelInfo(user.getGrade(),user.getReferrerId(),insAreaCompany,userId,list,kickbackChange);
+            SpringUtil.getBean(KickbackChangeUtils.class).before(bigDecimal,details);
+            saveFeeLevelInfo(user.getGrade(),user.getReferrerId(),insAreaCompany,userId,list);
         }
         for (PartnerPremiumDetails details : list) {
             partnerPremiumDetailsMapper.insert(details);
         }
-        for (PartnerPremiumDetails details : list) {
-            BigDecimal latest = CalculateCommissionUtils.calculateCommission(String.valueOf(details.getSource()),details.getUserId(),details.getIssuerId());
-            BigDecimal mostRecent = kickbackChangeService.mostRecentRecord(details.getUserId());
-            getPartnerKickbackChange(latest, mostRecent, details, kickbackChange);
-        }
-
-        for (PartnerKickbackChange change : kickbackChange) {
-            kickbackChangeService.saveKickbackChange(change);
-        }
-    }
-
-
-    public void getPartnerKickbackChange(BigDecimal latest,BigDecimal mostRecent,PartnerPremiumDetails details,List<PartnerKickbackChange> list){
-        if (mostRecent == null){
-            PartnerKickbackChange change = getChange(null,latest, details);
-            list.add( change);
-        }else {
-            if (latest.compareTo(mostRecent) != 0){
-                PartnerKickbackChange change = getChange(latest, mostRecent, details);
-                list.add( change);
-            }
-        }
-    }
-
-    private static PartnerKickbackChange getChange(BigDecimal bigDecimal, BigDecimal mostRecent, PartnerPremiumDetails details) {
-        PartnerKickbackChange change = new PartnerKickbackChange();
-        change.setUserId(details.getUserId());
-        change.setUserGrade(String.valueOf(details.getSource()));
-        change.setOriginalCommission(mostRecent);
-        change.setAfterChange(bigDecimal);
-        String reason = CalculateCommissionUtils.getReason(String.valueOf(details.getSource()), details.getUserId(), details.getIssuerId());
-        change.setChangeReason(reason);
-        change.setDeptId(details.getDeptId());
-        change.setChangeTime(new Date());
-        return change;
+        SpringUtil.getBean(KickbackChangeUtils.class).updatePersonnel(list);
     }
 
-    public void saveFeeLevelInfo(Integer grade,String referrerId,InsAreaCompany insAreaCompany,String userId,List<PartnerPremiumDetails> list,List<PartnerKickbackChange> kickbackChange) {
+    public void saveFeeLevelInfo(Integer grade,String referrerId,InsAreaCompany insAreaCompany,String userId,List<PartnerPremiumDetails> list) {
 
         InsOrders insOrders = getById(insAreaCompany.getOrderno());
         grade -- ;
@@ -431,7 +395,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         details.setLicenseno(insOrders.getLicenseno());
         details.setSource(partnerUser.getGrade());
         list.add( details);
-        saveFeeLevelInfo(grade,partnerUser.getReferrerId(),insAreaCompany,userId,list,kickbackChange);
+        SpringUtil.getBean(KickbackChangeUtils.class).before(bigDecimal,details);
+        saveFeeLevelInfo(grade,partnerUser.getReferrerId(),insAreaCompany,userId,list);
 
     }
 

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

@@ -135,11 +135,17 @@ public class CalculateCommissionUtils {
                 .collect(Collectors.toList());
         BigDecimal sumPremium = BigDecimal.ZERO;
         Set<String> userIdList = new HashSet<>(0);
-        if (StringUtils.equals("3",grade) || StringUtils.equals("2",grade)){
-            userIdList = getUserIdList(partnerUserMapper.getGzsList(issuerId));
+        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)){
-            userIdList = getUserIdList(partnerUserMapper.getTdList(issuerId));
+            String tdList = partnerUserMapper.getTdList(issuerId);
+            userIdList = getUserIdList(tdList);
         }
         if (CollectionUtil.isNotEmpty(userIdList)){ QueryWrapper<PartnerPremiumDetails> queryWrapper = new QueryWrapper<>();
             queryWrapper.in("user_id", userIdList);
@@ -210,11 +216,17 @@ public class CalculateCommissionUtils {
                 .collect(Collectors.toList());
         BigDecimal sumPremium = BigDecimal.ZERO;
         Set<String> userIdList = new HashSet<>(0);
-        if (StringUtils.equals("3",grade) || StringUtils.equals("2",grade)){
-            userIdList = getUserIdList(partnerUserMapper.getGzsList(issuerId));
+        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)){
-            userIdList = getUserIdList(partnerUserMapper.getTdList(issuerId));
+            String tdList = partnerUserMapper.getTdList(issuerId);
+            userIdList = getUserIdList(tdList);
         }
         if (CollectionUtil.isNotEmpty(userIdList)){ QueryWrapper<PartnerPremiumDetails> queryWrapper = new QueryWrapper<>();
             queryWrapper.in("user_id", userIdList);
@@ -278,6 +290,20 @@ public class CalculateCommissionUtils {
         return null;
     }
 
+    public static String aaa(String grade){
+        switch ( grade){
+            case "1":
+                return "普通会员";
+            case "2":
+                return "高级会员";
+            case "3":
+                return "下属团队出单保费";
+            case "4":
+                return "工作室";
+            default:
+                return "";
+        }
+    }
 
 
     public static CommissionValidityPeriod getCommissionValidityPeriod(PartnerCommissionRules rules, String userId, String grade) {
@@ -291,10 +317,11 @@ public class CalculateCommissionUtils {
                 partnerUserMapper.updateAssessmentTime(userId);
                 assessmentTime = partnerUserMapper.selectAssessmentTime(userId, grade);
                 if (assessmentTime == null) return period;
-            }
-            if (isAfterNDays(assessmentTime, rules.getFixedDays())) {
-                updateAssessmentTimeRecursively(assessmentTime,rules.getFixedDays(),userId );
-                assessmentTime = partnerUserMapper.selectAssessmentTime(userId, grade);
+            }else {
+                if (isAfterNDays(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())));

+ 76 - 0
src/main/java/com/ydtech/modules/partner/KickbackChangeUtils.java

@@ -0,0 +1,76 @@
+package com.ydtech.modules.partner;
+
+
+import com.ydtech.modules.partner.model.PartnerKickbackChange;
+import com.ydtech.modules.partner.model.PartnerPremiumDetails;
+import com.ydtech.modules.partner.service.PartnerKickbackChangeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class KickbackChangeUtils {
+
+
+    private static PartnerKickbackChangeService kickbackChangeService;
+
+    @Autowired
+    private void setKickbackChangeService(PartnerKickbackChangeService kickbackChangeService) {
+        KickbackChangeUtils.kickbackChangeService = kickbackChangeService;
+    }
+
+
+    public void updatePersonnel(List<PartnerPremiumDetails> list){
+        List<PartnerKickbackChange> kickbackChange = new ArrayList<>();
+        for (PartnerPremiumDetails details : list) {
+            BigDecimal latest = CalculateCommissionUtils.calculateCommission(String.valueOf(details.getSource()),details.getUserId(),details.getIssuerId());
+            BigDecimal mostRecent = kickbackChangeService.mostRecentRecord(details.getUserId());
+            BigDecimal bigDecimal = mostRecent == null ? new BigDecimal(details.getProportional()) : mostRecent;
+            getPartnerKickbackChange(latest, bigDecimal, details, kickbackChange);
+        }
+
+        for (PartnerKickbackChange change : kickbackChange) {
+            kickbackChangeService.saveKickbackChange(change);
+        }
+    }
+
+
+    public void before(BigDecimal latest,PartnerPremiumDetails details){
+        BigDecimal mostRecent = kickbackChangeService.mostRecentRecord(details.getUserId());
+        if (mostRecent == null){
+            PartnerKickbackChange change = getChange(null, latest, details);
+            kickbackChangeService.saveKickbackChange(change);
+        }else {
+            if (latest.compareTo(mostRecent) != 0){
+                PartnerKickbackChange change = getChange(latest, mostRecent, details);
+                kickbackChangeService.saveKickbackChange(change);
+            }
+        }
+
+    }
+
+
+
+    public void getPartnerKickbackChange(BigDecimal latest, BigDecimal mostRecent, PartnerPremiumDetails details, List<PartnerKickbackChange> list){
+        if (latest.compareTo(mostRecent) != 0){
+            PartnerKickbackChange change = getChange(latest, mostRecent, details);
+            list.add( change);
+        }
+    }
+
+    private static PartnerKickbackChange getChange(BigDecimal bigDecimal, BigDecimal mostRecent, PartnerPremiumDetails details) {
+        PartnerKickbackChange change = new PartnerKickbackChange();
+        change.setUserId(details.getUserId());
+        change.setUserGrade(String.valueOf(details.getSource()));
+        change.setOriginalCommission(mostRecent);
+        change.setAfterChange(bigDecimal);
+        String reason = CalculateCommissionUtils.getReason(String.valueOf(details.getSource()), details.getUserId(), details.getIssuerId());
+        change.setChangeReason(reason);
+        change.setDeptId(details.getDeptId());
+        change.setChangeTime(new Date());
+        return change;
+    }
+}

+ 73 - 14
src/main/java/com/ydtech/modules/partner/UpdateRatioUtils.java

@@ -17,6 +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;
@@ -53,21 +54,20 @@ public class UpdateRatioUtils {
     }
 
 
-    public static void addDetailes(String referrerId, Integer grade, PartnerUser partnerUser){
+    @Async
+    public  void loginChange(String userId){
         Map<Integer, PartnerUser> map = new HashMap<>();
-        PartnerUser user = partnerUserMapper.queryUser(referrerId, grade);
-        map.put(partnerUser.getGrade(), partnerUser);
-        if (user != null) {
-            map.put(user.getGrade(), user);
-            Integer userGrade = user.getGrade();
-            while (true) {
-                user = partnerUserMapper.queryUser(user.getReferrerId(), userGrade - 1);
-                if (user == null) {
-                    break;
-                }
-                map.put(user.getGrade(),user);
+        List<PartnerUser> userList = partnerUserMapper.queryByUserId(userId);
+        if (CollectionUtil.isNotEmpty(userList)) {
+            for (PartnerUser user : userList) {
+                getMap(map, user);
             }
         }
+        saveChange(map);
+
+    }
+
+    private static void saveChange(Map<Integer, PartnerUser> map) {
         List<PartnerKickbackChange> kickbackChange = new ArrayList<>();
         for (Map.Entry<Integer, PartnerUser> entry : map.entrySet()) {
             String key = String.valueOf(entry.getKey());
@@ -79,6 +79,60 @@ public class UpdateRatioUtils {
         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 void before(String referrerId, Integer grade){
+        Map<Integer, PartnerUser> map = new HashMap<>();
+        PartnerUser user = partnerUserMapper.queryUser(referrerId, grade);
+        if (user != null) {
+            getMap(map, user);
+        }
+        for (Map.Entry<Integer, PartnerUser> entry : map.entrySet()) {
+            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);
+            }
+
+        }
+
+
+    }
+
+    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);
 
     }
 
@@ -190,12 +244,17 @@ 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);

+ 3 - 0
src/main/java/com/ydtech/modules/partner/controller/NewAppPartnerController.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.partner.controller;
 
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.alipay.api.AlipayApiException;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
@@ -10,6 +11,7 @@ import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.SysPartnerService;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.partner.UpdateRatioUtils;
 import com.ydtech.modules.partner.model.param.AppHomeParams;
 import com.ydtech.modules.partner.service.PartnerUserService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
@@ -46,6 +48,7 @@ public class NewAppPartnerController extends BaseController {
     @ApiOperation(value = "APP首页信息")
     public HttpResult<AppPartnerNumVo> getHomePage(@RequestBody AppHomeParams params){
         params.setUserId(getUserId());
+        SpringUtil.getBean(UpdateRatioUtils.class).loginChange(getUserId());
         return partnerUserService.getHomePage(params);
     }
 

+ 1 - 1
src/main/java/com/ydtech/modules/partner/dao/PartnerKickbackChangeMapper.java

@@ -29,6 +29,6 @@ public interface PartnerKickbackChangeMapper extends BaseMapper<PartnerKickbackC
             "FROM " +
             " partner_kickback_change c " +
             " LEFT JOIN sys_dept d ON d.id = c.dept_id " +
-            " LEFT JOIN sys_user u ON u.id =  c.user_id ")
+            " LEFT JOIN sys_user u ON u.id =  c.user_id ${ew.customSqlSegment} ")
     Page<PartnerKickbackChange> queryPage(Page page,@Param("ew") QueryWrapper<PartnerKickbackChange> wrapper);
 }

+ 1 - 0
src/main/java/com/ydtech/modules/partner/dao/PartnerUserMapper.java

@@ -137,4 +137,5 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
 
     Integer selectNumber4(@Param("userId") String userId,@Param("number") String number,@Param("period") CommissionValidityPeriod period);
 
+    List<PartnerUser> queryByUserId(String userId);
 }

+ 6 - 0
src/main/resources/mapper/modules/partner/PartnerUserMapper.xml

@@ -952,4 +952,10 @@ select grade,grade_name from  partner_rule
         SELECT * from  partner_user where user_id = #{referrerId} and grade = #{grade}
     </select>
 
+
+
+    <select id="queryByUserId" resultType="com.ydtech.modules.partner.model.PartnerUser">
+        SELECT * from  partner_user where user_id = #{referrerId} order by grade desc
+    </select>
+
 </mapper>