Эх сурвалжийг харах

1.控制台业务数据详情

wuhp 2 жил өмнө
parent
commit
da0092f896

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

@@ -206,4 +206,21 @@ public class TaskStatisticsController {
         }
     }
 
+    /**
+     * @description:   任控制台-业务数据-代理人-详情
+     * @author: whp
+     * @date: 2024/09/10
+     **/
+    @PostMapping("getBusinessAgentDataDetails")
+    @ApiOperation(value = "控制台-业务数据-代理人-详情")
+    public HttpResult<IPage<BusinessAgentData>> getBusinessAgentDataDetails(@RequestBody TaskStatisticsVo taskStatisticsVo) {
+        try{
+            IPage<BusinessAgentData> result = taskStatisticsService.getBusinessAgentDataDetails(taskStatisticsVo);
+            return HttpResult.ok("查询数据成功", result);
+        }catch (Exception e){
+            return HttpResult.error("查询错误"+e.getMessage());
+        }
+    }
+
+
 }

+ 14 - 0
src/main/java/com/ydtech/modules/admin/dao/TaskStatisticsMapper.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.admin.dao;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.vo.BusinessAgentData;
 import com.ydtech.modules.admin.model.vo.TaskStatisticsVo;
 import org.apache.ibatis.annotations.Mapper;
@@ -11,6 +12,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ydtech.modules.admin.model.dto.TaskStatisticsDto;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 @Mapper
 public interface TaskStatisticsMapper extends BaseMapper<TaskStatisticsDto> {
     IPage<BusinessAgentData> getBusinessAgentData(@Param("page") Page page, @Param("vo") TaskStatisticsVo taskStatisticsVo);
@@ -20,4 +23,15 @@ public interface TaskStatisticsMapper extends BaseMapper<TaskStatisticsDto> {
     BusinessAgentData getBusinessAgentDataTotalAdd(@Param("vo") TaskStatisticsVo taskStatisticsVo);
 
     BusinessAgentData getAllsumPremium(@Param("vo") TaskStatisticsVo taskStatisticsVo);
+
+    /**
+     * @description:   任控制台-业务数据-代理人-详情
+     * @author: whp
+     * @date: 2024/09/10
+     **/
+    IPage<BusinessAgentData> getBusinessAgentDataDetails(@Param("page") Page page,@Param("vo") TaskStatisticsVo taskStatisticsVo);
+
+    Long getBusinessAgentDataDetailsAdd(@Param("vo") TaskStatisticsVo taskStatisticsVo);
+
+
 }

+ 9 - 0
src/main/java/com/ydtech/modules/admin/model/vo/BusinessAgentData.java

@@ -38,5 +38,14 @@ public class BusinessAgentData {
     @ApiModelProperty(value = "签单保费占比")
     private BigDecimal sumPremiumProportion;
 
+    @ApiModelProperty(value = "保险公司名称")
+    private String insuranceCompany;
+
+    @ApiModelProperty(value = "合作公司名称")
+    private String partnerCompaniesName;
+
+    @ApiModelProperty(value = "保险公司图片")
+    private String logo;
+
 
 }

+ 17 - 0
src/main/java/com/ydtech/modules/admin/model/vo/TaskStatisticsVo.java

@@ -7,6 +7,7 @@ import lombok.Data;
 
 import javax.validation.constraints.Min;
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @description:   任务统计
@@ -80,6 +81,22 @@ public class TaskStatisticsVo implements Serializable {
     private String managementSource;
 
 
+    @ApiModelProperty(value = "员工工号")
+    private String userId;
+
+
+    @ApiModelProperty(value = "姓名")
+    private String userName;
+
+    @ApiModelProperty(value = "树用户id")
+    private String treeUserId;
+
+    @ApiModelProperty(value = "用户ids")
+    private List<String> userIds;
+
+
+
+
 
 
 

+ 7 - 0
src/main/java/com/ydtech/modules/admin/service/TaskStatisticsService.java

@@ -84,4 +84,11 @@ public interface TaskStatisticsService {
      * @date: 2024/9/9
      **/
     HttpResult insuranceCompanyExcel(TaskStatisticsVo taskStatisticsVo);
+    /**
+     * @description:   任控制台-业务数据-代理人-详情
+     * @author: whp
+     * @date: 2024/09/10
+     **/
+    IPage<BusinessAgentData> getBusinessAgentDataDetails(TaskStatisticsVo taskStatisticsVo);
+
 }

+ 101 - 1
src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java

@@ -1,5 +1,7 @@
 package com.ydtech.modules.admin.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.PageHelper;
@@ -8,8 +10,10 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageRequest;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.dao.SysAmountAuditingMapper;
+import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.dao.TaskStatisticsMapper;
 import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.InsuranceCompanyExcel;
 import com.ydtech.modules.admin.model.dto.TaskStatisticsDto;
 import com.ydtech.modules.admin.model.dto.TaskStatisticsExcel;
@@ -40,6 +44,8 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 
+import static com.baomidou.mybatisplus.extension.toolkit.Db.list;
+
 /**
  * @description:   任务统计
  * @author: whp
@@ -61,6 +67,8 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
 
     @Autowired
     private SysDeptService sysDeptService;
+    @Autowired
+    private SysUserMapper sysUserMapper;
 
 
     @Value("${upload.file.path}")
@@ -210,6 +218,7 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
         pageVo.setPageNum(taskStatisticsVo.getPageNum());
         pageVo.setPageSize(taskStatisticsVo.getPageSize());
+
         IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.getBusinessData(page,taskStatisticsVo);
         return list;
     }
@@ -291,6 +300,13 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
      **/
     @Override
     public IPage<BusinessAgentData> getBusinessAgentData(TaskStatisticsVo taskStatisticsVo) {
+        if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId())){
+            List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
+            if(!userIds.isEmpty()){
+                taskStatisticsVo.setUserIds(userIds);
+            }
+
+        }
         PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
         Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
         page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
@@ -308,6 +324,62 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         return list;
     }
 
+    /**
+     *
+     * @param userId
+     * @return  获取该用户下级所有用户id
+     */
+    private List<String> getNextLevel(String userId) {
+
+        // 获取系统中的所有用户
+        LambdaQueryWrapper<SysUser> queryWrapperUser = new LambdaQueryWrapper<>();
+        queryWrapperUser.eq(SysUser :: getStatus,"1");
+        List<SysUser> users = this.sysUserMapper.selectList(queryWrapperUser);
+
+        // 创建查询包装器,用于查询指定用户ID的用
+        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysUser::getId, userId);
+        // 查询指定用户ID的用户,即第一级下属
+        List<SysUser> usersLevel1 = this.sysUserMapper.selectList(queryWrapper);
+
+        // 用于存储所有下属的ID
+        List<String> strIds = new ArrayList<>();
+        // 递归获取第一级下属及其所有下属的ID
+        findChildren(usersLevel1, users, strIds);
+        return strIds;
+    }
+
+    /**
+     *
+     * @param usersLevel1 即第一级下属
+     * @param users 所有用户
+     * @param strIds 用于存储所有下属的ID
+     */
+    private void findChildren(List<SysUser> SysUsers, List<SysUser> users, List<String> strIds) {
+        for (SysUser sysUser : SysUsers) {
+            List<SysUser> children = new ArrayList<>();
+            for (SysUser user : users) {
+                if (sysUser.getId() != null && sysUser.getId().equals(user.getLeaderId())) {
+                    if (!exists(children, user)) {
+                        children.add(user);
+                        strIds.add(user.getId());
+                    }
+                }
+            }
+            sysUser.setChildren(children);
+            findChildren(children, users, strIds);
+        }
+    }
+
+    private boolean exists(List<SysUser> sysUsers, SysUser sysUser) {
+        boolean exist = false;
+        for (SysUser user : sysUsers) {
+            if (user.getId().equals(sysUser.getId())) {
+                exist = true;
+            }
+        }
+        return exist;
+    }
     /**
      *  @version
      *  @author: hxl
@@ -352,6 +424,14 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
         taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
 
+        if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId())){
+            List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
+            if(!userIds.isEmpty()){
+                taskStatisticsVo.setUserIds(userIds);
+            }
+
+        }
+
         BusinessAgentData result = this.taskStatisticsMapper.getBusinessAgentDataTotalAdd(taskStatisticsVo);
 
         BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo);
@@ -360,7 +440,7 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
             BigDecimal sumPremium = allsumPremium.getSumPremium().compareTo(BigDecimal.ZERO) > 0 ? allsumPremium.getSumPremium() : BigDecimal.ZERO;
             BigDecimal resultSumPremium = result.getSumPremium().compareTo(BigDecimal.ZERO) > 0 ? result.getSumPremium() : BigDecimal.ZERO;
             if (!sumPremium.equals(BigDecimal.ZERO)) {
-                result.setSumPremiumProportion(resultSumPremium.divide(sumPremium).setScale(2, RoundingMode.DOWN).multiply(new BigDecimal("100")));
+                result.setSumPremiumProportion(resultSumPremium.divide(sumPremium).setScale(2, RoundingMode.DOWN));
             }
         }
         return result;
@@ -398,4 +478,24 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         return HttpResult.ok("", uploadUrl + "excel/" + fileName);
     }
 
+    /**
+     * @description:   任控制台-业务数据-代理人-详情
+     * @author: whp
+     * @date: 2024/09/10
+     **/
+    @Override
+    public IPage<BusinessAgentData> getBusinessAgentDataDetails(TaskStatisticsVo taskStatisticsVo) {
+        HashMap<String, String> dateMapByType = getDateMapByType(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
+        taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
+        taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
+        PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
+        Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
+        page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
+        pageVo.setPageNum(taskStatisticsVo.getPageNum());
+        pageVo.setPageSize(taskStatisticsVo.getPageSize());
+        IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentDataDetails(page, taskStatisticsVo);
+        Long total = this.taskStatisticsMapper.getBusinessAgentDataDetailsAdd(taskStatisticsVo);
+        list.setTotal(total);
+        return list;
+    }
 }

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

@@ -36,6 +36,13 @@
                 and sd.management_source=#{vo.managementSource}
             </if>
 
+            <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size()>0">
+                and su.id in
+                <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+
             <if test="vo.userName !=null  and vo.userName!=''">
                 and su.name=#{vo.userName}
             </if>
@@ -45,9 +52,15 @@
 
     <select id="getBusinessAgentDataTotal" resultType="java.lang.Long">
         select
-        count(0)
+            count(0)
+        from  (
+        select
+        io.userid
         from ins_area_company iac
         left join ins_orders io on io.orderno =iac.orderno
+        left join sys_user su on io.userid =su.id
+        left join sys_dept sd on sd.id =su.dept_id
+
         <where>
             iac.orderstatus = '3'
             <if test="vo.createtimeStart  != null  and  vo.createtimeStart!=''  and vo.createtimeEnd  != null  and  vo.createtimeEnd!=''">
@@ -67,11 +80,19 @@
                 and su.id=#{vo.userId}
             </if>
 
+            <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size()>0">
+                and su.id in
+                <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+
             <if test="vo.managementSource !=null  and vo.managementSource!=''">
                 and sd.management_source=#{vo.managementSource}
             </if>
         </where>
         group by io.userid
+              ) a
     </select>
 
     <select id="getBusinessAgentDataTotalAdd" resultType="com.ydtech.modules.admin.model.vo.BusinessAgentData">
@@ -100,6 +121,14 @@
                 and su.name=#{vo.userName}
             </if>
 
+
+            <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size()>0">
+                and su.id in
+                <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+
             <if test="vo.userId !=null  and vo.userId!=''">
                 and su.id=#{vo.userId}
             </if>
@@ -125,9 +154,6 @@
                 DATE_FORMAT( #{vo.createtimeEnd}, '%Y-%m-%d')
             </if>
 
-            <if test="vo.days !=null  and vo.days !=''  and vo.days != 0 ">
-                and iac.createtime >= DATE_SUB(NOW(), INTERVAL #{vo.days} DAY)
-            </if>
 
             <if test="vo.userName !=null  and vo.userName!=''">
                 and su.name=#{vo.userName}
@@ -137,11 +163,104 @@
                 and su.id=#{vo.userId}
             </if>
 
+            <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size()>0">
+                and su.id in
+                <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+
             <if test="vo.managementSource !=null  and vo.managementSource!=''">
                 and sd.management_source=#{vo.managementSource}
             </if>
         </where>
     </select>
 
+    <select id="getBusinessAgentDataDetails" resultType="com.ydtech.modules.admin.model.vo.BusinessAgentData">
+        select a.insurance_company as "insuranceCompany",
+        a.insurance_company as "insuranceCompany",
+        a.sumpremium as "sumpremium",
+        a.jqpremium as "jqpremium",
+        a.sypremium as "sypremium",
+        a.taxamount as "taxamount",
+        a.jypremium as "jypremium",
+        eic.namesimple as "partnerCompaniesName",
+        eic.logo as "logo",
+        a.userId as "userId",
+        a.userName as "userName"
+        from (select pa.insurance_company,
+        pa.partner_companies_id,
+        su.id as "userId",
+        su.name as "userName",
+        IFNULL(sum(sumpremium), 0) as "sumpremium",
+        IFNULL(sum(jqpremium), 0) as "jqpremium",
+        IFNULL(sum(sypremium), 0) as "sypremium",
+        IFNULL(sum(taxamount), 0) as "taxamount",
+        IFNULL(sum(jypremium), 0) as "jypremium"
+        from ins_area_company iac
+        left join ins_orders io on io.orderno = iac.orderno
+        left join ptl_agreement pa on pa.id = iac.agreement_id
+        left join sys_user su on io.userid =su.id
+        left join sys_dept sd on sd.id =su.dept_id
+        <where>
+            iac.orderstatus = '3'
+            and io.orderstatus = '3'
+
+            <if test="vo.userId !=null  and vo.userId!=''">
+                and su.id=#{vo.userId}
+            </if>
+
+            <if test="vo.createtimeStart  != null  and  vo.createtimeStart!=''  and vo.createtimeEnd  != null  and  vo.createtimeEnd!=''">
+                AND DATE_FORMAT( iac.createtime, '%Y-%m-%d') BETWEEN DATE_FORMAT( #{vo.createtimeStart}, '%Y-%m-%d') AND
+                DATE_FORMAT( #{vo.createtimeEnd}, '%Y-%m-%d')
+            </if>
+
+            <if test="vo.managementSource !=null  and vo.managementSource!=''">
+                and sd.management_source=#{vo.managementSource}
+            </if>
+
+            <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size().0">
+                and su.id in
+                <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+
+        </where>
+        group by pa.insurance_company, pa.partner_companies_id ,su.id,su.name) a
+        LEFT JOIN esm_ins_company eic on eic.id = a.partner_companies_id
+    </select>
+
+
+    <select id="getBusinessAgentDataDetailsAdd"  resultType="java.lang.Long">
+        select
+            count(0)
+        from (select pa.insurance_company,
+                     pa.partner_companies_id
+              from ins_area_company iac
+                       left join ins_orders io on io.orderno = iac.orderno
+                       left join ptl_agreement pa on pa.id = iac.agreement_id
+                       left join sys_user su on io.userid =su.id
+              <where>
+                  iac.orderstatus = '3'
+                  and io.orderstatus = '3'
+
+                  <if test="vo.userId !=null  and vo.userId!=''">
+                      and su.id=#{vo.userId}
+                  </if>
+
+                  <if test="vo.createtimeStart  != null  and  vo.createtimeStart!=''  and vo.createtimeEnd  != null  and  vo.createtimeEnd!=''">
+                      AND DATE_FORMAT( iac.createtime, '%Y-%m-%d') BETWEEN DATE_FORMAT( #{vo.createtimeStart}, '%Y-%m-%d') AND
+                      DATE_FORMAT( #{vo.createtimeEnd}, '%Y-%m-%d')
+                  </if>
+
+                  <if test="vo.managementSource !=null  and vo.managementSource!=''">
+                      and sd.management_source=#{vo.managementSource}
+                  </if>
+              </where>
+              group by pa.insurance_company, pa.partner_companies_id) a
+    </select>
+
+
 
 </mapper>