Browse Source

APP2修改

xuqiang 1 year ago
parent
commit
1986340903
34 changed files with 1397 additions and 36 deletions
  1. 2 1
      src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java
  2. 60 0
      src/main/java/com/ydtech/modules/partner/controller/ExpiredCommissionController.java
  3. 9 0
      src/main/java/com/ydtech/modules/partner/controller/NewAppPartnerController.java
  4. 23 0
      src/main/java/com/ydtech/modules/partner/controller/PartnerUserController.java
  5. 61 0
      src/main/java/com/ydtech/modules/partner/controller/PurchaseRecordController.java
  6. 9 0
      src/main/java/com/ydtech/modules/partner/dao/PartnerExpiredCommissionMapper.java
  7. 7 1
      src/main/java/com/ydtech/modules/partner/dao/PartnerLiftingRecordMapper.java
  8. 6 0
      src/main/java/com/ydtech/modules/partner/dao/PartnerPartnerAccountMapper.java
  9. 10 0
      src/main/java/com/ydtech/modules/partner/dao/PartnerRecordApperMapper.java
  10. 18 4
      src/main/java/com/ydtech/modules/partner/dao/PartnerUserMapper.java
  11. 10 0
      src/main/java/com/ydtech/modules/partner/dao/PurchaseRecordMapper.java
  12. 4 0
      src/main/java/com/ydtech/modules/partner/model/PartnerAttribute.java
  13. 103 0
      src/main/java/com/ydtech/modules/partner/model/PartnerExpiredCommission.java
  14. 76 0
      src/main/java/com/ydtech/modules/partner/model/PartnerPurchaseRecord.java
  15. 25 0
      src/main/java/com/ydtech/modules/partner/model/PartnerRecordApper.java
  16. 7 0
      src/main/java/com/ydtech/modules/partner/model/param/LiftingRecordAudit.java
  17. 7 0
      src/main/java/com/ydtech/modules/partner/model/param/PartnerRuleEntity.java
  18. 32 0
      src/main/java/com/ydtech/modules/partner/model/vo/MyUserLevel.java
  19. 24 0
      src/main/java/com/ydtech/modules/partner/model/vo/UserRuleVo.java
  20. 43 0
      src/main/java/com/ydtech/modules/partner/service/Impl/PartnerExpiredCommissionServiceImpl.java
  21. 67 10
      src/main/java/com/ydtech/modules/partner/service/Impl/PartnerLiftingRecordServiceImpl.java
  22. 9 3
      src/main/java/com/ydtech/modules/partner/service/Impl/PartnerRuleServiceImpl.java
  23. 113 8
      src/main/java/com/ydtech/modules/partner/service/Impl/PartnerUserServiceImpl.java
  24. 74 0
      src/main/java/com/ydtech/modules/partner/service/Impl/PurchaseRecordServiceImpl.java
  25. 14 0
      src/main/java/com/ydtech/modules/partner/service/PartnerExpiredCommissionService.java
  26. 3 1
      src/main/java/com/ydtech/modules/partner/service/PartnerLiftingRecordService.java
  27. 9 0
      src/main/java/com/ydtech/modules/partner/service/PartnerRuleService.java
  28. 6 0
      src/main/java/com/ydtech/modules/partner/service/PartnerUserService.java
  29. 13 0
      src/main/java/com/ydtech/modules/partner/service/PurchaseRecordService.java
  30. 116 0
      src/main/java/com/ydtech/modules/partner/utils/ConditionUtils.java
  31. 209 0
      src/main/java/com/ydtech/modules/partner/utils/ExpiredCommissionUtils.java
  32. 84 0
      src/main/java/com/ydtech/modules/partner/utils/PartnerDateUtils.java
  33. 88 0
      src/main/java/com/ydtech/modules/partner/utils/TimedTaskUtils.java
  34. 56 8
      src/main/resources/mapper/modules/partner/PartnerUserMapper.xml

+ 2 - 1
src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java

@@ -475,7 +475,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
                 .eq(PartnerPremiumDetails::getCompanyId,  insAreaCompany.getId()));
         for (PartnerPremiumDetails detail : partnerPremiumDetails) {
             PartnerPartnerAccount account1 = partnerPartnerAccountMapper.selectOne(new LambdaQueryWrapper<PartnerPartnerAccount>()
-                    .eq(PartnerPartnerAccount::getUserId, detail.getUserId()));
+                    .eq(PartnerPartnerAccount::getUserId, detail.getUserId()).eq(PartnerPartnerAccount::getGrade,detail.getSource()));
             if (Objects.isNull(account1)){
                 PartnerPartnerAccount account = new PartnerPartnerAccount();
                 account.setUserId(detail.getUserId());
@@ -484,6 +484,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
                 account.setHistoryFee(new BigDecimal("0"));
                 account.setCashFee(detail.getExtractFee());
                 account.setCreateTime(new Date());
+                account.setGrade(detail.getSource());
                 partnerPartnerAccountMapper.insert(account);
             }else {
                 account1.setSumPremium(account1.getSumPremium().add(detail.getSumpremium()));

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

@@ -0,0 +1,60 @@
+package com.ydtech.modules.partner.controller;
+
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.base.model.dto.PageDto;
+import com.ydtech.modules.partner.model.PartnerExpiredCommission;
+import com.ydtech.modules.partner.service.PartnerExpiredCommissionService;
+import com.ydtech.modules.partner.utils.ExpiredCommissionUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "过期佣金记录")
+@Slf4j
+@RestController
+@RequestMapping("/expiredCommission")
+public class ExpiredCommissionController extends BaseController {
+
+
+    @Autowired
+    private PartnerExpiredCommissionService expiredCommissionService;
+
+    /**
+     * 过期佣金记录 列表
+     */
+    @PostMapping("/queryPage")
+    @ApiOperation(value = "过期佣金记录列表")
+    public HttpResult queryPage(@RequestBody PartnerExpiredCommission expiredCommission){
+        PageDto pageDto = new PageDto();
+        pageDto.setPageNum(expiredCommission.getPageNum());
+        pageDto.setPageSize(expiredCommission.getPageSize());
+        Page page = buildPageRequest(pageDto);
+        return expiredCommissionService.queryPage(page,expiredCommission);
+    }
+
+
+
+    /**
+     * 保存
+     */
+    @PostMapping("/save")
+    @ApiOperation(value = "过期佣金记录列表")
+    public HttpResult save(@RequestBody PartnerExpiredCommission expiredCommission){
+        return expiredCommissionService.save(expiredCommission) ? HttpResult.ok() : HttpResult.error();
+    }
+
+
+
+    @GetMapping("/asdas")
+    public HttpResult asdas(){
+        SpringUtil.getBean(ExpiredCommissionUtils.class).checkCommissionExpireTime("99140105M36001");
+        return HttpResult.ok();
+    }
+
+}

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

@@ -38,6 +38,15 @@ public class NewAppPartnerController extends BaseController {
     private PartnerUserService partnerUserService;
 
 
+    /**
+     * (新)查询用户身份信息
+     */
+    @GetMapping("/queryIdentityInformation")
+    @ApiOperation(value = "查询用户身份信息")
+    public HttpResult queryIdentityInformation(){
+        return partnerUserService.queryIdentityInformation(getUserId());
+    }
+
 
     /**
      * (新)首页信息

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

@@ -137,4 +137,27 @@ public class PartnerUserController extends BaseController {
         return partnerUserService.addUserIdentity(map);
     }
 
+    /**
+     * 未降级完成任务
+     * @param grade
+     * @return
+     */
+    @GetMapping("queryDowngradeTask")
+    public HttpResult queryDowngradeTask(@RequestParam(value = "grade") String grade) {
+        return partnerUserService.queryDowngradeTask(grade,getUserId());
+    }
+
+
+    /**
+     * 已降级完成任务
+     * @param grade
+     * @return
+     */
+    @GetMapping("degradedTask")
+    public HttpResult degradedTask(@RequestParam(value = "grade") String grade) {
+        return partnerUserService.degradedTask(grade,getUserId());
+    }
+
+
+
 }

+ 61 - 0
src/main/java/com/ydtech/modules/partner/controller/PurchaseRecordController.java

@@ -0,0 +1,61 @@
+package com.ydtech.modules.partner.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.base.model.dto.PageDto;
+import com.ydtech.modules.partner.model.PartnerPurchaseRecord;
+import com.ydtech.modules.partner.service.PurchaseRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "购买记录")
+@Slf4j
+@RestController
+@RequestMapping("/purchaseRecord")
+public class PurchaseRecordController extends BaseController {
+
+
+    @Autowired
+    private PurchaseRecordService purchaseRecordService;
+
+
+    /**
+     * 购买记录 列表
+     */
+    @PostMapping("/queryPage")
+    @ApiOperation(value = "购买记录列表")
+    public HttpResult queryPage(@RequestBody PartnerPurchaseRecord purchaseRecord){
+        PageDto pageDto = new PageDto();
+        pageDto.setPageNum(purchaseRecord.getPageNum());
+        pageDto.setPageSize(purchaseRecord.getPageSize());
+        Page page = buildPageRequest(pageDto);
+        return purchaseRecordService.queryPage(page,purchaseRecord);
+    }
+
+
+
+    /**
+     * 保存
+     */
+    @PostMapping("/save")
+    @ApiOperation(value = "购买记录保存")
+    public HttpResult save(@RequestBody PartnerPurchaseRecord purchaseRecord){
+        return purchaseRecordService.save(purchaseRecord) ? HttpResult.ok() : HttpResult.error();
+    }
+
+
+    /**
+     * 查看凭证
+     */
+    @GetMapping("/viewVouchers")
+    @ApiOperation(value = "查看凭证")
+    public HttpResult viewVouchers(@RequestParam("id")String id){
+        return purchaseRecordService.viewVouchers(id);
+    }
+
+}

+ 9 - 0
src/main/java/com/ydtech/modules/partner/dao/PartnerExpiredCommissionMapper.java

@@ -0,0 +1,9 @@
+package com.ydtech.modules.partner.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.partner.model.PartnerExpiredCommission;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PartnerExpiredCommissionMapper extends BaseMapper<PartnerExpiredCommission> {
+}

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

@@ -8,6 +8,7 @@ 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 org.apache.ibatis.annotations.Update;
 
 import java.util.List;
 import java.util.Map;
@@ -17,9 +18,14 @@ 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();
+    List<Map<String, Object>> 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.conditions,r.rules,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);
 
+    @Select("SELECT * FROM partner_lifting_record WHERE type = 1 AND audit_status = 0 AND DATE_ADD(create_time, INTERVAL #{expireDays} DAY) < NOW() ")
+    List<PartnerLiftingRecord> queryExpireDays(String expireDays);
+
+    @Update("update partner_lifting_record set audit_status = #{status} where id = #{id}")
+    void updateAuditStatusById(String id, int status);
 }

+ 6 - 0
src/main/java/com/ydtech/modules/partner/dao/PartnerPartnerAccountMapper.java

@@ -4,12 +4,18 @@ package com.ydtech.modules.partner.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ydtech.modules.partner.model.PartnerPartnerAccount;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
+import java.math.BigDecimal;
+
 @Mapper
 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} )")
     PartnerPartnerAccount selectByUserId(String userId);
+
+    @Select("SELECT cash_fee FROM partner_partner_account WHERE user_id = #{userId} AND grade = #{grade}")
+    BigDecimal selectCashFee(@Param("userId") String userId,@Param("grade") Integer grade);
 }

+ 10 - 0
src/main/java/com/ydtech/modules/partner/dao/PartnerRecordApperMapper.java

@@ -0,0 +1,10 @@
+package com.ydtech.modules.partner.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.partner.model.PartnerRecordApper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PartnerRecordApperMapper extends BaseMapper<PartnerRecordApper> {
+}

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

@@ -121,8 +121,8 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
     @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 = #{date} WHERE  user_id = #{userId} ")
-    void updateUpgradeTimeByDate(@Param("userId") String userId,@Param("date") Date date);
+    @Update("UPDATE partner_user SET upgrade_time = #{date} WHERE  user_id = #{userId} and grade = #{grade}")
+    void updateUpgradeTimeByDate(@Param("userId") String userId,@Param("date") Date date,@Param("grade") Integer 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 " +
@@ -134,7 +134,7 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
 
     BigDecimal selectTotalSumPremium(@Param("userId") String userId,@Param("grade") String grade, @Param("period")CommissionValidityPeriod period);
 
-    String querySuperiors(@Param("userId") String userId,@Param("grade") String grade);
+    String querySuperiors(@Param("userId") String userId,@Param("grade") Integer grade,@Param("original") String original);
 
     @Select("SELECT * FROM partner_user WHERE user_id = #{userId} AND grade = #{grade}")
     PartnerUser getLevelUserId(@Param("userId") String userId,@Param("grade") Integer grade);
@@ -149,6 +149,20 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
     @Select(" SELECT p.id,p.user_id,p.grade,p.name,p.create_time FROM partner_user p LEFT JOIN sys_user u ON u.id = p .user_id ${ew.customSqlSegment}")
     List<PartnerUser> selectListVo(@Param("ew") QueryWrapper<PartnerUser> queryWrapper);
 
-    @Update("UPDATE partner_user SET identity_status = #{identityStatus} WHERE user_id = #{userId} and grade = #{grade} ")
+    @Update("UPDATE partner_user SET identity_status = #{identityStatus} WHERE user_id = #{userId} and grade = #{originalLevel} ")
     void updateIdentityStatus(@Param("userId") String userId,@Param("originalLevel") String originalLevel,@Param("identityStatus")int identityStatus);
+
+    @Select("SELECT upgrade_cycle_end_time FROM partner_user WHERE user_id = #{userId} AND grade = #{grade}")
+    Date queryUpgradeEndTime(@Param("userId") String userId,@Param("grade")Integer grade);
+
+    UserRuleVo queryUserRuleVo(@Param("userId") String userId, @Param("grade")Integer grade,@Param("period") CommissionValidityPeriod period);
+
+    @Select("SELECT upgrade_cycle_start_time as startDate,upgrade_cycle_end_time as endDate FROM partner_user WHERE user_id = #{userId} AND grade = #{grade}")
+    CommissionValidityPeriod selectAssessmentCycleTime(@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} ")
+    void updateUpgradeCycleStartTime(@Param("userId") String userId, @Param("newDate")Date newDate,@Param("grade") Integer grade);
+
+    @Update("UPDATE partner_user SET upgrade_cycle_end_time = #{newDate} WHERE  user_id = #{userId} and grade = #{grade} ")
+    void updateUpgradeCycleEndTime(@Param("userId") String userId, @Param("newDate")Date newDate,@Param("grade") Integer grade);
 }

+ 10 - 0
src/main/java/com/ydtech/modules/partner/dao/PurchaseRecordMapper.java

@@ -0,0 +1,10 @@
+package com.ydtech.modules.partner.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.partner.model.PartnerPurchaseRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PurchaseRecordMapper extends BaseMapper<PartnerPurchaseRecord> {
+}

+ 4 - 0
src/main/java/com/ydtech/modules/partner/model/PartnerAttribute.java

@@ -51,4 +51,8 @@ public class PartnerAttribute {
     @ApiModelProperty(value = "1-考核周期;2-考核条件;3-保级策略")
     private int type;
 
+    @ApiModelProperty(value = "考核完成度")
+    @TableField(exist = false)
+    private String achieve;
+
 }

+ 103 - 0
src/main/java/com/ydtech/modules/partner/model/PartnerExpiredCommission.java

@@ -0,0 +1,103 @@
+package com.ydtech.modules.partner.model;
+
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class PartnerExpiredCommission {
+
+    @TableId(value = "id",type = IdType.ASSIGN_ID)
+    private String id;
+
+    @ApiModelProperty(value = "姓名")
+    @TableField(value = "name")
+    private String name;
+
+    @ApiModelProperty(value = "手机号")
+    @TableField(value = "mobile")
+    private String mobile;
+
+    @ApiModelProperty(value = "工号")
+    @TableField(value = "user_id")
+    private String userId;
+
+    @ApiModelProperty(value = "机构ID")
+    @TableField(value = "dept_id")
+    private String deptId;
+
+    @ApiModelProperty(value = "机构名称")
+    @TableField(value = "dept_name")
+    private String deptName;
+
+    @ApiModelProperty(value = "等级")
+    @TableField(value = "grade")
+    private String grade;
+
+    @ApiModelProperty(value = "变更后等级")
+    @TableField(value = "grade_after")
+    private String gradeAfter;
+
+    @ApiModelProperty(value = "锁定佣金")
+    @TableField(value = "lock_commission")
+    private BigDecimal lockCommission;
+
+    @ApiModelProperty(value = "降级时间")
+    @TableField(value = "downgrade_time")
+    private Date downgradeTime;
+
+    @ApiModelProperty(value = "过期时间")
+    @TableField(value = "expiration")
+    private Date expiration;
+
+    /**
+     * 创建者
+     */
+    @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;
+
+    /**
+     * 当前页码
+     */
+    @TableField(exist = false)
+    private int pageNum = 1;
+    /**
+     * 每页数量
+     */
+    @TableField(exist = false)
+    private int pageSize = 10;
+
+    @TableField(exist = false)
+    private List<String> startTime;
+
+
+}

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

@@ -0,0 +1,76 @@
+package com.ydtech.modules.partner.model;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class PartnerPurchaseRecord {
+
+    @TableId(value = "id",type = IdType.ASSIGN_ID)
+    private String id;
+
+    @ApiModelProperty(value = "姓名")
+    @TableField(value = "name")
+    private String name;
+
+    @ApiModelProperty(value = "手机号")
+    @TableField(value = "mobile")
+    private String mobile;
+
+    @ApiModelProperty(value = "工号")
+    @TableField(value = "user_id")
+    private String userId;
+
+    @ApiModelProperty(value = "机构ID")
+    @TableField(value = "dept_id")
+    private String deptId;
+
+    @ApiModelProperty(value = "机构名称")
+    @TableField(value = "dept_name")
+    private String deptName;
+
+    @ApiModelProperty(value = "等级")
+    @TableField(value = "grade")
+    private String grade;
+
+    @ApiModelProperty(value = "变更后等级")
+    @TableField(value = "grade_after")
+    private String gradeAfter;
+
+    @ApiModelProperty(value = "锁定佣金")
+    @TableField(value = "lock_commission")
+    private BigDecimal lockCommission;
+
+
+    @ApiModelProperty(value = "购买时间")
+    @TableField(value = "purchasing_time")
+    private Date purchasingTime;
+
+
+    @ApiModelProperty(value = "支付附属表ID")
+    @TableField(value = "apper_id")
+    private String apperId;
+
+    /**
+     * 当前页码
+     */
+    @TableField(exist = false)
+    private int pageNum = 1;
+    /**
+     * 每页数量
+     */
+    @TableField(exist = false)
+    private int pageSize = 10;
+
+    @TableField(exist = false)
+    private List<String> startTime;
+
+}

+ 25 - 0
src/main/java/com/ydtech/modules/partner/model/PartnerRecordApper.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.partner.model;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class PartnerRecordApper {
+
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "file_id")
+    private String fileId;
+
+    @ApiModelProperty(value = "payment_amount")
+    private BigDecimal paymentAmount;
+
+    @ApiModelProperty(value = "record_id")
+    private String recordId;
+
+
+}

+ 7 - 0
src/main/java/com/ydtech/modules/partner/model/param/LiftingRecordAudit.java

@@ -4,6 +4,8 @@ package com.ydtech.modules.partner.model.param;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @Data
 public class LiftingRecordAudit {
 
@@ -16,4 +18,9 @@ public class LiftingRecordAudit {
 
     private String auditUser;
 
+    /**
+     * 审核佣金比例
+     */
+    private BigDecimal auditCommission;
+
 }

+ 7 - 0
src/main/java/com/ydtech/modules/partner/model/param/PartnerRuleEntity.java

@@ -1,12 +1,15 @@
 package com.ydtech.modules.partner.model.param;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ydtech.modules.partner.model.PartnerAttribute;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 @Data
@@ -54,6 +57,10 @@ public class PartnerRuleEntity implements Serializable {
     @ApiModelProperty(value = "购买保级金额")
     private BigDecimal fallAmount;
 
+    @ApiModelProperty(value = "考核结束日期")
+    @TableField(exist = false)
+    private String assessmentEndDate;
+
 
 
 }

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

@@ -0,0 +1,32 @@
+package com.ydtech.modules.partner.model.vo;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class MyUserLevel {
+
+    private String userId;
+
+    private String userName;
+
+    private Integer grade;
+
+    private String gradeName;
+
+    @ApiModelProperty(value = "锁定状态0-未解锁;1-已解锁;2-锁定")
+    private String lockingState;
+
+    @ApiModelProperty(value = "是否可升级")
+    private boolean isUpgrade;
+
+    @ApiModelProperty(value = "锁定佣金")
+    private BigDecimal lockCommission;
+
+    @ApiModelProperty(value = "0/1/2")
+    private Integer progressBar;
+
+}

+ 24 - 0
src/main/java/com/ydtech/modules/partner/model/vo/UserRuleVo.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.partner.model.vo;
+
+
+import lombok.Data;
+
+@Data
+public class UserRuleVo {
+
+    /**
+     * 邀请人数
+     */
+    private String invitationsNumber;
+
+    /**
+     * 成员出单保费
+     */
+    private String memberPremium ;
+
+    /**
+     * 自己出单保费
+     */
+    private String yourPremium ;
+
+}

+ 43 - 0
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerExpiredCommissionServiceImpl.java

@@ -0,0 +1,43 @@
+package com.ydtech.modules.partner.service.Impl;
+
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.PartnerExpiredCommissionMapper;
+import com.ydtech.modules.partner.model.PartnerExpiredCommission;
+import com.ydtech.modules.partner.service.PartnerExpiredCommissionService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class PartnerExpiredCommissionServiceImpl extends ServiceImpl<PartnerExpiredCommissionMapper, PartnerExpiredCommission> implements PartnerExpiredCommissionService {
+
+
+    @Override
+    public HttpResult queryPage(Page page,PartnerExpiredCommission expiredCommission) {
+        LambdaQueryWrapper<PartnerExpiredCommission> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(StringUtils.isNotBlank(expiredCommission.getName()),PartnerExpiredCommission::getName, expiredCommission.getName());
+
+        lambdaQueryWrapper.eq(StringUtils.isNotBlank(expiredCommission.getMobile()),PartnerExpiredCommission::getMobile, expiredCommission.getMobile());
+        lambdaQueryWrapper.eq(StringUtils.isNotBlank(expiredCommission.getUserId()),PartnerExpiredCommission::getUserId, expiredCommission.getUserId());
+        List<String> startTime = expiredCommission.getStartTime();
+        if (CollectionUtil.isNotEmpty(startTime) && startTime.size() >= 2){
+            String s = startTime.get(0);
+            String e = startTime.get(1);
+            if (StringUtils.isNotBlank(s) && StringUtils.isNotBlank(e)) {
+                lambdaQueryWrapper.between(PartnerExpiredCommission::getExpiration, s, e);
+            } else if (StringUtils.isNotBlank(s)) {
+                lambdaQueryWrapper.ge(PartnerExpiredCommission::getExpiration, s);
+            } else if (StringUtils.isNotBlank(e)) {
+                lambdaQueryWrapper.le(PartnerExpiredCommission::getExpiration,e);
+            }
+        }
+        return HttpResult.ok(baseMapper.selectPage(page, lambdaQueryWrapper));
+    }
+
+}

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

@@ -25,9 +25,8 @@ 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.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.util.*;
 
 @Service
 public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingRecordMapper, PartnerLiftingRecord> implements PartnerLiftingRecordService {
@@ -53,7 +52,11 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
         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 (1 == recordParam.getAuditStatus()){
+            queryWrapper.in(ObjectUtils.isNotEmpty(recordParam.getAuditStatus()), "r.audit_status", 1,3);
+        }else {
+            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;
@@ -70,12 +73,50 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
         }
         Page page = baseMapper.queryPage(recordParam.getPage(), queryWrapper);
         Map map = JSONObject.parseObject(JSON.toJSONString(page), Map.class);
-        map.put("groupCount", baseMapper.groupByAuditStatus());
+        map.put("groupCount", groupByAuditStatus());
         map.put("records", page.getRecords());
         return map;
 
     }
 
+    public List<Map<String, Integer>> groupByAuditStatus() {
+        List<Map<String, Object>> maps = baseMapper.groupByAuditStatus();
+        List<Map<String, Integer>> list = new ArrayList<>();
+        Arrays.asList(0, 1, 2).forEach(auditStatus -> {
+            Map<String, Integer> statusMap = new HashMap<>();
+            int sum;
+            if (1 == auditStatus) {
+                sum = maps.stream()
+                        .filter(map -> {
+                            Object auditStatusObj = map.get("auditStatus");
+                            return auditStatusObj != null &&
+                                    (Integer.valueOf(String.valueOf(auditStatusObj)) == 3 ||
+                                            Integer.valueOf(String.valueOf(auditStatusObj)) == 1);
+                        }).mapToInt(map -> {
+                            Object countObj = map.get("count");
+                            return countObj instanceof Long ? ((Long) countObj).intValue() : 0;
+                        })
+                        .sum();
+            } else {
+                sum = maps.stream()
+                        .filter(map -> {
+                            Object auditStatusObj = map.get("auditStatus");
+                            return auditStatusObj != null &&
+                                    Integer.valueOf(String.valueOf(auditStatusObj)) == auditStatus;
+                        }).mapToInt(map -> {
+                            Object countObj = map.get("count");
+                            return countObj instanceof Long ? ((Long) countObj).intValue() : 0;
+                        })
+                        .sum();
+            }
+            statusMap.put("auditStatus", auditStatus);
+            statusMap.put("count", sum);
+            list.add(statusMap);
+        });
+        return list;
+    }
+
+
     @Override
     public HttpResult audit(LiftingRecordAudit audit) {
         if (StringUtils.isEmpty(audit.getId())) {
@@ -97,7 +138,7 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
         switch (auditStatus) {
             case 1:
                 message = "审批通过";
-                addUserLevel(liftingRecord);
+                addUserLevel(liftingRecord,audit.getAuditCommission());
                 break;
             case 2:
                 String rejectReason = audit.getRejectReason();
@@ -114,16 +155,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;
+    public void addUserLevel(PartnerLiftingRecord liftingRecord, BigDecimal auditCommission){
+        Integer value = Integer.valueOf(liftingRecord.getAfterChange());
         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 - 1));
+        String referrerId = partnerUserMapper.querySuperiors(liftingRecord.getUserId(),(value - 1),liftingRecord.getOriginalLevel());
         partnerUser.setReferrerId(referrerId);
-        partnerUser.setGrade(i);
+        partnerUser.setGrade(value);
+        partnerUser.setCommissionRate(auditCommission);
+        partnerUser.setIdentityType(1);
         partnerUserMapper.insert(partnerUser);
     }
 
@@ -157,7 +200,10 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
         int insert = recordApperMapper.insert(recordApper);
         if (insert > 0){
             PartnerLiftingRecord liftingRecord = baseMapper.selectById(recordApper.getRecordId());
+            liftingRecord.setAuditStatus(3);
+            baseMapper.updateById(liftingRecord);
             PartnerPurchaseRecord record = getPurchaseRecord(recordApper, liftingRecord);
+            record.setApperId(recordApper.getId());
             purchaseRecordService.save( record);
             //更新用户锁定状态
             partnerUserMapper.updateIdentityStatus(liftingRecord.getUserId(),liftingRecord.getOriginalLevel(),0);
@@ -165,6 +211,17 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
         return HttpResult.ok("解锁成功");
     }
 
+    @Override
+    public List<PartnerLiftingRecord> queryExpireDays(String expireDays) {
+        List<PartnerLiftingRecord> list = baseMapper.queryExpireDays(expireDays);
+        return list;
+    }
+
+    @Override
+    public void updateAuditStatusById(PartnerLiftingRecord record) {
+        baseMapper.updateAuditStatusById( record.getId(),4);
+    }
+
     private static PartnerPurchaseRecord getPurchaseRecord(PartnerRecordApper recordApper, PartnerLiftingRecord liftingRecord) {
         PartnerPurchaseRecord record = new PartnerPurchaseRecord();
         record.setName(liftingRecord.getName());

+ 9 - 3
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerRuleServiceImpl.java

@@ -185,6 +185,8 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
         }
         BigDecimal p = getInviteData(userId, grade, period);
         BigDecimal bf = partnerUserMapper.selectTotalSumPremium(userId, grade, period);
+        //  查询当前用户出单的保费
+        BigDecimal ownOf = partnerUserMapper.selectTotalSumPremium(userId, grade, period);
         if (bf == null){
             bf = BigDecimal.ZERO;
         }
@@ -197,7 +199,7 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
             throw new SystemException("考核条件不足");
         }
 
-        return new VerifyData(partnerRuleEntity, p, bf, people, allBf);
+        return new VerifyData(partnerRuleEntity, p, bf, people, allBf,ownOf);
     }
 
     private BigDecimal getRequirementValue(List<PartnerAttribute> requirement, int index) {
@@ -214,18 +216,21 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
         private final BigDecimal bf;
         private final BigDecimal people;
         private final BigDecimal allBf;
+        private final BigDecimal ownBf;
 
-        public VerifyData(PartnerRuleEntity partnerRuleEntity, BigDecimal p, BigDecimal bf, BigDecimal people, BigDecimal allBf) {
+        public VerifyData(PartnerRuleEntity partnerRuleEntity, BigDecimal p, BigDecimal bf, BigDecimal people, BigDecimal allBf,BigDecimal ownBf) {
             this.partnerRuleEntity = partnerRuleEntity;
             this.p = p;
             this.bf = bf;
             this.people = people;
             this.allBf = allBf;
+            this.ownBf = ownBf;
         }
     }
 
 
 
+    @Override
     public BigDecimal getInviteData(String userId, String grade,CommissionValidityPeriod period){
         int number = 0;
         if (StringUtils.equals("2", grade)){
@@ -238,6 +243,7 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
         return new BigDecimal(number);
     }
 
+    @Override
     public  CommissionValidityPeriod getCommissionValidityPeriod(PartnerAttribute cycle1, String userId, String grade) {
         CommissionValidityPeriod period = new CommissionValidityPeriod();
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -293,7 +299,7 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
         while (!isWithinDays(newDate, days)) {
             newDate = addDaysToday(newDate, days);
         }
-        partnerUserMapper.updateUpgradeTimeByDate(userId, newDate);
+        partnerUserMapper.updateUpgradeTimeByDate(userId, newDate,Integer.valueOf(grade));
     }
 
 

+ 113 - 8
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerUserServiceImpl.java

@@ -1,11 +1,11 @@
 package com.ydtech.modules.partner.service.Impl;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.DateFormat;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
-
 import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -26,10 +26,7 @@ import com.ydtech.modules.partner.dao.PartnerPartnerAccountMapper;
 import com.ydtech.modules.partner.dao.PartnerPremiumDetailsMapper;
 import com.ydtech.modules.partner.dao.PartnerUserMapper;
 import com.ydtech.modules.partner.model.*;
-import com.ydtech.modules.partner.model.param.AppHomeParams;
-import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
-import com.ydtech.modules.partner.model.param.QueryVo;
-import com.ydtech.modules.partner.model.param.UserGradeParam;
+import com.ydtech.modules.partner.model.param.*;
 import com.ydtech.modules.partner.model.vo.*;
 import com.ydtech.modules.partner.service.PartnerLiftingRecordService;
 import com.ydtech.modules.partner.service.PartnerRuleService;
@@ -41,8 +38,6 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.stream.Collectors;
 
-import static net.sf.jsqlparser.parser.feature.Feature.values;
-
 @Service
 public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, PartnerUser> implements PartnerUserService {
 
@@ -68,6 +63,9 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
     @Autowired
     private PartnerLiftingRecordMapper liftingRecordMapper;
 
+    @Autowired
+    private PartnerPartnerAccountMapper accountMapper;
+
     @Override
     public int insert(PartnerUser partnerUser) {
         return baseMapper.insert(partnerUser);
@@ -151,7 +149,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         Long aLong = liftingRecordMapper.selectCount(wrapper);
 
         if (count > 0 || aLong > 0){
-            return HttpResult.error();
+            return HttpResult.error("不满足升级条件");
         }
         if (ruleService.verifyUpgradeConditions(userGradeParam.getId(),userGradeParam.getGrade())){
             return HttpResult.ok("满足升级条件");
@@ -319,6 +317,97 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         return HttpResult.ok("添加成功");
     }
 
+    @Override
+    public HttpResult queryIdentityInformation(String userId) {
+        List<PartnerRule> partnerRules = ruleService.selectAll();
+
+        List<PartnerUser> partnerUsers = baseMapper.selectList(new LambdaQueryWrapper<>(PartnerUser.class).eq(PartnerUser::getUserId, userId));
+        Map<Integer, PartnerUser> userMap = partnerUsers.stream()
+                .collect(Collectors.toMap(
+                        PartnerUser::getGrade,
+                        user -> user
+                ));
+
+        List<MyUserLevel> list = getUserLevels(userId, partnerRules, userMap);
+
+
+        return HttpResult.ok( list);
+    }
+
+    @Override
+    public HttpResult queryDowngradeTask(String grade, String userId) {
+        PartnerRuleEntity partnerRuleEntity = ruleService.selectByGrade(grade);
+        partnerRuleEntity.setStrategyArray(null);
+        CommissionValidityPeriod period = ruleService.getCommissionValidityPeriod(partnerRuleEntity.getCycle(), userId, grade);
+        partnerRuleEntity.setAssessmentEndDate(period.getEndDate().split(" ")[0]);
+        BigDecimal bf = baseMapper.selectTotalSumPremium(userId, grade, period);
+        BigDecimal p = ruleService.getInviteData(userId, grade, period);
+        List<PartnerAttribute> requirement = partnerRuleEntity.getRequirement();
+        requirement.get(0).setAchieve(String.valueOf(p));
+        requirement.get(1).setAchieve(null != bf ? bf.toString() : BigDecimal.ZERO.toString());
+        requirement.get(2).setAchieve("111");
+
+        return HttpResult.ok( partnerRuleEntity);
+    }
+
+    @Override
+    public HttpResult degradedTask(String grade, String userId) {
+
+        PartnerRuleEntity partnerRuleEntity = ruleService.selectByGrade(grade);
+        partnerRuleEntity.setRequirement(null);
+
+        CommissionValidityPeriod period = baseMapper.selectAssessmentCycleTime(userId, Integer.valueOf(grade));
+        partnerRuleEntity.setAssessmentEndDate(period.getEndDate().split(" ")[0]);
+        BigDecimal bf = baseMapper.selectTotalSumPremium(userId, grade, period);
+        BigDecimal p = ruleService.getInviteData(userId, grade, period);
+
+        List<PartnerAttribute> strategyArray = partnerRuleEntity.getStrategyArray();
+
+        strategyArray.get(0).setAchieve(String.valueOf(p));
+        strategyArray.get(1).setAchieve(null != bf ? bf.toString() : BigDecimal.ZERO.toString());
+        strategyArray.get(2).setAchieve("111");
+
+        return HttpResult.ok( partnerRuleEntity);
+    }
+
+    private  List<MyUserLevel> getUserLevels(String userId, List<PartnerRule> partnerRules, Map<Integer, PartnerUser> userMap) {
+        List<MyUserLevel> list = new ArrayList<>();
+        for (PartnerRule rule : partnerRules) {
+            PartnerUser partnerUser = userMap.get(rule.getGrade());
+            MyUserLevel level = new MyUserLevel();
+            level.setUserId(userId);
+            level.setGrade(rule.getGrade());
+            level.setGradeName(rule.getGradeName());
+            level.setLockingState(rule.getStrategy());
+            if (Objects.isNull(partnerUser)){
+                level.setLockingState("0");
+                level.setProgressBar(0);
+            }else {
+                level.setUserName(partnerUser.getName());
+                if (partnerUser.isIdentityStatus()){
+                    level.setLockingState("2");
+                    level.setLockCommission(accountMapper.selectCashFee(partnerUser.getUserId(), partnerUser.getGrade()));
+                }else {
+                    level.setLockingState("1");
+                }
+            }
+            if (rule.getGrade() != 1){
+                boolean verified = ruleService.verifyUpgradeConditions(userId, String.valueOf(rule.getGrade()));
+                if (verified){
+                    level.setProgressBar(1);
+                }else {
+                    level.setProgressBar(2);
+                }
+                level.setUpgrade(verified);
+            }else {
+                level.setProgressBar(2);
+            }
+            list.add(level);
+
+        }
+        return list;
+    }
+
     private static SysUser2Vo getUser2Vo(SysUser sysUser,String id) {
         SysUser2Vo sysUser2Vo = new SysUser2Vo();
         SysUser user = new SysUser();
@@ -441,6 +530,8 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
             hashMap.put("totalPremium",sumField(object,"premium"));
             map.put("data",object);
             map.put("total",hashMap);
+            //锁定状态
+            map.put("lockingState",partnerUser.isIdentityStatus());
             list.add(map);
         }
         return HttpResult.ok(list);
@@ -482,9 +573,23 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         totalMap.put("commission",sumField(datalist,"commission"));
         hashMap.put("data",datalist);
         hashMap.put("total",totalMap);
+        hashMap.put("lockData",isLockingState(map.get("userId"),map.get("grade")));
         return hashMap;
     }
 
+    public JSONObject isLockingState(String userId,String grade) {
+        PartnerUser partnerUser = baseMapper.selectOne(new LambdaQueryWrapper<>(PartnerUser.class).eq(PartnerUser::getUserId, userId).eq(PartnerUser::getGrade, grade));
+        JSONObject jsonObject = new JSONObject();
+        if (null == partnerUser || partnerUser.isIdentityStatus()){
+            return jsonObject;
+        }
+        jsonObject.put("lockingState",partnerUser.isIdentityStatus());
+        jsonObject.put("lockCommission",new BigDecimal("12"));
+        jsonObject.put("zeroDays",10);
+        return jsonObject;
+    }
+
+
     @Override
     public HttpResult myPerformanceDetails(String ordersNo,String userId) {
 

+ 74 - 0
src/main/java/com/ydtech/modules/partner/service/Impl/PurchaseRecordServiceImpl.java

@@ -0,0 +1,74 @@
+package com.ydtech.modules.partner.service.Impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.order.dao.InsUploadFilesMapper;
+import com.ydtech.modules.order.entity.po.InsUploadFiles;
+import com.ydtech.modules.partner.dao.PartnerRecordApperMapper;
+import com.ydtech.modules.partner.dao.PurchaseRecordMapper;
+import com.ydtech.modules.partner.model.PartnerPurchaseRecord;
+import com.ydtech.modules.partner.model.PartnerRecordApper;
+import com.ydtech.modules.partner.service.PurchaseRecordService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class PurchaseRecordServiceImpl extends ServiceImpl<PurchaseRecordMapper, PartnerPurchaseRecord> implements PurchaseRecordService {
+
+
+    @Autowired
+    private PartnerRecordApperMapper recordApperMapper;
+
+    @Autowired
+    private InsUploadFilesMapper uploadFilesMapper;
+
+    @Override
+    public HttpResult queryPage(Page page, PartnerPurchaseRecord purchaseRecord) {
+        LambdaQueryWrapper<PartnerPurchaseRecord> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(purchaseRecord.getName())){
+            queryWrapper.eq(PartnerPurchaseRecord::getName, purchaseRecord.getName());
+        }
+        if (StringUtils.isNotBlank(purchaseRecord.getMobile())){
+            queryWrapper.eq(PartnerPurchaseRecord::getMobile, purchaseRecord.getMobile());
+        }
+       if (StringUtils.isNotBlank(purchaseRecord.getUserId())){
+           queryWrapper.eq(PartnerPurchaseRecord::getUserId, purchaseRecord.getUserId());
+       }
+        List<String> startTime = purchaseRecord.getStartTime();
+        if (CollectionUtil.isNotEmpty(startTime) && startTime.size() >= 2){
+            String s = startTime.get(0);
+            String e = startTime.get(1);
+            if (StringUtils.isNotBlank(s) && StringUtils.isNotBlank(e)) {
+                queryWrapper.between(PartnerPurchaseRecord::getPurchasingTime, s, e);
+            } else if (StringUtils.isNotBlank(s)) {
+                queryWrapper.ge(PartnerPurchaseRecord::getPurchasingTime, s);
+            } else if (StringUtils.isNotBlank(e)) {
+                queryWrapper.le(PartnerPurchaseRecord::getPurchasingTime, e);
+            }
+        }
+        return HttpResult.ok(baseMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public HttpResult viewVouchers(String id) {
+        if (null == id){
+            return HttpResult.error("参数错误");
+        }
+        PartnerPurchaseRecord record = baseMapper.selectById(id);
+        if (null == record){
+            return HttpResult.error("购买记录不存在");
+        }
+        PartnerRecordApper partnerRecordApper = recordApperMapper.selectById(record.getApperId());
+        if (null == partnerRecordApper){
+            return HttpResult.error("影像资料数据不存在");
+        }
+        InsUploadFiles insUploadFiles = uploadFilesMapper.selectById(partnerRecordApper.getFileId());
+        return HttpResult.ok(insUploadFiles);
+    }
+}

+ 14 - 0
src/main/java/com/ydtech/modules/partner/service/PartnerExpiredCommissionService.java

@@ -0,0 +1,14 @@
+package com.ydtech.modules.partner.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.partner.model.PartnerExpiredCommission;
+
+public interface PartnerExpiredCommissionService extends IService<PartnerExpiredCommission> {
+
+
+    HttpResult queryPage(Page page,PartnerExpiredCommission expiredCommission);
+
+
+}

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

@@ -1,6 +1,5 @@
 package com.ydtech.modules.partner.service;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.partner.model.PartnerLiftingRecord;
 import com.ydtech.modules.partner.model.PartnerRecordApper;
@@ -26,4 +25,7 @@ public interface PartnerLiftingRecordService {
 
     HttpResult confirmUnlocking(PartnerRecordApper recordApper);
 
+    List<PartnerLiftingRecord> queryExpireDays(String expireDays);
+
+    void updateAuditStatusById(PartnerLiftingRecord record);
 }

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

@@ -1,8 +1,11 @@
 package com.ydtech.modules.partner.service;
 
+import com.ydtech.modules.partner.model.PartnerAttribute;
 import com.ydtech.modules.partner.model.PartnerRule;
+import com.ydtech.modules.partner.model.param.CommissionValidityPeriod;
 import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -27,4 +30,10 @@ public interface PartnerRuleService {
 
     List<PartnerRule> selectAll();
 
+
+    CommissionValidityPeriod getCommissionValidityPeriod(PartnerAttribute cycle1, String userId, String grade);
+
+
+    BigDecimal getInviteData(String userId, String grade, CommissionValidityPeriod period);
+
 }

+ 6 - 0
src/main/java/com/ydtech/modules/partner/service/PartnerUserService.java

@@ -75,4 +75,10 @@ public interface PartnerUserService extends IService<PartnerUser> {
     List<String> getUserGradeList(String userId);
 
     HttpResult addUserIdentity(Map<String, Object> map);
+
+    HttpResult queryIdentityInformation(String userId);
+
+    HttpResult queryDowngradeTask(String grade,String userId);
+
+    HttpResult degradedTask(String grade,String userId);
 }

+ 13 - 0
src/main/java/com/ydtech/modules/partner/service/PurchaseRecordService.java

@@ -0,0 +1,13 @@
+package com.ydtech.modules.partner.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.partner.model.PartnerPurchaseRecord;
+
+public interface PurchaseRecordService extends IService<PartnerPurchaseRecord> {
+
+    HttpResult queryPage(Page page, PartnerPurchaseRecord purchaseRecord);
+
+    HttpResult viewVouchers(String id);
+}

+ 116 - 0
src/main/java/com/ydtech/modules/partner/utils/ConditionUtils.java

@@ -0,0 +1,116 @@
+package com.ydtech.modules.partner.utils;
+
+
+import com.ydtech.modules.partner.model.PartnerAttribute;
+import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
+import com.ydtech.modules.partner.service.PartnerCommissionService;
+import com.ydtech.modules.partner.service.PartnerRuleService;
+import com.ydtech.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import java.util.List;
+
+@Component
+public class ConditionUtils {
+
+
+    private static PartnerCommissionService commissionService;
+    private static PartnerRuleService ruleService;
+
+    @Autowired
+    public void setCommissionService(PartnerCommissionService commissionService,PartnerRuleService ruleService) {
+        ConditionUtils.commissionService = commissionService;
+        ConditionUtils.ruleService = ruleService;
+    }
+
+    /**
+     * 升级条件
+     * @param grade 等级
+     * @return 升级条件描述,如果规则不存在或条件不足则返回null
+     */
+    public static String upgradeConditions(String grade) {
+        if (grade == null || StringUtils.equals("1",grade)){
+            return null;
+        }
+        PartnerRuleEntity ruleEntity = ruleService.selectByGrade(grade);
+        if (ruleEntity == null) {
+            return null;
+        }
+
+        PartnerAttribute cycle = ruleEntity.getCycle();
+        if (cycle == null){
+            return null;
+        }
+        StringBuilder buffer = new StringBuilder();
+
+        // 处理周期条件
+        appendCycleCondition(buffer, cycle, ruleEntity.getAppraise());
+
+        // 处理具体要求
+        List<PartnerAttribute> requirements = ruleEntity.getRequirement();
+        if (requirements == null || requirements.size() < 3) {
+            return null;
+        }
+
+        appendRequirements(buffer, requirements);
+        return buffer.toString();
+    }
+
+    /**
+     * 考核规则
+     * @param grade 等级
+     * @return 考核规则描述,如果规则不存在或条件不足则返回null
+     */
+    public static String assessmentRules(String grade) {
+        if (grade == null || StringUtils.equals("1",grade)){
+            return null;
+        }
+        PartnerRuleEntity ruleEntity = ruleService.selectByGrade(grade);
+        if (ruleEntity == null) {
+            return null;
+        }
+
+        StringBuilder buffer = new StringBuilder();
+        Integer khDays = ruleEntity.getKhDays();
+        buffer.append("成为该等级后,").append(khDays).append("天内,");
+        buffer.append(StringUtils.equals(ruleEntity.getAppraise(), "1") ? "以下条件全部满足" : "以下条件至少满足一个");
+        buffer.append("即可保持该等级,否则降至上一等级。").append("<br/>");
+
+        // 处理具体要求
+        List<PartnerAttribute> requirements = ruleEntity.getStrategyArray();
+        if (requirements == null || requirements.size() < 3) {
+            return null;
+        }
+
+        appendRequirements(buffer, requirements);
+        return buffer.toString();
+    }
+
+    /**
+     * 添加周期条件描述
+     */
+    private static void appendCycleCondition(StringBuilder buffer, PartnerAttribute cycle, String appraise) {
+        if (StringUtils.equals("1", cycle.getCycle())) {
+            buffer.append("以下条件全部满足,可升级为该等级");
+        } else if (StringUtils.equals("2", cycle.getCycle())) {
+            buffer.append("限期").append(cycle.getFixedDays()).append("日,在上个等级时,限期内,")
+                    .append(StringUtils.equals(appraise, "1") ? "以下条件全部满足" : "以下条件至少满足一个")
+                    .append(",可升级为该等级。");
+        } else if (StringUtils.equals("3", cycle.getCycle())) {
+            buffer.append("固定期限内,").append(cycle.getMin()).append("-").append(cycle.getMax())
+                    .append(StringUtils.equals(appraise, "1") ? "以下条件全部满足" : "以下条件至少满足一个")
+                    .append(",可升级为该等级");
+        }
+        buffer.append("<br/>");
+    }
+
+    /**
+     * 添加通用要求描述
+     */
+    private static void appendRequirements(StringBuilder buffer, List<PartnerAttribute> requirements) {
+        buffer.append("邀请合伙人达").append(requirements.get(0).getMin()).append("人").append("<br/>");
+        buffer.append("下属成员出单保费").append(requirements.get(1).getMin()).append("元").append("<br/>");
+        buffer.append("自己的出单保费达").append(requirements.get(2).getMin()).append("元");
+    }
+
+}

+ 209 - 0
src/main/java/com/ydtech/modules/partner/utils/ExpiredCommissionUtils.java

@@ -0,0 +1,209 @@
+package com.ydtech.modules.partner.utils;
+
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ydtech.modules.partner.dao.PartnerUserMapper;
+import com.ydtech.modules.partner.model.PartnerAttribute;
+import com.ydtech.modules.partner.model.PartnerLiftingRecord;
+import com.ydtech.modules.partner.model.PartnerUser;
+import com.ydtech.modules.partner.model.param.CommissionValidityPeriod;
+import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
+import com.ydtech.modules.partner.model.vo.UserRuleVo;
+import com.ydtech.modules.partner.service.PartnerLiftingRecordService;
+import com.ydtech.modules.partner.service.PartnerRuleService;
+import com.ydtech.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+
+/**
+ * 降级辅助 类
+ */
+
+@Component
+public class ExpiredCommissionUtils {
+
+    @Autowired
+    private PartnerUserMapper partnerUserMapper;
+    @Autowired
+    private PartnerRuleService partnerRuleService;
+
+    @Autowired
+    private PartnerLiftingRecordService liftingRecordService;
+
+    /**
+     * 登录初始化用户升级时间
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void initCommissionExpireTime(String userId) {
+        // 等级规则
+        List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
+        List<PartnerUser> partnerUsers = partnerUserMapper.selectList(new QueryWrapper<PartnerUser>().eq("user_id", userId));
+        for (PartnerUser partnerUser : partnerUsers) {
+            if (1 == partnerUser.getGrade()) {
+                continue;
+            }
+            PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
+            PartnerAttribute cycle = rule.getCycle();
+            String grade = String.valueOf(partnerUser.getGrade());
+            if ("1".equals(cycle.getCycle())) {
+                Date upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade);
+                if (upgradeTime == null) {
+                    partnerUserMapper.updateUpgradeTime(userId, grade);
+                }
+            } else if ("2".equals(cycle.getCycle())) {
+                Date upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade);
+                if (upgradeTime == null) {
+                    partnerUserMapper.updateUpgradeTime(userId, grade);
+                    upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade);
+                }
+                String fixedDays = cycle.getFixedDays();
+                if (!PartnerDateUtils.isWithinDays(upgradeTime, Integer.valueOf(fixedDays))) {
+                    updateUpgradeTimeByDate(upgradeTime, Integer.valueOf(fixedDays), userId, partnerUser.getGrade());
+                }
+            } else if ("3".equals(cycle.getCycle())) {
+                // TODO: 添加相应的逻辑处理
+            }
+        }
+    }
+
+    /**
+     * TODO 用户升级、注册用户时 生成  降级时间范围
+     * @param partnerUser
+     * @return
+     */
+    public void downgradingTimeRange(PartnerUser partnerUser){
+        // 等级规则
+        List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
+        if (1 == partnerUser.getGrade()){
+            return;
+        }
+        PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
+        updateUpgradeCycleTime(partnerUser,rule, new Date());
+
+    }
+
+    public PartnerRuleEntity getRule(String grade,List<PartnerRuleEntity> partnerRuleEntities) {
+        return partnerRuleEntities.stream().filter(partnerRuleEntity -> StringUtils.equals(partnerRuleEntity.getGrade(), grade)).findAny().orElse(null);
+    }
+
+
+    private  void updateUpgradeTimeByDate(Date assessmentTime, int days, String userId,Integer grade) {
+        Date newDate = PartnerDateUtils.addDaysToday(assessmentTime, days);
+        while (!PartnerDateUtils.isWithinDays(newDate, days)) {
+            newDate = PartnerDateUtils.addDaysToday(newDate, days);
+        }
+        partnerUserMapper.updateUpgradeTimeByDate(userId, newDate,grade);
+    }
+
+
+    /**
+     * TODO: 登录计算用户身份是否过期
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void checkCommissionExpireTime(String userId) {
+        // TODO等级规则
+        List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
+
+        List<PartnerUser> partnerUsers = partnerUserMapper.selectList(new QueryWrapper<PartnerUser>().eq("user_id", userId));
+        for (PartnerUser partnerUser : partnerUsers) {
+            if (1 == partnerUser.getGrade()) {
+                continue;
+            }
+            PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
+            //  升降周期结束时间
+            Date upgradeTime = partnerUserMapper.queryUpgradeEndTime(userId, partnerUser.getGrade());
+            //   判断当前时间是否大于考核周期时间
+            boolean withinDays = PartnerDateUtils.isBefore(upgradeTime);
+            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    更新考核周期
+                updateUpgradeCycleTime(partnerUser,rule, upgradeTime);
+            }
+        }
+    }
+
+    public  void updateUpgradeCycleTime(PartnerUser partnerUser,PartnerRuleEntity rule,Date upgradeTime) {
+        Integer khDays = rule.getKhDays();
+        Date newDate = PartnerDateUtils.addDaysToday(upgradeTime, khDays);
+        while (PartnerDateUtils.isBefore(newDate)) {
+            newDate = PartnerDateUtils.addDaysToday(newDate, khDays);
+        }
+        partnerUserMapper.updateUpgradeCycleStartTime(partnerUser.getUserId(), newDate,partnerUser.getGrade());
+        partnerUserMapper.updateUpgradeCycleEndTime(partnerUser.getUserId(), PartnerDateUtils.addDaysToday(newDate, khDays),partnerUser.getGrade());
+    }
+
+
+
+    /**
+     * TODO 生成降级记录
+     * @param partnerUser
+     */
+    public  void generateLockRecords(PartnerUser partnerUser){
+        PartnerUser selectOne = partnerUserMapper.selectOne(new QueryWrapper<PartnerUser>().eq("user_id", partnerUser.getUserId()).eq("grade", (partnerUser.getGrade() + 1)));
+        PartnerUser user = new PartnerUser();
+        BeanUtil.copyProperties(partnerUser,user);
+        user.setGrade(partnerUser.getGrade() + 1);
+        user.setReferrerId(partnerUser.getUserId());
+        user.setId(null);
+        if (Objects.isNull(selectOne) && 4 != partnerUser.getGrade()){
+            partnerUserMapper.insert(user);
+        }
+        partnerUser.setIdentityStatus(true);
+        partnerUserMapper.updateById(partnerUser);
+        if (4 != partnerUser.getGrade()){
+            PartnerLiftingRecord liftingRecord = getLiftingRecord(partnerUser, user);
+            liftingRecordService.saveLiftingRecord(liftingRecord);
+        }
+    }
+
+    private static PartnerLiftingRecord getLiftingRecord(PartnerUser partnerUser, PartnerUser user) {
+        PartnerLiftingRecord liftingRecord = new PartnerLiftingRecord();
+        liftingRecord.setName(partnerUser.getName());
+        liftingRecord.setMobile(partnerUser.getMobile());
+        liftingRecord.setUserId(partnerUser.getUserId());
+        liftingRecord.setDeptId(partnerUser.getDeptId());
+        liftingRecord.setDeptName(partnerUser.getDeptName());
+        liftingRecord.setType("1");
+        liftingRecord.setOriginalLevel(String.valueOf(partnerUser.getGrade()));
+        liftingRecord.setAfterChange(String.valueOf(user.getGrade()));
+        return liftingRecord;
+    }
+
+    public  boolean checkUpgradeConditions(PartnerUser partnerUser,String appraise,List<PartnerAttribute> strategyArray) {
+        CommissionValidityPeriod period = partnerUserMapper.selectAssessmentCycleTime(partnerUser.getUserId(), partnerUser.getGrade());
+        UserRuleVo userRuleVo = partnerUserMapper.queryUserRuleVo(partnerUser.getUserId(),partnerUser.getGrade(),period);
+        BigDecimal yq = new BigDecimal(strategyArray.get(0).getMin());
+        BigDecimal cy = new BigDecimal(strategyArray.get(1).getMin());
+        BigDecimal zj = new BigDecimal(strategyArray.get(2).getMin());
+        if (StringUtils.equals("1",appraise)){
+            if(yq.compareTo(new BigDecimal(userRuleVo.getInvitationsNumber())) >=0 && cy.compareTo(new BigDecimal(userRuleVo.getMemberPremium())) >=0 &&
+                    zj.compareTo(new BigDecimal(userRuleVo.getYourPremium())) >=0){
+                return true;
+            }else {
+                if (yq.compareTo(new BigDecimal(userRuleVo.getInvitationsNumber())) >=0 || cy.compareTo(new BigDecimal(userRuleVo.getMemberPremium())) >=0 ||
+                        zj.compareTo(new BigDecimal(userRuleVo.getYourPremium())) >=0){
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+
+}

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

@@ -0,0 +1,84 @@
+package com.ydtech.modules.partner.utils;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.util.Date;
+
+public class PartnerDateUtils {
+
+
+    public static boolean isWithinDays(Date date, int days) {
+        LocalDate targetDate = date.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDate();
+        return Math.abs(ChronoUnit.DAYS.between(LocalDate.now(), targetDate)) <= days;
+    }
+
+
+    public static Date addDaysToday(Date date, int days) {
+        LocalDateTime localDate = date.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDateTime();
+        LocalDateTime newLocalDate = localDate.plusDays(days);
+        LocalDateTime newDateTime = newLocalDate.withHour(0)
+                .withMinute(0)
+                .withSecond(0)
+                .withNano(0);
+        return Date.from(newDateTime.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
+
+    public static 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());
+    }
+
+    /**
+     * 目标日期在今天之后
+     * @param date
+     * @return
+     */
+    public static boolean isAfter(Date  date){
+        LocalDateTime localDate = date.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDateTime();
+        return localDate.isAfter(LocalDateTime.now());
+    }
+
+
+    /**
+     * 目标日期在今天之前
+     * @param date
+     * @return
+     */
+    public static boolean isBefore(Date  date){
+        LocalDateTime localDate = date.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDateTime();
+        return localDate.isBefore(LocalDateTime.now());
+    }
+
+    /**
+     * 描述: 计算两个日期之间的天数
+     * @param date
+     * @return
+     */
+    public static Long dateDifference(Date date){
+        LocalDate pastLocalDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        return ChronoUnit.DAYS.between(pastLocalDate, LocalDate.now());
+    }
+
+
+
+
+
+}

+ 88 - 0
src/main/java/com/ydtech/modules/partner/utils/TimedTaskUtils.java

@@ -0,0 +1,88 @@
+package com.ydtech.modules.partner.utils;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ydtech.modules.partner.dao.PartnerExpiredCommissionMapper;
+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.service.PartnerLiftingRecordService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 定时任务
+ *
+ * @author
+ */
+
+@Slf4j
+@Component
+public class TimedTaskUtils {
+
+    @Autowired
+    private PartnerLiftingRecordService liftingRecordService;
+
+    @Autowired
+    private PartnerPartnerAccountMapper accountMapper;
+
+
+    @Autowired
+    private PartnerExpiredCommissionMapper expiredCommissionMapper;
+
+    @Value("${newPartner.expireDays}")
+    private String expireDays;
+
+    /**
+     * TODO  每天晚上  记录佣金过期记录
+     */
+    @Scheduled(cron = "0 0 0 * * *")
+    //@Scheduled(cron = "*/10 * * * * ?")
+    private void updateOrderDateNoon() {
+        log.info("记录佣金过期定时任务开始执行:{}", expireDays);
+        List<PartnerLiftingRecord> list = liftingRecordService.queryExpireDays(expireDays);
+        for (PartnerLiftingRecord record : list) {
+            //清空 当前用户抽成账户表
+            PartnerPartnerAccount account = accountMapper.selectOne(new LambdaQueryWrapper<>(PartnerPartnerAccount.class)
+                    .eq(PartnerPartnerAccount::getUserId, record.getUserId()).eq(PartnerPartnerAccount::getGrade, record.getOriginalLevel()));
+            if (null ==  account){
+                continue;
+            }
+            PartnerExpiredCommission commission = getExpiredCommission(record, account);
+            expiredCommissionMapper.insert(commission);
+
+            account.setCashFee(BigDecimal.ZERO);
+            accountMapper.updateById( account);
+            liftingRecordService.updateAuditStatusById(record);
+        }
+
+
+    }
+
+    private static PartnerExpiredCommission getExpiredCommission(PartnerLiftingRecord record, PartnerPartnerAccount account) {
+        PartnerExpiredCommission commission = new PartnerExpiredCommission();
+        commission.setName(record.getName());
+        commission.setMobile(record.getMobile());
+        commission.setUserId(record.getUserId());
+        commission.setDeptId(record.getDeptId());
+        commission.setDeptName(record.getDeptName());
+        commission.setGrade(record.getOriginalLevel());
+        commission.setGradeAfter(record.getAfterChange());
+        commission.setLockCommission(account.getCashFee());
+        commission.setDowngradeTime(record.getCreateTime());
+        commission.setExpiration(new Date());
+        commission.setCreateTime(new Date());
+        return commission;
+    }
+
+
+}

+ 56 - 8
src/main/resources/mapper/modules/partner/PartnerUserMapper.xml

@@ -1007,19 +1007,24 @@ select grade,grade_name from  partner_rule
                 user_id,
                 referrer_id,
                 grade,
-                CAST(user_id AS CHAR(200)) AS path
-            FROM partner_user
-            WHERE user_id = #{userId}
+                CAST(user_id AS CHAR(1000)) AS path
+            FROM
+                partner_user
+            WHERE
+                user_id = #{userId} and grade = #{original}
             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, '%')
+                CONCAT(cte_name.path, ',', t.user_id) AS path
+            FROM
+                partner_user t
+                    INNER JOIN cte_name ON t.user_id = cte_name.referrer_id
+            WHERE
+                FIND_IN_SET(t.user_id, cte_name.path) = 0
         )
-        SELECT user_id FROM cte_name WHERE grade = #{grade}
+        SELECT user_id FROM cte_name where grade = #{grade};
     </select>
 
 
@@ -1090,7 +1095,50 @@ select grade,grade_name from  partner_rule
         )
         SELECT user_id FROM cte_name
     </select>
-    <select id="countLevel" resultType="java.lang.Integer"></select>
+
+
+
+
+    <select id="queryUserRuleVo" resultType="com.ydtech.modules.partner.model.vo.UserRuleVo">
+        SELECT (
+                   SELECT COUNT(1) FROM partner_user WHERE referrer_id = '99140105M36001' AND grade = '4'
+               ) AS invitationsNumber,
+               (
+                   SELECT SUM(db.sumpremium) FROM (
+                                                      SELECT DISTINCT orderno,sumpremium FROM partner_premium_details WHERE (user_id,source) IN (
+
+                                                          WITH RECURSIVE cte_name AS (
+                                                              SELECT
+                                                                  user_id,
+                                                                  referrer_id,
+                                                                  grade,
+                                                                  CAST(user_id AS CHAR(1000)) AS path
+                                                              FROM
+                                                                  partner_user
+                                                              WHERE
+                                                                  user_id = '99140105M36001' and grade = 1
+                                                              UNION ALL
+                                                              SELECT
+                                                                  t.user_id,
+                                                                  t.referrer_id,
+                                                                  t.grade,
+                                                                  CONCAT(cte_name.path, ',', t.user_id) AS path
+                                                              FROM
+                                                                  partner_user t
+                                                                      INNER JOIN cte_name ON t.referrer_id = cte_name.user_id AND t.grade = (cte_name.grade + 1)
+                                                              WHERE
+                                                                  FIND_IN_SET(t.user_id, cte_name.path) = 0
+                                                          )
+                                                          SELECT user_id,grade FROM cte_name
+                                                      )
+                                                  ) db
+               ) AS memberPremium,
+            (
+                   SELECT SUM(da.sumpremium) FROM (
+                                                      SELECT DISTINCT orderno,sumpremium FROM partner_premium_details WHERE user_id = '99140105M36001'
+                                                  ) da
+            ) AS yourPremium
+    </select>
 
 
 </mapper>