xuqiang 1 год назад
Родитель
Сommit
0ea718d246

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

@@ -26,6 +26,7 @@ import com.ydtech.modules.admin.model.po.SysUserLinkSys;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.*;
 import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.partner.utils.ExpiredCommissionUtils;
 import com.ydtech.modules.partner.utils.UpdateRatioUtils;
 import com.ydtech.modules.partner.service.PartnerUserService;
 import com.ydtech.security.utils.PasswordUtils;
@@ -301,6 +302,7 @@ public class SysLoginController {
         String token = StpUtil.createLoginSession(user.getId());
         StpUtil.getSessionByLoginId(user.getId()).set(SaSession.USER, user);
         aapLoginVo.setToken(token);
+        //SpringUtil.getBean(ExpiredCommissionUtils.class).checkCommissionExpireTime(user.getId());
         return HttpResult.ok("登录成功", aapLoginVo);
 
     }

+ 26 - 10
src/main/java/com/ydtech/modules/partner/controller/NewAppPartnerController.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.partner.controller;
 
 
 import com.alipay.api.AlipayApiException;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysPartnerAccount;
@@ -9,8 +10,10 @@ import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.SysPartnerService;
 import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.modules.partner.model.param.AppHomeParams;
+import com.ydtech.modules.partner.model.param.PartnerApp;
 import com.ydtech.modules.partner.service.PartnerUserService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import io.swagger.annotations.Api;
@@ -122,22 +125,34 @@ public class NewAppPartnerController extends BaseController {
     /**
      * (新)人员列表详情数据查询  通过管理等级查询
      */
-    @GetMapping("/selectByGradeList")
+    @PostMapping("/selectByGradeList")
     @ApiOperation(value = "人员列表详情数据查询")
-    public HttpResult selectByGradeList(@RequestParam Map<String,String> map){
-        return partnerUserService.selectByGradeList(map,  this.getUserId());
+    public HttpResult selectByGradeList(@RequestBody PartnerApp partnerApp){
+        partnerApp.setUserId(getUserId());
+        partnerApp.setPage(buildPageRequest(partnerApp));
+        return partnerUserService.selectByGradeList(partnerApp);
     }
 
 
     /**
      * (新)人员列表详情数据查询 通过用户ID  查询
      */
-    @GetMapping("/selectByIdList")
+    @PostMapping("/selectByIdList")
     @ApiOperation(value = "人员列表详情数据查询")
-    public HttpResult selectByIdList(@RequestParam("id") String id){
-        return partnerUserService.selectByIdList(id);
+    public HttpResult selectByIdList(@RequestBody PartnerApp partnerApp){
+        partnerApp.setPage(buildPageRequest(partnerApp));
+        return partnerUserService.selectByIdList(partnerApp);
     }
 
+    public Page buildPageRequest(PartnerApp partnerApp) {
+        if (partnerApp.getPageNum() == null || partnerApp.getPageSize() == null){
+            throw new SystemException("分页参数不能为空");
+        }
+        PageDto pageDto = new PageDto();
+        pageDto.setPageNum(partnerApp.getPageNum());
+        pageDto.setPageSize(partnerApp.getPageSize());
+        return buildPageRequest(pageDto);
+    }
 
 
     /**
@@ -158,10 +173,11 @@ public class NewAppPartnerController extends BaseController {
      * @param map
      * @return
      */
-    @GetMapping("/myPerformance")
-    public HttpResult myPerformance(@RequestParam Map<String,String> map) {
-        map.put("userId",getUserId());
-        return HttpResult.ok("success",partnerUserService.myPerformance(map));
+    @PostMapping("/myPerformance")
+    public HttpResult myPerformance(@RequestBody PartnerApp partnerApp) {
+        partnerApp.setUserId(getUserId());
+        partnerApp.setPage(buildPageRequest(partnerApp));
+        return HttpResult.ok("success",partnerUserService.myPerformance(partnerApp));
     }
 
 

+ 13 - 1
src/main/java/com/ydtech/modules/partner/controller/PartnerLiftingRecordController.java

@@ -40,7 +40,7 @@ public class PartnerLiftingRecordController extends BaseController {
     }
 
     /**
-     * 审核、驳回
+     * 升级  审核、驳回
      * @param audit
      * @return
      */
@@ -50,6 +50,18 @@ public class PartnerLiftingRecordController extends BaseController {
         return liftingRecordService.audit(audit);
     }
 
+
+    /**
+     * 降级    审核、驳回
+     * @param audit
+     * @return
+     */
+    @PostMapping("/downgradeAudit")
+    public HttpResult downgradeAudit(@RequestBody LiftingRecordAudit audit) {
+        audit.setAuditUser(getUserName());
+        return liftingRecordService.downgradeAudit(audit);
+    }
+
     /**
      * 解锁等级查询金额
      * @param grade

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

@@ -10,6 +10,7 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.partner.model.PartnerUser;
 import com.ydtech.modules.partner.model.param.AppHomeParams;
 import com.ydtech.modules.partner.model.param.CommissionValidityPeriod;
+import com.ydtech.modules.partner.model.param.PartnerApp;
 import com.ydtech.modules.partner.model.param.QueryVo;
 import com.ydtech.modules.partner.model.vo.*;
 import org.apache.ibatis.annotations.*;
@@ -47,7 +48,7 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
     @Select("select  MIN(grade) as grade from partner_user where user_id= #{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);
 
 
@@ -74,7 +75,7 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
 
     JSONObject myPerformanceTotal(@Param("map")Map<String, String> map, @Param("list") Set<String> list);
 
-    List<JSONObject> queryDataList(@Param("map")Map<String, String> map);
+    Page<JSONObject> queryDataList(Page page,@Param("map") PartnerApp partnerApp);
 
 
     Integer selectNumber(@Param("userId") String userId, @Param("number") String number,@Param("period") CommissionValidityPeriod period);
@@ -147,7 +148,7 @@ 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);
+    Page<PartnerUser> selectListVo(@Param("page") Page page ,@Param("ew") QueryWrapper<PartnerUser> queryWrapper);
 
     @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);
@@ -165,4 +166,6 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
 
     @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);
+
+    BigDecimal selectOwnSumPremium(@Param("userId") String userId, @Param("period") CommissionValidityPeriod period);
 }

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

@@ -61,4 +61,8 @@ public class PartnerLiftingRecord extends BaseEntity {
 
     @ApiModelProperty(value = "考核规则")
     private String rules;
+
+    @ApiModelProperty(value = "0-升级解锁;1-降级解锁")
+    private Integer upgradeType;
+
 }

+ 5 - 0
src/main/java/com/ydtech/modules/partner/model/PartnerUser.java

@@ -10,6 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 
 @Data
@@ -71,4 +72,8 @@ public class PartnerUser extends BaseEntity {
     @TableField(value = "identity_status")
     private boolean identityStatus;
 
+    private Date upgradeCycleStartTime;
+
+    private Date upgradeCycleEndTime;
+
 }

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

@@ -0,0 +1,25 @@
+package com.ydtech.modules.partner.model.param;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Data;
+
+@Data
+public class PartnerApp {
+
+    private String id;
+
+    private String grade;
+
+    private String userId;
+
+    private String startTime;
+
+    private String endTime;
+
+    private Integer pageNum;
+
+    private Integer pageSize;
+
+    private Page page;
+
+}

+ 1 - 0
src/main/java/com/ydtech/modules/partner/model/param/UserGradeParam.java

@@ -10,5 +10,6 @@ public class UserGradeParam {
 
     private String grade;
 
+    private Integer upgradeType;
 
 }

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

@@ -29,4 +29,9 @@ public class MyUserLevel {
     @ApiModelProperty(value = "0/1/2")
     private Integer progressBar;
 
+    private Long zeroDays;
+
+    @ApiModelProperty(value = "等级比例")
+    private String ratio;
+
 }

+ 1 - 0
src/main/java/com/ydtech/modules/partner/model/vo/TeamOverviewVo.java

@@ -13,6 +13,7 @@ public class TeamOverviewVo {
     @ApiModelProperty(value = "等级名称")
     private String gradeName;
 
+    private String parentStatus;
 
     private Object vo1;
 

+ 53 - 0
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerLiftingRecordServiceImpl.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.partner.service.Impl;
 import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -222,6 +223,58 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
         baseMapper.updateAuditStatusById( record.getId(),4);
     }
 
+    @Override
+    public HttpResult downgradeAudit(LiftingRecordAudit audit) {
+        if (StringUtils.isEmpty(audit.getId())) {
+            return HttpResult.error("ID不能为空");
+        }
+        PartnerLiftingRecord liftingRecord = baseMapper.selectById(audit.getId());
+        if (ObjectUtils.isEmpty(liftingRecord)) {
+            return HttpResult.error("数据不存在,请刷新后重试");
+        }
+        // 审核状态校验
+        Integer auditStatus = audit.getAuditStatus();
+        if (auditStatus == null || (auditStatus != 1 && auditStatus != 2)) {
+            return HttpResult.error("审批状态不合法");
+        }
+        liftingRecord.setAuditUser(audit.getAuditUser());
+        liftingRecord.setAuditStatus(auditStatus);
+        liftingRecord.setAuditTime(new Date());
+        String message;
+        switch (auditStatus) {
+            case 1:
+                message = "审批通过";
+                updateUserIdentityStatus(liftingRecord,audit.getAuditCommission());
+                break;
+            case 2:
+                String rejectReason = audit.getRejectReason();
+                if (StringUtils.isBlank(rejectReason)) {
+                    return HttpResult.error("驳回原因不能为空");
+                }
+                liftingRecord.setRejectReason(rejectReason);
+                message = "审批不通过";
+                break;
+            default:
+                return HttpResult.error("审批状态不合法");
+        }
+        boolean success = baseMapper.updateById(liftingRecord) > 0;
+        return success ? HttpResult.ok(message) : HttpResult.error("审批失败");
+    }
+
+    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()));
+        if (selectOne != null && selectOne.isIdentityStatus()){
+            selectOne.setIdentityStatus(false);
+            selectOne.setCommissionRate(auditCommission);
+            partnerUserMapper.updateById(selectOne);
+        }else {
+            throw new RuntimeException("解锁失败");
+        }
+
+
+    }
+
     private static PartnerPurchaseRecord getPurchaseRecord(PartnerRecordApper recordApper, PartnerLiftingRecord liftingRecord) {
         PartnerPurchaseRecord record = new PartnerPurchaseRecord();
         record.setName(liftingRecord.getName());

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

@@ -186,7 +186,7 @@ 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);
+        BigDecimal ownBf = partnerUserMapper.selectOwnSumPremium(userId, period);
         if (bf == null){
             bf = BigDecimal.ZERO;
         }
@@ -199,7 +199,7 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
             throw new SystemException("考核条件不足");
         }
 
-        return new VerifyData(partnerRuleEntity, p, bf, people, allBf,ownOf);
+        return new VerifyData(partnerRuleEntity, p, bf, people, allBf,ownBf);
     }
 
     private BigDecimal getRequirementValue(List<PartnerAttribute> requirement, int index) {

+ 163 - 78
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerUserServiceImpl.java

@@ -3,14 +3,17 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.DateFormat;
 import java.time.Instant;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+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.admin.dao.SysUserMapper;
@@ -28,6 +31,7 @@ import com.ydtech.modules.partner.dao.PartnerUserMapper;
 import com.ydtech.modules.partner.model.*;
 import com.ydtech.modules.partner.model.param.*;
 import com.ydtech.modules.partner.model.vo.*;
+import com.ydtech.modules.partner.service.PartnerCommissionService;
 import com.ydtech.modules.partner.service.PartnerLiftingRecordService;
 import com.ydtech.modules.partner.service.PartnerRuleService;
 import com.ydtech.modules.partner.service.PartnerUserService;
@@ -36,6 +40,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
@@ -66,6 +71,9 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
     @Autowired
     private PartnerPartnerAccountMapper accountMapper;
 
+    @Autowired
+    private PartnerCommissionService commissionService;
+
     @Override
     public int insert(PartnerUser partnerUser) {
         return baseMapper.insert(partnerUser);
@@ -183,6 +191,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         record.setDeptName(partnerUser.getDeptName());
         record.setType("0");
         record.setOriginalLevel(userGradeParam.getGrade());
+        record.setUpgradeType(userGradeParam.getUpgradeType());
         switch (userGradeParam.getGrade()) {
             case "1":
                 record.setAfterChange("");
@@ -241,7 +250,18 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         }
         //查询当前用户等级
         List<TeamOverviewVo> teamOverviewVos = baseMapper.selectTeamOverview(params);
+
+
+        List<PartnerUser> partnerUsers = baseMapper.selectList(new LambdaQueryWrapper<>(PartnerUser.class)
+                .eq(PartnerUser::getUserId,params.getUserId())
+                .in(PartnerUser::getGrade, getGradeList(teamOverviewVos)));
+
+        Map<Integer, PartnerUser> userMap = partnerUsers.stream()
+                .collect(Collectors.toMap(PartnerUser::getGrade, Function.identity()));
+
+
         for (TeamOverviewVo overviewVo : teamOverviewVos) {
+            PartnerUser partnerUser = userMap.get(Integer.valueOf(overviewVo.getGrade()));
             switch (overviewVo.getGrade()){
                 case "1":
                     overviewVo.setVo1(baseMapper.selectStatistics(overviewVo.getGrade(), params));
@@ -256,11 +276,26 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
                     overviewVo.setVo4(baseMapper.selectStatistics(overviewVo.getGrade(), params));
                     break;
             }
+            if (null == partnerUser){
+                overviewVo.setParentStatus("0");
+            }else {
+                if (partnerUser.isIdentityStatus()){
+                    overviewVo.setParentStatus("2");
+                }else {
+                    overviewVo.setParentStatus("1");
+                }
+            }
         }
         homeVo.setTeamOverview(teamOverviewVos);
         return HttpResult.ok(homeVo);
     }
 
+    public List<String> getGradeList(List<TeamOverviewVo> teamOverviewVos) {
+        return teamOverviewVos.stream()
+                .map(TeamOverviewVo::getGrade)
+                .distinct()
+                .collect(Collectors.toList());
+    }
 
     @Override
     public List<String> getUserGradeList(String userId) {
@@ -320,7 +355,6 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
     @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(
@@ -329,9 +363,8 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
                 ));
 
         List<MyUserLevel> list = getUserLevels(userId, partnerRules, userMap);
-
-
-        return HttpResult.ok( list);
+        list.sort((o1, o2) -> Integer.compare(o2.getGrade(), o1.getGrade()));
+        return HttpResult.ok(list);
     }
 
     @Override
@@ -342,32 +375,30 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         partnerRuleEntity.setAssessmentEndDate(period.getEndDate().split(" ")[0]);
         BigDecimal bf = baseMapper.selectTotalSumPremium(userId, grade, period);
         BigDecimal p = ruleService.getInviteData(userId, grade, period);
+        BigDecimal ownBf = baseMapper.selectOwnSumPremium(userId, period);
         List<PartnerAttribute> requirement = partnerRuleEntity.getRequirement();
+        return getAttribute(partnerRuleEntity, bf, p, ownBf, requirement);
+    }
+
+    private HttpResult getAttribute(PartnerRuleEntity partnerRuleEntity, BigDecimal bf, BigDecimal p, BigDecimal ownBf, List<PartnerAttribute> requirement) {
         requirement.get(0).setAchieve(String.valueOf(p));
         requirement.get(1).setAchieve(null != bf ? bf.toString() : BigDecimal.ZERO.toString());
-        requirement.get(2).setAchieve("111");
-
+        requirement.get(2).setAchieve(null != ownBf ? ownBf.toString() : BigDecimal.ZERO.toString());
         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);
-
+        BigDecimal ownBf = baseMapper.selectOwnSumPremium(userId, 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);
+        return getAttribute(partnerRuleEntity, bf, p, ownBf, strategyArray);
     }
 
     private  List<MyUserLevel> getUserLevels(String userId, List<PartnerRule> partnerRules, Map<Integer, PartnerUser> userMap) {
@@ -375,32 +406,30 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         for (PartnerRule rule : partnerRules) {
             PartnerUser partnerUser = userMap.get(rule.getGrade());
             MyUserLevel level = new MyUserLevel();
-            level.setUserId(userId);
+            level.setRatio(getProportion(rule.getGrade()));
             level.setGrade(rule.getGrade());
             level.setGradeName(rule.getGradeName());
-            level.setLockingState(rule.getStrategy());
             if (Objects.isNull(partnerUser)){
                 level.setLockingState("0");
                 level.setProgressBar(0);
             }else {
+                level.setUserId(userId);
                 level.setUserName(partnerUser.getName());
                 if (partnerUser.isIdentityStatus()){
                     level.setLockingState("2");
                     level.setLockCommission(accountMapper.selectCashFee(partnerUser.getUserId(), partnerUser.getGrade()));
+                    level.setZeroDays(ChronoUnit.DAYS.between(LocalDate.now(), partnerUser.getUpgradeCycleEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()));
                 }else {
                     level.setLockingState("1");
                 }
+                level.setProgressBar(2);
             }
             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);
 
@@ -408,6 +437,30 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         return list;
     }
 
+
+    public String getProportion(Integer grade){
+        CommissionRulesVo rulesVo = commissionService.queryAll();
+        if (grade == 1){
+            return rulesVo.getOriginator();
+        }else if (grade == 2){
+            PartnerCommissionRules administrator = rulesVo.getAdministrator();
+
+            List<PartnerRulesRatio> list = administrator.getRulesRatioList();
+            return list.get(0).getKickback().stripTrailingZeros().toPlainString() + "-" + list.get(2).getKickback().stripTrailingZeros().toPlainString();
+        }else if (grade == 3){
+            PartnerCommissionRules partner = rulesVo.getPartner();
+
+            List<PartnerRulesRatio> list = partner.getRulesRatioList();
+            return list.get(0).getKickback().stripTrailingZeros().toPlainString() + "-" + list.get(2).getKickback().stripTrailingZeros().toPlainString();
+        }else if (grade == 4){
+            PartnerCommissionRules partner = rulesVo.getPartner();
+
+            List<PartnerRulesRatio> list = partner.getRulesRatioList();
+            return list.get(0).getKickback().stripTrailingZeros().toPlainString() + "-" + list.get(2).getKickback().stripTrailingZeros().toPlainString();
+        }
+        return "0";
+    }
+
     private static SysUser2Vo getUser2Vo(SysUser sysUser,String id) {
         SysUser2Vo sysUser2Vo = new SysUser2Vo();
         SysUser user = new SysUser();
@@ -479,11 +532,11 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
     }
 
     @Override
-    public HttpResult selectByIdList(String id) {
-        if (StringUtils.isEmpty(id)) {
+    public HttpResult selectByIdList(PartnerApp partnerApp) {
+        if (StringUtils.isEmpty(partnerApp.getId())) {
             return HttpResult.error("ID不能为空");
         }
-        PartnerUser partnerUser = baseMapper.selectById(id);
+        PartnerUser partnerUser = baseMapper.selectById(partnerApp.getId());
         if (ObjectUtils.isEmpty(partnerUser)) {
             return HttpResult.error("人员不存在");
         }
@@ -493,50 +546,86 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         referrerInfo.put("mobile",partnerUser.getMobile());
         referrerInfo.put("userName",partnerUser.getName());
         HashMap<String, Object> map = new HashMap<>();
-        List<JSONObject> list = new ArrayList<>();
-        buildUserHierarchyResult(partnerUser.getUserId(),partnerUser.getGrade(),null,getRule(),list);
-        map.put("list",list);
+        Page page = getLevelUser(partnerUser.getUserId(), partnerUser.getGrade(), partnerApp, getRule());
+        map.put("list",getPage( page));
         map.put("referrer",referrerInfo);
+        map.put("parentStatus",partnerUser.isIdentityStatus() ? "2" : "1");
         return HttpResult.ok(map);
     }
 
 
     @Override
-    public HttpResult selectByGradeList(Map<String,String> paeramsMap, String userId) {
-        if (StringUtils.isEmpty(userId) || StringUtils.isEmpty(paeramsMap.get("grade"))) {
+    public HttpResult selectByGradeList(PartnerApp partnerApp) {
+        if (StringUtils.isEmpty(partnerApp.getUserId()) || StringUtils.isEmpty(partnerApp.getGrade())) {
             return HttpResult.error("用户ID和等级不能为空");
         }
         AppHomeParams params = new AppHomeParams();
-        params.setUserId(userId);
+        params.setUserId(partnerApp.getUserId());
         List<TeamOverviewVo> teamOverviewVos = baseMapper.selectTeamOverview(params);
         List<Object> list = new ArrayList<>();
         Map<Integer, String> rule = getRule();
+        List<String> grades = teamOverviewVos.stream()
+                .map(TeamOverviewVo::getGrade)
+                .distinct()
+                .collect(Collectors.toList());
+        List<PartnerUser> partnerUsers = baseMapper.selectList(new LambdaQueryWrapper<>(PartnerUser.class)
+                .eq(PartnerUser::getUserId, partnerApp.getUserId())
+                .in(PartnerUser::getGrade, grades));
+        Map<Integer, PartnerUser> userMap = partnerUsers.stream()
+                .collect(Collectors.toMap(PartnerUser::getGrade, Function.identity()));
 
         for (TeamOverviewVo overviewVo : teamOverviewVos) {
-            HashMap<String, Object> map = new HashMap<>();
+            JSONObject map = new JSONObject();
             map.put("grade",overviewVo.getGrade());
             map.put("gradeName",overviewVo.getGradeName());
-            PartnerUser partnerUser = baseMapper.selectOne(new LambdaQueryWrapper<>(PartnerUser.class)
-                    .eq(PartnerUser::getUserId, userId)
-                    .eq(PartnerUser::getGrade, overviewVo.getGrade()));
-            List<JSONObject> object = new ArrayList<>();
-            if (ObjectUtils.isNotEmpty(partnerUser)) {
-                List<JSONObject> jsonList = new ArrayList<>();
-                object = buildUserHierarchyResult(partnerUser.getUserId(),partnerUser.getGrade(),paeramsMap,rule,jsonList);
-            }
+            PartnerUser partnerUser = userMap.get(Integer.valueOf(overviewVo.getGrade()));
             HashMap<String, Object> hashMap = new HashMap<>();
-            hashMap.put("commission",sumField(object,"commission"));
-            hashMap.put("numberOrders",object.size());
-            hashMap.put("totalPremium",sumField(object,"premium"));
-            map.put("data",object);
-            map.put("total",hashMap);
-            //锁定状态
-            map.put("lockingState",partnerUser.isIdentityStatus());
+
+            try {
+                if (null == partnerUser) {
+                    setDefaultValues(hashMap);
+                    map.put("data", new JSONObject());
+                    map.put("total", hashMap);
+                    map.put("parentStatus", "0");
+                } else {
+                    Page page = getLevelUser(partnerUser.getUserId(), partnerUser.getGrade(), partnerApp, rule);
+                    List<JSONObject> records = page != null ? page.getRecords() : Collections.emptyList();
+                    boolean hasRecords = CollectionUtil.isNotEmpty(records);
+
+                    hashMap.put("commission", hasRecords ? sumField(records, "commission") : BigDecimal.ZERO);
+                    hashMap.put("numberOrders", hasRecords ? records.size() : 0);
+                    hashMap.put("totalPremium", hasRecords ? sumField(records, "premium") : BigDecimal.ZERO);
+
+                    map.put("data", getPage(page));
+                    map.put("total", hashMap);
+                    map.put("parentStatus", partnerUser.isIdentityStatus() ? "2" : "1");
+                }
+            } catch (Exception e) {
+                // 记录异常日志并跳过当前项
+                log.error("处理团队概览数据时发生错误:{}",e.fillInStackTrace());
+                continue;
+            }
+
             list.add(map);
         }
         return HttpResult.ok(list);
     }
 
+    private void setDefaultValues(HashMap<String, Object> hashMap) {
+        hashMap.put("commission", BigDecimal.ZERO);
+        hashMap.put("numberOrders", BigDecimal.ZERO);
+        hashMap.put("totalPremium", BigDecimal.ZERO);
+    }
+
+
+    public JSONObject getPage(Page page){
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("total",page.getTotal());
+        jsonObject.put("records",page.getRecords());
+        jsonObject.put("size",page.getSize());
+        jsonObject.put("current",page.getCurrent());
+        return jsonObject;
+    }
 
     public static BigDecimal sumField(List<JSONObject> jsonList, String fieldName) {
         return jsonList.stream()
@@ -561,30 +650,36 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
 
 
     @Override
-    public Object myPerformance(Map<String, String> map) {
-        if (StringUtils.isBlank(map.get("grade"))){
+    public Object myPerformance(PartnerApp partnerApp) {
+        if (StringUtils.isBlank(partnerApp.getGrade())){
             return HttpResult.error("用户不能为空");
         }
-        List<JSONObject> datalist = baseMapper.queryDataList(map);
+        Page<JSONObject> page = baseMapper.queryDataList(partnerApp.getPage(),partnerApp);
+        List<JSONObject> datalist = page.getRecords();
         HashMap<String, Object> hashMap = new HashMap<>();
         JSONObject totalMap = new JSONObject();
         totalMap.put("numberOrders",datalist.size());
         totalMap.put("totalPremium",sumField(datalist,"premium"));
         totalMap.put("commission",sumField(datalist,"commission"));
-        hashMap.put("data",datalist);
+        hashMap.put("data",page);
         hashMap.put("total",totalMap);
-        hashMap.put("lockData",isLockingState(map.get("userId"),map.get("grade")));
+        PartnerUser partnerUser = baseMapper.selectOne(new LambdaQueryWrapper<>(PartnerUser.class).eq(PartnerUser::getUserId,partnerApp.getUserId()).eq(PartnerUser::getGrade,partnerApp.getGrade()));
+        if (null != partnerUser){
+            hashMap.put("parentStatus",partnerUser.isIdentityStatus() ? "2" : "1");
+            if (partnerUser.isIdentityStatus()){
+                hashMap.put("lockData",isLockingState(partnerUser));
+            }else {
+                hashMap.put("lockData",null);
+            }
+        }else {
+            hashMap.put("parentStatus", "1");
+        }
         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));
+    public JSONObject isLockingState(PartnerUser partnerUser) {
         JSONObject jsonObject = new JSONObject();
-        if (null == partnerUser || partnerUser.isIdentityStatus()){
-            return jsonObject;
-        }
-        jsonObject.put("lockingState",partnerUser.isIdentityStatus());
-        jsonObject.put("lockCommission",new BigDecimal("12"));
+        jsonObject.put("lockCommission",new BigDecimal("126"));
         jsonObject.put("zeroDays",10);
         return jsonObject;
     }
@@ -667,36 +762,23 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
     }
 
 
-    private List<JSONObject> buildUserHierarchyResult(String userId,Integer grade, Map<String,String> paeramsMap
-            ,Map<Integer, String> rule,List<JSONObject> jsonList) {
-        getLevelUser(userId,grade,jsonList, rule,paeramsMap);
-        return  getSort(jsonList);
-    }
-
-
-    public void getLevelUser(String userId,Integer grade, List<JSONObject> list,Map<Integer, String> rule,Map<String,String> paeramsMap){
+    public Page getLevelUser(String userId,Integer grade,PartnerApp partnerApp, Map<Integer, String> rule){
         Integer sort = grade + 1;
         QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("p.referrer_id",userId);
         queryWrapper.eq("grade",sort);
         queryWrapper.eq("u.`status`",1);
-        if (CollectionUtil.isNotEmpty(paeramsMap)){
-            if (paeramsMap.containsKey("startTime") && StringUtils.isNotEmpty(paeramsMap.get("startTime"))){
-                queryWrapper.ge("p.create_time", paeramsMap.get("startTime") + " " + TimeConstants.START_TIME);
-            }
-            if (paeramsMap.containsKey("endTime") && StringUtils.isNotEmpty(paeramsMap.get("endTime"))){
-                queryWrapper.le("p.create_time", paeramsMap.get("endTime") + " " + TimeConstants.END_TIME);
-            }
-            if (StringUtils.isNotEmpty(paeramsMap.get("startTime")) && StringUtils.isNotEmpty(paeramsMap.get("endTime"))){
-                queryWrapper.between("p.create_time", paeramsMap.get("startTime") + " " + TimeConstants.START_TIME, paeramsMap.get("endTime") + " " + TimeConstants.END_TIME);
+        if (!Objects.isNull(partnerApp)){
+            if (StringUtils.isNotEmpty(partnerApp.getStartTime()) && StringUtils.isNotEmpty(partnerApp.getEndTime())){
+                queryWrapper.between("p.create_time", partnerApp.getStartTime() + " " + TimeConstants.START_TIME, partnerApp.getEndTime() + " " + TimeConstants.END_TIME);
             }
         }
 
-        List<PartnerUser> partnerUsers = baseMapper.selectListVo(queryWrapper);
-        
+        Page page = baseMapper.selectListVo(partnerApp.getPage(), queryWrapper);
+        List<PartnerUser> partnerUsers = page.getRecords();
         // 添加空值检查
         if (CollectionUtil.isEmpty(partnerUsers)) {
-            return;
+            return  page;
         }
         
         List<String> userIds = partnerUsers.stream().map(PartnerUser::getUserId).collect(Collectors.toList());
@@ -721,14 +803,17 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
             premiumMapDict.put(userIdTemp, premium);
             commissionMapDict.put(userIdTemp, commission);
         }
+        List<JSONObject> jsonList = new ArrayList<>();
         for (PartnerUser partnerUser : partnerUsers) {
             JSONObject jsonObject = getJsonObject(rule, partnerUser);
             jsonObject.put("number", countByUserIdLevel(partnerUser.getUserId(),partnerUser.getGrade() + 1));
             String currentUserId = partnerUser.getUserId();
             jsonObject.put("premium", premiumMapDict.getOrDefault(currentUserId, BigDecimal.ZERO));
             jsonObject.put("commission", commissionMapDict.getOrDefault(currentUserId, BigDecimal.ZERO));
-            list.add(jsonObject);
+            jsonList.add(jsonObject);
         }
+        List<JSONObject> sort1 = getSort(jsonList);
+        return page.setRecords(sort1);
     }
 
     public BigDecimal getValue(String targetKey, List<Map<String, Object>> list){

+ 2 - 0
src/main/java/com/ydtech/modules/partner/service/PartnerLiftingRecordService.java

@@ -28,4 +28,6 @@ public interface PartnerLiftingRecordService {
     List<PartnerLiftingRecord> queryExpireDays(String expireDays);
 
     void updateAuditStatusById(PartnerLiftingRecord record);
+
+    HttpResult downgradeAudit(LiftingRecordAudit audit);
 }

+ 4 - 3
src/main/java/com/ydtech/modules/partner/service/PartnerUserService.java

@@ -7,6 +7,7 @@ import com.ydtech.modules.admin.model.vo.AppUserInfoVo;
 import com.ydtech.modules.partner.model.PartnerPartnerAccount;
 import com.ydtech.modules.partner.model.PartnerUser;
 import com.ydtech.modules.partner.model.param.AppHomeParams;
+import com.ydtech.modules.partner.model.param.PartnerApp;
 import com.ydtech.modules.partner.model.param.QueryVo;
 import com.ydtech.modules.partner.model.param.UserGradeParam;
 import com.ydtech.modules.partner.model.vo.PartnerUserVo;
@@ -44,15 +45,15 @@ public interface PartnerUserService extends IService<PartnerUser> {
 
     HttpResult userCountVo(AppHomeParams params);
 
-    HttpResult selectByIdList(String id);
+    HttpResult selectByIdList(PartnerApp partnerApp);
 
     boolean selectByUserIdList(String id);
 
     AppUserInfoVo getUserInfo(Integer type);
 
-    HttpResult selectByGradeList(Map<String,String> map,String id);
+    HttpResult selectByGradeList(PartnerApp partnerApp);
 
-    Object myPerformance(Map<String, String> map);
+    Object myPerformance(PartnerApp partnerApp);
 
     HttpResult myPerformanceDetails(String carId,String userId);
 

+ 25 - 1
src/main/resources/mapper/modules/partner/PartnerUserMapper.xml

@@ -128,7 +128,15 @@
 
 <!--
 
-select grade,grade_name from  partner_rule
+
+SELECT
+            r.grade,
+            r.grade_name
+        FROM
+            partner_user u
+                LEFT JOIN partner_rule r ON u.grade = r.grade
+        WHERE
+            user_id = #{params.userId}
 
 -->
 
@@ -1141,4 +1149,20 @@ select grade,grade_name from  partner_rule
     </select>
 
 
+
+
+    <select id="selectOwnSumPremium" resultType="java.math.BigDecimal">
+        SELECT SUM(db.sumpremium) AS premium FROM (
+                  SELECT DISTINCT orderno,sumpremium FROM partner_premium_details WHERE user_id IN(
+                      SELECT user_id FROM partner_user WHERE user_id IN(
+                          SELECT id FROM sys_user WHERE identity = (SELECT identity FROM sys_user WHERE id = #{userId})
+              ) AND grade > 4
+            )
+            <if test="period.startDate != null and period.endDate != null">
+                AND create_time BETWEEN #{period.startDate} AND #{period.endDate}
+            </if>
+        ) db
+    </select>
+
+
 </mapper>