Browse Source

合伙人升级

xuqiang 1 năm trước cách đây
mục cha
commit
59b5e4ee8b

+ 1 - 0
src/main/java/com/ydtech/modules/partner/controller/PartnerUserController.java

@@ -87,6 +87,7 @@ public class PartnerUserController extends BaseController {
      */
     @PostMapping("submitLiftingRecord")
     public HttpResult submitLiftingRecord(@RequestBody UserGradeParam userGradeParam) {
+        userGradeParam.setId(getUserId());
         return partnerUserService.submitLiftingRecord(userGradeParam);
     }
 

+ 7 - 0
src/main/java/com/ydtech/modules/partner/dao/PartnerLiftingRecordMapper.java

@@ -1,8 +1,12 @@
 package com.ydtech.modules.partner.dao;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.modules.partner.model.PartnerLiftingRecord;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
@@ -15,4 +19,7 @@ public interface PartnerLiftingRecordMapper extends BaseMapper<PartnerLiftingRec
     @Select("select audit_status as auditStatus,count(1) as count from partner_lifting_record group by audit_status")
     List<Map<String, String>> groupByAuditStatus();
 
+    @Select("SELECT r.id,r.`name`,r.mobile,r.user_id,r.dept_id,r.type,r.original_level,r.after_change,r.cycle,r.upgrade_strategy,r.audit_status,r.audit_time,r.audit_user,r.reject_reason,r.create_time,( SELECT `name` FROM sys_dept WHERE sys_dept.id = r.dept_id ) dept_name FROM partner_lifting_record r ${ew.customSqlSegment} ")
+    Page<PartnerLiftingRecord> queryPage(Page page,@Param("ew") QueryWrapper<PartnerLiftingRecord> queryWrapper);
+
 }

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

@@ -12,6 +12,7 @@ import com.ydtech.modules.partner.model.param.QueryVo;
 import com.ydtech.modules.partner.model.vo.*;
 import org.apache.ibatis.annotations.*;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 @Mapper
@@ -121,4 +122,20 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
 
     @Select("SELECT * FROM partner_user WHERE user_id = #{userId} ORDER BY grade DESC LIMIT 1")
     PartnerUser selectMaxGradeUserId(String userId);
+
+    @Select("SELECT upgrade_time FROM partner_user WHERE user_id = #{userId} AND grade = #{grade}")
+    Date selectUpgradeTime(String userId, String grade);
+
+
+    @Update("UPDATE partner_user SET upgrade_time = ( " +
+            " SELECT DATE(approve_time) FROM sys_user_track WHERE `status` = 1 AND user_id = #{userId} LIMIT 1 " +
+            " ) WHERE  user_id = #{userId} and grade = #{grade} ")
+    void updateUpgradeTime(@Param("userId")String userId,@Param("grade") String grade);
+
+
+    int assessment(@Param("userId") String userId,@Param("grade") String grade, @Param("period")CommissionValidityPeriod period);
+
+    BigDecimal selectTotalSumPremium(@Param("userId") String userId,@Param("grade") String grade, @Param("period")CommissionValidityPeriod period);
+
+    String querySuperiors(@Param("userId") String userId,@Param("grade") String grade);
 }

+ 3 - 1
src/main/java/com/ydtech/modules/partner/model/PartnerLiftingRecord.java

@@ -6,6 +6,8 @@ import com.ydtech.modules.base.model.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 @Data
 public class PartnerLiftingRecord extends BaseEntity {
 
@@ -46,7 +48,7 @@ public class PartnerLiftingRecord extends BaseEntity {
 
     @ApiModelProperty(value = "审核时间")
     @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
-    private String auditTime;
+    private Date auditTime;
 
     @ApiModelProperty(value = "审核用户")
     private String auditUser;

+ 32 - 10
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerLiftingRecordServiceImpl.java

@@ -1,35 +1,43 @@
 package com.ydtech.modules.partner.service.Impl;
+import java.math.BigDecimal;
 
 import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.partner.dao.PartnerLiftingRecordMapper;
+import com.ydtech.modules.partner.dao.PartnerUserMapper;
 import com.ydtech.modules.partner.model.PartnerLiftingRecord;
+import com.ydtech.modules.partner.model.PartnerUser;
 import com.ydtech.modules.partner.model.param.LiftingRecordAudit;
 import com.ydtech.modules.partner.model.param.PartnerLiftingRecordParam;
 import com.ydtech.modules.partner.service.PartnerLiftingRecordService;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;;
+import java.util.Date;
 import java.util.Map;
 
 @Service
 public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingRecordMapper, PartnerLiftingRecord> implements PartnerLiftingRecordService {
 
 
+    @Autowired
+    private PartnerUserMapper partnerUserMapper;
 
     @Override
     public Map<String,Object> queryPage(PartnerLiftingRecordParam recordParam) {
-        LambdaQueryWrapper<PartnerLiftingRecord> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.like(StringUtils.isNotBlank(recordParam.getName()), PartnerLiftingRecord::getName, recordParam.getName());
-        queryWrapper.like(StringUtils.isNotBlank(recordParam.getMobile()), PartnerLiftingRecord::getMobile, recordParam.getMobile());
-        queryWrapper.like(StringUtils.isNotBlank(recordParam.getUserId()), PartnerLiftingRecord::getUserId, recordParam.getUserId());
-        queryWrapper.eq(StringUtils.isNotBlank(recordParam.getType()), PartnerLiftingRecord::getType, recordParam.getType());
-        queryWrapper.eq(ObjectUtils.isNotEmpty(recordParam.getAuditStatus()), PartnerLiftingRecord::getAuditStatus, recordParam.getAuditStatus());
+        QueryWrapper<PartnerLiftingRecord> queryWrapper = new QueryWrapper<>();
+        queryWrapper.like(StringUtils.isNotBlank(recordParam.getName()), "`r.name`", recordParam.getName());
+        queryWrapper.like(StringUtils.isNotBlank(recordParam.getMobile()), "r.mobile", recordParam.getMobile());
+        queryWrapper.like(StringUtils.isNotBlank(recordParam.getUserId()), "r.userId", recordParam.getUserId());
+        queryWrapper.eq(StringUtils.isNotBlank(recordParam.getType()), "r.type", recordParam.getType());
+        queryWrapper.eq(ObjectUtils.isNotEmpty(recordParam.getAuditStatus()), "r.audit_status", recordParam.getAuditStatus());
         if (CollectionUtil.isNotEmpty(recordParam.getApplyTime())){
             String startTime = recordParam.getApplyTime().get(0);
             String endTime = null;
@@ -37,14 +45,14 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
                 endTime = recordParam.getApplyTime().get(1);
             }
             if (startTime != null && endTime != null) {
-                queryWrapper.between(PartnerLiftingRecord::getCreateTime, startTime, endTime);
+                queryWrapper.between("r.createTime", startTime, endTime);
             } else if (startTime != null) {
-                queryWrapper.ge(PartnerLiftingRecord::getCreateTime, startTime);
+                queryWrapper.ge("r.createTime", startTime);
             } else if (endTime != null) {
-                queryWrapper.le(PartnerLiftingRecord::getCreateTime, endTime);
+                queryWrapper.le("r.createTime", endTime);
             }
         }
-        Page page = baseMapper.selectPage(recordParam.getPage(), queryWrapper);
+        Page page = baseMapper.queryPage(recordParam.getPage(), queryWrapper);
         Map map = JSONObject.parseObject(JSON.toJSONString(page), Map.class);
         map.put("groupCount", baseMapper.groupByAuditStatus());
         map.put("records", page.getRecords());
@@ -68,10 +76,12 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
         }
         liftingRecord.setAuditUser(audit.getAuditUser());
         liftingRecord.setAuditStatus(auditStatus);
+        liftingRecord.setAuditTime(new Date());
         String message;
         switch (auditStatus) {
             case 1:
                 message = "审批通过";
+                addUserLevel(liftingRecord);
                 break;
             case 2:
                 String rejectReason = audit.getRejectReason();
@@ -88,6 +98,18 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
         return success ? HttpResult.ok(message) : HttpResult.error("审批失败");
     }
 
+    public void addUserLevel(PartnerLiftingRecord liftingRecord){
+        int i = Integer.valueOf(liftingRecord.getOriginalLevel()) - 1;
+        PartnerUser partnerUser = new PartnerUser();
+        partnerUser.setName(liftingRecord.getName());
+        partnerUser.setMobile(liftingRecord.getMobile());
+        partnerUser.setUserId(liftingRecord.getUserId());
+        partnerUser.setDeptId(liftingRecord.getDeptId());
+        String referrerId = partnerUserMapper.querySuperiors(liftingRecord.getUserId(),String.valueOf(i));
+        partnerUser.setReferrerId(referrerId);
+        partnerUser.setGrade(i);
+        partnerUserMapper.insert(partnerUser);
+    }
 
     @Override
     public HttpResult saveLiftingRecord(PartnerLiftingRecord entity) {

+ 203 - 49
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerRuleServiceImpl.java

@@ -10,8 +10,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.partner.dao.PartnerAttributeMapper;
 import com.ydtech.modules.partner.dao.PartnerRuleMapper;
+import com.ydtech.modules.partner.dao.PartnerUserMapper;
 import com.ydtech.modules.partner.model.PartnerAttribute;
+import com.ydtech.modules.partner.model.PartnerCommissionRules;
 import com.ydtech.modules.partner.model.PartnerRule;
+import com.ydtech.modules.partner.model.param.CommissionValidityPeriod;
 import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
 import com.ydtech.modules.partner.service.PartnerRuleService;
 import org.apache.commons.lang3.StringUtils;
@@ -20,9 +23,12 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -33,6 +39,9 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
     @Autowired
     private PartnerAttributeMapper attributeMapper;
 
+    @Autowired
+    private  PartnerUserMapper partnerUserMapper;
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -104,64 +113,209 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
         return attributeMapper.queryGradeName();
     }
 
-    @Override
-    public boolean verifyUpgradeConditions(String userId,  String grade) {
-        if (StringUtils.isBlank(grade)){
+    private PartnerRuleEntity validateGradeAndFetchRuleEntity(String grade) {
+        if (StringUtils.isBlank(grade)) {
             throw new SystemException("等级不能为空");
         }
         PartnerRuleEntity partnerRuleEntity = attributeMapper.selectByGrade(grade);
-        if (StringUtils.equals("2",partnerRuleEntity.getUpgrade())){
+        if (StringUtils.equals("2", partnerRuleEntity.getUpgrade())) {
             throw new SystemException("当前等级不支持升级");
         }
-        //传入用户的id   成为当前等级 的天数
-        String days = "10";
-        //考核条件
-        List<PartnerAttribute> requirement = partnerRuleEntity.getRequirement();
-        if (CollectionUtil.isNotEmpty(requirement)){
-            Map<Integer, List<PartnerAttribute>> peopleByType = requirement.stream()
-                    .collect(Collectors.groupingBy(PartnerAttribute::getType));
-            //考核周期
-            List<PartnerAttribute> partnerAttributes = peopleByType.get(1);
-            if (CollectionUtil.isNotEmpty(partnerAttributes)){
-                for (PartnerAttribute partnerAttribute : partnerAttributes) {
-                    String cycle = partnerAttribute.getCycle();
-                    //固定日期
-                    if (StringUtils.equals("3",cycle)){
-
-                    }else if (StringUtils.equals("2",cycle)){
-                        //固定天数
-                        String fixedDays = partnerAttribute.getFixedDays();
-                        if (StringUtils.isNotBlank(fixedDays) && StringUtils.isNotBlank(days)){
-                            if (!compare(days, fixedDays)){
-                                throw new SystemException("考核周期不满足");
-                            }
-                        }
-                    }
+        return partnerRuleEntity;
+    }
+
+    @Override
+    public boolean verifyUpgradeConditions(String userId, String grade) {
+        VerifyData data = extractCommonLogic(userId, grade);
+        PartnerRuleEntity partnerRuleEntity = data.partnerRuleEntity;
+        BigDecimal p = data.p;
+        BigDecimal bf = data.bf;
+        BigDecimal people = data.people;
+        BigDecimal allBf = data.allBf;
+        if (StringUtils.equals("1", partnerRuleEntity.getAppraise())) {
+            return p.compareTo(people) >= 0 && bf.compareTo(allBf) >= 0;
+        } else {
+            return p.compareTo(people) >= 0 || bf.compareTo(allBf) >= 0;
+        }
+    }
+
+
+    @Override
+    public String verifyUpgradeConditionsMessage(String userId, String grade) {
+        VerifyData data = extractCommonLogic(userId, grade);
+        PartnerRuleEntity partnerRuleEntity = data.partnerRuleEntity;
+        BigDecimal p = data.p;
+        BigDecimal bf = data.bf;
+        BigDecimal people = data.people;
+        BigDecimal allBf = data.allBf;
+        StringBuilder message = new StringBuilder();
+        if (StringUtils.equals("1", partnerRuleEntity.getAppraise())) {
+            if (p.compareTo(people) >= 0 && bf.compareTo(allBf) >= 0) {
+                message.append("邀请").append(people).append("个合伙人, 累计保费达").append(allBf).append("元");
+            }
+        } else {
+            if (p.compareTo(people) >= 0) {
+                message.append("邀请").append(people).append("个合伙人");
+            }
+            if (bf != null && bf.compareTo(allBf) >= 0) {
+                if (message.length() > 0) {
+                    message.append(", ");
                 }
-                //  当前用户的邀请人数
-                String inviterNumber = "10";
-
-                //  当前用户的出单保费
-                BigDecimal issuancePremium = new BigDecimal("522222");
-                //考核条件
-                List<PartnerAttribute> rulesList = peopleByType.get(2);
-                // 考核是否满足  1  满足所有条件  2  满足任意一条条件
-                String appraise = partnerRuleEntity.getAppraise();
-                for (PartnerAttribute attribute : rulesList) {
-                    String attributeRequirement = attribute.getRequirement();
-                    if (StringUtils.equals("1",attributeRequirement)){
-                        //邀请合伙人
-
-                    }else if (StringUtils.equals("2",attributeRequirement)){
-                        // 出单保费
-                    }
+                message.append("累计保费达").append(allBf).append("元");
+            }
+        }
+        return message.toString();
+    }
+
+
+
+    private VerifyData extractCommonLogic(String userId, String grade) {
+        PartnerRuleEntity partnerRuleEntity = validateGradeAndFetchRuleEntity(grade);
+        if (partnerRuleEntity == null) {
+            throw new SystemException("合作伙伴规则实体不能为空");
+        }
+        PartnerAttribute cycle1 = partnerRuleEntity.getCycle();
+        List<PartnerAttribute> requirement = partnerRuleEntity.getRequirement();
+        if (CollectionUtil.isEmpty(requirement)) {
+            throw new SystemException("考核条件不能为空");
+        }
+        CommissionValidityPeriod period = getCommissionValidityPeriod(cycle1, userId, grade);
+        if (period == null) {
+            throw new SystemException("有效周期不能为空");
+        }
+        BigDecimal p = getInviteData(userId, grade, period);
+        BigDecimal bf = partnerUserMapper.selectTotalSumPremium(userId, grade, period);
+        BigDecimal people;
+        BigDecimal allBf;
+        if (requirement.size() >= 2) {
+            people = getRequirementValue(requirement, 0);
+            allBf = getRequirementValue(requirement, 1);
+        } else {
+            throw new SystemException("考核条件不足");
+        }
+
+        return new VerifyData(partnerRuleEntity, p, bf, people, allBf);
+    }
+
+    private BigDecimal getRequirementValue(List<PartnerAttribute> requirement, int index) {
+        if (requirement.size() > index) {
+            return new BigDecimal(requirement.get(index).getMin());
+        }
+        throw new SystemException("考核条件配置错误");
+    }
+
+
+    private static class VerifyData {
+        private final PartnerRuleEntity partnerRuleEntity;
+        private final BigDecimal p;
+        private final BigDecimal bf;
+        private final BigDecimal people;
+        private final BigDecimal allBf;
+
+        public VerifyData(PartnerRuleEntity partnerRuleEntity, BigDecimal p, BigDecimal bf, BigDecimal people, BigDecimal allBf) {
+            this.partnerRuleEntity = partnerRuleEntity;
+            this.p = p;
+            this.bf = bf;
+            this.people = people;
+            this.allBf = allBf;
+        }
+    }
+
+
+
+    public BigDecimal getInviteData(String userId, String grade,CommissionValidityPeriod period){
+        int number = 0;
+        if (StringUtils.equals("2", grade)){
+            number = partnerUserMapper.assessment(userId,"3",period);
+        }else if (StringUtils.equals("3", grade)){
+            number = partnerUserMapper.assessment(userId,"4",period);
+        }else if (StringUtils.equals("4", grade)){
+            number = partnerUserMapper.assessment(userId,"5",period);
+        }
+        return new BigDecimal(number);
+    }
+
+    public  CommissionValidityPeriod getCommissionValidityPeriod(PartnerAttribute cycle1, String userId, String grade) {
+        CommissionValidityPeriod period = new CommissionValidityPeriod();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        if (StringUtils.equals("1", cycle1.getCycle())) {
+            return period;
+        } else if (StringUtils.equals("2", cycle1.getCycle())) {
+            Date upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade);
+            if (upgradeTime == null) {
+                partnerUserMapper.updateUpgradeTime(userId,grade);
+                upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade);
+                if (Objects.isNull(upgradeTime)){
+                    return period;
                 }
             }
+            String fixedDays = cycle1.getFixedDays();
+
+            if (!isWithinDays(upgradeTime,Integer.valueOf(fixedDays) )) {
+                updateAssessmentTimeRecursively(upgradeTime,Integer.valueOf(fixedDays),userId,grade );
+                upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade);
+            }
+            period.setStartDate(dateFormat.format(upgradeTime));
+            period.setEndDate(dateFormat.format(addDays(upgradeTime,Integer.valueOf(fixedDays))));
+        } else if (StringUtils.equals("3", cycle1.getCycle())) {
+//            Date fixedCycle = partnerUserMapper.selectFixedCycleTime(userId, grade);
+//            if (fixedCycle == null) {
+//                partnerUserMapper.updateFixedCycleTime(userId);
+//                fixedCycle = partnerUserMapper.selectFixedCycleTime(userId, grade);
+//                if (fixedCycle == null){
+//                    return period;
+//                }
+//            }
+//            period.setStartDate(rules.getStartDate());
+//            period.setEndDate(rules.getEndDate());
+        }
+        return period;
+    }
+
+
+    public  Date addDays(Date date, int days) {
+        LocalDateTime localDate = date.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDateTime();
+        LocalDateTime newLocalDate = localDate.plusDays(days);
+        LocalDateTime endOfDay = newLocalDate.withHour(23)
+                .withMinute(59)
+                .withSecond(59)
+                .withNano(999_999_999);
+        return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
+    private  void updateAssessmentTimeRecursively(Date assessmentTime, int days, String userId,String grade) {
+        Date newDate = addDaysToday(assessmentTime, days);
+        while (!isWithinDays(newDate, days)) {
+            newDate = addDaysToday(newDate, days);
         }
+        partnerUserMapper.updateAssessmentTimeByDate(userId, newDate);
+    }
 
-        return false;
+
+    public  Date addDaysToday(Date date, int days) {
+        LocalDateTime localDate = date.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDateTime();
+        LocalDateTime newLocalDate = localDate.plusDays(days);
+        // 设置时分秒为0
+        LocalDateTime newDateTime = newLocalDate.withHour(0)
+                .withMinute(0)
+                .withSecond(0)
+                .withNano(0);
+        return Date.from(newDateTime.atZone(ZoneId.systemDefault()).toInstant());
     }
 
+
+    public  boolean isWithinDays(Date date, int days) {
+        LocalDate targetDate = date.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDate();
+        return Math.abs(ChronoUnit.DAYS.between(LocalDate.now(), targetDate)) <= days;
+    }
+
+
     @Override
     public PartnerRuleEntity selectByGrade(String grade) {
         return attributeMapper.selectByGrade(grade);

+ 23 - 32
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerUserServiceImpl.java

@@ -158,20 +158,22 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
 
     @Override
     public HttpResult submitLiftingRecord(UserGradeParam userGradeParam) {
-        PartnerUser partnerUser = baseMapper.selectById(userGradeParam.getId());
+        if (StringUtils.equals("1",userGradeParam.getGrade())){
+            return HttpResult.error("当前用户无法升级");
+        }
+        LambdaQueryWrapper<PartnerUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(PartnerUser::getUserId,userGradeParam.getId());
+        lambdaQueryWrapper.eq(PartnerUser::getGrade,userGradeParam.getGrade());
+        PartnerUser partnerUser = baseMapper.selectOne(lambdaQueryWrapper);
         //   条件
         PartnerRuleEntity ruleEntity = ruleService.selectByGrade(userGradeParam.getGrade());
-        List<PartnerAttribute> requirement = ruleEntity.getRequirement();
-        Map<Integer, List<PartnerAttribute>> peopleByType = requirement.stream()
-                .collect(Collectors.groupingBy(PartnerAttribute::getType));
-
         PartnerLiftingRecord record = new PartnerLiftingRecord();
         record.setName(partnerUser.getName());
         record.setMobile(partnerUser.getMobile());
         record.setUserId(partnerUser.getUserId());
         record.setDeptId(partnerUser.getDeptId());
         record.setDeptName(partnerUser.getDeptName());
-        record.setType("1");
+        record.setType("0");
         record.setOriginalLevel(userGradeParam.getGrade());
         switch (userGradeParam.getGrade()) {
             case "1":
@@ -188,37 +190,26 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
                 break;
 
         }
-        record.setCycle(getMessage(peopleByType.get(1), true));
-        record.setUpgradeStrategy("");
+        record.setCycle(getMessage(ruleEntity));
+        record.setUpgradeStrategy(ruleService.verifyUpgradeConditionsMessage(userGradeParam.getId(),userGradeParam.getGrade()));
         return liftingRecordService.saveLiftingRecord(record);
     }
 
 
-    public String getMessage(List<PartnerAttribute> partnerAttributes,boolean isUpgrade){
+    public String getMessage(PartnerRuleEntity ruleEntity){
         String message = "";
-       if (isUpgrade){
-           for (PartnerAttribute partnerAttribute : partnerAttributes) {
-               String cycle = partnerAttribute.getCycle();
-               if (StringUtils.equals("1",cycle)){
-                   message = "成为该等级后,无限期";
-               } else if (StringUtils.equals("2",cycle)){
-                   message = "成为该等级后,限期" + partnerAttribute.getFixedDays() + "天";
-               }else if (StringUtils.equals("3",cycle)){
-                   message = "成为该等级后,固定限期" + partnerAttribute.getMin() + "至" + partnerAttribute.getMax();
-               }
-           }
-       }else {
-           for (PartnerAttribute attribute : partnerAttributes) {
-               String attributeRequirement = attribute.getRequirement();
-               if (StringUtils.equals("1",attributeRequirement)){
-                   //邀请合伙人
-                   message = "邀请" + attribute.getMin() + "个合伙人";
-               }else if (StringUtils.equals("2",attributeRequirement)){
-                   // 出单保费
-                   message = "出单保费" + attribute.getMin() + "至" + attribute.getMax();
-               }
-           }
-       }
+        PartnerAttribute entityCycle = ruleEntity.getCycle();
+        switch (entityCycle.getCycle()){
+            case "1":
+                message = "成为该等级后,无限期";
+                break;
+            case "2":
+                message = "成为该等级后,限期" + entityCycle.getFixedDays() + "天";
+                break;
+            case "3":
+                message = "成为该等级后,固定限期" + entityCycle.getMin() + "至" + entityCycle.getMax();
+                break;
+        }
         return message;
     }
 

+ 1 - 0
src/main/java/com/ydtech/modules/partner/service/PartnerRuleService.java

@@ -20,6 +20,7 @@ public interface PartnerRuleService {
      */
     boolean verifyUpgradeConditions(String userId,  String grade);
 
+    String verifyUpgradeConditionsMessage(String userId,  String grade);
 
     PartnerRuleEntity selectByGrade(String grade);
 

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

@@ -923,4 +923,75 @@ select grade,grade_name from  partner_rule
         SELECT * from  partner_user where user_id = #{referrerId} order by grade desc
     </select>
 
+
+
+
+    <select id="assessment" resultType="java.lang.Integer">
+        SELECT
+        COUNT( 1 )
+        FROM
+        partner_user u
+        LEFT JOIN sys_user_track  t ON u.user_id = t.user_id
+        WHERE u.referrer_id = #{userId} and u.grade = #{grade}
+        <if test="period.startDate != null and period.endDate != null">
+            AND t.approve_time BETWEEN #{period.startDate} AND #{period.endDate}
+        </if>
+    </select>
+
+
+
+
+    <select id="selectTotalSumPremium" resultType="java.math.BigDecimal">
+        SELECT SUM(DISTINCT sumpremium) FROM partner_premium_details WHERE user_id IN(
+            WITH RECURSIVE cte_name AS (
+                SELECT
+                    user_id,
+                    referrer_id,
+                    CAST(user_id AS CHAR(200)) AS path
+                FROM partner_user
+                WHERE user_id = #{userId} AND grade = #{grade}
+                UNION ALL
+                SELECT
+                    t.user_id,
+                    t.referrer_id,
+                    CONCAT(cte_name.path, '->', t.user_id)
+                FROM partner_user t
+                         INNER JOIN cte_name ON t.referrer_id = cte_name.user_id
+                WHERE cte_name.path NOT LIKE CONCAT('%->', t.user_id, '%')
+            )
+            SELECT DISTINCT user_id FROM cte_name
+        )
+        <if test="period.startDate != null and period.endDate != null">
+            AND create_time BETWEEN #{period.startDate} AND #{period.endDate}
+        </if>
+    </select>
+
+
+    <select id="querySuperiors" resultType="java.lang.String">
+        WITH RECURSIVE cte_name AS (
+            SELECT
+                user_id,
+                referrer_id,
+                grade,
+                CAST(user_id AS CHAR(200)) AS path
+            FROM partner_user
+            WHERE user_id = #{userId}
+
+            UNION ALL
+
+            SELECT
+                t.user_id,
+                t.referrer_id,
+                t.grade,
+                CONCAT(cte_name.path, '->', t.user_id)
+            FROM partner_user t
+                     INNER JOIN cte_name
+                                ON t.user_id = cte_name.referrer_id
+            WHERE
+                cte_name.path NOT LIKE CONCAT('%->', t.user_id, '%')
+        )
+        SELECT user_id FROM cte_name WHERE grade = #{grade}
+    </select>
+
+
 </mapper>