Kaynağa Gözat

新增个代区域业绩管理

haoyu 2 yıl önce
ebeveyn
işleme
2102431d54

+ 14 - 2
src/main/java/com/ydtech/modules/admin/controller/SysUserController.java

@@ -713,18 +713,30 @@ public class SysUserController extends BaseController {
         return HttpResult.ok(list);
     }
 
-    @ApiOperation(value = "区域业绩管理")
+    @ApiOperation(value = "渠道区域业绩管理")
     @PostMapping(value = "/quUserNum")
     public HttpResult quUserNum(@RequestBody QuUserNumDto quUserNumDto) {
         return HttpResult.ok("", sysUserService.quUserNum(quUserNumDto));
     }
 
-    @ApiOperation(value = "区域业绩地区管理详情")
+    @ApiOperation(value = "渠道区域业绩地区管理详情")
     @PostMapping(value = "/quUserNumDetail")
     public HttpResult quUserNumDetail(@RequestBody QuUserNumDto quUserNumDto) {
         return HttpResult.ok("", sysUserService.getQuUserByCompany(quUserNumDto));
     }
 
+    @ApiOperation(value = "个代区域业绩管理")
+    @PostMapping(value = "quAgentAreaAdmin")
+    public HttpResult quAgentAreaAdmin(@RequestBody QuUserNumDto quUserNumDto) {
+        return HttpResult.ok("", sysUserService.quAgentAreaAdmin(quUserNumDto));
+    }
+
+    @ApiOperation(value = "个代区域业绩地区管理详情")
+    @PostMapping(value = "/quAgentAreaAdminDetail")
+    public HttpResult quAgentAreaAdminDetail(@RequestBody QuUserNumDto quUserNumDto) {
+        return HttpResult.ok("", sysUserService.quAgentAreaAdminDetail(quUserNumDto));
+    }
+
 
     /**
      *  @version

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

@@ -275,6 +275,9 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      *  @Description:  查询所有的代理人
      */
     List<SysUserBaseVO> getAgentUserList();
+
+
+    List<SysUserBaseVO> getAgentUserIdsByAreaIds();
 }
 
 

+ 4 - 0
src/main/java/com/ydtech/modules/admin/service/SysUserService.java

@@ -147,6 +147,10 @@ public interface SysUserService extends IService<SysUser> {
      *  @Description: 获取客服人员列表数据
      */
     List<SysUserBaseVO> getCustomerUsers();
+
+    IPage<QuUserNum> quAgentAreaAdmin(QuUserNumDto quUserNumDto);
+
+    IPage<QuUserNum> quAgentAreaAdminDetail(QuUserNumDto quUserNumDto);
 }
 
 

+ 193 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -1065,6 +1065,199 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return super.baseMapper.getCustomerUsers(new SysUserVOExt());
     }
 
+    @Override
+    public IPage<QuUserNum> quAgentAreaAdmin(QuUserNumDto quUserNumDto) {
+
+        //获取所有代理人用户
+        List<SysUserBaseVO> agentUsers = baseMapper.getAgentUserIdsByAreaIds();
+
+        List<String> strIds = agentUsers.stream().map(SysUserBaseVO::getUserId).collect(Collectors.toList());
+
+        // 根据区域编码和级别查询符合条件的区域
+        LambdaQueryWrapper<SysArea> wrapper = new LambdaQueryWrapper<>();
+        if (strIds.size() != 0) {
+            if (quUserNumDto.getAreaCode() != null && !"".equals(quUserNumDto.getAreaCode())) {
+                String area = quUserNumDto.getAreaCode();
+                switch (quUserNumDto.getLevel()) {
+                    case "1": { // 省级查询逻辑
+                        quUserNumDto.setGrouping(4);
+                        String prefix = area.substring(0, 2);
+                        strIds.removeIf(id -> !id.contains("99" + prefix));
+                        quUserNumDto.setLevel("2");
+                        wrapper.eq(SysArea::getLevel, "2");
+                        wrapper.likeRight(SysArea::getAreaCode, prefix);
+                        break;
+                    }
+                    case "2": {  // 市级查询逻辑
+                        quUserNumDto.setGrouping(6);
+                        String prefix = area.substring(0, 4);
+                        strIds.removeIf(id -> !id.contains("99" + prefix));
+                        quUserNumDto.setLevel("3");
+                        wrapper.eq(SysArea::getLevel, "3");
+                        wrapper.likeRight(SysArea::getAreaCode, prefix);
+                        break;
+                    }
+                    case "3": {  // 区县级查询逻辑
+                        quUserNumDto.setGrouping(6);
+                        String prefix = area.substring(0, 6);
+                        strIds.removeIf(id -> !id.contains("99" + prefix));
+                        quUserNumDto.setLevel("3");
+                        wrapper.eq(SysArea::getLevel, "3");
+                        wrapper.likeRight(SysArea::getAreaCode, prefix);
+                        break;
+                    }
+                }
+            } else { // 默认查询省级区域
+                quUserNumDto.setGrouping(2);
+                quUserNumDto.setLevel("1");
+                wrapper.eq(SysArea::getLevel, "1");
+            }
+        }
+
+        //遍历匹配区域名称
+        List<SysArea> areaList = sysAreaService.list(wrapper);
+
+        List<QuUserNum> quUserNums = new ArrayList<>();
+        // 如果没有查询到用户ID,则直接返回空的分页对象
+        if (strIds.size() != 0) {
+            // 根据查询条件获取用户数量统计信息
+            quUserNumDto.setUserIds(strIds);
+            List<QuUserNum> userNums = sysUserMapper.getUserNum(quUserNumDto);
+
+            List<QuUserNum> orderDetails = sysUserMapper.getMainOrderDetails(quUserNumDto);
+            // 根据区域名称匹配用户数量统计信息,并构造最终返回的结果列表
+            for (QuUserNum quUserNum : userNums) {
+                for (SysArea sysArea : areaList) {
+                    if (!Objects.isNull(sysArea.getAreaCode())) {
+                        // 匹配区域名称
+                        String substring = sysArea.getAreaCode().substring(0, quUserNumDto.getGrouping());
+                        if (quUserNum.getAreaCode().equals(substring)) {
+                            quUserNum.setAreaName(sysArea.getAreaCname());
+                        }
+                    }
+                }
+                for (QuUserNum orderDetail : orderDetails) {
+                    if (quUserNum.getAreaCode().equals(orderDetail.getAreaCode())) {
+                        quUserNum.setMainAcceptInsuranceSum(orderDetail.getMainAcceptInsuranceSum());
+                        quUserNum.setMainWaitAuditSum(orderDetail.getMainWaitAuditSum());
+                        quUserNum.setMainWaitPaySum(orderDetail.getMainWaitPaySum());
+                    }
+                }
+                quUserNums.add(quUserNum);
+            }
+        }
+        // 为每个区域生成未匹配到的统计信息
+        for (SysArea sysArea : areaList) {
+            if (exists(quUserNums, sysArea)) {
+                QuUserNum userNum = new QuUserNum();
+                // 设置未匹配到的区域的默认统计信
+                userNum.setAreaName(sysArea.getAreaCname());
+                quUserNums.add(userNum);
+            }
+        }
+        List<QuUserNum> paginate = paginate(quUserNums, quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
+
+        // 构造返回的分页对象
+        IPage<QuUserNum> recordsPage = new Page<>(quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
+        recordsPage.setRecords(paginate);
+        recordsPage.setTotal(quUserNums.size());
+        return recordsPage;
+
+    }
+
+    @Override
+    public IPage<QuUserNum> quAgentAreaAdminDetail(QuUserNumDto quUserNumDto) {
+
+        //获取所有代理人用户
+        List<SysUserBaseVO> agentUsers = baseMapper.getAgentUserIdsByAreaIds();
+
+        List<String> strIds = agentUsers.stream().map(SysUserBaseVO::getUserId).collect(Collectors.toList());
+
+
+        // 如果未指定区域码,返回空分页对
+        if (Objects.isNull(quUserNumDto.getAreaCode())) {
+            return new Page<>();
+        }
+
+        // 根据区域码筛选有效的下属ID
+        strIds.removeIf(id -> !id.contains("99" + quUserNumDto.getAreaCode()));
+
+        // 如果筛选后没有有效的下属ID,返回空分页对象
+        if (strIds.size() == 0) {
+            return new Page<>();
+        }
+
+        // 设置查询条件中的用户ID列表
+        quUserNumDto.setUserIds(strIds);
+
+        List<QuUserNum> deptByCompany = new ArrayList<>();
+
+        if (quUserNumDto.getQuMarks().equals(QuMarks.COMPANY_MARK.getCode())) {
+            // 根据公司和用户ID列表查询用户数量统计信息
+            deptByCompany = sysUserMapper.getUserByCompany(quUserNumDto);
+            // 获取公司主订单待核保订单数量
+            List<QuUserNum> mainWaitAuditSums = sysUserMapper.getComMainWaitAuditSum(quUserNumDto);
+            // 获取公司主订单已核保待缴费订单数量
+            List<QuUserNum> mainWaitPaySums = sysUserMapper.getComMainWaitPaySum(quUserNumDto);
+            // 获取公司主订单已承包订单数量
+            List<QuUserNum> mainAcceptInsuranceSums = sysUserMapper.getComMainAcceptInsuranceSum(quUserNumDto);
+
+            for (QuUserNum quUserNum : deptByCompany) {
+                for (QuUserNum mainWaitAuditSum : mainWaitAuditSums) {
+                    if (quUserNum.getCompanyId().equals(mainWaitAuditSum.getCompanyId())) {
+                        quUserNum.setMainWaitAuditSum(mainWaitAuditSum.getMainWaitAuditSum());
+                    }
+                }
+                for (QuUserNum mainWaitPaySum : mainWaitPaySums) {
+                    if (quUserNum.getCompanyId().equals(mainWaitPaySum.getCompanyId())) {
+                        quUserNum.setMainWaitPaySum(mainWaitPaySum.getMainWaitPaySum());
+                    }
+                }
+                for (QuUserNum mainAcceptInsuranceSum : mainAcceptInsuranceSums) {
+                    if (quUserNum.getCompanyId().equals(mainAcceptInsuranceSum.getCompanyId())) {
+                        quUserNum.setMainAcceptInsuranceSum(mainAcceptInsuranceSum.getMainAcceptInsuranceSum());
+                    }
+                }
+            }
+
+        } else if (quUserNumDto.getQuMarks().equals(QuMarks.USER_MARK.getCode())) {
+            // 根据公司和用户ID列表查询用户数量统计信息
+            deptByCompany = sysUserMapper.getUserDetail(quUserNumDto);
+
+            // 获取用户主订单待核保订单数量
+            List<QuUserNum> mainWaitAuditSums = sysUserMapper.getUserMainWaitAuditSum(quUserNumDto);
+            // 获取用户主订单已核保待缴费订单数量
+            List<QuUserNum> mainWaitPaySums = sysUserMapper.getUserMainWaitPaySum(quUserNumDto);
+            // 获取用户主订单已承包订单数量
+            List<QuUserNum> mainAcceptInsuranceSums = sysUserMapper.getUserMainAcceptInsuranceSum(quUserNumDto);
+
+            for (QuUserNum quUserNum : deptByCompany) {
+                for (QuUserNum mainWaitAuditSum : mainWaitAuditSums) {
+                    if (quUserNum.getUserId().equals(mainWaitAuditSum.getUserId()) && quUserNum.getCompanyId().equals(mainWaitAuditSum.getCompanyId())) {
+                        quUserNum.setMainWaitAuditSum(mainWaitAuditSum.getMainWaitAuditSum());
+                    }
+                }
+                for (QuUserNum mainWaitPaySum : mainWaitPaySums) {
+                    if (quUserNum.getUserId().equals(mainWaitPaySum.getUserId()) && quUserNum.getCompanyId().equals(mainWaitPaySum.getCompanyId())) {
+                        quUserNum.setMainWaitPaySum(mainWaitPaySum.getMainWaitPaySum());
+                    }
+                }
+                for (QuUserNum mainAcceptInsuranceSum : mainAcceptInsuranceSums) {
+                    if (quUserNum.getUserId().equals(mainAcceptInsuranceSum.getUserId()) && quUserNum.getCompanyId().equals(mainAcceptInsuranceSum.getCompanyId())) {
+                        quUserNum.setMainAcceptInsuranceSum(mainAcceptInsuranceSum.getMainAcceptInsuranceSum());
+                    }
+                }
+            }
+        }
+
+        List<QuUserNum> paginate = paginate(deptByCompany, quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
+
+        // 创建并设置分页信息
+        IPage<QuUserNum> page = new Page<>(quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
+        page.setRecords(paginate);
+        page.setTotal(deptByCompany.size());
+        return page;
+    }
 }
 
 

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

@@ -452,7 +452,7 @@
         SUM(CASE WHEN iac.orderstatus = 3 THEN iac.jqpremium ELSE 0 END + CASE WHEN iac.orderstatus = 3 THEN iac.sypremium ELSE 0 END) AS totalSumpremium
         FROM
         ins_orders io
-        RIGHT JOIN ins_area_company iac ON iac.orderno = io.orderno
+        LEFT JOIN ins_area_company iac ON iac.orderno = io.orderno
         WHERE
         iac.orderstatus IN ( 0, 1, 2, 3, 4 )
         <if test="quUserNumDto.createTimeStart != null and quUserNumDto.createTimeEnd != null">
@@ -476,7 +476,7 @@
         SUM(CASE WHEN io.orderstatus = 1 THEN 1 ELSE 0 END) AS mainWaitAuditSum
         FROM
         ins_orders io
-        RIGHT JOIN ins_area_company iac ON iac.orderno = io.orderno
+        LEFT JOIN ins_area_company iac ON iac.orderno = io.orderno
         WHERE
         iac.orderstatus IN (1)
         <if test="quUserNumDto.createTimeStart != null and quUserNumDto.createTimeEnd != null">
@@ -500,7 +500,7 @@
         SUM(CASE WHEN io.orderstatus = 2 THEN 1 ELSE 0 END) AS mainWaitPaySum
         FROM
         ins_orders io
-        RIGHT JOIN ins_area_company iac ON iac.orderno = io.orderno
+        LEFT JOIN ins_area_company iac ON iac.orderno = io.orderno
         WHERE
         iac.orderstatus IN (2)
         <if test="quUserNumDto.createTimeStart != null and quUserNumDto.createTimeEnd != null">
@@ -525,7 +525,7 @@
         SUM(CASE WHEN io.orderstatus = 3 THEN 1 ELSE 0 END) AS mainAcceptInsuranceSum
         FROM
         ins_orders io
-        RIGHT JOIN ins_area_company iac ON iac.orderno = io.orderno
+        LEFT JOIN ins_area_company iac ON iac.orderno = io.orderno
         WHERE
         iac.orderstatus IN (3)
         <if test="quUserNumDto.createTimeStart != null and quUserNumDto.createTimeEnd != null">
@@ -574,6 +574,7 @@
         </if>
         GROUP BY
         io.userid,
+        io.username,
         iac.company_id,
         iac.inscompany
     </select>
@@ -602,6 +603,7 @@
         </if>
         GROUP BY
         io.userid,
+        io.username,
         iac.company_id,
         iac.inscompany
     </select>
@@ -630,6 +632,7 @@
         </if>
         GROUP BY
         io.userid,
+        io.username,
         iac.company_id,
         iac.inscompany
     </select>
@@ -659,6 +662,7 @@
         </if>
         GROUP BY
         io.userid,
+        io.username,
         iac.company_id,
         iac.inscompany
     </select>
@@ -880,7 +884,7 @@
 
     <select id="getAgentUserIdsByAreaIds" resultType="com.ydtech.modules.admin.model.vo.SysUserBaseVO">
         SELECT
-            su.id,
+            su.id AS userId,
             su.dept_id AS deptId
         FROM
             sys_user su