Przeglądaj źródła

Merge remote-tracking branch 'origin/test' into test

wks 2 lat temu
rodzic
commit
8e1ac58023
21 zmienionych plików z 633 dodań i 191 usunięć
  1. 18 2
      src/main/java/com/ydtech/modules/admin/controller/personnelStatistics/PersonnelStatisticsController.java
  2. 15 0
      src/main/java/com/ydtech/modules/admin/controller/taskStatistics/TaskStatisticsController.java
  3. 1 1
      src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java
  4. 8 0
      src/main/java/com/ydtech/modules/admin/model/dto/EsmUserReferrerDTO.java
  5. 3 0
      src/main/java/com/ydtech/modules/admin/model/dto/TaskStatisticsDto.java
  6. 6 1
      src/main/java/com/ydtech/modules/admin/service/TaskStatisticsService.java
  7. 5 1
      src/main/java/com/ydtech/modules/admin/service/UserReportService.java
  8. 16 0
      src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java
  9. 158 140
      src/main/java/com/ydtech/modules/admin/service/impl/UserReportServiceImpl.java
  10. 1 0
      src/main/java/com/ydtech/modules/esm/dao/EsmUserReferrerMapper.java
  11. 6 0
      src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyMapper.java
  12. 2 2
      src/main/java/com/ydtech/modules/order/dao/InsOrdersMapper.java
  13. 2 5
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  14. 25 7
      src/main/java/com/ydtech/modules/order/service/impl/PingAnOrderApiServiceImpl.java
  15. 205 0
      src/main/java/com/ydtech/modules/order/utils/QrCodeGenerator.java
  16. 28 6
      src/main/java/com/ydtech/modules/order/utils/pingan/PingAnQuoteRequestAnnotationParser.java
  17. 39 21
      src/main/resources/mapper/modules/admin/SysUserLinkAreaMapper.xml
  18. 4 4
      src/main/resources/mapper/modules/admin/SysUserMapper.xml
  19. 22 1
      src/main/resources/mapper/modules/esm/EsmUserReferrerMapper.xml
  20. 51 0
      src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml
  21. 18 0
      src/main/resources/mapper/modules/order/InsOrdersMapper.xml

+ 18 - 2
src/main/java/com/ydtech/modules/admin/controller/personnelStatistics/PersonnelStatisticsController.java

@@ -2,12 +2,14 @@ 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.EsmUserReferrerDTO;
 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;
 import com.ydtech.modules.admin.service.UserReportService;
+import com.ydtech.modules.esm.model.vo.EsmUserCountVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -88,8 +90,8 @@ public class PersonnelStatisticsController {
      */
     @PostMapping("queryQxFrontlineDetails")
     @ApiOperation(value = "人员统计-前线人员-代理人统计-团队管理")
-    public HttpResult<List<TeamManagementDto>> queryQxFrontlineDetails(@RequestBody QxFrontlineAgentVo qxFrontlineAgentVo) {
-        HttpResult<List<TeamManagementDto>> result = userReportService.queryQxFrontlineDetails(qxFrontlineAgentVo);
+    public HttpResult<EsmUserCountVO> queryQxFrontlineDetails(@RequestBody QxFrontlineAgentVo qxFrontlineAgentVo) {
+        HttpResult<EsmUserCountVO> result = userReportService.queryQxFrontlineDetails(qxFrontlineAgentVo);
         return result;
     }
 
@@ -123,4 +125,18 @@ public class PersonnelStatisticsController {
             return HttpResult.error("查询错误"+e.getMessage());
         }
     }
+
+    @PostMapping("agentTreeStructure")
+    @ApiOperation(value = "代理人树形")
+    public HttpResult<List<EsmUserReferrerDTO>> agentTreeStructure(@RequestBody QxFrontlineAgentVo qxFrontlineAgentVo) {
+        try{
+            List<EsmUserReferrerDTO> result=  userReportService.agentTreeStructure(qxFrontlineAgentVo);
+            return HttpResult.ok("查询数据成功", result);
+        }catch (Exception e){
+            return HttpResult.error("查询错误"+e.getMessage());
+        }
+    }
+
+
+
 }

+ 15 - 0
src/main/java/com/ydtech/modules/admin/controller/taskStatistics/TaskStatisticsController.java

@@ -94,6 +94,21 @@ public class TaskStatisticsController {
         }
     }
 
+    /**
+     * @description:   保险公司统计总报价
+     * @author: whp
+     * @date: 2024/8/12
+     **/
+    @PostMapping("totalQuotation")
+    @ApiOperation(value = "控制台-保险公司统计查询")
+    public HttpResult<IPage<TaskStatisticsDto>> totalQuotation(@RequestBody TaskStatisticsVo taskStatisticsVo) {
+        try{
+            IPage<TaskStatisticsDto> result = taskStatisticsService.totalQuotation(taskStatisticsVo);
+            return HttpResult.ok("查询数据成功", result);
+        }catch (Exception e){
+            return HttpResult.error("查询错误"+e.getMessage());
+        }
+    }
 
 
 }

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

@@ -392,7 +392,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     @Select("select id   from  sys_user  where   status ='1' ")
     List<String> getUserIds();
 
-    HashMap<String,Object> queryHXReportDataNew(HouLinePersonnelReportVo houLinePersonnelReportVo);
+    HashMap<String,Object> queryHXReportDataNew( @Param("vo")  HouLinePersonnelReportVo houLinePersonnelReportVo);
 
      IPage<QxFrontlineAgentDto> queryQxFrontlineAgent(@Param("page") Page page,@Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
 

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

@@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
 
 @Data
 @ApiModel("用户推荐人表")
@@ -29,4 +31,10 @@ public class EsmUserReferrerDTO implements Serializable {
     @ApiModelProperty(value = "用户状态")
     private String status;
 
+    @ApiModelProperty(value = "用户名称")
+    private String userName;
+
+
+    private List<EsmUserReferrerDTO> children = new ArrayList<>();
+
 }

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

@@ -31,6 +31,9 @@ public class TaskStatisticsDto {
     @ApiModelProperty(value = "缴费率")
     private BigDecimal contributionRate;
 
+    @ApiModelProperty(value = "已核保待缴费")
+    private BigDecimal underwritingCountRate;
+
     @ApiModelProperty(value = "报价率")
     private BigDecimal quotationRate;
 

+ 6 - 1
src/main/java/com/ydtech/modules/admin/service/TaskStatisticsService.java

@@ -30,5 +30,10 @@ public interface TaskStatisticsService {
      * @date: 2024/7/29
      **/
     IPage<TaskStatisticsDto> costCenter(TaskStatisticsVo taskStatisticsVo);
-
+    /**
+     * @description:   保险公司统计总报价
+     * @author: whp
+     * @date: 2024/8/12
+     **/
+    IPage<TaskStatisticsDto> totalQuotation(TaskStatisticsVo taskStatisticsVo);
 }

+ 5 - 1
src/main/java/com/ydtech/modules/admin/service/UserReportService.java

@@ -3,6 +3,7 @@ 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.EsmUserReferrerDTO;
 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;
@@ -11,6 +12,7 @@ import com.ydtech.modules.admin.model.report.user.QianLineDLPersonnelReportDto;
 import com.ydtech.modules.admin.model.report.user.QianLineQDPersonnelReportDto;
 import com.ydtech.modules.admin.model.vo.HouLinePersonnelReportVo;
 import com.ydtech.modules.admin.model.vo.QxFrontlineAgentVo;
+import com.ydtech.modules.esm.model.vo.EsmUserCountVO;
 
 import java.util.HashMap;
 import java.util.List;
@@ -78,7 +80,7 @@ public interface UserReportService {
      * @Date: 2024/8/07
      * @Description: 人员统计-前线人员-代理人统计-详情
      */
-    HttpResult<List<TeamManagementDto>> queryQxFrontlineDetails(QxFrontlineAgentVo qxFrontlineAgentVo);
+    HttpResult<EsmUserCountVO> queryQxFrontlineDetails(QxFrontlineAgentVo qxFrontlineAgentVo);
 
     /**
      * @version
@@ -94,6 +96,8 @@ public interface UserReportService {
      * @return  用户详情信息
      */
     QxFrontlineAgentDto getByUserId(String userId);
+
+    List<EsmUserReferrerDTO> agentTreeStructure(QxFrontlineAgentVo qxFrontlineAgentVo);
 }
 
 

+ 16 - 0
src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java

@@ -95,4 +95,20 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenter(page,taskStatisticsVo);
         return list;
     }
+    /**
+     * @description:   保险公司统计总报价
+     * @author: whp
+     * @date: 2024/8/12
+     **/
+    @Override
+    public IPage<TaskStatisticsDto> totalQuotation(TaskStatisticsVo taskStatisticsVo) {
+        PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
+        Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
+        pageVo.setPageNum(taskStatisticsVo.getPageNum());
+        pageVo.setPageSize(taskStatisticsVo.getPageSize());
+        IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.totalQuotation(page,taskStatisticsVo);
+        return list;
+    }
+
+
 }

+ 158 - 140
src/main/java/com/ydtech/modules/admin/service/impl/UserReportServiceImpl.java

@@ -1,10 +1,12 @@
 package com.ydtech.modules.admin.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 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.constants.enums.dict.DictionaryManagement;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.dao.SysDeptMapper;
 import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.SysDept;
@@ -18,11 +20,15 @@ import com.ydtech.modules.admin.service.UserReportService;
 import com.ydtech.modules.base.model.vo.PageVo;
 import com.ydtech.modules.esm.dao.EsmUserReferrerMapper;
 import com.ydtech.modules.esm.model.EsmUserReferrer;
+import com.ydtech.modules.esm.model.vo.EsmTeamPolicyVO;
+import com.ydtech.modules.esm.model.vo.EsmUserCountVO;
+import com.ydtech.modules.esm.model.vo.EsmUserPolicyVO;
 import com.ydtech.modules.fnc.entity.SettlementDocumentaryFeesSumEntity;
 import com.ydtech.modules.order.dao.InsAreaCompanyMapper;
 import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.utils.StringUtils;
 import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -215,14 +221,13 @@ public class UserReportServiceImpl implements UserReportService {
                 }
                 //出单人力 +  总保费  +单均保费
                 if (humanResourcesIdList.containsKey(userId)) {
-                    if (!CollectionUtils.isEmpty(humanResourcesIdList.get(userId))) {
                         //出单人力
                         List<String> ids = humanResourcesIdList.get(userId);
+                        ids.add(userId);
                         QxFrontlineAgentDto orderManpower = insAreaCompanyService.getOrderManpower(ids);
                         userItem.setOrderManpower(orderManpower.getOrderManpower());
                         userItem.setTotalPremium(orderManpower.getTotalPremium());
                         userItem.setAveragePremium(orderManpower.getAveragePremium());
-                    }
                 }
             }
             return HttpResult.ok(sysUserListPage);
@@ -435,151 +440,122 @@ public class UserReportServiceImpl implements UserReportService {
      * @Description: 人员统计-前线人员-代理人统计-详情
      */
     @Override
-    public HttpResult<List<TeamManagementDto>> queryQxFrontlineDetails(QxFrontlineAgentVo qxFrontlineAgentVo) {
+    public HttpResult<EsmUserCountVO> 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());
+            EsmUserCountVO esmUserCountVO = new EsmUserCountVO();
+            List<EsmTeamPolicyVO> hzList = new ArrayList<>();
+            List<EsmUserPolicyVO> userPolicyList = new ArrayList<>();
+            List<EsmUserPolicyVO> userPolicyList0 = new ArrayList<>();
+            List<EsmUserPolicyVO> userPolicyList1 = new ArrayList<>();
+            List<EsmUserPolicyVO> userPolicyList2 = new ArrayList<>();
+            List<EsmUserPolicyVO> userPolicyList3 = new ArrayList<>();
+            EsmUserReferrer esmUserReferrer = esmUserReferrerMapper.selectById(qxFrontlineAgentVo.getUserId());
+            if (esmUserReferrer != null) {
+                List<String> userList1 = new ArrayList<>();
+                List<String> userList2 = new ArrayList<>();
+                List<String> userList3 = new ArrayList<>();
+                //本级信息
+                //明细数据加工
+                List<String> userList0 = new ArrayList<>();
+                userList0.add(esmUserReferrer.getId());
+                userPolicyList0 = esmUserReferrerMapper.queryOrderCount(userList0, null, null);
+                //汇总数据加工
+                EsmTeamPolicyVO esmTeamPolicyVO0 = esmUserReferrerMapper.queryOrderCountHz(userList0, null, null);
+                EsmTeamPolicyVO esmTeamPolicyVO1 = new EsmTeamPolicyVO();
+                EsmTeamPolicyVO esmTeamPolicyVO2 = new EsmTeamPolicyVO();
+                EsmTeamPolicyVO esmTeamPolicyVO3 = new EsmTeamPolicyVO();
+                esmTeamPolicyVO2.setTeamlevel("二级团队");
+                esmTeamPolicyVO3.setTeamlevel("三级团队");
+                if (esmTeamPolicyVO0 == null) {
+                    esmTeamPolicyVO0 = new EsmTeamPolicyVO();
+                    esmTeamPolicyVO0.setSumpremium(0);
+                    esmTeamPolicyVO0.setUsernum(0);
+                } else {
+                    esmTeamPolicyVO0.setUsernum(1);
                 }
-            }
-            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);
-
-
+                esmTeamPolicyVO0.setTeamlevel("本人");
+                esmTeamPolicyVO0.setTeamnum(1);
+
+                // 一级团队信息
+                userList1 = esmUserReferrerMapper.getIdDown_1(esmUserReferrer.getId());
+                esmTeamPolicyVO1.setTeamlevel("一级团队");
+                if (userList1 != null && userList1.size() > 0) {
+                    userPolicyList1 = esmUserReferrerMapper.queryOrderCount(userList1, null, null);
+                    EsmTeamPolicyVO esmTeamPolicyVO1_t = esmUserReferrerMapper.queryOrderCountHz(userList1, null,
+                            null);
+                    if (esmTeamPolicyVO1_t != null) {
+                        esmTeamPolicyVO1.setSumpremium(esmTeamPolicyVO1_t.getSumpremium());
+                        esmTeamPolicyVO1.setUsernum(userPolicyList1.size());//出单人力
+                    }
+                    esmTeamPolicyVO1.setTeamnum(userList1.size());//团队人数
+                    // 二级团队信息
+                    userList2 = esmUserReferrerMapper.getIdDown_2(esmUserReferrer.getId());
+
+                    esmTeamPolicyVO2.setTeamlevel("二级团队");
+                    if (userList2 != null && userList2.size() > 0) {
+                        userPolicyList2 = esmUserReferrerMapper.queryOrderCount(userList2, null, null);
+                        EsmTeamPolicyVO esmTeamPolicyVO2_t = esmUserReferrerMapper.queryOrderCountHz(userList2, null,
+                                null);
+                        if (esmTeamPolicyVO2_t != null) {
+                            esmTeamPolicyVO2.setSumpremium(esmTeamPolicyVO2_t.getSumpremium());
+                            esmTeamPolicyVO2.setUsernum(userPolicyList2.size());
+                        }
+                        esmTeamPolicyVO2.setTeamnum(userList2.size());
+                        // 三级团队信息
+                        userList3 = esmUserReferrerMapper.getIdDown_3(esmUserReferrer.getId());
+                        if(userList3!=null && userList3.size()>0){
+                            userPolicyList3=esmUserReferrerMapper.queryOrderCount(userList3,null, null);
+                            EsmTeamPolicyVO esmTeamPolicyVO3_t=esmUserReferrerMapper.queryOrderCountHz(userList3,null, null);
+                            esmTeamPolicyVO3.setTeamlevel("三级团队");
+                            esmTeamPolicyVO3.setTeamnum(userList3.size());
+                            if (esmTeamPolicyVO2_t != null) {
+                                esmTeamPolicyVO3.setSumpremium(esmTeamPolicyVO3_t.getSumpremium());
+                                esmTeamPolicyVO3.setUsernum(userPolicyList3.size());
+                            }
 
-            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());
+                //临时团队
+                List<String> registList = esmUserReferrerMapper.getIdDown3_regist(qxFrontlineAgentVo.getUserId());
+                EsmTeamPolicyVO esmTeamPolicyVO9 = new EsmTeamPolicyVO();
+                esmTeamPolicyVO9.setTeamlevel("临时团队");
+                esmTeamPolicyVO9.setTeamnum(registList == null ? 0 : registList.size());
+
+                //汇总
+                List<String> userList = new ArrayList<>();
+                userList.addAll(userList0);
+                userList.addAll(userList1);
+                userList.addAll(userList2);
+                userList.addAll(userList3);
+                userList.addAll(registList);
+                userPolicyList = esmUserReferrerMapper.queryOrderCount(userList, null, null);
+                EsmTeamPolicyVO esmTeamPolicyVO = new EsmTeamPolicyVO();
+                EsmTeamPolicyVO esmTeamPolicyVO_t = esmUserReferrerMapper.queryOrderCountHz(userList, null, null);
+                if (esmTeamPolicyVO_t != null) {
+                    esmTeamPolicyVO.setSumpremium(esmTeamPolicyVO_t.getSumpremium());
+                    esmTeamPolicyVO.setUsernum(userPolicyList.size());
                 }
+                esmTeamPolicyVO.setTeamlevel("汇总");
+                esmTeamPolicyVO.setTeamnum(userList.size());
+                hzList.add(esmTeamPolicyVO);
+                hzList.add(esmTeamPolicyVO0);
+                hzList.add(esmTeamPolicyVO1);
+                hzList.add(esmTeamPolicyVO2);
+                hzList.add(esmTeamPolicyVO3);
+                hzList.add(esmTeamPolicyVO9);
+                esmUserCountVO.setHzList(hzList);
+                esmUserCountVO.setUserPolicyList(userPolicyList);
+                esmUserCountVO.setUserPolicyList0(userPolicyList0);
+                esmUserCountVO.setUserPolicyList1(userPolicyList1);
+                esmUserCountVO.setUserPolicyList2(userPolicyList2);
+                esmUserCountVO.setUserPolicyList3(userPolicyList3);
+            } else {
+                throw new SystemException("内部错误");
             }
-            levelTemporaryteamManagementDto.setTeamLevel("临时团队");
-
-            if(!CollectionUtils.isEmpty(userLevelFour)){
-                levelTemporaryteamManagementDto.setTotalManpower(userLevelFour.size()+"");
-            }
-            resultList.add(levelTemporaryteamManagementDto);
-
-            return HttpResult.ok(resultList);
+            return   HttpResult.ok(esmUserCountVO);
         } catch (Exception e) {
             e.printStackTrace();
             return HttpResult.error("查询异常");
@@ -636,7 +612,7 @@ public class UserReportServiceImpl implements UserReportService {
                     TaskStatisticsDto taskStatisticsDto = insAreaCompanyMapper.NumberQuotations(userItem.getUserId());
                     userItem.setUnderwritingCount(taskStatisticsDto.getUnderwritingCount().toString());
                     userItem.setOrderNumber(taskStatisticsDto.getOrderNumber());
-                    userItem.setOrderNumber(taskStatisticsDto.getQutationInsureCount().toString());
+                    userItem.setQutationInsureCount(taskStatisticsDto.getQutationInsureCount());
                     userItem.setTotalPremium(taskStatisticsDto.getTotalPremium());
                 }
             }
@@ -683,6 +659,48 @@ public class UserReportServiceImpl implements UserReportService {
         return qxFrontlineAgentDto;
     }
 
+    /**
+     * @version
+     * @author: whp
+     * @Date: 2024/8/12
+     * @Description: 控制台代理人树形
+     */
+    @Override
+    public List<EsmUserReferrerDTO> agentTreeStructure(QxFrontlineAgentVo qxFrontlineAgentVo) {
+        List<EsmUserReferrerDTO> employeeIncreaseReportDtos = esmUserReferrerMapper.getUserLevel(qxFrontlineAgentVo);
+        List<EsmUserReferrerDTO> esmUserReferrerDTOList = this.buildUserTree(employeeIncreaseReportDtos);
+        return esmUserReferrerDTOList;
+    }
+
+    /**
+     * 递归构建树形结构
+     * @param employeeIncreaseReportDtos 所有的用户数据list
+     * @param rootUser 用户对象
+     * @return
+     */
+    private List<EsmUserReferrerDTO> buildUserTree(List<EsmUserReferrerDTO> employeeIncreaseReportDtos) {
+        Map<String, EsmUserReferrerDTO> nodeMap = new HashMap<>();
+
+        // 第一步:将所有节点放入map中,以便快速查找
+        for (EsmUserReferrerDTO node : employeeIncreaseReportDtos) {
+            nodeMap.put(node.getId(), node);
+        }
+
+        // 第二步:构建树形结构
+        List<EsmUserReferrerDTO> rootNodes = new ArrayList<>();
+        for (EsmUserReferrerDTO node : employeeIncreaseReportDtos) {
+            if (node.getReferrerId().equals(node.getId())) { // 自引用节点是根节点
+                rootNodes.add(node);
+            } else {
+                EsmUserReferrerDTO parentNode = nodeMap.get(node.getReferrerId());
+                if (parentNode != null) {
+                    parentNode.getChildren().add(node);
+                }
+            }
+        }
+        return rootNodes;
+    }
+
 }
 
 

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

@@ -236,4 +236,5 @@ public interface EsmUserReferrerMapper extends BaseMapper<EsmUserReferrer> {
      * @return  返回 用户id  和用户级别
      */
     List<EsmUserReferrerDTO> getUserLevel(@Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
+
 }

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

@@ -221,6 +221,12 @@ public interface InsAreaCompanyMapper extends BaseMapper<InsAreaCompany> {
      * @return  查询用户报价次数
      */
     TaskStatisticsDto NumberQuotations(String userId);
+    /**
+     * @description:   保险公司统计总报价
+     * @author: whp
+     * @date: 2024/8/12
+     **/
+    IPage<TaskStatisticsDto> totalQuotation( @Param("page") Page page,@Param("vo") TaskStatisticsVo taskStatisticsVo);
 
 }
 

+ 2 - 2
src/main/java/com/ydtech/modules/order/dao/InsOrdersMapper.java

@@ -56,14 +56,14 @@ public interface InsOrdersMapper extends BaseMapper<InsOrders> {
      *  @Date: 2024/4/17 18:01
      *  @Description:  通过用户id查询订单、渠道、代理人、保险公司
      */
-    Page<InsOrders> queryPageOrderByLinkType(@Param("page") Page<InsOrders> page,@Param("orderQueryVo") OrderQueryVo orderQueryVo, @Param("agentUserIds") List<String> agentUserIds,  @Param("agreeIds") List<String> agreeIds,@Param("deptIds") List<String> deptIds,@Param("flag") Boolean flag);
+    Page<InsOrders> queryPageOrderByLinkType(@Param("page") Page<InsOrders> page,@Param("orderQueryVo") OrderQueryVo orderQueryVo, @Param("agentUserIds") List<String> agentUserIds,  @Param("agreeIds") List<String> agreeIds,@Param("deptIds") List<String> deptIds,@Param("flag") Boolean flag,@Param("type") int type);
     /**
      *  @version
      *  @author: hxl
      *  @Date: 2024/4/17 18:36
      *  @Description: 通过用户id查询订单、渠道、代理人、保险公司条数
      */
-    Long queryPageOrderByLinkTypeCount(@Param("orderQueryVo") OrderQueryVo orderQueryVo, @Param("agentUserIds")  List<String> agentUserIds, @Param("agreeIds")  List<String> agreeIds,@Param("deptIds") List<String> deptIds,@Param("flag") Boolean flag);
+    Long queryPageOrderByLinkTypeCount(@Param("orderQueryVo") OrderQueryVo orderQueryVo, @Param("agentUserIds")  List<String> agentUserIds, @Param("agreeIds")  List<String> agreeIds,@Param("deptIds") List<String> deptIds,@Param("flag") Boolean flag,@Param("type") int type);
     /**
      *  @version
      *  @author: hxl

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

@@ -23,7 +23,6 @@ import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.constants.RoleConstants;
 import com.ydtech.modules.admin.dao.SysUserLinkAreaMapper;
 import com.ydtech.modules.admin.dao.SysUserLinkPtlAgreementMapper;
-import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.dto.SysUserLinkPtlAgreementDto;
 import com.ydtech.modules.admin.model.po.SysUserIsDial;
@@ -34,7 +33,6 @@ import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.fee.service.CostsCalcService;
 import com.ydtech.modules.fee.service.impl.FeeRuleSchemeServiceImpl;
 import com.ydtech.modules.fnc.entity.InsFeeAudit;
-import com.ydtech.modules.fnc.service.InsFeeAuditHistoryService;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
 import com.ydtech.modules.ins.dao.InsFileMapper;
 import com.ydtech.modules.ins.model.InsOrdersExcel;
@@ -86,7 +84,6 @@ import org.springframework.util.ObjectUtils;
 import javax.validation.constraints.NotBlank;
 import java.io.File;
 import java.math.BigDecimal;
-import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
@@ -1002,8 +999,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         Page<InsOrders> orderVoPage = new Page<>();
         //注释逻辑给前台返回数据
         if ((agentUserIds != null && !agentUserIds.isEmpty()) || (agreeIds != null && !agreeIds.isEmpty())) {
-            orderVoPage = baseMapper.queryPageOrderByLinkType(page, orderQueryVo, agentUserIds, agreeIds, deptIds, flag);
-            total = baseMapper.queryPageOrderByLinkTypeCount(orderQueryVo, agentUserIds, agreeIds, deptIds, flag);
+            orderVoPage = baseMapper.queryPageOrderByLinkType(page, orderQueryVo, agentUserIds, agreeIds, deptIds, flag,type);
+            total = baseMapper.queryPageOrderByLinkTypeCount(orderQueryVo, agentUserIds, agreeIds, deptIds, flag,type);
         }
         orderVoPage.setTotal(total);
         return new BasePageResult<>(orderQueryVo.getPageNum(), orderQueryVo.getPageSize(), orderVoPage.getTotal(),

+ 25 - 7
src/main/java/com/ydtech/modules/order/service/impl/PingAnOrderApiServiceImpl.java

@@ -48,6 +48,7 @@ import com.ydtech.modules.order.entity.vo.pingan.StorefrontQueryVo;
 import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.order.utils.MD5Util;
 import com.ydtech.modules.order.utils.PingAnUpLoadUtils;
+import com.ydtech.modules.order.utils.QrCodeGenerator;
 import com.ydtech.modules.order.utils.pingan.PingAnQuoteRequestAnnotationParser;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
@@ -102,6 +103,10 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
     private String EXCEL_PATH = "excel//";
 
     private String UPLOAD_PATH = "/upload//excel//";
+
+
+    private final QrCodeGenerator  qrCodeGenerator;
+
     /**
      * @Description 获取财意险险种套餐列表  调用 4.4
      * @Author hxl
@@ -272,7 +277,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                     }
                 }
                 if(models.size()>1){
-                    throw new SystemException("请确认车型,检索出多个下车型,请填写正确信息");
+                    model = models.get(0);
                 }else if(models.size()==0){
                     throw new SystemException("未匹配到车型");
                 }else if(models.size()==1){
@@ -708,6 +713,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                         Boolean jqflag = false;
                         Boolean sqflag = false;
                         Boolean fcflag = false;
+                        String jyPlicyNo=null;
                         //B2 为 未缴费
                         for (DocumentStatusListResponse.DocumentDTO dto : documentList) {
                             if (OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(dto.getStatus()) && StringUtils.isNotBlank(bizApplyNo) && bizApplyNo.equals(dto.getApplyNo()==null?"":dto.getApplyNo())) {
@@ -716,7 +722,18 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                             if (OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(dto.getStatus()) && StringUtils.isNotBlank(forceApplyNo) && forceApplyNo.equals(dto.getApplyNo()==null?"":dto.getApplyNo())) {
                                 jqflag = true;
                             }
-                            if (OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(dto.getStatus()) && StringUtils.isNotBlank(accidentApplyNo) && accidentApplyNo.equals(dto.getApplyNo()==null?"":dto.getApplyNo())) {
+                            List<DocumentStatusListResponse.DocumentDTO.UnAutoListInfoDTO> unAutoListInfo = dto.getUnAutoListInfo();
+                            String applyNo=null;
+                            String policyNo=null;
+                            if(unAutoListInfo!=null && unAutoListInfo.size()>0){
+                                applyNo = unAutoListInfo.get(0).getApplyNo();
+                                policyNo = unAutoListInfo.get(0).getPolicyNo();
+                            }
+                            if (StringUtils.isNotBlank(accidentApplyNo) && accidentApplyNo.equals(applyNo == null ? "" : applyNo)) {
+                                fcflag = true;
+                                jyPlicyNo=policyNo;
+                            }
+                            if (OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(dto.getStatus()) && StringUtils.isNotBlank(policyNo)) {
                                 fcflag = true;
                             }
                         }
@@ -801,7 +818,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
             if(jqbzURL.exists()){
                 crawlerPolicyPrintVo.setJqxFlagUrl(jqbzUrl_);
             }
-            if(!jqbdURL.exists() && !jqbzURL.exists() ){
+            if(!jqbdURL.exists() || !jqbzURL.exists() ){
                 getPdfUrl(parameters, jqpolicyno,ownerInfo,carInfoVo, pinganApiLog, insAreaCompany, crawlerPolicyPrintVo,1);
             }
         }
@@ -1484,8 +1501,9 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
         } catch (Exception e) {
             throw new SystemException(e.getMessage());
         }
-        if (signEleApplyResponse != null && "0".equals(signEleApplyResponse.getResultCode())) {
-
+        if (signEleApplyResponse != null && StringUtils.isNotBlank(signEleApplyResponse.getResultMessage())) {
+            String qrCodeUrl = qrCodeGenerator.getQrCode(insAreaCompany.getOrderno(), insAreaCompany.getId(), signEleApplyResponse.getResultMessage(),uploadPath);
+            signEleApplyResponse.setResultMessage(qrCodeUrl);
         }
         return HttpResult.ok(signEleApplyResponse);
     }
@@ -1867,8 +1885,8 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
             PingAnConfigureParameters parameters = configureParametersComponents.toEntity(PingAnConfigureParameters.class,
                     ptlAgreementAttribution);
             ArrayList<String>  list =new ArrayList<>();
-            String bizApplyNo = insAreaCompany.getJqapplyno();
-            String forceApplyNo =insAreaCompany.getSyapplyno();
+            String forceApplyNo = insAreaCompany.getJqapplyno();
+            String  bizApplyNo=insAreaCompany.getSyapplyno();
             JSONArray crossInsurance = insAreaCompany.getCrossInsurance();
             //非车投保单号
             String accidentApplyNo = null;

+ 205 - 0
src/main/java/com/ydtech/modules/order/utils/QrCodeGenerator.java

@@ -0,0 +1,205 @@
+package com.ydtech.modules.order.utils;
+
+
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.google.zxing.*;
+import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
+import com.google.zxing.client.j2se.MatrixToImageConfig;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.common.HybridBinarizer;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+import com.ydtech.exception.SystemException;
+import org.springframework.stereotype.Component;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.Hashtable;
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/8/13 17:34
+ *  @Description:  生成二维码的工具类型
+ */
+@Component
+public class QrCodeGenerator {
+
+
+    private static final String DEFAULT_CHAR_SET = "UTF-8";
+
+    private static final String DEFAULT_FORMAT_NAME = "JPG";
+
+
+    private static String EXCEL_PATH = "excel//";
+
+    private static String UPLOAD_PATH = "/upload//excel//";
+
+
+
+    // 二维码宽度
+    private static final int DEFAULT_QR_CODE_WIDTH = 300;
+    // 二维码高度
+    private static final int DEFAULT_QR_CODE_HEIGHT = 300;
+
+
+    /**
+     * 创建BitMatrix比特矩阵
+     * @Date 2023/09/24 22:29
+     * @Param contents 二维码里的内容
+     * @Param width 二维码宽度
+     * @param height 二维码高度
+     * @return com.google.zxing.common.BitMatrix
+     */
+    public static  BitMatrix createBitMatrix(String contents , int width , int height) throws WriterException, IOException {
+        if (ObjectUtil.isNull(width)) {
+            width = DEFAULT_QR_CODE_WIDTH;
+        }
+        if (ObjectUtil.isNull(height)) {
+            height = DEFAULT_QR_CODE_HEIGHT;
+        }
+
+        Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
+        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 纠错等级L,M,Q,H
+        hints.put(EncodeHintType.CHARACTER_SET, DEFAULT_CHAR_SET);// 编码utf-8
+        hints.put(EncodeHintType.MARGIN, 1);  // 边距
+
+        // 创建比特矩阵
+        BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
+                BarcodeFormat.QR_CODE, width, height, hints);
+        return bitMatrix;
+
+    }
+
+    /**
+     * 创建二维码,返回字节数组
+     * @Date 2023/09/24 22:30
+     * @Param contents 二维码里的内容
+     * @Param imageFormat 图片后缀名
+     * @Param width 二维码宽度
+     * @param height 二维码高度
+     * @return byte[]
+     */
+    public static byte[] createQrCode(String contents , String imageFormat , int width , int height) throws WriterException, IOException {
+        if (StrUtil.isBlank(imageFormat)){
+            imageFormat = DEFAULT_FORMAT_NAME;
+        }
+        BitMatrix bitMatrix = createBitMatrix(contents , width, height);
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        MatrixToImageWriter.writeToStream(bitMatrix, imageFormat, os);
+        return os.toByteArray();
+    }
+
+    /**
+     * 创建二维码,返回base64字符串
+     * @Date 2023/09/24 22:30
+     * @Param contents 二维码里的内容
+     * @Param imageFormat 图片后缀名
+     * @Param width 二维码宽度
+     * @param height 二维码高度
+     * @return byte[]
+     */
+    public static String createQrCodeBase64(String contents , String imageFormat , int width , int height) throws WriterException, IOException {
+        byte[] bytes =createQrCode(contents , imageFormat , width, height);
+        return Base64.encode(bytes);
+    }
+
+    /**
+     * 解码二维码
+     * @Date 2023/09/24 22:32
+     * @Param [image]
+     * @return java.lang.String
+     */
+    public static String decodeQrCode(BufferedImage image) throws Exception {
+        if (image == null) return StrUtil.EMPTY;
+        BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);
+        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
+        Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
+        hints.put(DecodeHintType.CHARACTER_SET, DEFAULT_CHAR_SET);
+        Result result = new MultiFormatReader().decode(bitmap, hints);
+        return result.getText();
+    }
+
+    /**
+     * 转换为BufferedImage
+     * @Date 2023/09/24 22:32
+     * @Param [bitMatrix]
+     * @return java.awt.image.BufferedImage
+     */
+    public static BufferedImage toBufferedImage(BitMatrix bitMatrix) throws IOException, WriterException {
+        MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0xFF000001, 0xFFFFFFFF);
+        BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, matrixToImageConfig);
+        return bufferedImage;
+    }
+
+    /**
+     * 给二维码添加logo
+     * @Date 2023/09/24 22:33
+     * @Param [bufferedImage, logoFile]
+     * @return java.awt.image.BufferedImage
+     */
+    public static BufferedImage addQrCodeLogo(BufferedImage bufferedImage, File logoFile) throws IOException {
+        Graphics2D graphics = bufferedImage.createGraphics();
+        int matrixWidth = bufferedImage.getWidth();
+        int matrixHeigh = bufferedImage.getHeight();
+
+        // 读取logo图片文件
+        BufferedImage logo = ImageIO.read(logoFile);
+        int logoWidth = logo.getWidth();
+        int logoHeight = logo.getHeight();
+
+        //  计算logo放置位置
+        int x = bufferedImage.getWidth()  / 5*2;
+        int y = bufferedImage.getHeight() / 5*2;
+        int width = matrixWidth / 5;
+        int height = matrixHeigh / 5;
+
+        // 开始绘制图片
+        graphics.drawImage(logo, x, y, width, height, null);
+        graphics.drawRoundRect(x, y, logoWidth, logoHeight, 15, 15);
+        graphics.setStroke(new BasicStroke(5.0F, 1, 1));
+        graphics.setColor(Color.white);
+        graphics.drawRect(x, y, logoWidth, logoHeight);
+
+        graphics.dispose();
+        bufferedImage.flush();
+        return bufferedImage;
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/8/13 17:55
+     *  @Description: 返回二维码图片路径
+     */
+    public static String getQrCode(String orderNo,String subOrderNo,String url,String uploadPath)  {
+        BufferedImage bufferedImage =null;
+        String fileName = orderNo+"_"+subOrderNo+"_rwm.jpg";
+        String saveFilePath = uploadPath+"//" + EXCEL_PATH +fileName;
+        String resultPath = UPLOAD_PATH + fileName;
+        try{
+            bufferedImage = toBufferedImage(createBitMatrix(url, 300, 300));
+            ImageIO.write(bufferedImage, "png", new File(saveFilePath));
+        }catch(Exception e){
+          throw new SystemException("转为二维码报错,请重试!!");
+        }
+        return resultPath;
+    }
+
+
+
+    public static void main(String[] args) throws Exception {
+        BufferedImage bufferedImage = toBufferedImage(createBitMatrix("https://dmzstg3-imcs.pingan.com.cn/icore_imcs/auto/new/signEleApply?systemId=PA18_SHOP_MOBILE&params=73C9FEF53D064CF255F2CFDBABFACBA12E9D3C96E1047521652744B5EE5C28B352E38F8E938306220557058195C79E89AF73E3E40CE0DA9650036E08E9AB9F3DD151419E90A464BA45B44645DA6B57C0B998A8B06B5F3018E98C0CD52B2B6A5F40DF7E609F4348BC766F3B9B9D5DAF6CA9C7F80B5FCA66CDD007106A15132525CE522993CB02665803073E9C76E7EE6CE595FFF003E071C12CA95F370A48B38679E5789C27D8EC408213D30D0D0F3EC64BB9ADFA486B87D26425D94CA24DF0A50E7D3B676821216B719AFD7DE2577CCDC55CDD515666C920DB9766DF5904FFB481231936893547E8921170245E7B2C7D34CFA95007A70DC175E947135E97A0411C25C7F7441BB0E91D070194868D47F5F76BAEE7BBCE6067A3C32A44D0EC6ED4C145A10AA04C07860A972E7641FA28CF&signData=da41c267ce742cd668f95401121daca2d53dc50f0b5339754d5b9ff75bc308c5", 300, 300));
+        ImageIO.write(bufferedImage, "png", new File("D:/qrcode.jpg"));
+
+     //   System.out.println(decodeQrCode(bufferedImage));
+
+      //  BufferedImage logoQrCode = addQrCodeLogo(bufferedImage, new File("D://logo.png"));
+       // ImageIO.write(logoQrCode, "png", new File("D:/logoQrcode.jpg"));
+    }
+
+}

+ 28 - 6
src/main/java/com/ydtech/modules/order/utils/pingan/PingAnQuoteRequestAnnotationParser.java

@@ -49,18 +49,40 @@ public class PingAnQuoteRequestAnnotationParser {
                         String nycflag = annotation.flag();
                         KindInfoVo kindInfoVo_A = map.get("A");
                         KindInfoVo kindInfoVo = map.get(key);
-                        if (nycflag.contains(flag) && kindInfoVo_A!=null) {
-                            if ((InsurKind.A.getCode() + "_YN").equals(key)) {
-                                field.set(quoteRequest, kindInfoVo_A.getAmount() == 0 ? "0" : amount01Default);
+                        if (nycflag.contains(flag)) {
+                            if ((InsurKind.A.getCode() + "_YN").equals(key) ) {
+                                if(kindInfoVo_A!=null){
+                                    //设置车损险的默认值
+                                    field.set(quoteRequest, kindInfoVo_A.getAmount() == 0 ? "0" : amount01Default);
+                                }
                             } else {
-                                if (InsurKind.A.getCode().equals(key) || (InsurKind.A.getCode() + "_YN").equals(key)) {
+                                if (InsurKind.A.getCode().equals(key)) {
                                     field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getAmount() == 0 ? "0" : String.format("%.0f", kindInfoVo.getAmount()));
                                 } else {
                                     if (InsurKind.MJ1.getCode().equals(key) || InsurKind.MJ2.getCode().equals(key) || InsurKind.MJ3.getCode().equals(key) || InsurKind.MJ4.getCode().equals(key)) {
                                         field.set(quoteRequest, kindInfoVo == null ? "0" : "0".equals(kindInfoVo.getDeductibleRate()) ? "0" : kindInfoVo.getDeductibleRate().replace("%", ""));
                                     } else {
-                                        //设置商业险的amout字段
-                                        field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getAmount() == 0 ? "0" : String.format("%.0f", kindInfoVo.getAmount()));
+                                        // YN 是否
+                                        if(key.contains("_YN")){
+                                            String keys = key.replaceAll("_YN", "");
+                                            kindInfoVo = map.get(keys);
+                                            if(keys.equals("SY_FJ_YBW2") || keys.equals("D4")){
+                                                //SY_FJ_YBW2、D4是从unitAmount中获取的值
+                                                field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getUnitAmount() == 0 ? "0" : String.format("%.0f", kindInfoVo.getUnitAmount()));
+                                            }else{
+                                                field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getAmount() == 0 ? "0" : "1");
+                                            }
+
+                                        }else{
+                                            if(key.equals("SY_FJ_YBW2") || key.equals("D4")){
+                                                //设置商业险的amout字段
+                                                field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getUnitAmount() == 0 ? "0" : String.format("%.0f", kindInfoVo.getUnitAmount()));
+                                            }else{
+                                                //设置商业险的amout字段
+                                                field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getAmount() == 0 ? "0" : String.format("%.0f", kindInfoVo.getAmount()));
+                                            }
+
+                                        }
                                     }
                                 }
                             }

+ 39 - 21
src/main/resources/mapper/modules/admin/SysUserLinkAreaMapper.xml

@@ -71,32 +71,50 @@
 
     <select id="findAreaIdsByAgentUserId"  resultType="String">
         SELECT
-            su.id
+         DISTINCT id
         FROM
-            sys_user su
-                LEFT JOIN sys_user_info info ON info.id = su.id
-                LEFT JOIN sys_dept sd ON su.dept_id = sd.id
-                LEFT JOIN sys_user_role t3 ON su.id = t3.user_id
-                AND sd.del_flag = '0'
+        (
+        SELECT
+        su.id,
+        CASE
+        WHEN LENGTH( su.dept_id )> 9 THEN
+        SUBSTRING( su.dept_id, 3, 6 )+ ''
+        WHEN LENGTH( su.dept_id )> 7 THEN
+        SUBSTRING( su.dept_id, 3, 4 )+ ''
+        WHEN LENGTH( su.dept_id )> 5 THEN
+        SUBSTRING( su.dept_id, 3, 2 )+ '' ELSE '00'
+        END AS dept_id
+        FROM
+        sys_user su
+        LEFT JOIN sys_dept sd ON su.dept_id = sd.id
+        AND sd.del_flag = '0'
         WHERE
-           sd.management_source = 2
-            <if test="areaCodes != null and areaCodes.size>0" >
-                AND (
-                <foreach collection="areaCodes" item="item" open=" (" separator="or" close=") ">
-                    instr( su.dept_id, TRIM( TRAILING '0' FROM #{item} ))>0
-                </foreach>
-                )
-            </if>
+        sd.management_source = 2
+        ) b
+       <where>
+           <if test="areaCodes != null and areaCodes.size>0" >
+               AND (
+               <foreach collection="areaCodes" item="item" open=" (" separator="or" close=") ">
+                   b.dept_id LIKE  CONCAT(#{item}, '%')
+               </foreach>
+               )
+           </if>
+       </where>
     </select>
 
     <select id="findAreaCodeByUserId"  resultType="String">
-        SELECT
-            DISTINCT link.area_code
+        SELECT DISTINCT
+            b.area_code
         FROM
-            sys_user_link_area link
-        WHERE
-            link.user_id = #{userId}
-        ORDER BY
-            link.area_code
+            (
+                SELECT
+                    ( TRIM( TRAILING '0' FROM link.area_code ) ) AS area_code
+                FROM
+                    sys_user_link_area link
+                WHERE
+                    link.user_id = #{userId}
+                ORDER BY
+                    link.area_code
+            ) b
     </select>
 </mapper>

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

@@ -1285,8 +1285,8 @@
             sum(info.salary) as  "salary",
             sum(case when info.sex ='M' THEN 1 ELSE 0 END ) as "manSex",
             sum(case when info.sex ='F'  THEN 1 ELSE 0 END) as "femaleSex",
-            sum(case when info.sex ='M' THEN 1 ELSE 0 END ) / (sum(case when info.sex ='M' THEN 1 ELSE 0 END ) +  sum(case when info.sex ='F'  THEN 1 ELSE 0 END)) as "manProportion",
-            sum(case when info.sex ='F'  THEN 1 ELSE 0 END) / (sum(case when info.sex ='M' THEN 1 ELSE 0 END ) +  sum(case when info.sex ='F'  THEN 1 ELSE 0 END)) as "femaleProportion",
+            IFNULL(sum(case when info.sex ='M' THEN 1 ELSE 0 END ) / (sum(case when info.sex ='M' THEN 1 ELSE 0 END ) +  sum(case when info.sex ='F'  THEN 1 ELSE 0 END)),0) as "manProportion",
+            IFNULL(sum(case when info.sex ='F'  THEN 1 ELSE 0 END) / (sum(case when info.sex ='M' THEN 1 ELSE 0 END ) +  sum(case when info.sex ='F'  THEN 1 ELSE 0 END)),0) as "femaleProportion",
             sum(case when info.is_speciality ='1'  THEN 1 ELSE 0 END) as "computerSpecialityPersion",
             sum(case when info.is_speciality ='0'  THEN 1 ELSE 0 END) as "otherSpecialityPersion",
             sum(case when info.is_speciality ='1'  THEN 1 ELSE 0 END) / (sum(case when info.is_speciality ='1'  THEN 1 ELSE 0 END) + sum(case when info.is_speciality ='0'  THEN 1 ELSE 0 END)) as "computerSpecialityProportion",
@@ -1315,8 +1315,8 @@
     </select>
     <select id="queryQxFrontlineAgent" resultType="com.ydtech.modules.admin.model.dto.QxFrontlineAgentDto">
         SELECT
-            sd.name as "name",
-            su.name as "deptName",
+            sd.name as "deptName",
+            su.name as "name",
             su.id  as "userId",
             su.dept_id  as "deptId",
             inf.file_path  as "filePath"

+ 22 - 1
src/main/resources/mapper/modules/esm/EsmUserReferrerMapper.xml

@@ -293,6 +293,8 @@
     <select id="getbyUserNextLevel" resultType="com.ydtech.modules.admin.model.dto.EsmUserReferrerDTO">
         SELECT
         eur.id as "id",
+        eur.level as "level",
+        su.name as "userName",
         eur.referrer_id as "referrerId"
         FROM
             esm_user_referrer eur
@@ -312,10 +314,13 @@
         eur.level as "level",
         eur.affiliation as "affiliation",
         eur.referrer_id as "referrerId",
-        su.status as "status"
+        su.status as "status",
+        su.name as "userName"
         FROM
         esm_user_referrer eur
         LEFT JOIN sys_user su ON su.id = eur.id
+        LEFT JOIN sys_dept sd ON sd.id = su.dept_id
+
         <where>
             su.id != 'admin'
             AND su.STATUS = 1
@@ -327,12 +332,28 @@
             <if test="vo.level !=null and  vo.level  !=''">
                 AND  eur.level =#{vo.level}
             </if>
+
+            <if test="vo.managementSource !=null and  vo.managementSource  !=''">
+                AND  sd.management_source =#{vo.managementSource}
+            </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>
+            <if test="vo.provinceId != null and vo.provinceId != ''">
+                and sd.id like  concat('%',#{vo.provinceId},'%')
+            </if>
+            <if test="vo.cityId != null and vo.cityId != ''">
+                and sd.id like concat('%',#{vo.cityId},'%')
+            </if>
+            <if test="vo.countyId != null and vo.countyId != ''">
+                and sd.id like concat('%',#{vo.countyId},'%')
+            </if>
+            <if test="vo.houseId != null and vo.houseId != ''">
+                and sd.id like concat('%',#{vo.houseId},'%')
+            </if>
         </where>
     </select>
 </mapper>

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

@@ -1181,5 +1181,56 @@
             </if>
         </where>
     </select>
+    <select id="totalQuotation" resultType="com.ydtech.modules.admin.model.dto.TaskStatisticsDto">
+        SELECT
+        agree.insurance_company_id AS companyId,
+        agree.insurance_company AS companyName,
+        agree.partner_companies_id AS parterCompanyId,
+        ins.NAME AS parterCompanyName,
+        count(iac.orderstatus) AS orderNumber,
+        '-' as bigQutationCount,
+        '-' as bigUnderwritingCount,
+        '-' as bigCloseRate,
+        COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) AS underwritingCount,
+        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) AS qutationInsureCount,
+        COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END )/ count(iac.orderstatus) AS passRate,
+        COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END )/ count(iac.orderstatus) AS underwritingCountRate,
+        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )/ count(iac.orderstatus) AS closeRate,
+        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )/ COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) AS
+        contributionRate
+        FROM
+        ins_area_company iac
+        LEFT JOIN ptl_agreement agree ON iac.agreement_id = agree.id
+        LEFT JOIN ins_orders  io  on  io.orderno  = iac.orderno
+        LEFT JOIN esm_ins_company ins ON agree.partner_companies_id = ins.id
+        WHERE
+        agree.id IS NOT NULL
+        <if test="vo.companyId  != null  and  vo.companyId!='' ">
+            agree.insurance_company_id = #{vo.companyId}
+        </if>
+        <if test="vo.parterCompanyId  != null  and  vo.parterCompanyId!='' ">
+            agree.partner_companies_id = #{vo.parterCompanyId}
+        </if>
+        <if test="vo.beginDate  != null  and  vo.beginDate!=''  and vo.endDate  != null  and  vo.endDate!=''">
+            AND iac.createtime BETWEEN #{vo.beginDate} AND #{vo.endDate}
+        </if>
+        <if test="vo.provinceId != null and vo.provinceId != ''">
+            and io.deptid like "${vo.provinceId}%"
+        </if>
+        <if test="vo.cityId != null and vo.cityId != ''">
+            and io.deptid like "${vo.cityId}%"
+        </if>
+        <if test="vo.countyId != null and vo.countyId != ''">
+            and io.deptid like "${vo.countyId}%"
+        </if>
+        <if test="taskStatisticsVo.houseId != null and vo.houseId != ''">
+            and io.deptid like "${vo.houseId}%"
+        </if>
+        GROUP BY
+        agree.insurance_company_id,
+        agree.insurance_company,
+        agree.partner_companies_id,
+        ins.NAME
+    </select>
 
 </mapper>

+ 18 - 0
src/main/resources/mapper/modules/order/InsOrdersMapper.xml

@@ -1012,6 +1012,14 @@
                 OR ( DATE_FORMAT(iac.sy_start_date, '%Y-%m-%d')  BETWEEN #{orderQueryVo.attachStartDateStr} AND #{orderQueryVo.attachEndDateStr} )
                 )
             </if>
+            <choose>
+                <when test="type==1">
+                    and dept.management_source=1
+                </when>
+                <when test="type==2">
+                    and dept.management_source=2
+                </when>
+            </choose>
         </where>
         order by io.createtime desc
     </select>
@@ -1026,6 +1034,8 @@
           ins_area_company iac
             left JOIN
         ins_orders io  on iac.orderno = io.orderno
+        LEFT JOIN
+        sys_dept dept ON dept.id = io.deptid
         <where>
             <if test="agentUserIds != null and agentUserIds.size>0" >
                 AND (
@@ -1124,6 +1134,14 @@
                 OR ( DATE_FORMAT(iac.sy_start_date, '%Y-%m-%d')  BETWEEN #{orderQueryVo.attachStartDateStr} AND #{orderQueryVo.attachEndDateStr} )
                 )
             </if>
+            <choose>
+                <when test="type==1">
+                    and dept.management_source=1
+                </when>
+                <when test="type==2">
+                    and dept.management_source=2
+                </when>
+            </choose>
         </where>
         ) as s
     </select>