浏览代码

1.控制台代理人 详情

wuhp 2 年之前
父节点
当前提交
6aa79f2f0e
共有 18 个文件被更改,包括 578 次插入18 次删除
  1. 45 4
      src/main/java/com/ydtech/modules/admin/controller/personnelStatistics/PersonnelStatisticsController.java
  2. 2 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java
  3. 3 0
      src/main/java/com/ydtech/modules/admin/model/dto/EsmUserReferrerDTO.java
  4. 31 0
      src/main/java/com/ydtech/modules/admin/model/dto/QxFrontlineAgentDto.java
  5. 6 0
      src/main/java/com/ydtech/modules/admin/model/dto/TaskStatisticsDto.java
  6. 31 0
      src/main/java/com/ydtech/modules/admin/model/dto/TeamManagementDto.java
  7. 1 1
      src/main/java/com/ydtech/modules/admin/model/report/financialReceivables/FinancialReceivablesAllVo.java
  8. 7 0
      src/main/java/com/ydtech/modules/admin/model/vo/QxFrontlineAgentVo.java
  9. 24 0
      src/main/java/com/ydtech/modules/admin/service/UserReportService.java
  10. 326 7
      src/main/java/com/ydtech/modules/admin/service/impl/UserReportServiceImpl.java
  11. 7 0
      src/main/java/com/ydtech/modules/esm/dao/EsmUserReferrerMapper.java
  12. 4 2
      src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyIncomeServiceImpl.java
  13. 9 0
      src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyMapper.java
  14. 2 0
      src/main/java/com/ydtech/modules/order/service/InsAreaCompanyService.java
  15. 5 0
      src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java
  16. 25 4
      src/main/resources/mapper/modules/admin/SysUserMapper.xml
  17. 29 0
      src/main/resources/mapper/modules/esm/EsmUserReferrerMapper.xml
  18. 21 0
      src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml

+ 45 - 4
src/main/java/com/ydtech/modules/admin/controller/personnelStatistics/PersonnelStatisticsController.java

@@ -2,7 +2,9 @@ package com.ydtech.modules.admin.controller.personnelStatistics;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.dto.PersonnelCountDetailsDto;
 import com.ydtech.modules.admin.model.dto.QxFrontlineAgentDto;
+import com.ydtech.modules.admin.model.dto.TeamManagementDto;
 import com.ydtech.modules.admin.model.vo.HouLinePersonnelReportVo;
 import com.ydtech.modules.admin.model.vo.QxFrontlineAgentVo;
 import com.ydtech.modules.admin.service.SysDeptService;
@@ -11,10 +13,7 @@ import com.ydtech.modules.fnc.entity.SettlementDocumentaryFeesSumEntity;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-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 org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
 import java.util.List;
@@ -83,5 +82,47 @@ public class PersonnelStatisticsController {
         }
     }
 
+    /**
+     * @version
+     * @author: whp
+     * @Date: 2024/8/07
+     * @Description: 人员统计-前线人员-代理人统计-详情
+     */
+    @PostMapping("queryQxFrontlineDetails")
+    @ApiOperation(value = "人员统计-前线人员-代理人统计-团队管理")
+    public HttpResult<List<TeamManagementDto>> queryQxFrontlineDetails(@RequestBody QxFrontlineAgentVo qxFrontlineAgentVo) {
+        HttpResult<List<TeamManagementDto>> result = userReportService.queryQxFrontlineDetails(qxFrontlineAgentVo);
+        return result;
+    }
 
+    /**
+     * @version
+     * @author: whp
+     * @Date: 2024/8/07
+     * @Description: 人员统计-前线人员-代理人统计-详情
+     */
+    @PostMapping("queryQxFrontlineDetailsUser")
+    @ApiOperation(value = "人员统计-前线人员-代理人统计")
+    public HttpResult<IPage<QxFrontlineAgentDto>> queryQxFrontlineDetailsUser(@RequestBody QxFrontlineAgentVo qxFrontlineAgentVo) {
+
+        HttpResult<IPage<QxFrontlineAgentDto>> result = userReportService.queryQxFrontlineDetailsUser(qxFrontlineAgentVo);
+        return result;
+    }
+
+    /**
+     * @version
+     * @author: whp
+     * @Date: 2024/8/07
+     * @Description: 人员统计-前线人员-代理人统计 -人员详情
+     */
+    @GetMapping("getByUserId/{userId}")
+    @ApiOperation(value = "人员统计-前线人员-代理人统计-团队排名")
+    public HttpResult<QxFrontlineAgentDto> getByUserId( @PathVariable("userId") String  userId) {
+        try{
+            QxFrontlineAgentDto result=  userReportService.getByUserId(userId);
+            return HttpResult.ok("查询数据成功", result);
+        }catch (Exception e){
+            return HttpResult.error("查询错误"+e.getMessage());
+        }
+    }
 }

+ 2 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java

@@ -396,6 +396,8 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 
      IPage<QxFrontlineAgentDto> queryQxFrontlineAgent(@Param("page") Page page,@Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
 
+    IPage<QxFrontlineAgentDto> getByIdsList(@Param("page") Page page, @Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
+
 }
 
 

+ 3 - 0
src/main/java/com/ydtech/modules/admin/model/dto/EsmUserReferrerDTO.java

@@ -26,4 +26,7 @@ public class EsmUserReferrerDTO implements Serializable {
     @ApiModelProperty(value = "推荐人归属ID")
     private String affiliation;
 
+    @ApiModelProperty(value = "用户状态")
+    private String status;
+
 }

+ 31 - 0
src/main/java/com/ydtech/modules/admin/model/dto/QxFrontlineAgentDto.java

@@ -9,6 +9,9 @@ import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
 
 @Getter
 @Setter
@@ -44,5 +47,33 @@ public class QxFrontlineAgentDto implements Serializable {
     @ApiModelProperty(value = "头像路径")
     private String filePath;
 
+    @ApiModelProperty(value = "手机号")
+    private String userPhone;
+
+    @ApiModelProperty(value = "手机号")
+    private Date userDate;
+
+
+
+    @ApiModelProperty(value = "核保笔数")
+    private String underwritingCount;
+
+    @ApiModelProperty(value = "报价笔数")
+    private String orderNumber;
+
+
+    @ApiModelProperty(value = "出单笔数")
+    private BigDecimal qutationInsureCount;
+
+    @ApiModelProperty(value = "是否达标")
+    private String isCompliance;
+
+    @ApiModelProperty(value = "签单保费达标差距")
+    private String  premiumCompliance;
+
+    @ApiModelProperty(value = "出单人力达标差距")
+    private String  orderManpowerCompliance;
+
+
 }
 

+ 6 - 0
src/main/java/com/ydtech/modules/admin/model/dto/TaskStatisticsDto.java

@@ -61,4 +61,10 @@ public class TaskStatisticsDto {
 
     @ApiModelProperty(value = "保险公司名称")
     private String insuranceCompanyName;
+
+    @ApiModelProperty(value = "总保费")
+    private String totalPremium;
+
+    @ApiModelProperty(value = "报价笔数")
+    private String orderNumber;
 }

+ 31 - 0
src/main/java/com/ydtech/modules/admin/model/dto/TeamManagementDto.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.admin.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@Data
+@ApiModel("人员统计-前线人员-代理人统计-详情-团队管理实体")
+public class TeamManagementDto implements Serializable{
+
+    @ApiModelProperty(value = "团队级别")
+    private String teamLevel;
+
+    @ApiModelProperty(value = "团队人数")
+    private String totalManpower;
+
+    @ApiModelProperty(value = "签单保费")
+    private String totalPremium;
+
+    @ApiModelProperty(value = "出单人力")
+    private String orderManpower;
+
+}

+ 1 - 1
src/main/java/com/ydtech/modules/admin/model/report/financialReceivables/FinancialReceivablesAllVo.java

@@ -33,7 +33,7 @@ public class FinancialReceivablesAllVo {
     public FinancialReceivablesAllVo() {
     }
 
-    public FinancialReceivablesAllVo(String sySumAmount,String  ptSumAmount, String year, List<FinancialReceivablesVo> list) {
+    public FinancialReceivablesAllVo(String  ptSumAmount,String sySumAmount, String year, List<FinancialReceivablesVo> list) {
         this.sySumAmount = sySumAmount;
         this.ptSumAmount = ptSumAmount;
         this.year = year;

+ 7 - 0
src/main/java/com/ydtech/modules/admin/model/vo/QxFrontlineAgentVo.java

@@ -7,6 +7,7 @@ import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.Min;
 import java.io.Serializable;
+import java.util.List;
 
 @Data
 @ApiModel("人员统计-前线人员-代理人统计查询实体")
@@ -50,6 +51,12 @@ public class QxFrontlineAgentVo implements Serializable {
     @ApiModelProperty(value = "用户id")
     private String userId;
 
+    @ApiModelProperty(value = "用户ids")
+    private List<String> ids;
+
+    @ApiModelProperty(value = "级别")
+    private String level;
+
 
 
 }

+ 24 - 0
src/main/java/com/ydtech/modules/admin/service/UserReportService.java

@@ -3,7 +3,9 @@ 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.PersonnelCountDetailsDto;
 import com.ydtech.modules.admin.model.dto.QxFrontlineAgentDto;
+import com.ydtech.modules.admin.model.dto.TeamManagementDto;
 import com.ydtech.modules.admin.model.report.user.HouLinePersonnelReportDto;
 import com.ydtech.modules.admin.model.report.user.QianLineDDPersonnelReportDto;
 import com.ydtech.modules.admin.model.report.user.QianLineDLPersonnelReportDto;
@@ -71,6 +73,28 @@ public interface UserReportService {
      */
     List<QxFrontlineAgentDto> queryQxFrontlineAgentRanking(QxFrontlineAgentVo qxFrontlineAgentVo);
 
+    /**
+     * @version
+     * @author: whp
+     * @Date: 2024/8/07
+     * @Description: 人员统计-前线人员-代理人统计-详情
+     */
+    HttpResult<List<TeamManagementDto>> queryQxFrontlineDetails(QxFrontlineAgentVo qxFrontlineAgentVo);
+
+    /**
+     * @version
+     * @author: whp
+     * @Date: 2024/8/07
+     * @Description: 人员统计-前线人员-代理人统计-详情
+     */
+    HttpResult<IPage<QxFrontlineAgentDto>> queryQxFrontlineDetailsUser(QxFrontlineAgentVo qxFrontlineAgentVo);
+
+    /**
+     *
+     * @param userId  用户id
+     * @return  用户详情信息
+     */
+    QxFrontlineAgentDto getByUserId(String userId);
 }
 
 

+ 326 - 7
src/main/java/com/ydtech/modules/admin/service/impl/UserReportServiceImpl.java

@@ -9,13 +9,11 @@ import com.ydtech.modules.admin.dao.SysDeptMapper;
 import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
-import com.ydtech.modules.admin.model.dto.EmployeeIncreaseReportDto;
-import com.ydtech.modules.admin.model.dto.EsmUserReferrerDTO;
-import com.ydtech.modules.admin.model.dto.QxFrontlineAgentDto;
-import com.ydtech.modules.admin.model.dto.ReportDto;
+import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.report.user.*;
 import com.ydtech.modules.admin.model.vo.HouLinePersonnelReportVo;
 import com.ydtech.modules.admin.model.vo.QxFrontlineAgentVo;
+import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
 import com.ydtech.modules.admin.service.UserReportService;
 import com.ydtech.modules.base.model.vo.PageVo;
 import com.ydtech.modules.esm.dao.EsmUserReferrerMapper;
@@ -55,6 +53,9 @@ public class UserReportServiceImpl implements UserReportService {
     @Autowired
     private InsAreaCompanyService insAreaCompanyService;
 
+    @Autowired
+    private InsAreaCompanyMapper insAreaCompanyMapper;
+
     /**
      *  @version
      *  @author: hxl
@@ -238,6 +239,24 @@ public class UserReportServiceImpl implements UserReportService {
      */
     @Override
     public List<QxFrontlineAgentDto> queryQxFrontlineAgentRanking(QxFrontlineAgentVo qxFrontlineAgentVo) {
+        if(StringUtils.isNotEmpty(qxFrontlineAgentVo.getProvinceId())){
+         String provinceId =   this.removeTrailingZeros(qxFrontlineAgentVo.getProvinceId());
+            qxFrontlineAgentVo.setProvinceId(provinceId);
+
+        }
+        if(StringUtils.isNotEmpty(qxFrontlineAgentVo.getCityId())){
+            String cityId =   this.removeTrailingZeros(qxFrontlineAgentVo.getCityId());
+            qxFrontlineAgentVo.setCityId(cityId);
+        }
+        if(StringUtils.isNotEmpty(qxFrontlineAgentVo.getCountyId())){
+            String countyId =   this.removeTrailingZeros(qxFrontlineAgentVo.getCountyId());
+            qxFrontlineAgentVo.setCountyId(countyId);
+        }
+
+        if(StringUtils.isNotEmpty(qxFrontlineAgentVo.getHouseId())){
+            String houseId =   this.removeTrailingZeros(qxFrontlineAgentVo.getHouseId());
+            qxFrontlineAgentVo.setHouseId(houseId);
+        }
 
         PageVo<SettlementDocumentaryFeesSumEntity> pageVo = new PageVo<>();
         Page page = new Page(1, 50);
@@ -245,7 +264,6 @@ public class UserReportServiceImpl implements UserReportService {
         pageVo.setPageNum(1);
         pageVo.setPageSize(50);
 
-
         IPage<QxFrontlineAgentDto> sysUserListPage = sysUserMapper.queryQxFrontlineAgent(page, qxFrontlineAgentVo);
         List<QxFrontlineAgentDto> sysUserList = sysUserListPage.getRecords();
 
@@ -292,18 +310,65 @@ public class UserReportServiceImpl implements UserReportService {
 
         return sysUserList;
     }
+    private String removeTrailingZeros(String value) {
+        int len = value.length();
+        int i = len - 1;
+
+        // 查找第一个非零字符的位置
+        while (i >= 0 && value.charAt(i) == '0') {
+            i--;
+        }
+
+        // 如果所有字符都是0,则返回"0"
+        if (i < 0) {
+            return "0";
+        }
+
+        // 使用substring方法获取去除末尾零的子串
+        return value.substring(0, i + 1);
+    }
+
 
     private void sortBy(String orderSort,List<QxFrontlineAgentDto> sysUserList) {
             Collections.sort(sysUserList, new Comparator<QxFrontlineAgentDto>() {
                 @Override
                 public int compare(QxFrontlineAgentDto o1, QxFrontlineAgentDto o2) {
                     // 假设name是String类型,直接使用String的compareTo方法
+
                     if("1".equals(orderSort)) { // 人员
-                        return o1.getTotalManpower().compareTo(o2.getTotalManpower());
+                        String manpower1 = o1.getTotalManpower();
+                        String manpower2 = o2.getTotalManpower();
+
+                        // 如果两个值都为null,则认为它们相等
+                        if (manpower1 == null && manpower2 == null) {
+                            return 0;
+                        }
+                        // 如果第一个值为null,则排在第二个值之后
+                        if (manpower1 == null) {
+                            return 1;
+                        }
+                        // 如果第二个值为null,则排在第一个值之前
+                        if (manpower2 == null) {
+                            return -1;
+                        }
 
+                        return o1.getTotalManpower().compareTo(o2.getTotalManpower());
                     }else {
-                        return o1.getTotalPremium().compareTo(o2.getTotalPremium());
 
+                        String premium1 = o1.getTotalPremium();
+                        String premium2 = o2.getTotalPremium();
+
+                        // 同样的逻辑来处理null值
+                        if (premium1 == null && premium2 == null) {
+                            return 0;
+                        }
+                        if (premium1 == null) {
+                            return 1;
+                        }
+                        if (premium2 == null) {
+                            return -1;
+                        }
+                        return o1.getTotalPremium().compareTo(o2.getTotalPremium());
                     }
                 }
             });
@@ -363,6 +428,260 @@ public class UserReportServiceImpl implements UserReportService {
         }
         return ids;
     }
+    /**
+     * @version
+     * @author: whp
+     * @Date: 2024/8/07
+     * @Description: 人员统计-前线人员-代理人统计-详情
+     */
+    @Override
+    public HttpResult<List<TeamManagementDto>> queryQxFrontlineDetails(QxFrontlineAgentVo qxFrontlineAgentVo) {
+        try {
+            List<TeamManagementDto> resultList = new ArrayList<>();
+            TeamManagementDto  levelOneteamManagementDto = new TeamManagementDto();
+            TeamManagementDto  levelTwoteamManagementDto = new TeamManagementDto();
+            TeamManagementDto  levelThreeteamManagementDto = new TeamManagementDto();
+            TeamManagementDto  levelFourteamManagementDto = new TeamManagementDto();
+            TeamManagementDto  levelTemporaryteamManagementDto = new TeamManagementDto();
+            List<String > temporaryIds = new ArrayList<>();
+
+            qxFrontlineAgentVo.setLevel("1");
+            List<EsmUserReferrerDTO> userLevelOne = esmUserReferrerMapper.getUserLevel(qxFrontlineAgentVo);
+            levelOneteamManagementDto.setTeamLevel("本人");
+            if(!CollectionUtils.isEmpty(userLevelOne)){
+                levelOneteamManagementDto.setTotalManpower(userLevelOne.size()+"");
+            }
+            List<String> userIds = userLevelOne.stream()
+                    .filter(dto ->   "1".equals(dto.getStatus())) // 过滤出status为2或3的DTO
+                    .map(EsmUserReferrerDTO::getId) // 将过滤后的DTO映射到它们的userId
+                    .collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(userIds)){
+                QxFrontlineAgentDto orderManpower = insAreaCompanyService.getOrderManpower(userIds);
+                if(ObjectUtils.isNotEmpty(orderManpower)){
+                    levelOneteamManagementDto.setTotalPremium(orderManpower.getTotalPremium());
+                    levelOneteamManagementDto.setOrderManpower(orderManpower.getOrderManpower());
+                }
+            }
+            resultList.add(levelOneteamManagementDto);
+//            一级非临时人员
+            List<String> temporaryUserOne = userLevelOne.stream()
+                    .filter(dto ->   "2".equals(dto.getStatus()) || "3".equals(dto.getStatus()) )
+                    .map(EsmUserReferrerDTO::getId)
+                    .collect(Collectors.toList());
+            temporaryIds.addAll(temporaryUserOne);
+
+
+
+            qxFrontlineAgentVo.setLevel("2");
+            List<EsmUserReferrerDTO> userLevelTwo = esmUserReferrerMapper.getUserLevel(qxFrontlineAgentVo);
+            levelTwoteamManagementDto.setTeamLevel("一级团队");
+
+            if(!CollectionUtils.isEmpty(userLevelTwo)){
+                levelTwoteamManagementDto.setTotalManpower(userLevelTwo.size()+"");
+            }
+            List<String> userIdsTwo = userLevelTwo.stream()
+                    .filter(dto ->  "1".equals(dto.getStatus()) )
+                    .map(EsmUserReferrerDTO::getId) // 将过滤后的DTO映射到它们的userId
+                    .collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(userIdsTwo)){
+                QxFrontlineAgentDto orderManpowerTwo = insAreaCompanyService.getOrderManpower(userIdsTwo);
+                if(ObjectUtils.isNotEmpty(orderManpowerTwo)){
+                    levelTwoteamManagementDto.setTotalPremium(orderManpowerTwo.getTotalPremium());
+                    levelTwoteamManagementDto.setOrderManpower(orderManpowerTwo.getOrderManpower());
+                }
+            }
+            resultList.add(levelTwoteamManagementDto);
+
+//          一级团队临时
+            List<String> temporaryUserTwo = userLevelTwo.stream()
+                    .filter(dto ->  "2".equals(dto.getStatus()) || "3".equals(dto.getStatus())) // 过滤出status为2或3的DTO
+                    .map(EsmUserReferrerDTO::getId)
+                    .collect(Collectors.toList());
+            temporaryIds.addAll(temporaryUserTwo);
+
+            qxFrontlineAgentVo.setUserId(null);
+            qxFrontlineAgentVo.setIds(userIdsTwo);
+            qxFrontlineAgentVo.setLevel("3");
+            List<EsmUserReferrerDTO> userLevelThree = esmUserReferrerMapper.getUserLevel(qxFrontlineAgentVo);
+            levelThreeteamManagementDto.setTeamLevel("二级团队");
+
+            if(!CollectionUtils.isEmpty(userLevelThree)){
+                levelThreeteamManagementDto.setTotalManpower(userLevelThree.size()+"");
+            }
+            List<String> userIdsThree = userLevelThree.stream()
+                    .filter(dto ->  "1".equals(dto.getStatus()) )
+                    .map(EsmUserReferrerDTO::getId) // 将过滤后的DTO映射到它们的userId
+                    .collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(userIdsThree)){
+                QxFrontlineAgentDto orderManpowerThree = insAreaCompanyService.getOrderManpower(userIdsThree);
+                if(ObjectUtils.isNotEmpty(orderManpowerThree)){
+                    levelThreeteamManagementDto.setTotalPremium(orderManpowerThree.getTotalPremium());
+                    levelThreeteamManagementDto.setOrderManpower(orderManpowerThree.getOrderManpower());
+                }
+            }
+            resultList.add(levelThreeteamManagementDto);
+
+
+            //          二级团队临时
+            List<String> temporaryUserThree = userLevelThree.stream()
+                    .filter(dto ->  "2".equals(dto.getStatus()) || "3".equals(dto.getStatus())) // 过滤出status为2或3的DTO
+                    .map(EsmUserReferrerDTO::getId)
+                    .collect(Collectors.toList());
+            temporaryIds.addAll(temporaryUserThree);
+
+            qxFrontlineAgentVo.setUserId(null);
+            qxFrontlineAgentVo.setIds(userIdsThree);
+            qxFrontlineAgentVo.setLevel("4");
+            List<EsmUserReferrerDTO> userLevelFour = esmUserReferrerMapper.getUserLevel(qxFrontlineAgentVo);
+            levelFourteamManagementDto.setTeamLevel("三级团队");
+
+            if(!CollectionUtils.isEmpty(userLevelFour)){
+                levelFourteamManagementDto.setTotalManpower(userLevelFour.size()+"");
+            }
+            List<String> userIdsFouro = userLevelFour.stream()
+                    .filter(dto ->  "1".equals(dto.getStatus()) )
+                    .map(EsmUserReferrerDTO::getId) // 将过滤后的DTO映射到它们的userId
+                    .collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(userIdsFouro)){
+                QxFrontlineAgentDto orderManpowerFour = insAreaCompanyService.getOrderManpower(userIdsFouro);
+                if(ObjectUtils.isNotEmpty(orderManpowerFour)){
+                    levelFourteamManagementDto.setTotalPremium(orderManpowerFour.getTotalPremium());
+                    levelFourteamManagementDto.setOrderManpower(orderManpowerFour.getOrderManpower());
+                }
+            }
+            resultList.add(levelFourteamManagementDto);
+
+
+            //          三级级团队临时
+            List<String> temporaryUserFour = userLevelFour.stream()
+                    .filter(dto ->  "2".equals(dto.getStatus()) || "3".equals(dto.getStatus())) // 过滤出status为2或3的DTO
+                    .map(EsmUserReferrerDTO::getId)
+                    .collect(Collectors.toList());
+
+            temporaryIds.addAll(temporaryUserFour);
+            qxFrontlineAgentVo.setUserId(null);
+            qxFrontlineAgentVo.setIds(temporaryIds);
+            if(temporaryIds.size()>0){
+                List<EsmUserReferrerDTO> userLevelTemporary = esmUserReferrerMapper.getUserLevel(qxFrontlineAgentVo);
+                List<String> userIdsTemporary = userLevelTemporary.stream()
+                        .map(EsmUserReferrerDTO::getId) // 将过滤后的DTO映射到它们的userId
+                        .collect(Collectors.toList());
+                QxFrontlineAgentDto orderManpowerTemporary = insAreaCompanyService.getOrderManpower(userIdsTemporary);
+                if(ObjectUtils.isNotEmpty(orderManpowerTemporary)){
+                    levelTemporaryteamManagementDto.setTotalPremium(orderManpowerTemporary.getTotalPremium());
+                    levelTemporaryteamManagementDto.setOrderManpower(orderManpowerTemporary.getOrderManpower());
+                }
+            }
+            levelTemporaryteamManagementDto.setTeamLevel("临时团队");
+
+            if(!CollectionUtils.isEmpty(userLevelFour)){
+                levelTemporaryteamManagementDto.setTotalManpower(userLevelFour.size()+"");
+            }
+            resultList.add(levelTemporaryteamManagementDto);
+
+            return HttpResult.ok(resultList);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return HttpResult.error("查询异常");
+        }
+    }
+
+
+    private void qxFrontlineDetails(TeamManagementDto thisLevelDto, EsmUserReferrerDTO item, Map<String, EsmUserReferrerDTO> collect, Set<String> visited, List<String> ids,List<TeamManagementDto> teamManagementDtoList) {
+        visited.clear();
+        Integer count = this.nextLevelUser(item.getId(), collect, visited);
+//      出单人力
+        List<String> strings = this.nextLevelUserList(item.getId(), collect, visited, ids);
+        QxFrontlineAgentDto orderManpower = insAreaCompanyService.getOrderManpower(strings);
+        thisLevelDto.setTotalPremium(orderManpower.getTotalPremium());
+        thisLevelDto.setTotalManpower(count.toString());
+        thisLevelDto.setOrderManpower(orderManpower.getOrderManpower());
+        thisLevelDto.setTeamLevel(item.getLevel());
+        teamManagementDtoList.add(thisLevelDto);
+    }
+    /**
+     * @version
+     * @author: whp
+     * @Date: 2024/8/07
+     * @Description: 人员统计-前线人员-代理人统计-详情
+     */
+    @Override
+    public HttpResult<IPage<QxFrontlineAgentDto>> queryQxFrontlineDetailsUser(QxFrontlineAgentVo qxFrontlineAgentVo) {
+        try {
+
+            PageVo<SettlementDocumentaryFeesSumEntity> pageVo = new PageVo<>();
+            Page page = new Page(qxFrontlineAgentVo.getPageNum(), qxFrontlineAgentVo.getPageSize());
+            pageVo.setPageNum(qxFrontlineAgentVo.getPageNum());
+            pageVo.setPageSize(qxFrontlineAgentVo.getPageSize());
+            HashMap<String, List<String>> humanResourcesIdList = new HashMap<>();
+
+            IPage<QxFrontlineAgentDto> userResultPage = new Page<>();
+//关系表
+            List<EsmUserReferrerDTO> employeeIncreaseReportDtos = esmUserReferrerMapper.getbyUserNextLevel(null);
+            Map<String, EsmUserReferrerDTO> collect = employeeIncreaseReportDtos.stream().collect(Collectors.toMap(EsmUserReferrerDTO::getId, Function.identity()));
+            Set<String> visited = new HashSet<>();
+            List<String> strings = new ArrayList<>();
+            for (EsmUserReferrerDTO item : employeeIncreaseReportDtos) {
+                List<String> ids = new ArrayList<>();
+                humanResourcesIdList.put(item.getId(), this.nextLevelUserList(item.getId(), collect, visited, ids));
+            }
+            if (humanResourcesIdList.containsKey(qxFrontlineAgentVo.getUserId())) {
+                strings = humanResourcesIdList.get(qxFrontlineAgentVo.getUserId());
+            }
+            if(!CollectionUtils.isEmpty(strings)){
+                qxFrontlineAgentVo.setIds(strings);
+                 userResultPage = sysUserMapper.getByIdsList(page, qxFrontlineAgentVo);
+                List<QxFrontlineAgentDto> records = userResultPage.getRecords();
+                for (QxFrontlineAgentDto userItem : records) {
+                    TaskStatisticsDto taskStatisticsDto = insAreaCompanyMapper.NumberQuotations(userItem.getUserId());
+                    userItem.setUnderwritingCount(taskStatisticsDto.getUnderwritingCount().toString());
+                    userItem.setOrderNumber(taskStatisticsDto.getOrderNumber());
+                    userItem.setOrderNumber(taskStatisticsDto.getQutationInsureCount().toString());
+                    userItem.setTotalPremium(taskStatisticsDto.getTotalPremium());
+                }
+            }
+            return HttpResult.ok(userResultPage);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return HttpResult.error("查询异常");
+        }
+    }
+
+    @Override
+    public QxFrontlineAgentDto getByUserId(String userId) {
+        SysUserBaseVO sysUserBaseVO = sysUserMapper.selectUserById(userId);
+        QxFrontlineAgentDto qxFrontlineAgentDto = new QxFrontlineAgentDto();
+
+        HashMap<String, List<String>> humanResourcesIdList = new HashMap<>();
+        HashMap<String, Integer> humanResources = new HashMap<>();
+
+        if(ObjectUtils.isNotEmpty(sysUserBaseVO)){
+            qxFrontlineAgentDto.setName(sysUserBaseVO.getName());
+            qxFrontlineAgentDto.setUserId(sysUserBaseVO.getUserId());
+            qxFrontlineAgentDto.setUserPhone(sysUserBaseVO.getPDeptId());
+            qxFrontlineAgentDto.setUserDate(sysUserBaseVO.getSubmitTime());
+        }
+        List<EsmUserReferrerDTO> employeeIncreaseReportDtos = esmUserReferrerMapper.getbyUserNextLevel(null);
+        Map<String, EsmUserReferrerDTO> collect = employeeIncreaseReportDtos.stream().collect(Collectors.toMap(EsmUserReferrerDTO::getId, Function.identity()));
+        Set<String> visited = new HashSet<>();
+        for (EsmUserReferrerDTO item : employeeIncreaseReportDtos) {
+            Integer count = this.nextLevelUser(item.getId(), collect, visited);
+            humanResources.put(item.getId(), count);
+            List<String> ids = new ArrayList<>();
+            humanResourcesIdList.put(item.getId(), this.nextLevelUserList(item.getId(), collect, visited, ids));
+        }
+
+        if (humanResourcesIdList.containsKey(userId)) {
+            if (!CollectionUtils.isEmpty(humanResourcesIdList.get(userId))) {
+                //出单人力
+                List<String> ids = humanResourcesIdList.get(userId);
+                QxFrontlineAgentDto orderManpower = insAreaCompanyService.getOrderManpower(ids);
+                String orderManpower1 = orderManpower.getOrderManpower();//出单人力
+                qxFrontlineAgentDto.setOrderManpower(orderManpower1);
+            }
+        }
+        return qxFrontlineAgentDto;
+    }
 
 }
 

+ 7 - 0
src/main/java/com/ydtech/modules/esm/dao/EsmUserReferrerMapper.java

@@ -8,6 +8,7 @@ import com.ydtech.modules.admin.model.dto.EsmUserReferrerDTO;
 import com.ydtech.modules.admin.model.dto.SysUserDto;
 import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
 import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
+import com.ydtech.modules.admin.model.vo.QxFrontlineAgentVo;
 import com.ydtech.modules.admin.model.vo.SysReferrerVo;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.esm.model.EsmUserReferrer;
@@ -229,4 +230,10 @@ public interface EsmUserReferrerMapper extends BaseMapper<EsmUserReferrer> {
 
     List<EsmUserReferrerDTO> getbyUserNextLevel(String userId);
 
+    /**
+     *
+     * @param ids  下级ids
+     * @return  返回 用户id  和用户级别
+     */
+    List<EsmUserReferrerDTO> getUserLevel(@Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
 }

+ 4 - 2
src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyIncomeServiceImpl.java

@@ -3302,16 +3302,18 @@ public class InsPlyIncomeServiceImpl extends ServiceImpl<InsPlyIncomeMapper, Ins
         }else{
             year = Integer.parseInt(financialReceivablesQueryVo.getYear());
         }
+
+        List<FinancialReceivablesVo> list  =  baseMapper.queryDateByType(financialReceivablesQueryVo);
+
         financialReceivablesQueryVo.setBeginDate(SliceUpDateUtil.getYearBeginDateStr(year)+" 00:00:00");
         financialReceivablesQueryVo.setEndDate(SliceUpDateUtil.getYearEndDateStr(year)+" 23:59:59");
-        financialReceivablesQueryVo.setType("1");
         //总应收
+        financialReceivablesQueryVo.setType("1");
         BigDecimal ptSumAmount =  baseMapper.queryDateByTypeSumAmount(financialReceivablesQueryVo);
         financialReceivablesQueryVo.setType("2");
         //总应收
         BigDecimal sySumAmount =  baseMapper.queryDateByTypeSumAmount(financialReceivablesQueryVo);
 
-        List<FinancialReceivablesVo> list  =  baseMapper.queryDateByType(financialReceivablesQueryVo);
 
         return new FinancialReceivablesAllVo(ptSumAmount.toString(),sySumAmount.toString(),year+"",list);
     }

+ 9 - 0
src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyMapper.java

@@ -213,6 +213,15 @@ public interface InsAreaCompanyMapper extends BaseMapper<InsAreaCompany> {
      */
     QxFrontlineAgentDto getOrderManpower(List<String> ids);
 
+    QxFrontlineAgentDto getOrderManpowerByUserId(String id);
+
+    /**
+     *
+     * @param userId
+     * @return  查询用户报价次数
+     */
+    TaskStatisticsDto NumberQuotations(String userId);
+
 }
 
 

+ 2 - 0
src/main/java/com/ydtech/modules/order/service/InsAreaCompanyService.java

@@ -178,4 +178,6 @@ public interface InsAreaCompanyService extends IService<InsAreaCompany> {
      *  @Description:  控制台出单人力
      */
     QxFrontlineAgentDto getOrderManpower(List<String> ids);
+
+    QxFrontlineAgentDto getOrderManpowerByUserId(String id);
 }

+ 5 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java

@@ -960,6 +960,11 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
         return baseMapper.getOrderManpower(ids);
     }
 
+    @Override
+    public QxFrontlineAgentDto getOrderManpowerByUserId(String id) {
+        return  baseMapper.getOrderManpowerByUserId(id);
+    }
+
 }
 
 

+ 25 - 4
src/main/resources/mapper/modules/admin/SysUserMapper.xml

@@ -1331,16 +1331,16 @@
                 AND sd.management_source =#{vo.managementSource}
             </if>
             <if test="vo.provinceId != null and vo.provinceId != ''">
-                and sd.deptid like "$vo.provinceId}%"
+                and sd.id like  concat('%',#{vo.provinceId},'%')
             </if>
             <if test="vo.cityId != null and vo.cityId != ''">
-                and sd.deptid like "${vo.cityId}%"
+                and sd.id like concat('%',#{vo.cityId},'%')
             </if>
             <if test="vo.countyId != null and vo.countyId != ''">
-                and sd.deptid like "${vo.countyId}%"
+                and sd.id like concat('%',#{vo.countyId},'%')
             </if>
             <if test="vo.houseId != null and vo.houseId != ''">
-                and sd.deptid like "${vo.houseId}%"
+                and sd.id like concat('%',#{vo.houseId},'%')
             </if>
             <if test="vo.name != null and vo.name != ''">
                 and su.name   =#{vo.name}
@@ -1354,4 +1354,25 @@
         </where>
     </select>
 
+    <select id="getByIdsList" resultType="com.ydtech.modules.admin.model.dto.QxFrontlineAgentDto">
+        SELECT
+            su.name as "name",
+            sd.name as "deptName",
+            su.id  as "userId",
+            su.dept_id  as "deptId"
+        FROM
+            sys_user su
+                LEFT JOIN sys_dept sd ON sd.id = su.dept_id
+        <where>
+            su.id  LIKE '%M%'
+            and su.status = '1'
+            <if test="vo.ids  != null  and  vo.ids.size()>0 ">
+                AND su.id IN
+                <foreach item="item"  collection="vo.ids" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
 </mapper>

+ 29 - 0
src/main/resources/mapper/modules/esm/EsmUserReferrerMapper.xml

@@ -306,4 +306,33 @@
             </if>
         </where>
     </select>
+    <select id="getUserLevel" resultType="com.ydtech.modules.admin.model.dto.EsmUserReferrerDTO">
+        SELECT
+        eur.id as "id",
+        eur.level as "level",
+        eur.affiliation as "affiliation",
+        eur.referrer_id as "referrerId",
+        su.status as "status"
+        FROM
+        esm_user_referrer eur
+        LEFT JOIN sys_user su ON su.id = eur.id
+        <where>
+            su.id != 'admin'
+            AND su.STATUS = 1
+            AND referrer_id IS NOT NULL
+            <if test="vo.userId !=null and  vo.userId  !=''">
+                AND  eur.referrer_id =#{vo.userId}
+            </if>
+
+            <if test="vo.level !=null and  vo.level  !=''">
+                AND  eur.level =#{vo.level}
+            </if>
+            <if test="vo.ids  != null  and  vo.ids.size()>0 ">
+                AND eur.referrer_id IN
+                <foreach item="item"  collection="vo.ids" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>

+ 21 - 0
src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml

@@ -1161,4 +1161,25 @@
         ) a
     </select>
 
+
+    <select id="NumberQuotations"  resultType="com.ydtech.modules.admin.model.dto.TaskStatisticsDto">
+        SELECT
+        count(iac.id) as "orderNumber",
+        COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) AS underwritingCount,
+        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) AS qutationInsureCount,
+        sum( CASE WHEN iac.orderstatus = 3 THEN iac.sumpremium END ) AS totalPremium
+        FROM
+        ins_area_company iac
+        left  join   ins_orders  io  on  io.orderno  = iac.orderno
+        left  join   sys_dept sd  on sd.id=io.deptid
+        left  join   sys_user su  on su.id=io.userid
+        left  join   ins_fee_audit   ifa   on ifa .ins_order_no  =iac.id
+        <where>
+            sd.management_source = '2'
+            <if test="userId !=null  and  userId !=''">
+                and  io.userId =#{userId}
+            </if>
+        </where>
+    </select>
+
 </mapper>