xuqiang 1 an în urmă
părinte
comite
0900c9b9f1

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

@@ -302,7 +302,7 @@ public class SysLoginController {
         String token = StpUtil.createLoginSession(user.getId());
         String token = StpUtil.createLoginSession(user.getId());
         StpUtil.getSessionByLoginId(user.getId()).set(SaSession.USER, user);
         StpUtil.getSessionByLoginId(user.getId()).set(SaSession.USER, user);
         aapLoginVo.setToken(token);
         aapLoginVo.setToken(token);
-        //SpringUtil.getBean(ExpiredCommissionUtils.class).checkCommissionExpireTime(user.getId());
+        SpringUtil.getBean(ExpiredCommissionUtils.class).initializeExpirationTime(user.getId());
         return HttpResult.ok("登录成功", aapLoginVo);
         return HttpResult.ok("登录成功", aapLoginVo);
 
 
     }
     }

+ 14 - 2
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -339,7 +339,13 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             details.setJqpremium(insAreaCompany.getJqpremium());
             details.setJqpremium(insAreaCompany.getJqpremium());
             details.setSypremium(insAreaCompany.getSypremium());
             details.setSypremium(insAreaCompany.getSypremium());
             details.setJypremium(insAreaCompany.getJypremium());
             details.setJypremium(insAreaCompany.getJypremium());
-            BigDecimal bigDecimal = CalculateCommissionUtils.calculateCommission(String.valueOf(user.getGrade()), user.getUserId(),userId3,userId4);
+            BigDecimal bigDecimal;
+            BigDecimal commissionRate = user.getCommissionRate();
+            if (null == commissionRate || commissionRate.compareTo(new BigDecimal("0")) == 0){
+                bigDecimal = CalculateCommissionUtils.calculateCommission(String.valueOf(user.getGrade()), user.getUserId(),userId3,userId4);
+            }else {
+                bigDecimal = commissionRate;
+            }
             details.setProportional(String.valueOf(bigDecimal));
             details.setProportional(String.valueOf(bigDecimal));
             details.setExtractFee(details.getSumpremium().multiply(bigDecimal.divide(new BigDecimal("100"))).setScale(2, RoundingMode.DOWN));
             details.setExtractFee(details.getSumpremium().multiply(bigDecimal.divide(new BigDecimal("100"))).setScale(2, RoundingMode.DOWN));
             details.setStatus(0);
             details.setStatus(0);
@@ -380,7 +386,13 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         details.setJqpremium(insAreaCompany.getJqpremium());
         details.setJqpremium(insAreaCompany.getJqpremium());
         details.setSypremium(insAreaCompany.getSypremium());
         details.setSypremium(insAreaCompany.getSypremium());
         details.setJypremium(insAreaCompany.getJypremium());
         details.setJypremium(insAreaCompany.getJypremium());
-        BigDecimal bigDecimal = CalculateCommissionUtils.calculateCommission(String.valueOf(partnerUser.getGrade()), partnerUser.getUserId(),userId3,userId4);
+        BigDecimal commissionRate = partnerUser.getCommissionRate();
+        BigDecimal bigDecimal;
+        if (null == commissionRate || commissionRate.compareTo(new BigDecimal("0")) == 0){
+            bigDecimal = CalculateCommissionUtils.calculateCommission(String.valueOf(partnerUser.getGrade()), partnerUser.getUserId(),userId3,userId4);
+        }else {
+            bigDecimal = commissionRate;
+        }
         details.setProportional(String.valueOf(bigDecimal));
         details.setProportional(String.valueOf(bigDecimal));
         details.setExtractFee(details.getSumpremium().multiply(bigDecimal.divide(new BigDecimal("100"))).setScale(2, RoundingMode.DOWN));
         details.setExtractFee(details.getSumpremium().multiply(bigDecimal.divide(new BigDecimal("100"))).setScale(2, RoundingMode.DOWN));
         details.setStatus(0);
         details.setStatus(0);

+ 0 - 7
src/main/java/com/ydtech/modules/partner/controller/ExpiredCommissionController.java

@@ -50,11 +50,4 @@ public class ExpiredCommissionController extends BaseController {
     }
     }
 
 
 
 
-
-    @GetMapping("/asdas")
-    public HttpResult asdas(){
-        SpringUtil.getBean(ExpiredCommissionUtils.class).checkCommissionExpireTime("99140105M36001");
-        return HttpResult.ok();
-    }
-
 }
 }

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

@@ -13,7 +13,8 @@ import java.math.BigDecimal;
 public interface PartnerPartnerAccountMapper extends BaseMapper<PartnerPartnerAccount> {
 public interface PartnerPartnerAccountMapper extends BaseMapper<PartnerPartnerAccount> {
 
 
 
 
-    @Select("SELECT * FROM partner_partner_account WHERE user_id = #{userId} AND grade =( SELECT min( grade) FROM partner_partner_account WHERE user_id = #{userId} )")
+    @Select("SELECT SUM(history_fee) AS historyFee,SUM(cash_fee) AS cashFee,SUM(DISTINCT sum_Premium) AS sumPremium,(SELECT SUM(extract_fee)  FROM partner_partner_account WHERE user_id = #{userId}) AS extractFee  FROM partner_partner_account WHERE (user_id,grade) IN( " +
+            " SELECT user_id,grade FROM partner_user WHERE identity_status = 0  AND user_id = #{userId} )")
     PartnerPartnerAccount selectByUserId(String userId);
     PartnerPartnerAccount selectByUserId(String userId);
 
 
     @Select("SELECT cash_fee FROM partner_partner_account WHERE user_id = #{userId} AND grade = #{grade}")
     @Select("SELECT cash_fee FROM partner_partner_account WHERE user_id = #{userId} AND grade = #{grade}")

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

@@ -48,7 +48,7 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
     @Select("select  MIN(grade) as grade from partner_user where user_id= #{userId}  ")
     @Select("select  MIN(grade) as grade from partner_user where user_id= #{userId}  ")
     Integer selectGradeMin(String userId);
     Integer selectGradeMin(String userId);
 
 
-    @Select("select  MIN(grade) as grade from partner_user where  user_id=  #{userId}  ")
+    @Select("select  MIN(grade) as grade from partner_user where  identity_status = 0 and user_id=  #{userId}  ")
     Integer selectGradeIntMin(String userId);
     Integer selectGradeIntMin(String userId);
 
 
 
 
@@ -156,7 +156,7 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
     UserRuleVo queryUserRuleVo(@Param("userId") String userId, @Param("grade")Integer grade,@Param("period") CommissionValidityPeriod period);
     UserRuleVo queryUserRuleVo(@Param("userId") String userId, @Param("grade")Integer grade,@Param("period") CommissionValidityPeriod period);
 
 
     @Select("SELECT upgrade_cycle_start_time as startDate FROM partner_user WHERE user_id = #{userId} AND grade = #{grade}")
     @Select("SELECT upgrade_cycle_start_time as startDate FROM partner_user WHERE user_id = #{userId} AND grade = #{grade}")
-    CommissionValidityPeriod selectAssessmentCycleTime(@Param("userId") String userId,@Param("grade") Integer grade);
+    CommissionValidityPeriod selectUpgradeCycleStartTime(@Param("userId") String userId,@Param("grade") Integer grade);
 
 
     @Update("UPDATE partner_user SET upgrade_cycle_start_time = #{newDate} WHERE  user_id = #{userId} and grade = #{grade} ")
     @Update("UPDATE partner_user SET upgrade_cycle_start_time = #{newDate} WHERE  user_id = #{userId} and grade = #{grade} ")
     void updateUpgradeCycleStartTime(@Param("userId") String userId, @Param("newDate")Date newDate,@Param("grade") Integer grade);
     void updateUpgradeCycleStartTime(@Param("userId") String userId, @Param("newDate")Date newDate,@Param("grade") Integer grade);

+ 29 - 0
src/main/java/com/ydtech/modules/partner/model/PartnerLiftingRecord.java

@@ -1,6 +1,8 @@
 package com.ydtech.modules.partner.model;
 package com.ydtech.modules.partner.model;
 
 
 
 
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ydtech.modules.base.model.BaseEntity;
 import com.ydtech.modules.base.model.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
@@ -65,4 +67,31 @@ public class PartnerLiftingRecord extends BaseEntity {
     @ApiModelProperty(value = "0-升级解锁;1-降级解锁")
     @ApiModelProperty(value = "0-升级解锁;1-降级解锁")
     private Integer upgradeType;
     private Integer upgradeType;
 
 
+
+    /**
+     * 创建者
+     */
+    @TableField(value = "create_by")
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    /**
+     * 更新者
+     */
+    @TableField(value = "update_by")
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "update_time")
+    private Date updateTime;
+
 }
 }

+ 30 - 1
src/main/java/com/ydtech/modules/partner/model/PartnerUser.java

@@ -4,6 +4,7 @@ package com.ydtech.modules.partner.model;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ydtech.modules.base.model.BaseEntity;
 import com.ydtech.modules.base.model.BaseEntity;
 import com.ydtech.modules.order.entity.po.InsUploadFiles;
 import com.ydtech.modules.order.entity.po.InsUploadFiles;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
@@ -14,7 +15,7 @@ import java.util.Date;
 
 
 
 
 @Data
 @Data
-public class PartnerUser extends BaseEntity {
+public class PartnerUser{
 
 
     @TableId(value = "id",type = IdType.ASSIGN_ID)
     @TableId(value = "id",type = IdType.ASSIGN_ID)
     private String id;
     private String id;
@@ -74,5 +75,33 @@ public class PartnerUser extends BaseEntity {
 
 
     private Date upgradeCycleStartTime;
     private Date upgradeCycleStartTime;
 
 
+    private Date assessmentTime;
+
+    /**
+     * 创建者
+     */
+    @TableField(value = "create_by")
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    /**
+     * 更新者
+     */
+    @TableField(value = "update_by")
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "update_time")
+    private Date updateTime;
+
 
 
 }
 }

+ 6 - 0
src/main/java/com/ydtech/modules/partner/model/vo/MyUserLevel.java

@@ -34,4 +34,10 @@ public class MyUserLevel {
     @ApiModelProperty(value = "等级比例")
     @ApiModelProperty(value = "等级比例")
     private String ratio;
     private String ratio;
 
 
+    @ApiModelProperty(value = "true-申请中")
+    private boolean upgradeStatus;
+
+    @ApiModelProperty(value = "购买保级金额")
+    private BigDecimal fallAmount;
+
 }
 }

+ 29 - 4
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerLiftingRecordServiceImpl.java

@@ -22,6 +22,7 @@ import com.ydtech.modules.partner.service.PartnerLiftingRecordService;
 import com.ydtech.modules.partner.service.PartnerRuleService;
 import com.ydtech.modules.partner.service.PartnerRuleService;
 import com.ydtech.modules.partner.service.PurchaseRecordService;
 import com.ydtech.modules.partner.service.PurchaseRecordService;
 import com.ydtech.modules.partner.utils.ConditionUtils;
 import com.ydtech.modules.partner.utils.ConditionUtils;
+import com.ydtech.modules.partner.utils.PartnerDateUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -168,6 +169,9 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
         partnerUser.setGrade(value);
         partnerUser.setGrade(value);
         partnerUser.setCommissionRate(auditCommission);
         partnerUser.setCommissionRate(auditCommission);
         partnerUser.setIdentityType(1);
         partnerUser.setIdentityType(1);
+        Date date = PartnerDateUtils.addDaysToday(new Date(), 1);
+        partnerUser.setUpgradeCycleStartTime(date);
+        partnerUser.setAssessmentTime(date);
         partnerUserMapper.insert(partnerUser);
         partnerUserMapper.insert(partnerUser);
     }
     }
 
 
@@ -262,21 +266,42 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
     }
     }
 
 
     @Override
     @Override
-    public Long selectDowngradeRecord(String userId, Integer grade) {
+    public Long selectDowngradeRecord(String userId, Integer grade,Integer  type) {
+        LambdaQueryWrapper<PartnerLiftingRecord> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PartnerLiftingRecord::getUserId, userId);
+        if (0 ==  type){
+            wrapper.eq(PartnerLiftingRecord::getAfterChange, grade);
+        }else {
+            wrapper.eq(PartnerLiftingRecord::getOriginalLevel, grade);
+        }
+        wrapper.eq(PartnerLiftingRecord::getUpgradeType, type);
+        wrapper.eq(PartnerLiftingRecord::getAuditStatus, 0);
+        return baseMapper.selectCount(wrapper);
+    }
+
+    @Override
+    public Long selectQueryDowngradeStatus(String userId, Integer grade) {
         LambdaQueryWrapper<PartnerLiftingRecord> wrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<PartnerLiftingRecord> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(PartnerLiftingRecord::getUserId, userId);
         wrapper.eq(PartnerLiftingRecord::getUserId, userId);
         wrapper.eq(PartnerLiftingRecord::getOriginalLevel, grade);
         wrapper.eq(PartnerLiftingRecord::getOriginalLevel, grade);
-        wrapper.eq(PartnerLiftingRecord::getUpgradeType, 1);
+        wrapper.eq(PartnerLiftingRecord::getType, 1);
         wrapper.eq(PartnerLiftingRecord::getAuditStatus, 0);
         wrapper.eq(PartnerLiftingRecord::getAuditStatus, 0);
         return baseMapper.selectCount(wrapper);
         return baseMapper.selectCount(wrapper);
     }
     }
 
 
     private void updateUserIdentityStatus(PartnerLiftingRecord liftingRecord, BigDecimal auditCommission) {
     private void updateUserIdentityStatus(PartnerLiftingRecord liftingRecord, BigDecimal auditCommission) {
-        PartnerUser selectOne = partnerUserMapper.selectOne(new LambdaQueryWrapper<>(PartnerUser.class).eq(PartnerUser::getUserId, liftingRecord.getUserId())
-                .eq(PartnerUser::getGrade, liftingRecord.getOriginalLevel()));
+        PartnerLiftingRecord record = baseMapper.selectById(liftingRecord.getId());
+        if (record == null){
+            throw new RuntimeException("数据不存在");
+        }
+        PartnerUser selectOne = partnerUserMapper.selectOne(new LambdaQueryWrapper<>(PartnerUser.class).eq(PartnerUser::getUserId, record.getUserId())
+                .eq(PartnerUser::getGrade, record.getAfterChange()));
         if (selectOne != null && selectOne.isIdentityStatus()){
         if (selectOne != null && selectOne.isIdentityStatus()){
             selectOne.setIdentityStatus(false);
             selectOne.setIdentityStatus(false);
             selectOne.setCommissionRate(auditCommission);
             selectOne.setCommissionRate(auditCommission);
+            Date date = PartnerDateUtils.addDaysToday(new Date(), 1);
+            selectOne.setUpgradeCycleStartTime(date);
+            selectOne.setAssessmentTime(date);
             partnerUserMapper.updateById(selectOne);
             partnerUserMapper.updateById(selectOne);
         }else {
         }else {
             throw new RuntimeException("解锁失败");
             throw new RuntimeException("解锁失败");

+ 8 - 2
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerRuleServiceImpl.java

@@ -129,6 +129,9 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
 
 
     @Override
     @Override
     public boolean verifyUpgradeConditions(String userId, String grade) {
     public boolean verifyUpgradeConditions(String userId, String grade) {
+        if (StringUtils.equals("1", grade) || StringUtils.equals("0", grade)){
+            return false;
+        }
         VerifyData data = extractCommonLogic(userId, grade);
         VerifyData data = extractCommonLogic(userId, grade);
         PartnerRuleEntity partnerRuleEntity = data.partnerRuleEntity;
         PartnerRuleEntity partnerRuleEntity = data.partnerRuleEntity;
         BigDecimal p = data.p;
         BigDecimal p = data.p;
@@ -216,6 +219,9 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
         if (bf == null){
         if (bf == null){
             bf = BigDecimal.ZERO;
             bf = BigDecimal.ZERO;
         }
         }
+        if (ownBf == null){
+            ownBf = BigDecimal.ZERO;
+        }
         return new VerifyData(partnerRuleEntity, p, bf,ownBf);
         return new VerifyData(partnerRuleEntity, p, bf,ownBf);
     }
     }
 
 
@@ -225,7 +231,7 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
             throw new SystemException("合作伙伴规则实体不能为空");
             throw new SystemException("合作伙伴规则实体不能为空");
         }
         }
         partnerRuleEntity.getStrategyArray();
         partnerRuleEntity.getStrategyArray();
-        CommissionValidityPeriod period = partnerUserMapper.selectAssessmentCycleTime(userId, Integer.valueOf(grade));
+        CommissionValidityPeriod period = partnerUserMapper.selectUpgradeCycleStartTime(userId, Integer.valueOf(grade));
         period.setEndDate(SpringUtil.getBean(ExpiredCommissionUtils.class).generateDowngradeTime(grade,period.getStartDate()));
         period.setEndDate(SpringUtil.getBean(ExpiredCommissionUtils.class).generateDowngradeTime(grade,period.getStartDate()));
         BigDecimal p = getInviteData(userId, grade, period);
         BigDecimal p = getInviteData(userId, grade, period);
         BigDecimal bf = partnerUserMapper.selectTotalSumPremium(userId, grade, period);
         BigDecimal bf = partnerUserMapper.selectTotalSumPremium(userId, grade, period);
@@ -358,7 +364,7 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
 
 
     @Override
     @Override
     public List<PartnerRule> selectAll() {
     public List<PartnerRule> selectAll() {
-        return baseMapper.selectList(new LambdaQueryWrapper<>());
+        return baseMapper.selectList(new LambdaQueryWrapper<>(PartnerRule.class).orderByAsc(PartnerRule::getGrade));
     }
     }
 
 
 
 

+ 29 - 20
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerUserServiceImpl.java

@@ -95,7 +95,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
     public List<RelationalVo>  relationalQuery(String id) {
     public List<RelationalVo>  relationalQuery(String id) {
         List<RelationalVo> list = new ArrayList<>();
         List<RelationalVo> list = new ArrayList<>();
 
 
-        Integer grade = baseMapper.selectGradeIntMin(id);
+        Integer grade = baseMapper.selectGradeMin(id);
         List<RelationalVo> partnerUsers = baseMapper.selectByUserId(id,grade);
         List<RelationalVo> partnerUsers = baseMapper.selectByUserId(id,grade);
         if (1 < grade){
         if (1 < grade){
             querySuperiors(list, grade,partnerUsers);
             querySuperiors(list, grade,partnerUsers);
@@ -173,6 +173,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
 
 
     @Override
     @Override
     public HttpResult submitLiftingRecord(UserGradeParam userGradeParam) {
     public HttpResult submitLiftingRecord(UserGradeParam userGradeParam) {
+        userGradeParam.setGrade(String.valueOf(Integer.valueOf(userGradeParam.getGrade()) + 1));
         if (StringUtils.equals("1",userGradeParam.getGrade())){
         if (StringUtils.equals("1",userGradeParam.getGrade())){
             return HttpResult.error("当前用户无法升级");
             return HttpResult.error("当前用户无法升级");
         }
         }
@@ -390,7 +391,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         BigDecimal p = ruleService.getInviteData(userId, grade, period);
         BigDecimal p = ruleService.getInviteData(userId, grade, period);
         BigDecimal ownBf = baseMapper.selectOwnSumPremium(userId, period);
         BigDecimal ownBf = baseMapper.selectOwnSumPremium(userId, period);
         List<PartnerAttribute> requirement = partnerRuleEntity.getRequirement();
         List<PartnerAttribute> requirement = partnerRuleEntity.getRequirement();
-        return getAttribute(partnerRuleEntity, new BigDecimal(362), new BigDecimal(1), new BigDecimal(159), requirement);
+        return getAttribute(partnerRuleEntity,bf, p, ownBf, requirement);
     }
     }
 
 
     private HttpResult getAttribute(PartnerRuleEntity partnerRuleEntity, BigDecimal bf, BigDecimal p, BigDecimal ownBf, List<PartnerAttribute> requirement) {
     private HttpResult getAttribute(PartnerRuleEntity partnerRuleEntity, BigDecimal bf, BigDecimal p, BigDecimal ownBf, List<PartnerAttribute> requirement) {
@@ -407,7 +408,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
             return HttpResult.error("等级不存在");
             return HttpResult.error("等级不存在");
         }
         }
         partnerRuleEntity.setRequirement(null);
         partnerRuleEntity.setRequirement(null);
-        CommissionValidityPeriod period = baseMapper.selectAssessmentCycleTime(userId, Integer.valueOf(grade));
+        CommissionValidityPeriod period = baseMapper.selectUpgradeCycleStartTime(userId, Integer.valueOf(grade));
         period.setEndDate(SpringUtil.getBean(ExpiredCommissionUtils.class).generateDowngradeTime(grade,period.getStartDate()));
         period.setEndDate(SpringUtil.getBean(ExpiredCommissionUtils.class).generateDowngradeTime(grade,period.getStartDate()));
         partnerRuleEntity.setAssessmentEndDate(period.getEndDate().split(" ")[0]);
         partnerRuleEntity.setAssessmentEndDate(period.getEndDate().split(" ")[0]);
         BigDecimal bf = baseMapper.selectTotalSumPremium(userId, grade, period);
         BigDecimal bf = baseMapper.selectTotalSumPremium(userId, grade, period);
@@ -423,11 +424,11 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         if (partnerRules == null || userId == null || userMap == null) {
         if (partnerRules == null || userId == null || userMap == null) {
             return list; // 输入参数校验
             return list; // 输入参数校验
         }
         }
-
         for (PartnerRule rule : partnerRules) {
         for (PartnerRule rule : partnerRules) {
             Integer grade = rule.getGrade();
             Integer grade = rule.getGrade();
             PartnerUser partnerUser = userMap.get(grade);
             PartnerUser partnerUser = userMap.get(grade);
             MyUserLevel level = new MyUserLevel();
             MyUserLevel level = new MyUserLevel();
+            level.setFallAmount(rule.getFallAmount());
             level.setRatio(getProportion(grade));
             level.setRatio(getProportion(grade));
             level.setGrade(grade);
             level.setGrade(grade);
             level.setGradeName(rule.getGradeName());
             level.setGradeName(rule.getGradeName());
@@ -435,10 +436,22 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
             if (partnerUser == null) {
             if (partnerUser == null) {
                 level.setLockingState("0");
                 level.setLockingState("0");
                 level.setProgressBar(0);
                 level.setProgressBar(0);
+                if (1 != grade){
+                    boolean verified = ruleService.verifyUpgradeConditions(userId, String.valueOf(grade + 1));
+                    if (verified) {
+                        level.setUpgrade(true);
+                        level.setProgressBar(2);
+                    }else {
+                        level.setProgressBar(1);
+                    }
+                }
+                Long count = liftingRecordService.selectDowngradeRecord(userId,grade,0);
+                if (count > 0){
+                    level.setUpgradeStatus(true);
+                }
             } else {
             } else {
                 level.setUserId(userId);
                 level.setUserId(userId);
                 level.setUserName(partnerUser.getName());
                 level.setUserName(partnerUser.getName());
-
                 if (partnerUser.isIdentityStatus()) {
                 if (partnerUser.isIdentityStatus()) {
                     level.setLockingState("2");
                     level.setLockingState("2");
                     level.setLockCommission(accountMapper.selectCashFee(partnerUser.getUserId(), partnerUser.getGrade()));
                     level.setLockCommission(accountMapper.selectCashFee(partnerUser.getUserId(), partnerUser.getGrade()));
@@ -447,21 +460,18 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
                                 .atZone(ZoneId.systemDefault()).toLocalDate();
                                 .atZone(ZoneId.systemDefault()).toLocalDate();
                         level.setZeroDays(ChronoUnit.DAYS.between(LocalDate.now(), upgradeCycleStartDate));
                         level.setZeroDays(ChronoUnit.DAYS.between(LocalDate.now(), upgradeCycleStartDate));
                     }
                     }
+                    boolean verified = ruleService.verifyUpgradeConditions(partnerUser.getUserId(), String.valueOf(partnerUser.getGrade() + 1));
+                    if (verified) {
+                        level.setUpgrade(true);
+                    }
+                    Long count = liftingRecordService.selectDowngradeRecord(partnerUser.getUserId(),partnerUser.getGrade() + 1,1);
+                    if (count > 0){
+                        level.setUpgradeStatus(true);
+                    }
                 } else {
                 } else {
                     level.setLockingState("1");
                     level.setLockingState("1");
                 }
                 }
-
                 level.setProgressBar(2);
                 level.setProgressBar(2);
-
-                if (grade != null && grade != 1) {
-                    boolean verified = partnerUser.isIdentityStatus()
-                            ? ruleService.verifyDowngradeUpgradeConditions(userId, String.valueOf(grade))
-                            : ruleService.verifyUpgradeConditions(userId, String.valueOf(grade));
-                    if (verified) {
-                        level.setProgressBar(1);
-                    }
-                    level.setUpgrade(verified);
-                }
             }
             }
             list.add(level);
             list.add(level);
         }
         }
@@ -648,10 +658,9 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
     }
     }
 
 
     private void getRule(List<PartnerRuleEntity> partnerRuleEntities, ExpiredCommissionUtils commissionUtils, TeamOverviewVo overviewVo, PartnerUser partnerUser) {
     private void getRule(List<PartnerRuleEntity> partnerRuleEntities, ExpiredCommissionUtils commissionUtils, TeamOverviewVo overviewVo, PartnerUser partnerUser) {
-        PartnerRuleEntity ruleEntity = commissionUtils.getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
-        boolean checked = commissionUtils.checkUpgradeConditions(partnerUser, ruleEntity.getAppraise(), ruleEntity.getStrategyArray());
+        boolean checked = commissionUtils.checkUpgradeConditions(partnerUser);
         overviewVo.setUpgradeStatus(checked ? 1 : 0);
         overviewVo.setUpgradeStatus(checked ? 1 : 0);
-        Long count = liftingRecordService.selectDowngradeRecord(partnerUser.getUserId(), partnerUser.getGrade());
+        Long count = liftingRecordService.selectDowngradeRecord(partnerUser.getUserId(), partnerUser.getGrade(),1);
         if (count > 0){
         if (count > 0){
             overviewVo.setUpgradeStatus(2);
             overviewVo.setUpgradeStatus(2);
         }
         }
@@ -891,7 +900,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         String userId = BaseController.getUserId();
         String userId = BaseController.getUserId();
         AppUserInfoVo appUserInfoVo = sysUserMapper.queryByUserId(userId);
         AppUserInfoVo appUserInfoVo = sysUserMapper.queryByUserId(userId);
         Integer min = baseMapper.selectGradeIntMin(userId);
         Integer min = baseMapper.selectGradeIntMin(userId);
-        appUserInfoVo.setGrade(min);
+        appUserInfoVo.setGrade(null == min ? 4 : min);
         PartnerUser partnerUser = baseMapper.selectOne(new LambdaQueryWrapper<>(PartnerUser.class)
         PartnerUser partnerUser = baseMapper.selectOne(new LambdaQueryWrapper<>(PartnerUser.class)
                 .eq(PartnerUser::getUserId, userId)
                 .eq(PartnerUser::getUserId, userId)
                 .eq(PartnerUser::getGrade, min));
                 .eq(PartnerUser::getGrade, min));

+ 3 - 1
src/main/java/com/ydtech/modules/partner/service/PartnerLiftingRecordService.java

@@ -31,5 +31,7 @@ public interface PartnerLiftingRecordService {
 
 
     HttpResult downgradeAudit(LiftingRecordAudit audit);
     HttpResult downgradeAudit(LiftingRecordAudit audit);
 
 
-    Long selectDowngradeRecord(String userId, Integer grade);
+    Long selectDowngradeRecord(String userId, Integer grade, Integer type);
+
+    Long selectQueryDowngradeStatus(String userId, Integer grade);
 }
 }

+ 5 - 3
src/main/java/com/ydtech/modules/partner/utils/CalculateCommissionUtils.java

@@ -62,14 +62,17 @@ public class CalculateCommissionUtils {
     private static CommissionValues calculateCommonValues(String grade, String userId, PartnerCommissionRules rules,String type,String userId3,String userId4) {
     private static CommissionValues calculateCommonValues(String grade, String userId, PartnerCommissionRules rules,String type,String userId3,String userId4) {
         CommissionValidityPeriod period = new CommissionValidityPeriod();
         CommissionValidityPeriod period = new CommissionValidityPeriod();
         Set<String> userIdList = Collections.emptySet();
         Set<String> userIdList = Collections.emptySet();
+        BigDecimal grBf = null;
         if (StringUtils.equals("gzs", type)){
         if (StringUtils.equals("gzs", type)){
+            grBf = queryPersonalInsurancePremiums(userId4,period);
             period = getCommissionValidityPeriod(rules, userId4, "4");
             period = getCommissionValidityPeriod(rules, userId4, "4");
             userIdList = partnerUserMapper.querySubordinateUserId(userId4);
             userIdList = partnerUserMapper.querySubordinateUserId(userId4);
         }else if (StringUtils.equals("hh", type)){
         }else if (StringUtils.equals("hh", type)){
+            grBf = queryPersonalInsurancePremiums(userId3,period);
             period = getCommissionValidityPeriod(rules, userId3, "3");
             period = getCommissionValidityPeriod(rules, userId3, "3");
             userIdList = partnerUserMapper.querySubordinate(userId3);
             userIdList = partnerUserMapper.querySubordinate(userId3);
         }
         }
-        BigDecimal sumPremium = java.math.BigDecimal.ZERO;
+        BigDecimal sumPremium = BigDecimal.ZERO;
         if (CollectionUtil.isNotEmpty(userIdList)) {
         if (CollectionUtil.isNotEmpty(userIdList)) {
             QueryWrapper<PartnerPremiumDetails> queryWrapper = new QueryWrapper<>();
             QueryWrapper<PartnerPremiumDetails> queryWrapper = new QueryWrapper<>();
             queryWrapper.in("user_id", userIdList);
             queryWrapper.in("user_id", userIdList);
@@ -77,7 +80,7 @@ public class CalculateCommissionUtils {
                 queryWrapper.between("create_time", period.getStartDate(), period.getEndDate());
                 queryWrapper.between("create_time", period.getStartDate(), period.getEndDate());
             }
             }
             BigDecimal totalSumPremium = partnerPremiumDetailsMapper.selectTotalSumPremium(queryWrapper);
             BigDecimal totalSumPremium = partnerPremiumDetailsMapper.selectTotalSumPremium(queryWrapper);
-            sumPremium = Optional.ofNullable(totalSumPremium).orElse(java.math.BigDecimal.ZERO);
+            sumPremium = Optional.ofNullable(totalSumPremium).orElse(BigDecimal.ZERO);
         }
         }
         Integer number = 0;
         Integer number = 0;
 
 
@@ -90,7 +93,6 @@ public class CalculateCommissionUtils {
             log.info("用户id{}++{}级用户++出单人的上级用户{}++统计的保单金额{}++统计的邀请人数{}",
             log.info("用户id{}++{}级用户++出单人的上级用户{}++统计的保单金额{}++统计的邀请人数{}",
                     userId, grade, userId3, sumPremium, number);
                     userId, grade, userId3, sumPremium, number);
         }
         }
-        BigDecimal grBf = queryPersonalInsurancePremiums(userId,period);
         return new CommissionValues(sumPremium, new BigDecimal(number),grBf);
         return new CommissionValues(sumPremium, new BigDecimal(number),grBf);
     }
     }
 
 

+ 66 - 43
src/main/java/com/ydtech/modules/partner/utils/ExpiredCommissionUtils.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.partner.utils;
 
 
 
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ydtech.modules.partner.dao.PartnerUserMapper;
 import com.ydtech.modules.partner.dao.PartnerUserMapper;
 import com.ydtech.modules.partner.model.PartnerAttribute;
 import com.ydtech.modules.partner.model.PartnerAttribute;
@@ -87,52 +88,64 @@ public class ExpiredCommissionUtils {
         partnerUserMapper.updateUpgradeTimeByDate(userId, newDate,grade);
         partnerUserMapper.updateUpgradeTimeByDate(userId, newDate,grade);
     }
     }
 
 
-
     /**
     /**
-     * TODO: 登录计算用户身份是否过期
+     * 登录初始化过期时间
      */
      */
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public void checkCommissionExpireTime(String userId) {
-        // TODO等级规则
-        List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    public void initializeExpirationTime(String userId) {
         List<PartnerUser> partnerUsers = partnerUserMapper.selectList(new QueryWrapper<PartnerUser>().eq("user_id", userId));
         List<PartnerUser> partnerUsers = partnerUserMapper.selectList(new QueryWrapper<PartnerUser>().eq("user_id", userId));
         for (PartnerUser partnerUser : partnerUsers) {
         for (PartnerUser partnerUser : partnerUsers) {
-            if (1 == partnerUser.getGrade() || partnerUser.isIdentityStatus()) {
-                continue;
-            }
-            PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
-            Integer khDays = rule.getKhDays();
-            Date upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(userId, partnerUser.getGrade());
-            if (upgradeStartTime == null) {
+            if (null == partnerUser.getUpgradeCycleStartTime()){
                 partnerUserMapper.updateUpgradeStartTime(userId, partnerUser.getGrade());
                 partnerUserMapper.updateUpgradeStartTime(userId, partnerUser.getGrade());
-            }else {
-                //TODO    更新考核周期
-                updateUpgradeCycleTime(partnerUser,rule, upgradeStartTime);
-            }
-            upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(userId, partnerUser.getGrade());
-            System.out.println("开始时间:" + formatter.format(upgradeStartTime));
-            //  生成结束时间
-            Date upgradeEndTime = PartnerDateUtils.addDays(upgradeStartTime, khDays);
-            System.out.println("结束时间:" + formatter.format(upgradeEndTime));
-            //   判断当前时间是否大于考核周期时间
-            boolean withinDays = PartnerDateUtils.isBefore(upgradeEndTime);
-            if (withinDays){
-                List<PartnerAttribute> strategyArray = rule.getStrategyArray();
-                String appraise = rule.getAppraise();
-                // TODO考核条件  不满足时需锁定
-                boolean checked = checkUpgradeConditions(partnerUser, appraise, strategyArray);
-                if (checked){
-                    // TODO 满足
-                }else {
-                    //TODO  不满足
-                    generateLockRecords(partnerUser);
-                }
-
             }
             }
         }
         }
     }
     }
 
 
+    /**
+     * TODO: 登录计算用户身份是否过期
+     */
+//    @Transactional(rollbackFor = Exception.class)
+//    public void checkCommissionExpireTime(String userId) {
+//        // TODO等级规则
+//        List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
+//        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//        List<PartnerUser> partnerUsers = partnerUserMapper.selectList(new QueryWrapper<PartnerUser>().eq("user_id", userId));
+//        for (PartnerUser partnerUser : partnerUsers) {
+//            if (1 == partnerUser.getGrade() || partnerUser.isIdentityStatus()) {
+//                continue;
+//            }
+//            PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
+//            Integer khDays = rule.getKhDays();
+//            Date upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(userId, partnerUser.getGrade());
+//            if (upgradeStartTime == null) {
+//                partnerUserMapper.updateUpgradeStartTime(userId, partnerUser.getGrade());
+//            }else {
+//                //TODO    更新考核周期
+//                updateUpgradeCycleTime(partnerUser,rule, upgradeStartTime);
+//            }
+//            upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(userId, partnerUser.getGrade());
+//            System.out.println("开始时间:" + formatter.format(upgradeStartTime));
+//            //  生成结束时间
+//            Date upgradeEndTime = PartnerDateUtils.addDays(upgradeStartTime, khDays);
+//            System.out.println("结束时间:" + formatter.format(upgradeEndTime));
+//            //   判断当前时间是否大于考核周期时间
+//            boolean withinDays = PartnerDateUtils.isBefore(upgradeEndTime);
+//            if (withinDays){
+//                List<PartnerAttribute> strategyArray = rule.getStrategyArray();
+//                String appraise = rule.getAppraise();
+//                // TODO考核条件  不满足时需锁定
+//                boolean checked = checkUpgradeConditions(partnerUser, appraise, strategyArray);
+//                if (checked){
+//                    // TODO 满足
+//                }else {
+//                    //TODO  不满足
+//                    generateLockRecords(partnerUser);
+//                }
+//
+//            }
+//        }
+//    }
+
     public  void updateUpgradeCycleTime(PartnerUser partnerUser,PartnerRuleEntity rule,Date upgradeTime) {
     public  void updateUpgradeCycleTime(PartnerUser partnerUser,PartnerRuleEntity rule,Date upgradeTime) {
         Integer khDays = rule.getKhDays();
         Integer khDays = rule.getKhDays();
         while (!PartnerDateUtils.isWithinDays(upgradeTime, khDays)) {
         while (!PartnerDateUtils.isWithinDays(upgradeTime, khDays)) {
@@ -146,10 +159,14 @@ public class ExpiredCommissionUtils {
      * @param partnerUser
      * @param partnerUser
      */
      */
     public  void generateLockRecords(PartnerUser partnerUser){
     public  void generateLockRecords(PartnerUser partnerUser){
+        Long aLong = liftingRecordService.selectQueryDowngradeStatus(partnerUser.getUserId(), partnerUser.getGrade());
+        if (aLong > 0){
+            return;
+        }
         PartnerUser selectOne = partnerUserMapper.selectOne(new QueryWrapper<PartnerUser>().eq("user_id", partnerUser.getUserId()).eq("grade", (partnerUser.getGrade() + 1)));
         PartnerUser selectOne = partnerUserMapper.selectOne(new QueryWrapper<PartnerUser>().eq("user_id", partnerUser.getUserId()).eq("grade", (partnerUser.getGrade() + 1)));
         PartnerUser user = new PartnerUser();
         PartnerUser user = new PartnerUser();
         BeanUtil.copyProperties(partnerUser,user);
         BeanUtil.copyProperties(partnerUser,user);
-        user.setGrade(partnerUser.getGrade() + 1);
+        user.setGrade(4 == partnerUser.getGrade() ? 4 : partnerUser.getGrade() + 1);
         user.setReferrerId(partnerUser.getUserId());
         user.setReferrerId(partnerUser.getUserId());
         user.setId(null);
         user.setId(null);
         if (Objects.isNull(selectOne) && 4 != partnerUser.getGrade()){
         if (Objects.isNull(selectOne) && 4 != partnerUser.getGrade()){
@@ -157,10 +174,8 @@ public class ExpiredCommissionUtils {
         }
         }
         partnerUser.setIdentityStatus(true);
         partnerUser.setIdentityStatus(true);
         partnerUserMapper.updateById(partnerUser);
         partnerUserMapper.updateById(partnerUser);
-        if (4 != partnerUser.getGrade()){
-            PartnerLiftingRecord liftingRecord = getLiftingRecord(partnerUser, user);
-            liftingRecordService.saveLiftingRecord(liftingRecord);
-        }
+        PartnerLiftingRecord liftingRecord = getLiftingRecord(partnerUser, user);
+        liftingRecordService.saveLiftingRecord(liftingRecord);
     }
     }
 
 
     private static PartnerLiftingRecord getLiftingRecord(PartnerUser partnerUser, PartnerUser user) {
     private static PartnerLiftingRecord getLiftingRecord(PartnerUser partnerUser, PartnerUser user) {
@@ -176,8 +191,13 @@ public class ExpiredCommissionUtils {
         return liftingRecord;
         return liftingRecord;
     }
     }
 
 
-    public  boolean checkUpgradeConditions(PartnerUser partnerUser,String appraise,List<PartnerAttribute> strategyArray) {
-        CommissionValidityPeriod period = partnerUserMapper.selectAssessmentCycleTime(partnerUser.getUserId(), partnerUser.getGrade());
+    public  boolean checkUpgradeConditions(PartnerUser partnerUser) {
+
+        return partnerRuleService.verifyDowngradeUpgradeConditions(partnerUser.getUserId(),String.valueOf(partnerUser.getGrade()));
+        /**
+
+        CommissionValidityPeriod period = partnerUserMapper.selectUpgradeCycleStartTime(partnerUser.getUserId(), partnerUser.getGrade());
+        period.setEndDate(SpringUtil.getBean(ExpiredCommissionUtils.class).generateDowngradeTime(String.valueOf(partnerUser.getGrade()),period.getStartDate()));
         UserRuleVo userRuleVo = partnerUserMapper.queryUserRuleVo(partnerUser.getUserId(),partnerUser.getGrade(),period);
         UserRuleVo userRuleVo = partnerUserMapper.queryUserRuleVo(partnerUser.getUserId(),partnerUser.getGrade(),period);
         BigDecimal yq = new BigDecimal(strategyArray.get(0).getMin());
         BigDecimal yq = new BigDecimal(strategyArray.get(0).getMin());
         BigDecimal cy = new BigDecimal(strategyArray.get(1).getMin());
         BigDecimal cy = new BigDecimal(strategyArray.get(1).getMin());
@@ -194,6 +214,9 @@ public class ExpiredCommissionUtils {
             }
             }
         }
         }
         return false;
         return false;
+
+         *
+         */
     }
     }
 
 
 
 

+ 9 - 0
src/main/java/com/ydtech/modules/partner/utils/PartnerDateUtils.java

@@ -78,7 +78,16 @@ public class PartnerDateUtils {
     }
     }
 
 
 
 
+    public static boolean isSameDay(Date date) {
+        if (date == null) {
+            throw new IllegalArgumentException("Date cannot be null");
+        }
 
 
+        LocalDate inputDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        LocalDate currentDate = LocalDate.now();
+
+        return inputDate.equals(currentDate);
+    }
 
 
 
 
 }
 }

+ 77 - 3
src/main/java/com/ydtech/modules/partner/utils/TimedTaskUtils.java

@@ -1,13 +1,17 @@
 package com.ydtech.modules.partner.utils;
 package com.ydtech.modules.partner.utils;
 
 
 
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ydtech.modules.partner.dao.PartnerExpiredCommissionMapper;
 import com.ydtech.modules.partner.dao.PartnerExpiredCommissionMapper;
 import com.ydtech.modules.partner.dao.PartnerPartnerAccountMapper;
 import com.ydtech.modules.partner.dao.PartnerPartnerAccountMapper;
-import com.ydtech.modules.partner.model.PartnerExpiredCommission;
-import com.ydtech.modules.partner.model.PartnerLiftingRecord;
-import com.ydtech.modules.partner.model.PartnerPartnerAccount;
+import com.ydtech.modules.partner.dao.PartnerUserMapper;
+import com.ydtech.modules.partner.model.*;
+import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
 import com.ydtech.modules.partner.service.PartnerLiftingRecordService;
 import com.ydtech.modules.partner.service.PartnerLiftingRecordService;
+import com.ydtech.modules.partner.service.PartnerRuleService;
+import com.ydtech.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
@@ -15,6 +19,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
@@ -35,6 +40,11 @@ public class TimedTaskUtils {
     @Autowired
     @Autowired
     private PartnerPartnerAccountMapper accountMapper;
     private PartnerPartnerAccountMapper accountMapper;
 
 
+    @Autowired
+    private PartnerUserMapper partnerUserMapper;
+
+    @Autowired
+    private PartnerRuleService partnerRuleService;
 
 
     @Autowired
     @Autowired
     private PartnerExpiredCommissionMapper expiredCommissionMapper;
     private PartnerExpiredCommissionMapper expiredCommissionMapper;
@@ -85,4 +95,68 @@ public class TimedTaskUtils {
     }
     }
 
 
 
 
+    /**
+     * TODO: 更新降级考核时间
+     */
+    @Scheduled(cron = "*/30 * * * * ?")
+    public void checkCommissionExpireTime() {
+        // TODO等级规则
+        List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("identity_status", 0);
+        queryWrapper.in("grade", 2,3,4);
+        queryWrapper.orderByDesc("create_time");
+        queryWrapper.last("limit 10");
+        queryWrapper.eq("user_id","99140105M36010");
+        List<PartnerUser> partnerUsers = partnerUserMapper.selectList(queryWrapper);
+        for (PartnerUser partnerUser : partnerUsers) {
+            PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
+            Integer khDays = rule.getKhDays();
+            Date upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(partnerUser.getUserId(), partnerUser.getGrade());
+            if (upgradeStartTime == null) {
+                partnerUserMapper.updateUpgradeStartTime(partnerUser.getUserId(), partnerUser.getGrade());
+            }
+            upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(partnerUser.getUserId(), partnerUser.getGrade());
+            if (null == upgradeStartTime){
+                continue;
+            }
+            System.out.println("开始时间:" + formatter.format(upgradeStartTime));
+            //  生成结束时间
+            Date upgradeEndTime = PartnerDateUtils.addDays(upgradeStartTime, khDays);
+            System.out.println("结束时间:" + formatter.format(upgradeEndTime));
+            //   判断当前时间是否大于考核周期时间
+            if (PartnerDateUtils.isSameDay(upgradeEndTime)){
+                List<PartnerAttribute> strategyArray = rule.getStrategyArray();
+                String appraise = rule.getAppraise();
+                // TODO考核条件  不满足时需锁定
+                ExpiredCommissionUtils commissionUtils = SpringUtil.getBean(ExpiredCommissionUtils.class);
+                boolean checked = commissionUtils.checkUpgradeConditions(partnerUser);
+                if (checked){
+                    // TODO 满足
+                }else {
+                    //TODO  不满足
+                    commissionUtils.generateLockRecords(partnerUser);
+                }
+                //TODO    更新考核周期
+                partnerUserMapper.updateUpgradeCycleStartTime(partnerUser.getUserId(), PartnerDateUtils.addDaysToday(new Date(), 0),partnerUser.getGrade());
+            }else {
+                //TODO    更新考核周期
+                updateUpgradeCycleTime(partnerUser,rule, upgradeStartTime);
+            }
+        }
+    }
+
+    public  void updateUpgradeCycleTime(PartnerUser partnerUser,PartnerRuleEntity rule,Date upgradeTime) {
+        Integer khDays = rule.getKhDays();
+        while (!PartnerDateUtils.isWithinDays(upgradeTime, khDays)) {
+            upgradeTime = PartnerDateUtils.addDaysToday(upgradeTime, khDays);
+        }
+        partnerUserMapper.updateUpgradeCycleStartTime(partnerUser.getUserId(), upgradeTime,partnerUser.getGrade());
+    }
+
+    public PartnerRuleEntity getRule(String grade,List<PartnerRuleEntity> partnerRuleEntities) {
+        return partnerRuleEntities.stream().filter(partnerRuleEntity -> StringUtils.equals(partnerRuleEntity.getGrade(), grade)).findAny().orElse(null);
+    }
+
 }
 }