Răsfoiți Sursa

update: 合伙人首页查询优化

wks 1 an în urmă
părinte
comite
15d92e3e18

+ 60 - 40
src/main/java/com/ydtech/modules/admin/controller/deptBalance/DeptBalanceController.java

@@ -6,18 +6,22 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.dto.DeptBalanceDto;
 import com.ydtech.modules.admin.model.dto.SysPartnerConsoleDto;
 import com.ydtech.modules.admin.model.dto.SysPartnerInfoConsoleDto;
-import com.ydtech.modules.admin.model.vo.AppSysPartnerVo;
 import com.ydtech.modules.admin.model.vo.DeptBalanceVo;
 import com.ydtech.modules.admin.model.vo.KztGetDeptUtilsDto;
 import com.ydtech.modules.admin.model.vo.PartnerBalanceVo;
 import com.ydtech.modules.admin.service.DeptBalanceService;
+import com.ydtech.modules.admin.service.PartnerWalletService;
 import com.ydtech.modules.admin.utils.KztGetDeptUtils;
 import com.ydtech.modules.admin.utils.SliceUpDateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
@@ -27,11 +31,12 @@ import java.util.List;
 @Api(tags = "机构管理费统计")
 @RequestMapping("/deptBalance")
 @RestController
+@RequiredArgsConstructor
 public class DeptBalanceController {
 
-    @Autowired
-    private DeptBalanceService deptBalanceService;
+    private final DeptBalanceService deptBalanceService;
 
+    private final PartnerWalletService partnerWalletService;
 
     /**
      * @version
@@ -46,9 +51,10 @@ public class DeptBalanceController {
         deptBalanceVo.setBeginDate(map.get("startDate"));
         deptBalanceVo.setEndDate(map.get("endDate"));
         KztGetDeptUtils kztGetDeptUtils = new KztGetDeptUtils();
-        KztGetDeptUtilsDto kztGetDeptUtilsDto = kztGetDeptUtils.KztGetDeptIds(httpServerRequest.getRequestURL().toString());
-        if(ObjectUtils.isNotEmpty(kztGetDeptUtilsDto)){
-            if("1".equals(kztGetDeptUtilsDto.getType())){
+        KztGetDeptUtilsDto kztGetDeptUtilsDto = kztGetDeptUtils.KztGetDeptIds(httpServerRequest.getRequestURL()
+                .toString());
+        if (ObjectUtils.isNotEmpty(kztGetDeptUtilsDto)) {
+            if ("1".equals(kztGetDeptUtilsDto.getType())) {
                 deptBalanceVo.setDeptIds(kztGetDeptUtilsDto.getIds());
             } else if ("2".equals(kztGetDeptUtilsDto.getType())) {
                 deptBalanceVo.setUserIds(kztGetDeptUtilsDto.getIds());
@@ -71,16 +77,16 @@ public class DeptBalanceController {
         deptBalanceVo.setBeginDate(map.get("startDate"));
         deptBalanceVo.setEndDate(map.get("endDate"));
         KztGetDeptUtils kztGetDeptUtils = new KztGetDeptUtils();
-        KztGetDeptUtilsDto kztGetDeptUtilsDto = kztGetDeptUtils.KztGetDeptIds(httpServerRequest.getRequestURL().toString());
-        if(ObjectUtils.isNotEmpty(kztGetDeptUtilsDto)){
-            if("1".equals(kztGetDeptUtilsDto.getType())){
+        KztGetDeptUtilsDto kztGetDeptUtilsDto = kztGetDeptUtils.KztGetDeptIds(httpServerRequest.getRequestURL()
+                .toString());
+        if (ObjectUtils.isNotEmpty(kztGetDeptUtilsDto)) {
+            if ("1".equals(kztGetDeptUtilsDto.getType())) {
                 deptBalanceVo.setDeptIds(kztGetDeptUtilsDto.getIds());
             } else if ("2".equals(kztGetDeptUtilsDto.getType())) {
                 deptBalanceVo.setUserIds(kztGetDeptUtilsDto.getIds());
             }
         }
-        HttpResult<IPage<SysPartnerConsoleDto>> result = deptBalanceService.queryPartnerStatistics(deptBalanceVo);
-        return result;
+        return partnerWalletService.queryPartnerStatistics(deptBalanceVo);
     }
 
 
@@ -92,6 +98,9 @@ public class DeptBalanceController {
     @PostMapping("queryPartnerInfo")
     @ApiOperation(value = "合伙人详情")
     public HttpResult<List<SysPartnerConsoleDto>> queryPartnerInfo(@RequestBody DeptBalanceVo deptBalanceVo) {
+        HashMap<String, String> map = getDateMapByType(deptBalanceVo.getDays(), deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate());
+        deptBalanceVo.setBeginDate(map.get("startDate"));
+        deptBalanceVo.setEndDate(map.get("endDate"));
         List<SysPartnerConsoleDto> result = deptBalanceService.queryPartnerInfo(deptBalanceVo);
         return HttpResult.ok(result);
     }
@@ -104,12 +113,14 @@ public class DeptBalanceController {
     @PostMapping("queryStudioInfo")
     @ApiOperation(value = "工作室详情")
     public HttpResult<List<SysPartnerConsoleDto>> queryStudioInfo(@RequestBody DeptBalanceVo deptBalanceVo) {
+        HashMap<String, String> map = getDateMapByType(deptBalanceVo.getDays(), deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate());
+        deptBalanceVo.setBeginDate(map.get("startDate"));
+        deptBalanceVo.setEndDate(map.get("endDate"));
         List<SysPartnerConsoleDto> result = deptBalanceService.queryPartnerInfo(deptBalanceVo);
         return HttpResult.ok(result);
     }
 
 
-
     /**
      * @version
      * @author: whp
@@ -118,6 +129,9 @@ public class DeptBalanceController {
     @PostMapping("info")
     @ApiOperation(value = "合伙人详情")
     public HttpResult<SysPartnerInfoConsoleDto> queryInfo(@RequestBody DeptBalanceVo deptBalanceVo) {
+        HashMap<String, String> map = getDateMapByType(deptBalanceVo.getDays(), deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate());
+        deptBalanceVo.setBeginDate(map.get("startDate"));
+        deptBalanceVo.setEndDate(map.get("endDate"));
         SysPartnerInfoConsoleDto result = deptBalanceService.queryInfo(deptBalanceVo);
         return HttpResult.ok(result);
     }
@@ -131,6 +145,9 @@ public class DeptBalanceController {
     @PostMapping("/getTeamInfo")
     @ApiOperation(value = "查看机构下团队信息")
     public HttpResult<SysPartnerInfoConsoleDto> getTeamInfo(@RequestBody DeptBalanceVo deptBalanceVo) {
+        HashMap<String, String> map = getDateMapByType(deptBalanceVo.getDays(), deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate());
+        deptBalanceVo.setBeginDate(map.get("startDate"));
+        deptBalanceVo.setEndDate(map.get("endDate"));
         SysPartnerInfoConsoleDto result = deptBalanceService.getTeamInfo(deptBalanceVo);
         return HttpResult.ok(result);
     }
@@ -144,6 +161,9 @@ public class DeptBalanceController {
     @PostMapping("/getTeamUserInfo")
     @ApiOperation(value = "查看团队下人员信息")
     public HttpResult<SysPartnerInfoConsoleDto> getTeamUserInfo(@RequestBody DeptBalanceVo deptBalanceVo) {
+        HashMap<String, String> map = getDateMapByType(deptBalanceVo.getDays(), deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate());
+        deptBalanceVo.setBeginDate(map.get("startDate"));
+        deptBalanceVo.setEndDate(map.get("endDate"));
         SysPartnerInfoConsoleDto result = deptBalanceService.getTeamUserInfo(deptBalanceVo);
         return HttpResult.ok(result);
     }
@@ -162,7 +182,6 @@ public class DeptBalanceController {
     }
 
 
-
     /**
      * @version
      * @author: whp
@@ -176,9 +195,10 @@ public class DeptBalanceController {
         deptBalanceVo.setBeginDate(map.get("startDate"));
         deptBalanceVo.setEndDate(map.get("endDate"));
         KztGetDeptUtils kztGetDeptUtils = new KztGetDeptUtils();
-        KztGetDeptUtilsDto kztGetDeptUtilsDto = kztGetDeptUtils.KztGetDeptIds(httpServerRequest.getRequestURL().toString());
-        if(ObjectUtils.isNotEmpty(kztGetDeptUtilsDto)){
-            if("1".equals(kztGetDeptUtilsDto.getType())){
+        KztGetDeptUtilsDto kztGetDeptUtilsDto = kztGetDeptUtils.KztGetDeptIds(httpServerRequest.getRequestURL()
+                .toString());
+        if (ObjectUtils.isNotEmpty(kztGetDeptUtilsDto)) {
+            if ("1".equals(kztGetDeptUtilsDto.getType())) {
                 deptBalanceVo.setDeptIds(kztGetDeptUtilsDto.getIds());
             } else if ("2".equals(kztGetDeptUtilsDto.getType())) {
                 deptBalanceVo.setUserIds(kztGetDeptUtilsDto.getIds());
@@ -190,35 +210,35 @@ public class DeptBalanceController {
 
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/6/19 11:57
-     *  @Description:  通过时间类型判断
+     * @version
+     * @author: hxl
+     * @Date: 2024/6/19 11:57
+     * @Description: 通过时间类型判断
      */
-    private static HashMap<String,String> getDateMapByType(String type, String startDate, String endDate) {
-        HashMap<String,String> map =new HashMap<>();
-        String  startDateStr="";
-        String  endDateStr="";
-        if(org.apache.commons.lang3.StringUtils.isNotBlank(startDate) && org.apache.commons.lang3.StringUtils.isNotBlank(endDate)){
-            startDateStr= org.apache.commons.lang3.StringUtils.isNotBlank(startDate)?startDate+" 00:00:00":null;
-            endDateStr= org.apache.commons.lang3.StringUtils.isNotBlank(endDate)?endDate+" 23:59:59":null;
-        }else{
-            if("1".equals(type)){
+    private static HashMap<String, String> getDateMapByType(String type, String startDate, String endDate) {
+        HashMap<String, String> map = new HashMap<>();
+        String startDateStr = "";
+        String endDateStr = "";
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(startDate) && org.apache.commons.lang3.StringUtils.isNotBlank(endDate)) {
+            startDateStr = org.apache.commons.lang3.StringUtils.isNotBlank(startDate) ? startDate + " 00:00:00" : null;
+            endDateStr = org.apache.commons.lang3.StringUtils.isNotBlank(endDate) ? endDate + " 23:59:59" : null;
+        } else {
+            if ("1".equals(type)) {
                 // 近1天
-                startDateStr= SliceUpDateUtil.getBeforeDay(new Date(),0)+" 00:00:00";
-                endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
-            }else if("2".equals(type)){
+                startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 00:00:00";
+                endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
+            } else if ("2".equals(type)) {
                 // 近7天
-                startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),1)+" 00:00:00";
-                endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
-            }else if("3".equals(type)){
+                startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 1) + " 00:00:00";
+                endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
+            } else if ("3".equals(type)) {
                 // 近30天
-                startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),6)+" 00:00:00";
-                endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
+                startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 6) + " 00:00:00";
+                endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
             }
         }
-        map.put("startDate",startDateStr);
-        map.put("endDate",endDateStr);
+        map.put("startDate", startDateStr);
+        map.put("endDate", endDateStr);
         return map;
     }
 

+ 86 - 0
src/main/java/com/ydtech/modules/admin/dao/PartnerWalletMapper.java

@@ -0,0 +1,86 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.modules.admin.model.dto.partner.CopartnerAndStudioNumberDTO;
+import com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface PartnerWalletMapper {
+
+    /**
+     * 获取会员总人数
+     *
+     * @param userIdList 用户列表
+     * @return 会员总人数
+     */
+    List<PartnerDataDTO> getMemberNumber(@Param("userIdList") List<String> userIdList);
+
+    /**
+     * 获取总保费
+     *
+     * @param userIdList 用户列表
+     * @return 总保费
+     */
+    List<PartnerDataDTO> getTotalPremiums(@Param("userIdList") List<String> userIdList, @Param("beginDate") String beginDate, @Param("endDate") String endDate);
+
+    /**
+     * 获取总佣金
+     *
+     * @param userIdList 用户列表
+     * @return 佣金
+     */
+    List<PartnerDataDTO> getCommission(@Param("userIdList") List<String> userIdList, @Param("beginDate") String beginDate, @Param("endDate") String endDate);
+
+    /**
+     * 获取合伙人工作室数量
+     *
+     * @param userIdList 人员列表
+     * @return 合伙人 工作室数量
+     */
+    List<CopartnerAndStudioNumberDTO> getCopartnerAndStudioNumber(@Param("userIdList") List<String> userIdList);
+
+
+    /**
+     * 获取各个等级下合伙人的会员数
+     *
+     * @param userId 用户id
+     * @return
+     */
+    List<PartnerDataDTO> getPartnerRankMemberNumber(@Param("userId") String userId);
+
+
+    /**
+     * 获取各个等级下合伙人 总保费
+     *
+     * @param userId 用户id
+     * @return 总保费
+     */
+    List<PartnerDataDTO> getPartnerRankTotalPremiums(@Param("userId") String userId, @Param("beginDate") String beginDate, @Param("endDate") String endDate);
+
+    /**
+     * 获取各个等级下合伙人 总佣金
+     *
+     * @param userId 用户id
+     * @return 佣金
+     */
+    List<PartnerDataDTO> getPartnerRankCommission(@Param("userId") String userId, @Param("beginDate") String beginDate, @Param("endDate") String endDate);
+
+    /**
+     * 各个等级下合伙人 合伙人数
+     *
+     * @param userId 用户id
+     * @return 合伙人数
+     */
+    List<PartnerDataDTO> getPartnerRankCopartnerNumber(@Param("userId") String userId);
+
+    /**
+     * 各个等级下合伙人 工作室数
+     *
+     * @param userId 用户id
+     * @return 工作室数
+     */
+    List<PartnerDataDTO> getPartnerRankStudioNumber(@Param("userId") String userId);
+}

+ 5 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysPartnerConsoleDto.java

@@ -4,7 +4,11 @@ import com.ydtech.modules.admin.model.PartnerInfoVo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.models.auth.In;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -12,6 +16,7 @@ import java.util.List;
 
 @Data
 @ApiModel(value = "合伙人控制台")
+@Accessors(chain = true)
 public class SysPartnerConsoleDto implements Serializable {
     /**
      * 员工id

+ 24 - 0
src/main/java/com/ydtech/modules/admin/model/dto/partner/CopartnerAndStudioNumberDTO.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.admin.model.dto.partner;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class CopartnerAndStudioNumberDTO {
+
+    private String userId;
+    /**
+     * 推荐等级(0:直接推荐;1:间接推荐)
+     */
+    private String source;
+    /**
+     * 推荐类型(0:合伙人  1:机构负责人 2:团队长  3:成员)
+     */
+    private String type;
+
+    private String count;
+
+}

+ 20 - 0
src/main/java/com/ydtech/modules/admin/model/dto/partner/PartnerDataDTO.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.admin.model.dto.partner;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class PartnerDataDTO implements Serializable {
+
+    private static final long serialVersionUID = 5947804961787692481L;
+
+    private String userId;
+
+    private String data;
+
+}

+ 21 - 0
src/main/java/com/ydtech/modules/admin/service/PartnerWalletService.java

@@ -0,0 +1,21 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.dto.SysPartnerConsoleDto;
+import com.ydtech.modules.admin.model.vo.DeptBalanceVo;
+
+import java.util.List;
+
+public interface PartnerWalletService {
+
+    /**
+     * 控制台 钱包管理 合伙人 首页查询
+     *
+     * @param deptBalanceVo 查询条件
+     * @return 分页结果
+     */
+    HttpResult<IPage<SysPartnerConsoleDto>> queryPartnerStatistics(DeptBalanceVo deptBalanceVo);
+
+
+}

+ 111 - 0
src/main/java/com/ydtech/modules/admin/service/impl/PartnerWalletServiceImpl.java

@@ -0,0 +1,111 @@
+package com.ydtech.modules.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.dao.PartnerWalletMapper;
+import com.ydtech.modules.admin.dao.SysPartnerMapper;
+import com.ydtech.modules.admin.dao.SysRelationPersonMapper;
+import com.ydtech.modules.admin.model.SysPartner;
+import com.ydtech.modules.admin.model.SysRelationPerson;
+import com.ydtech.modules.admin.model.dto.SysPartnerConsoleDto;
+import com.ydtech.modules.admin.model.dto.partner.CopartnerAndStudioNumberDTO;
+import com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO;
+import com.ydtech.modules.admin.model.vo.DeptBalanceVo;
+import com.ydtech.modules.admin.service.PartnerWalletService;
+import com.ydtech.modules.base.controller.BaseController;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+/**
+ * @description: 控制台 钱包管理 合伙人
+ * @author: wenks
+ * @date: 2025/6/13 15:56
+ **/
+@Service
+@RequiredArgsConstructor
+public class PartnerWalletServiceImpl implements PartnerWalletService {
+
+    private final SysPartnerMapper sysPartnerMapper;
+
+    private final PartnerWalletMapper partnerWalletMapper;
+
+    private final SysRelationPersonMapper sysRelationPersonMapper;
+
+    @Override
+    public HttpResult<IPage<SysPartnerConsoleDto>> queryPartnerStatistics(DeptBalanceVo deptBalanceVo) {
+        Page<SysPartnerConsoleDto> page = new Page<>(deptBalanceVo.getPageNum(), deptBalanceVo.getPageSize());
+        IPage<SysPartnerConsoleDto> sysPartnersPage = sysPartnerMapper.queryPage(page, deptBalanceVo);
+
+        List<String> userIdList = sysPartnersPage.getRecords()
+                .stream()
+                .map(SysPartnerConsoleDto::getUserId)
+                .collect(Collectors.toList());
+
+
+        // 并行查询统计数据
+        CompletableFuture<List<PartnerDataDTO>> memberFuture = CompletableFuture.supplyAsync(
+                () -> partnerWalletMapper.getMemberNumber(userIdList));
+        CompletableFuture<List<PartnerDataDTO>> premiumFuture = CompletableFuture.supplyAsync(
+                () -> partnerWalletMapper.getTotalPremiums(userIdList, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate()));
+        CompletableFuture<List<PartnerDataDTO>> commissionFuture = CompletableFuture.supplyAsync(
+                () -> partnerWalletMapper.getCommission(userIdList, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate()));
+        CompletableFuture<List<CopartnerAndStudioNumberDTO>> studioFuture = CompletableFuture.supplyAsync(
+                () -> partnerWalletMapper.getCopartnerAndStudioNumber(userIdList));
+
+        LambdaQueryWrapper<SysRelationPerson> eq = new LambdaQueryWrapper<SysRelationPerson>()
+                .eq(SysRelationPerson::getSource, "0")
+                .eq(SysRelationPerson::getType, "1")
+                .in(SysRelationPerson::getSuggestId, userIdList);
+
+        CompletableFuture<List<SysRelationPerson>> sysRelationPerson = CompletableFuture.supplyAsync(
+                () -> sysRelationPersonMapper.selectList(eq));
+
+        CompletableFuture.allOf(memberFuture, premiumFuture, commissionFuture, studioFuture, sysRelationPerson).join();
+
+        // 转换为Map
+        Map<String, String> memberMap = convertToMap(memberFuture.join());
+        Map<String, String> premiumMap = convertToMap(premiumFuture.join());
+        Map<String, String> commissionMap = convertToMap(commissionFuture.join());
+        Map<String, String> studioMap = studioFuture.join().stream()
+                .collect(Collectors.toMap(
+                        x -> x.getUserId() + x.getSource() + x.getType(),
+                        CopartnerAndStudioNumberDTO::getCount));
+        Map<String, List<String>> collect = sysRelationPerson.join()
+                .stream()
+                .collect(Collectors.groupingBy(SysRelationPerson::getSuggestId, Collectors.mapping(SysRelationPerson::getAgencyLeaderId, Collectors.toList())));
+
+
+        // 填充统计数据
+        sysPartnersPage.getRecords().forEach(dto -> {
+            dto.setLoginUserId(deptBalanceVo.getUserId());
+            dto.setLeaderIds(collect.get(dto.getUserId()));
+            dto.setMemberShip(Integer.parseInt(memberMap.getOrDefault(dto.getUserId(), "0")));
+            dto.setTotalIncome(new BigDecimal(premiumMap.getOrDefault(dto.getUserId(), "0")));
+            dto.setCommission(new BigDecimal(commissionMap.getOrDefault(dto.getUserId(), "0")));
+            dto.setNumberPartners(Integer.parseInt(studioMap.getOrDefault(dto.getUserId() + "00", "0")));
+            dto.setDirectStudio(Integer.parseInt(studioMap.getOrDefault(dto.getUserId() + "01", "0")));
+            dto.setIndirectStudio(Integer.parseInt(studioMap.getOrDefault(dto.getUserId() + "11", "0")));
+        });
+
+        return HttpResult.ok(sysPartnersPage);
+    }
+
+    private Map<String, String> convertToMap(List<PartnerDataDTO> list) {
+        return Optional.ofNullable(list)
+                .orElse(Collections.emptyList())
+                .stream()
+                .collect(Collectors.toMap(PartnerDataDTO::getUserId, PartnerDataDTO::getData));
+    }
+
+}

+ 126 - 0
src/main/resources/mapper/modules/admin/PartnerWalletMapper.xml

@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.admin.dao.PartnerWalletMapper">
+
+    <select id="getMemberNumber" resultType="com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO">
+        SELECT COALESCE(p.suggest_id, l.suggest_id) AS userId,
+        COUNT(*) AS data
+        FROM sys_user u
+        INNER JOIN sys_dept d ON u.dept_id = d.id
+        INNER JOIN sys_agency_leader l ON l.dept_id = d.parent_id
+        LEFT JOIN sys_relation_person p ON l.suggest_id = p.agency_leader_id
+        WHERE (p.suggest_id IN
+        <foreach collection="userIdList" item="item" index="index"
+                 open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        OR l.suggest_id IN
+        <foreach collection="userIdList" item="item" index="index"
+                 open="(" separator="," close=")">
+            #{item}
+        </foreach>)
+        AND u.status != '0'
+        GROUP BY COALESCE(p.suggest_id, l.suggest_id);
+    </select>
+
+    <select id="getTotalPremiums" resultType="com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO">
+        select user_id as userId, sum(sumpremium) as data
+        from sys_premium_details
+        where user_id  IN
+        <foreach collection="userIdList" item="item" index="index"
+                 open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        and status = '1'
+        and source = '1'
+        and create_time &gt; #{beginDate}
+        and create_time &lt; #{endDate}
+        GROUP BY user_id
+    </select>
+
+    <select id="getCommission" resultType="com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO">
+        select user_id as userId, sum(extract_fee) as data
+        from sys_premium_details
+        where user_id IN
+        <foreach collection="userIdList" item="item" index="index"
+                 open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        and status = '1'
+        and create_time &gt; #{beginDate}
+        and create_time &lt; #{endDate}
+        GROUP BY user_id
+    </select>
+
+    <select id="getCopartnerAndStudioNumber"
+            resultType="com.ydtech.modules.admin.model.dto.partner.CopartnerAndStudioNumberDTO">
+        SELECT suggest_id as userId, source as source, type as type, COUNT(1) as count
+        FROM sys_relation_person
+        WHERE suggest_id in
+        <foreach collection="userIdList" item="item" index="index"
+                 open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        GROUP BY suggest_id, source, type;
+    </select>
+
+    <select id="getPartnerRankMemberNumber"
+            resultType="com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO">
+        select p.type as userId, count(*) as data
+        from sys_user u
+                 LEFT join sys_dept d on u.dept_id = d.id
+                 LEFT join sys_agency_leader l on d.parent_id = l.dept_id
+                 LEFT join sys_relation_person rp on rp.agency_leader_id = l.suggest_id
+                 INNER JOIN sys_partner p ON p.user_id = rp.suggest_id
+        WHERE p.suggest_id = #{userId}
+        GROUP BY p.type;
+    </select>
+
+    <select id="getPartnerRankTotalPremiums"
+            resultType="com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO">
+        select p.type as userId, sum(sumpremium) as data
+        from sys_premium_details d
+                 left join sys_partner p ON p.user_id = d.user_id
+        where d.create_time &gt; #{beginDate}
+            and d.create_time &lt; #{endDate}
+            and p.suggest_id = #{userId}
+            and d.status = '1'
+            and d.source = p.type
+        GROUP BY p.type;
+    </select>
+
+    <select id="getPartnerRankCommission"
+            resultType="com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO">
+        select p.type as userId, sum(extract_fee) as data
+        from sys_premium_details d
+                 left join sys_partner p ON p.user_id = d.user_id
+        where d.create_time &gt; #{beginDate}
+            and d.create_time &lt; #{endDate}
+            and p.suggest_id = #{userId}
+            and d.status = '1'
+            and d.source = p.type
+        GROUP BY p.type;
+    </select>
+
+    <select id="getPartnerRankCopartnerNumber"
+            resultType="com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO">
+        SELECT p.type as userId, COUNT(*) as data
+        FROM sys_relation_person rp
+                 INNER JOIN sys_partner p ON p.user_id = rp.agency_leader_id
+        WHERE p.suggest_id = #{userId}
+        GROUP BY p.type;
+    </select>
+
+    <select id="getPartnerRankStudioNumber"
+            resultType="com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO">
+        SELECT p.type as userId, COUNT(*) as data
+        FROM sys_relation_person rp
+                 INNER JOIN sys_agency_leader l ON rp.agency_leader_id = l.suggest_id
+                 INNER JOIN sys_partner p ON p.user_id = rp.agency_leader_id
+        WHERE p.suggest_id = #{userId}
+        GROUP BY p.type;
+    </select>
+
+</mapper>