ソースを参照

1.控制台导出 业务数据渠道明细导出

wuhp 1 年間 前
コミット
aa064d66a4

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

@@ -530,6 +530,27 @@ public class TaskStatisticsController {
         }
     }
 
+
+    /**
+     * @description:   控制台 - 业务数据 -渠道明细导出
+     * @author: whp
+     **/
+    @PostMapping("/detailExport")
+    @ApiOperation(value = "任务统计-代理人导出")
+    public HttpResult detailExport(@RequestBody TaskStatisticsVo taskStatisticsVo, HttpServletRequest httpServerRequest) {
+        KztGetDeptUtils kztGetDeptUtils = new KztGetDeptUtils();
+        KztGetDeptUtilsDto kztGetDeptUtilsDto = kztGetDeptUtils.KztGetDeptIds(httpServerRequest.getRequestURL().toString());
+        if(ObjectUtils.isNotEmpty(kztGetDeptUtilsDto)){
+            if("1".equals(kztGetDeptUtilsDto.getType())){
+                taskStatisticsVo.setDeptIds(kztGetDeptUtilsDto.getIds());
+            } else if ("2".equals(kztGetDeptUtilsDto.getType())) {
+                taskStatisticsVo.setUserIds(kztGetDeptUtilsDto.getIds());
+            }
+        }
+        taskStatisticsVo.filterTime();
+        return this.taskStatisticsService.detailExport(taskStatisticsVo);
+    }
+
     /**
      * @description:   控制台 - 业务数据 -代理人导出
      * @author: whp
@@ -643,6 +664,7 @@ public class TaskStatisticsController {
         }
     }
 
+
     /**
      *
      * @param taskStatisticsVo

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

@@ -3,6 +3,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.dto.ChannelDetailsExport;
 import com.ydtech.modules.admin.model.dto.OrdersDetailsExcel;
 import com.ydtech.modules.admin.model.vo.BusinessAgentData;
 import com.ydtech.modules.admin.model.vo.BusinessOrderData;
@@ -65,4 +66,6 @@ public interface TaskStatisticsMapper extends BaseMapper<TaskStatisticsDto> {
      */
     List<OrdersDetailsExcel> ordersDetailsExcel(@Param("taskStatisticsVo") TaskStatisticsVo taskStatisticsVo);
 
+    List<ChannelDetailsExport> getAgentDataDetails(@Param("vo") TaskStatisticsVo taskStatisticsVo);
+
 }

+ 54 - 0
src/main/java/com/ydtech/modules/admin/model/dto/ChannelDetailsExport.java

@@ -0,0 +1,54 @@
+package com.ydtech.modules.admin.model.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class ChannelDetailsExport  implements Serializable {
+    @ExcelProperty(value = "姓名", index = 0)
+    private String userName;
+
+    @ExcelProperty(value = "工号", index = 1)
+    private String userId;
+
+    @ExcelProperty(value = "归属机构", index = 2)
+    private String deptName;
+
+    @ExcelProperty(value = "管理人", index = 3)
+    private String leaderName;
+
+    @ExcelProperty(value = "机构来源", index = 4)
+    private String managementSource;
+
+
+    @ExcelProperty(value = "保险公司名称", index = 5)
+    private String insuranceCompany;
+
+    @ExcelProperty(value = "签单日期", index = 6)
+    private LocalDateTime signingTime;
+
+    @ExcelProperty(value = "车牌号", index = 7)
+    private String licenseno;
+
+
+    @ExcelProperty(value = "交强险保费", index = 8)
+    private BigDecimal jqpremium;
+
+    @ExcelProperty(value = "商业险保费", index = 9)
+    private BigDecimal sypremium;
+
+    @ExcelProperty(value = "非车险保费", index = 10)
+    private BigDecimal jypremium;
+
+
+    @ExcelIgnore
+    private String deptId;
+
+
+}

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

@@ -201,4 +201,10 @@ public interface TaskStatisticsService {
      **/
     IPage<TaskStatisticsDto> costReviewer(TaskStatisticsVo taskStatisticsVo);
 
+    /**
+     *  控制台 - 业务数据 -渠道明细导出
+     * @param taskStatisticsVo
+     * @return
+     */
+    HttpResult detailExport(TaskStatisticsVo taskStatisticsVo);
 }

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

@@ -31,6 +31,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
 import java.math.BigDecimal;
@@ -38,6 +39,7 @@ import java.math.RoundingMode;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -1526,4 +1528,72 @@ public class TaskStatisticsServiceImpl implements TaskStatisticsService {
         return list;
     }
 
+    /**
+     *      控制台 - 业务数据 -渠道明细导出
+     * @param taskStatisticsVo
+     * @return
+     */
+    @Override
+    public HttpResult detailExport(TaskStatisticsVo taskStatisticsVo) {
+        if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType())) {
+            if ((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))) {
+                List<String> userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId());
+                if (!userIds.isEmpty() && userIds.get(0) != null) {
+                    taskStatisticsVo.setUserIds(userIds);
+                } else {
+                    taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
+                }
+            } else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())) {
+                taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
+                taskStatisticsVo.setTreeUserId(null);
+                taskStatisticsVo.setUserIds(new ArrayList<>());
+            }
+        }
+        PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
+        Page<TaskStatisticsVo> page = new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
+        page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
+        pageVo.setPageNum(taskStatisticsVo.getPageNum());
+        pageVo.setPageSize(taskStatisticsVo.getPageSize());
+
+        HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
+        taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
+        taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
+        getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
+
+        IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentData(page, taskStatisticsVo);
+        List<BusinessAgentData> records = list.getRecords();
+        List<String> ids = records.stream()
+                .map(BusinessAgentData::getUserId)  // 提取每个对象的id属性
+                .collect(Collectors.toList());  // 收集到新的List中
+        if(!CollectionUtils.isEmpty(taskStatisticsVo.getUserIds())){
+            ids.addAll(taskStatisticsVo.getUserIds());
+        }
+        taskStatisticsVo.setUserIds(ids);
+
+        List<ChannelDetailsExport> result = taskStatisticsMapper.getAgentDataDetails(taskStatisticsVo);
+        for (ChannelDetailsExport channelDetailsExport : result) {
+            BusinessAgentData businessAgentData = new BusinessAgentData();
+            businessAgentData.setDeptId(channelDetailsExport.getDeptId());
+            this.appendName(businessAgentData);
+            if (StringUtils.isNotEmpty(businessAgentData.getDeptName())) {
+                channelDetailsExport.setDeptName(businessAgentData.getDeptName());
+            }
+        }
+
+        String uploadPath = this.uploadPath + "/excel/";
+        Path path = Paths.get(uploadPath);
+        if (!Files.exists(path)) {
+            try {
+                Files.createDirectories(path);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String formattedDate = sdf.format(new Date());
+        String fileName = EasyExcelUtils.downExcel(uploadPath, "渠道业务数据明细导出"+formattedDate, ChannelDetailsExport.class, result);
+        return HttpResult.ok("", uploadUrl + "excel/" + fileName);
+    }
+
 }

+ 82 - 0
src/main/resources/mapper/modules/admin/TaskStatisticsMapper.xml

@@ -724,4 +724,86 @@
 
 
     </select>
+
+    <select id="getAgentDataDetails" resultType="com.ydtech.modules.admin.model.dto.ChannelDetailsExport">
+        SELECT
+        io.userid AS "userId",
+        sd.id as"deptId",
+        sd.name as"deptName",
+        pa.insurance_company as "insuranceCompany",
+        CASE
+        WHEN sd.management_source = '1' THEN '渠道'
+        WHEN sd.management_source = '2' THEN '代理人'
+        WHEN sd.management_source = '3' THEN '电销'
+        END AS "managementSource",
+        io.licenseno as "licenseno",
+        su.id as "userId",
+        su.name AS "userName",
+        su.dept_id AS "deptId",
+        su.leader_name AS "leaderName",
+        iac.signing_time as "signingTime",
+        iac.jypremium,
+        sd.management_source AS "managementSource",
+        IFNULL(jqpremium, 0) + IFNULL(sypremium, 0) + IFNULL(jypremium, 0) AS "sumpremium",
+        IFNULL(jqpremium, 0) AS "jqpremium",
+        IFNULL(sypremium, 0) AS "sypremium",
+        IFNULL(taxamount, 0) AS "taxamount",
+        IFNULL(jypremium, 0) AS "jypremium"
+        FROM
+        ins_area_company iac
+        LEFT JOIN ins_orders io ON io.orderno = iac.orderno
+        LEFT JOIN sys_user su ON su.id = io.userid
+        LEFT JOIN ins_fee_order_new ifon ON iac.id = ifon.ins_order_no
+        LEFT JOIN sys_dept sd ON sd.id = su.dept_id
+        LEFT JOIN sys_user_role sur ON sur.user_id = su.id
+        left join ptl_agreement pa on pa.id = iac.agreement_id
+        WHERE
+        iac.orderstatus = '3'
+        AND (iac.del_flag = '1' OR io.del_flag IS NULL OR io.del_flag = 1)
+        <if test="vo.signingTimeStart != null and vo.signingTimeStart!='' and vo.signingTimeEnd != null and vo.signingTimeEnd != ''">
+            AND iac.signing_time BETWEEN #{vo.signingTimeStart} AND #{vo.signingTimeEnd}
+        </if>
+        <if test="vo.enterTimeStart != null and vo.enterTimeStart!='' and vo.enterTimeEnd != null and vo.enterTimeEnd != ''">
+            AND iac.createtime BETWEEN #{vo.enterTimeStart} AND #{vo.enterTimeEnd}
+        </if>
+
+        <if test="vo.leaderName != null and vo.leaderName!='' ">
+            AND iac.leader_name = #{vo.leaderName}
+        </if>
+        <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size()>0">
+            AND su.leader_id IN
+            <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="vo.deptIds != null and vo.deptIds != '' and vo.deptIds.size() > 0">
+            AND sd.id IN
+            <foreach collection="vo.deptIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="vo.managementSource !=null  and vo.managementSource!=''">
+            AND sd.management_source = #{vo.managementSource}
+        </if>
+        <if test="vo.deptId !=null  and vo.deptId!=''">
+            AND sd.id LIKE CONCAT('%', #{vo.deptId}, '%')
+        </if>
+
+        <if test="vo.userId !=null  and vo.userId!=''">
+            AND su.id = #{vo.userId}
+        </if>
+        <if test="vo.userName !=null  and vo.userName!=''">
+            AND su.name = #{vo.userName}
+        </if>
+        <choose>
+            <when test='vo.managementSource == "2"'>
+                AND (sur.role_id = 20 OR sur.role_id = 21)
+            </when>
+            <when test='vo.managementSource == "1"'>
+                AND (sur.role_id = 19 OR sur.role_id = 21)
+            </when>
+            <otherwise>
+            </otherwise>
+        </choose>
+    </select>
 </mapper>