Ver Fonte

Merge remote-tracking branch 'origin/master'

wanghao há 2 meses atrás
pai
commit
1c4def33c3
40 ficheiros alterados com 1638 adições e 618 exclusões
  1. 5 0
      commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java
  2. 1 1
      consoleStatistics/src/main/java/com/jzg/console/ConsoleApplication.java
  3. 0 11
      consoleStatistics/src/main/java/com/jzg/console/service/ReportChannelDataService.java
  4. 0 11
      consoleStatistics/src/main/java/com/jzg/console/service/ReportCompanyDataService.java
  5. 0 11
      consoleStatistics/src/main/java/com/jzg/console/service/ReportSalesmanDataService.java
  6. 0 11
      consoleStatistics/src/main/java/com/jzg/console/service/ReportTelemarketingDataService.java
  7. 0 121
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportChannelDataServiceImpl.java
  8. 0 126
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportCompanyDataServiceImpl.java
  9. 0 124
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportSalesmanDataServiceImpl.java
  10. 0 120
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportTelemarketingDataServiceImpl.java
  11. 44 38
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/controller/ReportTaskDataController.java
  12. 34 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/mapper/ReportChannelDataMapper.java
  13. 34 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/mapper/ReportCompanyDataMapper.java
  14. 46 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/mapper/ReportSalesmanDataMapper.java
  15. 34 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/mapper/ReportTelemarketingDataMapper.java
  16. 13 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/ReportChannelDataService.java
  17. 13 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/ReportCompanyDataService.java
  18. 13 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/ReportSalesmanDataService.java
  19. 13 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/ReportTelemarketingDataService.java
  20. 69 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/impl/ReportChannelDataServiceImpl.java
  21. 72 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/impl/ReportCompanyDataServiceImpl.java
  22. 79 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/impl/ReportSalesmanDataServiceImpl.java
  23. 80 0
      consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/impl/ReportTelemarketingDataServiceImpl.java
  24. 234 0
      consoleStatistics/src/main/resources/mapper/ReportChannelDataMapper.xml
  25. 221 0
      consoleStatistics/src/main/resources/mapper/ReportCompanyDataMapper.xml
  26. 273 0
      consoleStatistics/src/main/resources/mapper/ReportSalesmanDataMapper.xml
  27. 234 0
      consoleStatistics/src/main/resources/mapper/ReportTelemarketingDataMapper.xml
  28. 26 3
      platform/src/main/resources/mapper/JyxConfigMapper.xml
  29. 4 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/build/ChengTaiAPIQuoteResultsVoBuild.java
  30. 2 2
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/CarModelQueryResponse.java
  31. 1 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/filter/CarModelsFilterUtils.java
  32. 27 16
      tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/service/impl/YongChengApiRequestImpl.java
  33. 1 1
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysOrganizationUserLinkServiceMapper.java
  34. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/SysOrganizationUserLinkService.java
  35. 22 12
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java
  36. 36 3
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  37. 2 2
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysOrganizationUserLinkServiceImpl.java
  38. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java
  39. 2 0
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml
  40. 1 2
      tenant/organization/src/main/resources/mapper/SysOrganizationUserLinkServiceMapper.xml

+ 5 - 0
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java

@@ -82,6 +82,11 @@ public class InsPlyIncome extends BaseModel {
     @ExcelProperty("保司名称")
     private String companyName;
 
+    @Schema(description = "保司名称")
+    @TableField(exist = false)
+    @ExcelProperty("保司名称")
+    private String partnerCompanyName;
+
     @Schema(description = "协议Id")
     @ExcelProperty("协议Id")
     @ExcelIgnore

+ 1 - 1
consoleStatistics/src/main/java/com/jzg/console/ConsoleApplication.java

@@ -11,7 +11,7 @@ import org.springframework.context.annotation.ComponentScan;
 @EnableDiscoveryClient
 @EnableFeignClients
 @ComponentScan(basePackages = {"com.jzg.commons","com.jzg.console"})
-@MapperScan({"com.jzg.console.mapper", "com.jzg.console.businessReport.mapper","com.jzg.console.quotationReport.mapper", "com.jzg.commons.mapper"})
+@MapperScan({"com.jzg.console.mapper", "com.jzg.console.businessReport.mapper", "com.jzg.console.quotationReport.mapper", "com.jzg.commons.mapper", "com.jzg.console.taskDataReport.mapper"})
 public class ConsoleApplication {
     public static void main(String[] args) {
         SpringApplication.run(ConsoleApplication.class, args);

+ 0 - 11
consoleStatistics/src/main/java/com/jzg/console/service/ReportChannelDataService.java

@@ -1,11 +0,0 @@
-package com.jzg.console.service;
-
-/**
- *  @version 
- *  @author: hxl
- *  @Date: 2025/9/22 16:43
- *  @Description:  任务数据-渠道
- */ 
-public interface ReportChannelDataService extends  ReportBaseService{
-
-}

+ 0 - 11
consoleStatistics/src/main/java/com/jzg/console/service/ReportCompanyDataService.java

@@ -1,11 +0,0 @@
-package com.jzg.console.service;
-
-/**
- *  @version 
- *  @author: hxl
- *  @Date: 2025/9/22 16:43
- *  @Description:  任务数据-保险公司
- */ 
-public interface ReportCompanyDataService extends  ReportBaseService{
-
-}

+ 0 - 11
consoleStatistics/src/main/java/com/jzg/console/service/ReportSalesmanDataService.java

@@ -1,11 +0,0 @@
-package com.jzg.console.service;
-
-/**
- *  @version 
- *  @author: hxl
- *  @Date: 2025/9/22 16:43
- *  @Description:  任务数据-业务员
- */ 
-public interface ReportSalesmanDataService extends  ReportBaseService{
-
-}

+ 0 - 11
consoleStatistics/src/main/java/com/jzg/console/service/ReportTelemarketingDataService.java

@@ -1,11 +0,0 @@
-package com.jzg.console.service;
-
-/**
- *  @version 
- *  @author: hxl
- *  @Date: 2025/9/22 16:43
- *  @Description:  任务数据-电销
- */ 
-public interface ReportTelemarketingDataService extends  ReportBaseService{
-
-}

+ 0 - 121
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportChannelDataServiceImpl.java

@@ -1,121 +0,0 @@
-package com.jzg.console.service.impl;
-
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.jzg.commons.entity.report.dto.*;
-import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
-import com.jzg.console.service.ReportChannelDataManageService;
-import com.jzg.console.service.ReportChannelDataService;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 16:45
- *  @Description:  任务数据-渠道
- */
-@Service
-public class ReportChannelDataServiceImpl extends ReportBaseServiceImpl implements ReportChannelDataService {
-
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 15:37
-     *  @Description: 任务数据-渠道-列表查询
-     */
-    @Override
-    public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        Page<ReportSalesmanDataDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
-        IPage<ReportSalesmanDataDto> pageList = new Page<ReportSalesmanDataDto>();
-        List<ReportSalesmanDataDto> list = getList();
-        pageList.setRecords(list);
-        pageList.setTotal(1l);
-        pageList.setCurrent(reportSearchCommonVo.getPageNo());
-        pageList.setPages(reportSearchCommonVo.getPageNo());
-        pageList.setPages(reportSearchCommonVo.getPageSize());
-        return pageList;
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:00
-     *  @Description:  任务数据-渠道-列表导出
-     */
-    @Override
-    public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        List<ReportSalesmanDataDto> list = getList();
-        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDto.class,list,"任务数据-渠道-列表导出-"+ reportSearchCommonVo.getUserId());
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:01
-     *  @Description:  任务数据-渠道-明细查询
-     */
-    @Override
-    public IPage<?> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        Page<ReportSalesmanDataDetailDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
-        IPage<ReportSalesmanDataDetailDto> detailPageList = new Page<ReportSalesmanDataDetailDto>();
-        List<ReportSalesmanDataDetailDto> detailList = getDetailList();
-        detailPageList.setRecords(detailList);
-        detailPageList.setTotal(1l);
-        detailPageList.setCurrent(reportSearchCommonVo.getPageNo());
-        detailPageList.setPages(reportSearchCommonVo.getPageNo());
-        detailPageList.setPages(reportSearchCommonVo.getPageSize());
-        return detailPageList;
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:01
-     *  @Description:  任务数据-渠道-明细导出
-     */
-    @Override
-    public void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        List<ReportSalesmanDataDetailDto> detailList = getDetailList();
-        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDetailDto.class,detailList,"任务数据-渠道-明细导出-"+ reportSearchCommonVo.getUserId());
-    }
-
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
-     */
-    public List<ReportSalesmanDataDto>  getList(){
-        List<ReportSalesmanDataDto> list =new ArrayList<>();
-        ReportSalesmanDataDto reportSalesmanDataDto = ReportSalesmanDataDto.builder()
-                .salesmanName("张三").salesmanPhone("18811459985").deptName("众安财险机构").quoteOrderNum(200L)
-                .proxyCustomerOrderNum(50L).pcOrderNum(20L).appOrderNum(500L).payPendingOrderNum(300L).underwritRejectNum(50L)
-                .underwritPassRate(new BigDecimal(23)).underwriteRate(new BigDecimal(32))
-                .additionalRecordingOrderNum(50L).additionalRecordingPendingApprovalOrderNum(20L).additionalRecordingApprovalOrderNum(10L)
-                .manegerName("李四").build();
-        list.add(reportSalesmanDataDto);
-        return list;
-    }
-
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
-     */
-    public List<ReportSalesmanDataDetailDto>  getDetailList(){
-        List<ReportSalesmanDataDetailDto> list =new ArrayList<>();
-        ReportSalesmanDataDetailDto reportSalesmanDataDetailDto = ReportSalesmanDataDetailDto.builder()
-                .salesmanName("张三").salesmanPhone("18811459985").deptName("太原分部")
-                .orderNo("2025090811253600215").licenseNo("京AG6002").orderTypeName("代客录单").riskName("单交")
-                .orderSourceName("pc报价").sumPremium(new BigDecimal(456)).orderStatusName("已承保")
-                .createTime(new Date()).recordTime(new Date())
-                .companyName("永诚财险").partnerCompanyName("众安财险科技营销部")
-                .build();
-        list.add(reportSalesmanDataDetailDto);
-        return list;
-    }
-}

+ 0 - 126
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportCompanyDataServiceImpl.java

@@ -1,126 +0,0 @@
-package com.jzg.console.service.impl;
-
-
-import com.alibaba.excel.annotation.ExcelIgnore;
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.jzg.commons.entity.report.dto.*;
-import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
-import com.jzg.console.service.ReportChannelDataManageService;
-import com.jzg.console.service.ReportCompanyDataService;
-import io.swagger.v3.oas.annotations.media.Schema;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 16:45
- *  @Description:  任务数据-保险公司
- */
-@Service
-public class ReportCompanyDataServiceImpl extends ReportBaseServiceImpl implements ReportCompanyDataService {
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 15:37
-     *  @Description: 任务数据-保险公司-列表查询
-     */
-    @Override
-    public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        Page<ReportCompanyDataDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
-        IPage<ReportCompanyDataDto> pageList = new Page<ReportCompanyDataDto>();
-        List<ReportCompanyDataDto> list = getList();
-        pageList.setRecords(list);
-        pageList.setTotal(1l);
-        pageList.setCurrent(reportSearchCommonVo.getPageNo());
-        pageList.setPages(reportSearchCommonVo.getPageNo());
-        pageList.setPages(reportSearchCommonVo.getPageSize());
-        return pageList;
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:20
-     *  @Description:  任务数据-保险公司-列表导出
-     */
-    @Override
-    public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        List<ReportCompanyDataDto> list = getList();
-        upLoadFile(reportSearchCommonVo, ReportCompanyDataDto.class,list,"任务数据-保险公司-列表导出-"+ reportSearchCommonVo.getUserId());
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:20
-     *  @Description:   任务数据-保险公司-明细列表
-     */
-    @Override
-    public IPage<?> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        Page<ReportCompanyDataDetailDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
-        IPage<ReportCompanyDataDetailDto> detailPageList = new Page<ReportCompanyDataDetailDto>();
-        List<ReportCompanyDataDetailDto> detailList = getDetailList();
-        detailPageList.setRecords(detailList);
-        detailPageList.setTotal(1l);
-        detailPageList.setCurrent(reportSearchCommonVo.getPageNo());
-        detailPageList.setPages(reportSearchCommonVo.getPageNo());
-        detailPageList.setPages(reportSearchCommonVo.getPageSize());
-        return detailPageList;
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:21
-     *  @Description: 任务数据-保险公司-明细导出
-     */
-    @Override
-    public void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        List<ReportCompanyDataDetailDto> detailList = getDetailList();
-        upLoadFile(reportSearchCommonVo, ReportCompanyDataDetailDto.class,detailList,"任务数据-保险公司-明细导出-"+ reportSearchCommonVo.getUserId());
-    }
-
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
-     */
-    public List<ReportCompanyDataDto>  getList(){
-        List<ReportCompanyDataDto> list =new ArrayList<>();
-        ReportCompanyDataDto reportCompanyDataDto = ReportCompanyDataDto.builder()
-                .companyId("1").companyName("永诚财险").partnerCompanyId("1").partnerCompanyName("众安财险科技营销部")
-                .quoteOrderNum(100L).proxyCustomerOrderNum(100L).pcOrderNum(100L).appOrderNum(100L).payPendingOrderNum(100L)
-                .underwritRejectNum(100L).underwritPassRate(new BigDecimal(32))
-                .underwriteRate(new BigDecimal(32)).additionalRecordingOrderNum(50L).additionalRecordingPendingApprovalOrderNum(50L)
-                .additionalRecordingApprovalOrderNum(50L).manegerName("李四")
-                .build();
-        list.add(reportCompanyDataDto);
-        return list;
-    }
-
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
-     */
-    public List<ReportCompanyDataDetailDto>  getDetailList(){
-        List<ReportCompanyDataDetailDto> list =new ArrayList<>();
-        ReportCompanyDataDetailDto reportCompanyDataDetailDto = ReportCompanyDataDetailDto.builder()
-                .companyId("1").companyName("永诚财险").partnerCompanyId("1").partnerCompanyName("众安财险科技营销部")
-                .quoteOrderNum(100L).proxyCustomerOrderNum(100L).pcOrderNum(100L).appOrderNum(100L)
-                .payPendingOrderNum(100L).underwritRejectNum(100L).quoteOrderRate(new BigDecimal(32))
-                .underwritPassRate(new BigDecimal(32)).underwriteRate(new BigDecimal(32))
-                .additionalRecordingOrderNum(50L).additionalRecordingPendingApprovalOrderNum(50L)
-                .additionalRecordingApprovalOrderNum(50L).manegerName("李四")
-                .build();
-        list.add(reportCompanyDataDetailDto);
-        return list;
-    }
-}

+ 0 - 124
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportSalesmanDataServiceImpl.java

@@ -1,124 +0,0 @@
-package com.jzg.console.service.impl;
-
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.jzg.commons.entity.report.dto.*;
-import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
-import com.jzg.console.service.ReportSalesmanDataService;
-import io.swagger.v3.oas.annotations.media.Schema;
-import org.springframework.format.annotation.DateTimeFormat;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 16:45
- *  @Description:  任务数据-业务员
- */
-@Service
-public class ReportSalesmanDataServiceImpl extends ReportBaseServiceImpl implements ReportSalesmanDataService {
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 15:37
-     *  @Description: 任务数据-业务员-列表查询
-     */
-    @Override
-    public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        Page<ReportSalesmanDataDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
-        IPage<ReportSalesmanDataDto> pageList = new Page<ReportSalesmanDataDto>();
-        List<ReportSalesmanDataDto> list = getList();
-        pageList.setRecords(list);
-        pageList.setTotal(1l);
-        pageList.setCurrent(reportSearchCommonVo.getPageNo());
-        pageList.setPages(reportSearchCommonVo.getPageNo());
-        pageList.setPages(reportSearchCommonVo.getPageSize());
-        return pageList;
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:00
-     *  @Description:  任务数据-业务员-列表导出
-     */
-    @Override
-    public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        List<ReportSalesmanDataDto> list = getList();
-        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDto.class,list,"任务数据-业务员-列表导出-"+ reportSearchCommonVo.getUserId());
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:01
-     *  @Description:  任务数据-业务员-明细查询
-     */
-    @Override
-    public IPage<?> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        Page<ReportSalesmanDataDetailDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
-        IPage<ReportSalesmanDataDetailDto> detailPageList = new Page<ReportSalesmanDataDetailDto>();
-        List<ReportSalesmanDataDetailDto> detailList = getDetailList();
-        detailPageList.setRecords(detailList);
-        detailPageList.setTotal(1l);
-        detailPageList.setCurrent(reportSearchCommonVo.getPageNo());
-        detailPageList.setPages(reportSearchCommonVo.getPageNo());
-        detailPageList.setPages(reportSearchCommonVo.getPageSize());
-        return detailPageList;
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:01
-     *  @Description:  任务数据-业务员-明细导出
-     */
-    @Override
-    public void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        List<ReportSalesmanDataDetailDto> detailList = getDetailList();
-        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDetailDto.class,detailList,"任务数据-业务员-明细导出-"+ reportSearchCommonVo.getUserId());
-    }
-
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
-     */
-    public List<ReportSalesmanDataDto>  getList(){
-        List<ReportSalesmanDataDto> list =new ArrayList<>();
-        ReportSalesmanDataDto reportSalesmanDataDto = ReportSalesmanDataDto.builder()
-                .salesmanName("张三").salesmanPhone("18811459985").deptName("众安财险机构").quoteOrderNum(200L)
-                .proxyCustomerOrderNum(50L).pcOrderNum(20L).appOrderNum(500L).payPendingOrderNum(300L).underwritRejectNum(50L)
-                .underwritPassRate(new BigDecimal(23)).underwriteRate(new BigDecimal(32))
-                .additionalRecordingOrderNum(50L).additionalRecordingPendingApprovalOrderNum(20L).additionalRecordingApprovalOrderNum(10L)
-                .manegerName("李四").build();
-        list.add(reportSalesmanDataDto);
-        return list;
-    }
-
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
-     */
-    public List<ReportSalesmanDataDetailDto>  getDetailList(){
-        List<ReportSalesmanDataDetailDto> list =new ArrayList<>();
-        ReportSalesmanDataDetailDto reportSalesmanDataDetailDto = ReportSalesmanDataDetailDto.builder()
-                .salesmanName("张三").salesmanPhone("18811459985").deptName("太原分部")
-                .orderNo("2025090811253600215").licenseNo("京AG6002").orderTypeName("代客录单").riskName("单交")
-                .orderSourceName("pc报价").sumPremium(new BigDecimal(456)).orderStatusName("已承保")
-                .createTime(new Date()).recordTime(new Date())
-                .companyName("永诚财险").partnerCompanyName("众安财险科技营销部")
-                .build();
-        list.add(reportSalesmanDataDetailDto);
-        return list;
-    }
-}

+ 0 - 120
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportTelemarketingDataServiceImpl.java

@@ -1,120 +0,0 @@
-package com.jzg.console.service.impl;
-
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.jzg.commons.entity.report.dto.*;
-import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
-import com.jzg.console.service.ReportChannelDataService;
-import com.jzg.console.service.ReportTelemarketingDataService;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 16:45
- *  @Description:  任务数据-电销
- */
-@Service
-public class ReportTelemarketingDataServiceImpl extends ReportBaseServiceImpl implements ReportTelemarketingDataService {
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 15:37
-     *  @Description: 任务数据-电销-列表查询
-     */
-    @Override
-    public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        Page<ReportSalesmanDataDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
-        IPage<ReportSalesmanDataDto> pageList = new Page<ReportSalesmanDataDto>();
-        List<ReportSalesmanDataDto> list = getList();
-        pageList.setRecords(list);
-        pageList.setTotal(1l);
-        pageList.setCurrent(reportSearchCommonVo.getPageNo());
-        pageList.setPages(reportSearchCommonVo.getPageNo());
-        pageList.setPages(reportSearchCommonVo.getPageSize());
-        return pageList;
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:00
-     *  @Description:  任务数据-电销-列表导出
-     */
-    @Override
-    public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        List<ReportSalesmanDataDto> list = getList();
-        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDto.class,list,"任务数据-电销-列表导出-"+ reportSearchCommonVo.getUserId());
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:01
-     *  @Description:  任务数据-电销-明细查询
-     */
-    @Override
-    public IPage<?> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        Page<ReportSalesmanDataDetailDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
-        IPage<ReportSalesmanDataDetailDto> detailPageList = new Page<ReportSalesmanDataDetailDto>();
-        List<ReportSalesmanDataDetailDto> detailList = getDetailList();
-        detailPageList.setRecords(detailList);
-        detailPageList.setTotal(1l);
-        detailPageList.setCurrent(reportSearchCommonVo.getPageNo());
-        detailPageList.setPages(reportSearchCommonVo.getPageNo());
-        detailPageList.setPages(reportSearchCommonVo.getPageSize());
-        return detailPageList;
-    }
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 17:01
-     *  @Description:  任务数据-电销-明细导出
-     */
-    @Override
-    public void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        List<ReportSalesmanDataDetailDto> detailList = getDetailList();
-        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDetailDto.class,detailList,"任务数据-电销-明细导出-"+ reportSearchCommonVo.getUserId());
-    }
-
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
-     */
-    public List<ReportSalesmanDataDto>  getList(){
-        List<ReportSalesmanDataDto> list =new ArrayList<>();
-        ReportSalesmanDataDto reportSalesmanDataDto = ReportSalesmanDataDto.builder()
-                .salesmanName("张三").salesmanPhone("18811459985").deptName("众安财险机构").quoteOrderNum(200L)
-                .proxyCustomerOrderNum(50L).pcOrderNum(20L).appOrderNum(500L).payPendingOrderNum(300L).underwritRejectNum(50L)
-                .underwritPassRate(new BigDecimal(23)).underwriteRate(new BigDecimal(32))
-                .additionalRecordingOrderNum(50L).additionalRecordingPendingApprovalOrderNum(20L).additionalRecordingApprovalOrderNum(10L)
-                .manegerName("李四").build();
-        list.add(reportSalesmanDataDto);
-        return list;
-    }
-
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
-     */
-    public List<ReportSalesmanDataDetailDto>  getDetailList(){
-        List<ReportSalesmanDataDetailDto> list =new ArrayList<>();
-        ReportSalesmanDataDetailDto reportSalesmanDataDetailDto = ReportSalesmanDataDetailDto.builder()
-                .salesmanName("张三").salesmanPhone("18811459985").deptName("太原分部")
-                .orderNo("2025090811253600215").licenseNo("京AG6002").orderTypeName("代客录单").riskName("单交")
-                .orderSourceName("pc报价").sumPremium(new BigDecimal(456)).orderStatusName("已承保")
-                .createTime(new Date()).recordTime(new Date())
-                .companyName("永诚财险").partnerCompanyName("众安财险科技营销部")
-                .build();
-        list.add(reportSalesmanDataDetailDto);
-        return list;
-    }
-}

+ 44 - 38
consoleStatistics/src/main/java/com/jzg/console/controller/ReportTaskDataManageController.java → consoleStatistics/src/main/java/com/jzg/console/taskDataReport/controller/ReportTaskDataController.java

@@ -1,27 +1,33 @@
-package com.jzg.console.controller;
+package com.jzg.console.taskDataReport.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
-import com.jzg.console.service.*;
+import com.jzg.console.taskDataReport.service.ReportChannelDataService;
+import com.jzg.console.taskDataReport.service.ReportCompanyDataService;
+import com.jzg.console.taskDataReport.service.ReportSalesmanDataService;
+import com.jzg.console.taskDataReport.service.ReportTelemarketingDataService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 17:56
+ *  @author: Liub
+ *  @Date: 2026/07/28 08:50
  *  @Description: 任务数据管理
  */
 @Slf4j
 @Tag(name="任务数据管理")
 @RestController
 @RequestMapping("/console/taskDataManage")
-public class ReportTaskDataManageController extends BaseController {
+public class ReportTaskDataController extends BaseController {
 
     //任务数据-业务员
     @Autowired
@@ -42,8 +48,8 @@ public class ReportTaskDataManageController extends BaseController {
 
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:08
      *  @Description: 任务数据-业务员-列表
      */
     @Operation(summary = "任务数据-业务员-列表查询", description = "任务数据-业务员-列表查询")
@@ -58,8 +64,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:09
      *  @Description: 任务数据-业务员-列表导出
      */
     @Operation(summary = "任务数据-业务员-列表导出", description = "任务数据-业务员-列表导出")
@@ -74,8 +80,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:11
      *  @Description:  任务数据-业务员-明细查询
      */
     @Operation(summary = "任务数据-业务员-明细查询", description = "任务数据-业务员-明细查询")
@@ -90,8 +96,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:11
      *  @Description:  任务数据-业务员-明细导出
      */
     @Operation(summary = "任务数据-业务员-明细导出", description = "任务数据-业务员-明细导出")
@@ -107,8 +113,8 @@ public class ReportTaskDataManageController extends BaseController {
 
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:08
      *  @Description: 任务数据-渠道-列表
      */
     @Operation(summary = "任务数据-渠道-列表查询", description = "任务数据-渠道-列表查询")
@@ -123,8 +129,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:09
      *  @Description: 任务数据-渠道-列表导出
      */
     @Operation(summary = "任务数据-渠道-列表导出", description = "任务数据-渠道-列表导出")
@@ -139,8 +145,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:11
      *  @Description:  任务数据-渠道-明细查询
      */
     @Operation(summary = "任务数据-渠道-明细查询", description = "任务数据-渠道-明细查询")
@@ -155,8 +161,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:11
      *  @Description:  任务数据-渠道-明细导出
      */
     @Operation(summary = "任务数据-渠道-明细导出", description = "任务数据-渠道-明细导出")
@@ -171,8 +177,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:08
      *  @Description: 业务数据-电销-列表
      */
     @Operation(summary = "业务数据-电销-列表查询", description = "业务数据-电销-列表查询")
@@ -187,8 +193,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:09
      *  @Description: 业务数据-电销-列表导出
      */
     @Operation(summary = "业务数据-电销-列表导出", description = "业务数据-电销-列表导出")
@@ -203,8 +209,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:11
      *  @Description:  业务数据-电销-明细查询
      */
     @Operation(summary = "业务数据-电销-明细查询", description = "业务数据-电销-明细查询")
@@ -219,8 +225,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:11
      *  @Description:  业务数据-电销-明细导出
      */
     @Operation(summary = "业务数据-电销-明细导出", description = "业务数据-电销-明细导出")
@@ -235,8 +241,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:08
      *  @Description: 任务数据-保险公司-列表
      */
     @Operation(summary = "任务数据-保险公司-列表查询", description = "任务数据-保险公司-列表查询")
@@ -251,8 +257,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:09
      *  @Description: 任务数据-保险公司-列表导出
      */
     @Operation(summary = "任务数据-保险公司-列表导出", description = "任务数据-保险公司-列表导出")
@@ -267,8 +273,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:11
      *  @Description:  任务数据-保险公司-明细查询
      */
     @Operation(summary = "任务数据-保险公司-明细查询", description = "任务数据-保险公司-明细查询")
@@ -283,8 +289,8 @@ public class ReportTaskDataManageController extends BaseController {
     }
     /**
      *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
+     *  @author: Liub
+     *  @Date: 2026/07/28 17:11
      *  @Description:  任务数据-保险公司-明细导出
      */
     @Operation(summary = "任务数据-保险公司-明细导出", description = "任务数据-保险公司-明细导出")

+ 34 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/mapper/ReportChannelDataMapper.java

@@ -0,0 +1,34 @@
+package com.jzg.console.taskDataReport.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.annotation.IgnoreTenant;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDto;
+import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 任务数据-渠道
+ *
+ * @author Liub
+ * @Date 2026/7/28
+ */
+@Mapper
+public interface ReportChannelDataMapper {
+
+    @IgnoreTenant
+    IPage<ReportSalesmanDataDto> page(Page<ReportSalesmanDataDto> p, @Param("q") ReportSearchCommonVo q);
+
+    @IgnoreTenant
+    List<ReportSalesmanDataDto> export(@Param("q") ReportSearchCommonVo q);
+
+    @IgnoreTenant
+    IPage<ReportSalesmanDataDetailDto> detailPage(Page<ReportSalesmanDataDetailDto> p, @Param("q") ReportSearchCommonVo q);
+
+    @IgnoreTenant
+    List<ReportSalesmanDataDetailDto> detailExport(@Param("q") ReportSearchCommonVo q);
+}

+ 34 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/mapper/ReportCompanyDataMapper.java

@@ -0,0 +1,34 @@
+package com.jzg.console.taskDataReport.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.annotation.IgnoreTenant;
+import com.jzg.commons.entity.report.dto.ReportCompanyDataDetailDto;
+import com.jzg.commons.entity.report.dto.ReportCompanyDataDto;
+import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 任务数据-保险公司
+ *
+ * @author Liub
+ * @Date 2026/7/28
+ */
+@Mapper
+public interface ReportCompanyDataMapper {
+
+    @IgnoreTenant
+    IPage<ReportCompanyDataDto> page(Page<ReportCompanyDataDto> p, @Param("q") ReportSearchCommonVo q);
+
+    @IgnoreTenant
+    List<ReportCompanyDataDto> export(@Param("q") ReportSearchCommonVo q);
+
+    @IgnoreTenant
+    IPage<ReportCompanyDataDetailDto> detailPage(Page<ReportCompanyDataDetailDto> p, @Param("q") ReportSearchCommonVo q);
+
+    @IgnoreTenant
+    List<ReportCompanyDataDetailDto> detailExport(@Param("q") ReportSearchCommonVo q);
+}

+ 46 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/mapper/ReportSalesmanDataMapper.java

@@ -0,0 +1,46 @@
+package com.jzg.console.taskDataReport.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.annotation.IgnoreTenant;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDto;
+import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 任务数据-业务员
+ *
+ * @author Liub
+ * @Date 2026/7/28
+ */
+@Mapper
+public interface ReportSalesmanDataMapper {
+
+    /**
+     * 任务数据-业务员-分页查询
+     */
+    @IgnoreTenant
+    IPage<ReportSalesmanDataDto> page(Page<ReportSalesmanDataDto> p, @Param("q") ReportSearchCommonVo q);
+
+    /**
+     * 任务数据-业务员-导出
+     */
+    @IgnoreTenant
+    List<ReportSalesmanDataDto> export(@Param("q") ReportSearchCommonVo q);
+
+    /**
+     * 任务数据-业务员-详情分页查询
+     */
+    @IgnoreTenant
+    IPage<ReportSalesmanDataDetailDto> detailPage(Page<ReportSalesmanDataDetailDto> p, @Param("q") ReportSearchCommonVo q);
+
+    /**
+     * 任务数据-业务员-详情导出
+     */
+    @IgnoreTenant
+    List<ReportSalesmanDataDetailDto> detailExport(@Param("q") ReportSearchCommonVo q);
+}

+ 34 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/mapper/ReportTelemarketingDataMapper.java

@@ -0,0 +1,34 @@
+package com.jzg.console.taskDataReport.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.annotation.IgnoreTenant;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDto;
+import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 任务数据-电话营销
+ *
+ * @author Liub
+ * @Date 2026/7/28
+ */
+@Mapper
+public interface ReportTelemarketingDataMapper {
+
+    @IgnoreTenant
+    IPage<ReportSalesmanDataDto> page(Page<ReportSalesmanDataDto> p, @Param("q") ReportSearchCommonVo q);
+
+    @IgnoreTenant
+    List<ReportSalesmanDataDto> export(@Param("q") ReportSearchCommonVo q);
+
+    @IgnoreTenant
+    IPage<ReportSalesmanDataDetailDto> detailPage(Page<ReportSalesmanDataDetailDto> p, @Param("q") ReportSearchCommonVo q);
+
+    @IgnoreTenant
+    List<ReportSalesmanDataDetailDto> detailExport(@Param("q") ReportSearchCommonVo q);
+}

+ 13 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/ReportChannelDataService.java

@@ -0,0 +1,13 @@
+package com.jzg.console.taskDataReport.service;
+
+import com.jzg.console.service.ReportBaseService;
+
+/**
+ *  @version
+ *  @author: Liub
+ *  @Date: 2026/7/28
+ *  @Description:  任务数据-渠道
+ */
+public interface ReportChannelDataService extends ReportBaseService {
+
+}

+ 13 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/ReportCompanyDataService.java

@@ -0,0 +1,13 @@
+package com.jzg.console.taskDataReport.service;
+
+import com.jzg.console.service.ReportBaseService;
+
+/**
+ *  @version
+ *  @author: Liub
+ *  @Date: 2026/7/28
+ *  @Description:  任务数据-保险公司
+ */
+public interface ReportCompanyDataService extends ReportBaseService {
+
+}

+ 13 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/ReportSalesmanDataService.java

@@ -0,0 +1,13 @@
+package com.jzg.console.taskDataReport.service;
+
+import com.jzg.console.service.ReportBaseService;
+
+/**
+ *  @version
+ *  @author: Liub
+ *  @Date: 2026/7/28
+ *  @Description:  任务数据-业务员
+ */
+public interface ReportSalesmanDataService extends ReportBaseService {
+
+}

+ 13 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/ReportTelemarketingDataService.java

@@ -0,0 +1,13 @@
+package com.jzg.console.taskDataReport.service;
+
+import com.jzg.console.service.ReportBaseService;
+
+/**
+ *  @version
+ *  @author: Liub
+ *  @Date: 2026/7/28
+ *  @Description: 任务数据-电话营销
+ */
+public interface ReportTelemarketingDataService extends ReportBaseService {
+
+}

+ 69 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/impl/ReportChannelDataServiceImpl.java

@@ -0,0 +1,69 @@
+package com.jzg.console.taskDataReport.service.impl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDto;
+import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import com.jzg.console.service.impl.ReportBaseServiceImpl;
+import com.jzg.console.taskDataReport.mapper.ReportChannelDataMapper;
+import com.jzg.console.taskDataReport.service.ReportChannelDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author: Liub
+ * @Date 2026/7/28
+ * @Description: 任务数据-渠道
+ */
+@Service
+public class ReportChannelDataServiceImpl extends ReportBaseServiceImpl implements ReportChannelDataService {
+
+    @Autowired
+    private ReportChannelDataMapper reportChannelDataMapper;
+
+
+    /**
+     * 任务数据-渠道-分页查询
+     */
+    @Override
+    public IPage<ReportSalesmanDataDto> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        Page<ReportSalesmanDataDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
+        reportSearchCommonVo.setRecordTimeBegin(reportSearchCommonVo.getRecordTime().get(0));
+        reportSearchCommonVo.setRecordTimeEnd(reportSearchCommonVo.getRecordTime().get(1));
+        return reportChannelDataMapper.page(page, reportSearchCommonVo);
+    }
+
+    /**
+     * 任务数据-渠道-导出
+     */
+    @Override
+    public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        List<ReportSalesmanDataDto> list = reportChannelDataMapper.export(reportSearchCommonVo);
+        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDto.class, list, "浠诲姟鏁版嵁-娓犻亾-鍒楄〃瀵煎嚭-" + reportSearchCommonVo.getUserId());
+    }
+
+    /**
+     * 任务数据-渠道-分页查询-详情
+     */
+    @Override
+    public IPage<ReportSalesmanDataDetailDto> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        Page<ReportSalesmanDataDetailDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
+        reportSearchCommonVo.setRecordTimeBegin(reportSearchCommonVo.getRecordTime().get(0));
+        reportSearchCommonVo.setRecordTimeEnd(reportSearchCommonVo.getRecordTime().get(1));
+        return reportChannelDataMapper.detailPage(page, reportSearchCommonVo);
+    }
+
+
+    /**
+     * 任务数据-渠道-导出-详情
+     */
+    @Override
+    public void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        List<ReportSalesmanDataDetailDto> detailList = reportChannelDataMapper.detailExport(reportSearchCommonVo);
+        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDetailDto.class, detailList, "浠诲姟鏁版嵁-娓犻亾-鏄庣粏瀵煎嚭-" + reportSearchCommonVo.getUserId());
+    }
+}

+ 72 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/impl/ReportCompanyDataServiceImpl.java

@@ -0,0 +1,72 @@
+package com.jzg.console.taskDataReport.service.impl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.entity.report.dto.ReportCompanyDataDetailDto;
+import com.jzg.commons.entity.report.dto.ReportCompanyDataDto;
+import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import com.jzg.console.service.impl.ReportBaseServiceImpl;
+import com.jzg.console.taskDataReport.mapper.ReportCompanyDataMapper;
+import com.jzg.console.taskDataReport.service.ReportCompanyDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author: Liub
+ * @Date 2026/7/28
+ * @Description: 任务数据-保险公司
+ */
+@Service
+public class ReportCompanyDataServiceImpl extends ReportBaseServiceImpl implements ReportCompanyDataService {
+
+    @Autowired
+    private ReportCompanyDataMapper reportCompanyDataMapper;
+
+    /**
+     * 任务数据-保险公司-分页查询
+     */
+    @Override
+    public IPage<ReportCompanyDataDto> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        Page<ReportCompanyDataDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
+        reportSearchCommonVo.setRecordTimeBegin(reportSearchCommonVo.getRecordTime().get(0));
+        reportSearchCommonVo.setRecordTimeEnd(reportSearchCommonVo.getRecordTime().get(1));
+        return reportCompanyDataMapper.page(page, reportSearchCommonVo);
+    }
+
+
+    /**
+     * 任务数据-保险公司-导出
+     */
+
+    @Override
+    public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        List<ReportCompanyDataDto> list = reportCompanyDataMapper.export(reportSearchCommonVo);
+        upLoadFile(reportSearchCommonVo, ReportCompanyDataDto.class, list, "浠诲姟鏁版嵁-淇濋櫓鍏徃-鍒楄〃瀵煎嚭-" + reportSearchCommonVo.getUserId());
+    }
+
+
+    /**
+     * 任务数据-保险公司-分页查询-详情
+     */
+    @Override
+    public IPage<ReportCompanyDataDetailDto> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        Page<ReportCompanyDataDetailDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
+        reportSearchCommonVo.setRecordTimeBegin(reportSearchCommonVo.getRecordTime().get(0));
+        reportSearchCommonVo.setRecordTimeEnd(reportSearchCommonVo.getRecordTime().get(1));
+        return reportCompanyDataMapper.detailPage(page, reportSearchCommonVo);
+    }
+
+
+    /**
+     * 任务数据-保险公司-导出-详情
+     */
+
+    @Override
+    public void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        List<ReportCompanyDataDetailDto> detailList = reportCompanyDataMapper.detailExport(reportSearchCommonVo);
+        upLoadFile(reportSearchCommonVo, ReportCompanyDataDetailDto.class, detailList, "浠诲姟鏁版嵁-淇濋櫓鍏徃-鏄庣粏瀵煎嚭-" + reportSearchCommonVo.getUserId());
+    }
+}

+ 79 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/impl/ReportSalesmanDataServiceImpl.java

@@ -0,0 +1,79 @@
+package com.jzg.console.taskDataReport.service.impl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDto;
+import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import com.jzg.console.service.impl.ReportBaseServiceImpl;
+import com.jzg.console.taskDataReport.mapper.ReportSalesmanDataMapper;
+import com.jzg.console.taskDataReport.service.ReportSalesmanDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author: Liub
+ * @Date 2026/7/28
+ * @Description: 任务数据-电话营销
+ */
+@Service
+public class ReportSalesmanDataServiceImpl extends ReportBaseServiceImpl implements ReportSalesmanDataService {
+
+    @Autowired
+    private ReportSalesmanDataMapper reportSalesmanDataMapper;
+
+    /**
+     * @version
+     * @author: Liub
+     * @Date 2026/7/28
+     * @Description: 任务数据-电话营销-分页查询
+     */
+    @Override
+    public IPage<ReportSalesmanDataDto> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        Page<ReportSalesmanDataDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
+        reportSearchCommonVo.setRecordTimeBegin(reportSearchCommonVo.getRecordTime().get(0));
+        reportSearchCommonVo.setRecordTimeEnd(reportSearchCommonVo.getRecordTime().get(1));
+        return reportSalesmanDataMapper.page(page, reportSearchCommonVo);
+    }
+
+    /**
+     * @version
+     * @author: Liub
+     * @Date 2026/7/28
+     * @Description: 任务数据-电话营销-导出
+     */
+    @Override
+    public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        List<ReportSalesmanDataDto> list = reportSalesmanDataMapper.export(reportSearchCommonVo);
+        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDto.class, list, "浠诲姟鏁版嵁-涓氬姟鍛?鍒楄〃瀵煎嚭-" + reportSearchCommonVo.getUserId());
+    }
+
+    /**
+     * @version
+     * @author: Liub
+     * @Date 2026/7/28
+     * @Description: 任务数据-电话营销-分页查询-详情
+     */
+    @Override
+    public IPage<ReportSalesmanDataDetailDto> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        Page<ReportSalesmanDataDetailDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
+        reportSearchCommonVo.setRecordTimeBegin(reportSearchCommonVo.getRecordTime().get(0));
+        reportSearchCommonVo.setRecordTimeEnd(reportSearchCommonVo.getRecordTime().get(1));
+        return reportSalesmanDataMapper.detailPage(page, reportSearchCommonVo);
+    }
+
+    /**
+     * @version
+     * @author: Liub
+     * @Date 2026/7/28
+     * @Description: 任务数据-电话营销-导出-详情
+     */
+    @Override
+    public void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        List<ReportSalesmanDataDetailDto> detailList = reportSalesmanDataMapper.detailExport(reportSearchCommonVo);
+        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDetailDto.class, detailList, "浠诲姟鏁版嵁-涓氬姟鍛?鏄庣粏瀵煎嚭-" + reportSearchCommonVo.getUserId());
+    }
+}

+ 80 - 0
consoleStatistics/src/main/java/com/jzg/console/taskDataReport/service/impl/ReportTelemarketingDataServiceImpl.java

@@ -0,0 +1,80 @@
+package com.jzg.console.taskDataReport.service.impl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto;
+import com.jzg.commons.entity.report.dto.ReportSalesmanDataDto;
+import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import com.jzg.console.service.impl.ReportBaseServiceImpl;
+import com.jzg.console.taskDataReport.mapper.ReportTelemarketingDataMapper;
+import com.jzg.console.taskDataReport.service.ReportTelemarketingDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author: Liub
+ * @Date 2026/7/28
+ * @Description: 任务数据-电话营销
+ */
+@Service
+public class ReportTelemarketingDataServiceImpl extends ReportBaseServiceImpl implements ReportTelemarketingDataService {
+
+    @Autowired
+    private ReportTelemarketingDataMapper reportTelemarketingDataMapper;
+
+
+    /**
+     * @version
+     * @author: Liub
+     * @Date 2026/7/28
+     * @Description: 任务数据-电话营销-分页查询
+     */
+    @Override
+    public IPage<ReportSalesmanDataDto> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        Page<ReportSalesmanDataDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
+        reportSearchCommonVo.setRecordTimeBegin(reportSearchCommonVo.getRecordTime().get(0));
+        reportSearchCommonVo.setRecordTimeEnd(reportSearchCommonVo.getRecordTime().get(1));
+        return reportTelemarketingDataMapper.page(page, reportSearchCommonVo);
+    }
+
+    /**
+     * @version
+     * @author: Liub
+     * @Date 2026/7/28
+     * @Description: 任务数据-电话营销-导出
+     */
+    @Override
+    public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        List<ReportSalesmanDataDto> list = reportTelemarketingDataMapper.export(reportSearchCommonVo);
+        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDto.class, list, "浠诲姟鏁版嵁-鐢甸攢-鍒楄〃瀵煎嚭-" + reportSearchCommonVo.getUserId());
+    }
+
+    /**
+     * @version
+     * @author: Liub
+     * @Date 2026/7/28
+     * @Description: 任务数据-电话营销-分页查询-详情
+     */
+    @Override
+    public IPage<ReportSalesmanDataDetailDto> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        Page<ReportSalesmanDataDetailDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
+        reportSearchCommonVo.setRecordTimeBegin(reportSearchCommonVo.getRecordTime().get(0));
+        reportSearchCommonVo.setRecordTimeEnd(reportSearchCommonVo.getRecordTime().get(1));
+        return reportTelemarketingDataMapper.detailPage(page, reportSearchCommonVo);
+    }
+
+    /**
+     * @version
+     * @author: Liub
+     * @Date 2026/7/28
+     * @Description: 任务数据-电话营销-导出-详情
+     */
+    @Override
+    public void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        List<ReportSalesmanDataDetailDto> detailList = reportTelemarketingDataMapper.detailExport(reportSearchCommonVo);
+        upLoadFile(reportSearchCommonVo, ReportSalesmanDataDetailDto.class, detailList, "浠诲姟鏁版嵁-鐢甸攢-鏄庣粏瀵煎嚭-" + reportSearchCommonVo.getUserId());
+    }
+}

+ 234 - 0
consoleStatistics/src/main/resources/mapper/ReportChannelDataMapper.xml

@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jzg.console.taskDataReport.mapper.ReportChannelDataMapper">
+
+    <!-- ==================== 列表汇总查询(按渠道用户聚合,type_attr=7) ==================== -->
+    <sql id="summaryBase">
+        WITH orders AS (
+        SELECT o.id, o.quote_no, o.agreement_id, o.company_id, o.company_name,
+        o.product_id, o.product_name, o.order_status, o.entry_status,
+        o.audit_status, o.real_quote_user_id, o.order_source,
+        o.docking_person, o.docking_person_phone, o.create_time, o.signing_time,
+        o.system_code
+        FROM ins_orders o
+        LEFT JOIN ins_orders_car_info ioci ON o.id = ioci.order_no
+        LEFT JOIN ptl_agreement a ON a.id = o.agreement_id AND a.is_delete = 0
+        WHERE o.is_delete = 0
+        <if test="q != null and q.companyId != null and q.companyId != ''">AND o.company_id = #{q.companyId}</if>
+        <if test="q != null and q.recordTimeBegin != null and q.recordTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.recordTimeBegin}
+        </if>
+        <if test="q != null and q.recordTimeEnd != null and q.recordTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.recordTimeEnd}
+        </if>
+        <if test="q != null and q.createTimeBegin != null and q.createTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.createTimeBegin}
+        </if>
+        <if test="q != null and q.createTimeEnd != null and q.createTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.createTimeEnd}
+        </if>
+        <if test="q != null and q.signTimeBegin != null and q.signTimeBegin != ''">AND o.signing_time &gt;=
+            #{q.signTimeBegin}
+        </if>
+        <if test="q != null and q.signTimeEnd != null and q.signTimeEnd != ''">AND o.signing_time &lt;=
+            #{q.signTimeEnd}
+        </if>
+        <if test="q != null and q.systemCode != null and q.systemCode != ''">AND o.system_code = #{q.systemCode}</if>
+        <if test="q != null and q.salesmanPhone != null and q.salesmanPhone != ''">AND o.real_quote_user_id =
+            #{q.salesmanPhone}
+        </if>
+        <if test="q != null and q.licenseNo != null and q.licenseNo != ''">AND ioci.license_no LIKE CONCAT('%',
+            #{q.licenseNo}, '%')
+        </if>
+        <if test="q != null and q.orderStatus != null and q.orderStatus.size() &gt; 0">
+            AND o.order_status IN
+            <foreach collection="q.orderStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderSource != null and q.orderSource.size() &gt; 0">
+            AND o.order_source IN
+            <foreach collection="q.orderSource" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderTypes != null and q.orderTypes.size() &gt; 0">
+            AND o.entry_status IN
+            <foreach collection="q.orderTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.riskTypes != null and q.riskTypes.size() &gt; 0">
+            AND o.product_id IN
+            <foreach collection="q.riskTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.productType != null and q.productType.size() &gt; 0">
+            AND o.product_id IN
+            <foreach collection="q.productType" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() &gt; 0">
+            AND a.partner_company_id IN
+            <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderCheckStatus != null and q.orderCheckStatus.size() &gt; 0">
+            AND o.audit_status IN
+            <foreach collection="q.orderCheckStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        )
+    </sql>
+
+    <sql id="summaryAgg"><![CDATA[
+        SELECT ANY_VALUE(suji.name) salesmanName,
+               su.mobile salesmanPhone,
+               ANY_VALUE(sd.name) deptName,
+               COUNT(DISTINCT o.id) quoteOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 2 THEN o.id END) proxyCustomerOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_source = 0 THEN o.id END) pcOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_source = 1 THEN o.id END) appOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_status = '4' THEN o.id END) payPendingOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_status = '7' THEN o.id END) underwritRejectNum,
+               ROUND(IFNULL(COUNT(DISTINCT CASE WHEN o.order_status IN ('4','5') THEN o.id END) * 100.0
+                   / NULLIF(COUNT(DISTINCT CASE WHEN o.order_status IN ('4','5') THEN o.id END)
+                   + COUNT(DISTINCT CASE WHEN o.order_status = '7' THEN o.id END), 0), 0), 2) underwritPassRate,
+               ROUND(IFNULL(COUNT(DISTINCT CASE WHEN o.order_status = '5' THEN o.id END) * 100.0
+                   / NULLIF(COUNT(DISTINCT o.id), 0), 0), 2) underwriteRate,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 THEN o.id END) additionalRecordingOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 AND o.audit_status = 0 THEN o.id END) additionalRecordingPendingApprovalOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 AND o.audit_status = 1 THEN o.id END) additionalRecordingApprovalOrderNum,
+               ANY_VALUE(mgr_info.NAME) manegerName
+        FROM orders o
+        LEFT JOIN sys_user su ON su.mobile = o.real_quote_user_id
+        LEFT JOIN sys_user_jzg_info suji ON su.id = suji.user_id AND suji.system_code = #{q.systemCode} AND suji.type_attr = '7'
+        LEFT JOIN sys_dept sd ON sd.id = suji.dept_id
+        LEFT JOIN sys_user_jzg_info mgr_info ON mgr_info.id = suji.leader_id AND mgr_info.system_code = #{q.systemCode}
+        WHERE 1=1
+          AND suji.name IS NOT NULL
+          AND suji.name != ''
+        ]]>
+        <if test="q != null and q.salesmanName != null and q.salesmanName != ''">AND suji.name LIKE CONCAT('%',
+            #{q.salesmanName}, '%')
+        </if>
+        <if test="q != null and q.orgIds != null and q.orgIds.size() &gt; 0">
+            AND sd.id IN
+            <foreach collection="q.orgIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        GROUP BY su.mobile
+    </sql>
+
+    <select id="page" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDto">
+        <include refid="summaryBase"/>
+        <include refid="summaryAgg"/>
+    </select>
+
+    <select id="export" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDto">
+        <include refid="summaryBase"/>
+        <include refid="summaryAgg"/>
+    </select>
+
+    <!-- ==================== 明细查询 ==================== -->
+    <sql id="detailSelect"><![CDATA[
+        SELECT suji.name                     salesmanName,
+               su.mobile                     salesmanPhone,
+               COALESCE(sd.name, '')         deptName,
+               o.quote_no                    orderNo,
+               COALESCE(ioci.license_no, '') licenseNo,
+               CASE o.entry_status
+                   WHEN 1 THEN '车险录入'
+                   WHEN 2 THEN '代客录单'
+                   ELSE '外部订单'
+                   END                       orderTypeName,
+               COALESCE(o.product_name, '')  riskName,
+               CASE o.order_source
+                   WHEN 0 THEN 'pc报价'
+                   WHEN 1 THEN 'app报价'
+                   ELSE ''
+                   END                       orderSourceName,
+               COALESCE(ioc.sum_premium, 0)  sumPremium,
+               CASE o.order_status
+                   WHEN '0' THEN '报价中'
+                   WHEN '1' THEN '待核保'
+                   WHEN '2' THEN '核保中'
+                   WHEN '3' THEN '人工处理'
+                   WHEN '4' THEN '待缴费'
+                   WHEN '5' THEN '已承保'
+                   WHEN '6' THEN '报价失败'
+                   WHEN '7' THEN '核保失败'
+                   WHEN '8' THEN '订单关闭'
+                   ELSE ''
+                   END                       orderStatusName,
+               o.create_time                 createTime,
+               o.signing_time                recordTime,
+               COALESCE(o.company_name, '')  companyName,
+               COALESCE(pc.name_simple, '')  partnerCompanyName
+        FROM ins_orders o
+                 LEFT JOIN ins_orders_car_info ioci ON o.id = ioci.order_no
+                 LEFT JOIN ins_orders_costs ioc ON o.id = ioc.order_no
+                 LEFT JOIN ptl_agreement a ON a.id = o.agreement_id AND a.is_delete = 0
+                 LEFT JOIN esm_ins_company pc ON pc.id = a.partner_company_id AND pc.is_delete = 0
+                 LEFT JOIN sys_user su ON su.mobile = o.real_quote_user_id
+                 LEFT JOIN sys_user_jzg_info suji
+                           ON su.id = suji.user_id AND suji.system_code = #{q.systemCode} AND suji.type_attr = '7'
+                 LEFT JOIN sys_dept sd ON sd.id = suji.dept_id
+        WHERE o.is_delete = 0
+          AND suji.name IS NOT NULL
+          AND suji.name != ''
+        ]]></sql>
+
+    <sql id="detailWhere">
+        <if test="q != null and q.companyId != null and q.companyId != ''">AND o.company_id = #{q.companyId}</if>
+        <if test="q != null and q.recordTimeBegin != null and q.recordTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.recordTimeBegin}
+        </if>
+        <if test="q != null and q.recordTimeEnd != null and q.recordTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.recordTimeEnd}
+        </if>
+        <if test="q != null and q.createTimeBegin != null and q.createTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.createTimeBegin}
+        </if>
+        <if test="q != null and q.createTimeEnd != null and q.createTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.createTimeEnd}
+        </if>
+        <if test="q != null and q.signTimeBegin != null and q.signTimeBegin != ''">AND o.signing_time &gt;=
+            #{q.signTimeBegin}
+        </if>
+        <if test="q != null and q.signTimeEnd != null and q.signTimeEnd != ''">AND o.signing_time &lt;=
+            #{q.signTimeEnd}
+        </if>
+        <if test="q != null and q.systemCode != null and q.systemCode != ''">AND o.system_code = #{q.systemCode}</if>
+        <if test="q != null and q.salesmanName != null and q.salesmanName != ''">AND suji.name LIKE CONCAT('%',
+            #{q.salesmanName}, '%')
+        </if>
+        <if test="q != null and q.salesmanPhone != null and q.salesmanPhone != ''">AND su.mobile = #{q.salesmanPhone}
+        </if>
+        <if test="q != null and q.licenseNo != null and q.licenseNo != ''">AND ioci.license_no LIKE CONCAT('%',
+            #{q.licenseNo}, '%')
+        </if>
+        <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() &gt; 0">
+            AND a.partner_company_id IN
+            <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderStatus != null and q.orderStatus.size() &gt; 0">
+            AND o.order_status IN
+            <foreach collection="q.orderStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderSource != null and q.orderSource.size() &gt; 0">
+            AND o.order_source IN
+            <foreach collection="q.orderSource" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderTypes != null and q.orderTypes.size() &gt; 0">
+            AND o.entry_status IN
+            <foreach collection="q.orderTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orgIds != null and q.orgIds.size() &gt; 0">
+            AND sd.id IN
+            <foreach collection="q.orgIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+    </sql>
+
+    <select id="detailPage" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto">
+        <include refid="detailSelect"/>
+        <include refid="detailWhere"/>
+        ORDER BY o.create_time DESC, o.id
+    </select>
+
+    <select id="detailExport" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto">
+        <include refid="detailSelect"/>
+        <include refid="detailWhere"/>
+        ORDER BY o.create_time DESC, o.id
+    </select>
+
+</mapper>

+ 221 - 0
consoleStatistics/src/main/resources/mapper/ReportCompanyDataMapper.xml

@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jzg.console.taskDataReport.mapper.ReportCompanyDataMapper">
+
+    <!-- ==================== 列表汇总查询(按保险公司 × 合作保险公司聚合) ==================== -->
+    <sql id="summaryBase">
+        WITH orders AS (
+        SELECT o.id, o.quote_no, o.agreement_id, o.company_id, o.company_name,
+        o.product_id, o.product_name, o.order_status, o.entry_status,
+        o.audit_status, o.real_quote_user_id, o.order_source,
+        o.docking_person, o.docking_person_phone, o.create_time, o.signing_time,
+        o.system_code
+        FROM ins_orders o
+        LEFT JOIN ptl_agreement a ON a.id = o.agreement_id AND a.is_delete = 0
+        WHERE o.is_delete = 0
+        AND o.company_id IS NOT NULL AND o.company_name IS NOT NULL AND o.company_name != ''
+        <if test="q != null and q.companyId != null and q.companyId != ''">AND o.company_id = #{q.companyId}</if>
+        <if test="q != null and q.recordTimeBegin != null and q.recordTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.recordTimeBegin}
+        </if>
+        <if test="q != null and q.recordTimeEnd != null and q.recordTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.recordTimeEnd}
+        </if>
+        <if test="q != null and q.createTimeBegin != null and q.createTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.createTimeBegin}
+        </if>
+        <if test="q != null and q.createTimeEnd != null and q.createTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.createTimeEnd}
+        </if>
+        <if test="q != null and q.signTimeBegin != null and q.signTimeBegin != ''">AND o.signing_time &gt;=
+            #{q.signTimeBegin}
+        </if>
+        <if test="q != null and q.signTimeEnd != null and q.signTimeEnd != ''">AND o.signing_time &lt;=
+            #{q.signTimeEnd}
+        </if>
+        <if test="q != null and q.systemCode != null and q.systemCode != ''">AND o.system_code = #{q.systemCode}</if>
+        <if test="q != null and q.orderStatus != null and q.orderStatus.size() &gt; 0">
+            AND o.order_status IN
+            <foreach collection="q.orderStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderSource != null and q.orderSource.size() &gt; 0">
+            AND o.order_source IN
+            <foreach collection="q.orderSource" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderTypes != null and q.orderTypes.size() &gt; 0">
+            AND o.entry_status IN
+            <foreach collection="q.orderTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.riskTypes != null and q.riskTypes.size() &gt; 0">
+            AND o.product_id IN
+            <foreach collection="q.riskTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.productType != null and q.productType.size() &gt; 0">
+            AND o.product_id IN
+            <foreach collection="q.productType" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderCheckStatus != null and q.orderCheckStatus.size() &gt; 0">
+            AND o.audit_status IN
+            <foreach collection="q.orderCheckStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        )
+    </sql>
+
+    <sql id="summaryAgg"><![CDATA[
+        SELECT ANY_VALUE(o.company_name) companyName,
+               o.company_id companyId,
+               ANY_VALUE(pc.name_simple) partnerCompanyName,
+               a.partner_company_id partnerCompanyId,
+               COUNT(DISTINCT o.id) quoteOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 2 THEN o.id END) proxyCustomerOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_source = 0 THEN o.id END) pcOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_source = 1 THEN o.id END) appOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_status = '4' THEN o.id END) payPendingOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_status = '7' THEN o.id END) underwritRejectNum,
+               ROUND(IFNULL(COUNT(DISTINCT CASE WHEN o.order_status IN ('4','5') THEN o.id END) * 100.0
+                   / NULLIF(COUNT(DISTINCT CASE WHEN o.order_status IN ('4','5') THEN o.id END)
+                   + COUNT(DISTINCT CASE WHEN o.order_status = '7' THEN o.id END), 0), 0), 2) underwritPassRate,
+               ROUND(IFNULL(COUNT(DISTINCT CASE WHEN o.order_status = '5' THEN o.id END) * 100.0
+                   / NULLIF(COUNT(DISTINCT o.id), 0), 0), 2) underwriteRate,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 THEN o.id END) additionalRecordingOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 AND o.audit_status = 0 THEN o.id END) additionalRecordingPendingApprovalOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 AND o.audit_status = 1 THEN o.id END) additionalRecordingApprovalOrderNum,
+               ANY_VALUE(mgr_info.NAME) manegerName
+        FROM orders o
+        LEFT JOIN ptl_agreement a ON a.id = o.agreement_id AND a.is_delete = 0
+        LEFT JOIN esm_ins_company pc ON pc.id = a.partner_company_id AND pc.is_delete = 0
+        LEFT JOIN sys_user su ON su.mobile = o.real_quote_user_id
+        LEFT JOIN sys_user_jzg_info suji ON su.id = suji.user_id AND suji.system_code = #{q.systemCode} AND suji.type_attr IN ('6','7','8') AND suji.name IS NOT NULL AND suji.name != ''
+        LEFT JOIN sys_dept sd ON sd.id = suji.dept_id
+        LEFT JOIN sys_user_jzg_info mgr_info ON mgr_info.id = suji.leader_id AND mgr_info.system_code = #{q.systemCode}
+        WHERE 1=1
+          AND a.partner_company_id IS NOT NULL
+          AND pc.name_simple IS NOT NULL AND pc.name_simple != ''
+          AND o.company_id IS NOT NULL AND o.company_name IS NOT NULL AND o.company_name != ''
+        ]]>
+        <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() &gt; 0">
+            AND a.partner_company_id IN
+            <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orgIds != null and q.orgIds.size() &gt; 0">
+            AND sd.id IN
+            <foreach collection="q.orgIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        GROUP BY o.company_id, a.partner_company_id
+    </sql>
+
+    <select id="page" resultType="com.jzg.commons.entity.report.dto.ReportCompanyDataDto">
+        <include refid="summaryBase"/>
+        <include refid="summaryAgg"/>
+    </select>
+
+    <select id="export" resultType="com.jzg.commons.entity.report.dto.ReportCompanyDataDto">
+        <include refid="summaryBase"/>
+        <include refid="summaryAgg"/>
+    </select>
+
+    <!-- ==================== 明细查询 ==================== -->
+    <sql id="detailSelect"><![CDATA[
+        SELECT ANY_VALUE(o.company_name)               companyName,
+               o.company_id                            companyId,
+               ANY_VALUE(COALESCE(pc.name_simple, '')) partnerCompanyName,
+               a.partner_company_id                    partnerCompanyId,
+               COUNT(DISTINCT o.id)                                                                      quoteOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 2 THEN o.id END)                                proxyCustomerOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_source = 0 THEN o.id END)                                pcOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_source = 1 THEN o.id END)                                appOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_status = '4' THEN o.id END)                              payPendingOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_status = '7' THEN o.id END)                              underwritRejectNum,
+               ROUND(IFNULL(COUNT(DISTINCT o.id) * 100.0 / NULLIF(COUNT(DISTINCT o.quote_no), 0), 0), 2) quoteOrderRate,
+               ROUND(IFNULL(COUNT(DISTINCT CASE WHEN o.order_status IN ('4', '5') THEN o.id END) * 100.0
+                                / NULLIF(COUNT(DISTINCT CASE WHEN o.order_status IN ('4', '5') THEN o.id END)
+                                             + COUNT(DISTINCT CASE WHEN o.order_status = '7' THEN o.id END), 0), 0),
+                     2)                                                                                  underwritPassRate,
+               ROUND(IFNULL(COUNT(DISTINCT CASE WHEN o.order_status = '5' THEN o.id END) * 100.0
+                                / NULLIF(COUNT(DISTINCT o.id), 0), 0), 2)                                underwriteRate,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 THEN o.id END)                                additionalRecordingOrderNum,
+               COUNT(DISTINCT CASE
+                                  WHEN o.entry_status = 3 AND o.audit_status = 0
+                                      THEN o.id END)                                                     additionalRecordingPendingApprovalOrderNum,
+               COUNT(DISTINCT CASE
+                                  WHEN o.entry_status = 3 AND o.audit_status = 1
+                                      THEN o.id END)                                                     additionalRecordingApprovalOrderNum,
+               ANY_VALUE(mgr_info.NAME)                                                                  manegerName
+        FROM ins_orders o
+                 LEFT JOIN ptl_agreement a ON a.id = o.agreement_id AND a.is_delete = 0
+                 LEFT JOIN esm_ins_company pc ON pc.id = a.partner_company_id AND pc.is_delete = 0
+                 LEFT JOIN sys_user su ON su.mobile = o.real_quote_user_id
+                 LEFT JOIN sys_user_jzg_info suji ON su.id = suji.user_id AND suji.system_code = #{q.systemCode} AND
+                                                     suji.type_attr IN ('6', '7', '8') AND suji.name IS NOT NULL AND
+                                                     suji.name != ''
+                 LEFT JOIN sys_dept sd ON sd.id = suji.dept_id
+                 LEFT JOIN sys_user_jzg_info mgr_info
+                           ON mgr_info.id = suji.leader_id AND mgr_info.system_code = #{q.systemCode}
+        WHERE o.is_delete = 0
+          AND a.partner_company_id IS NOT NULL
+          AND pc.name_simple IS NOT NULL
+          AND pc.name_simple != ''
+          AND o.company_id IS NOT NULL
+          AND o.company_name IS NOT NULL
+          AND o.company_name != ''
+        ]]></sql>
+
+    <sql id="detailWhere">
+        <if test="q != null and q.companyId != null and q.companyId != ''">AND o.company_id = #{q.companyId}</if>
+        <if test="q != null and q.recordTimeBegin != null and q.recordTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.recordTimeBegin}
+        </if>
+        <if test="q != null and q.recordTimeEnd != null and q.recordTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.recordTimeEnd}
+        </if>
+        <if test="q != null and q.createTimeBegin != null and q.createTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.createTimeBegin}
+        </if>
+        <if test="q != null and q.createTimeEnd != null and q.createTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.createTimeEnd}
+        </if>
+        <if test="q != null and q.signTimeBegin != null and q.signTimeBegin != ''">AND o.signing_time &gt;=
+            #{q.signTimeBegin}
+        </if>
+        <if test="q != null and q.signTimeEnd != null and q.signTimeEnd != ''">AND o.signing_time &lt;=
+            #{q.signTimeEnd}
+        </if>
+        <if test="q != null and q.systemCode != null and q.systemCode != ''">AND o.system_code = #{q.systemCode}</if>
+        <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() &gt; 0">
+            AND a.partner_company_id IN
+            <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.licenseNo != null and q.licenseNo != ''">AND 1=1</if>
+        <if test="q != null and q.orderStatus != null and q.orderStatus.size() &gt; 0">
+            AND o.order_status IN
+            <foreach collection="q.orderStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderSource != null and q.orderSource.size() &gt; 0">
+            AND o.order_source IN
+            <foreach collection="q.orderSource" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderTypes != null and q.orderTypes.size() &gt; 0">
+            AND o.entry_status IN
+            <foreach collection="q.orderTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orgIds != null and q.orgIds.size() &gt; 0">
+            AND sd.id IN
+            <foreach collection="q.orgIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+    </sql>
+
+    <select id="detailPage" resultType="com.jzg.commons.entity.report.dto.ReportCompanyDataDetailDto">
+        <include refid="detailSelect"/>
+        <include refid="detailWhere"/>
+        GROUP BY o.company_id, a.partner_company_id
+        ORDER BY o.company_id, a.partner_company_id
+    </select>
+
+    <select id="detailExport" resultType="com.jzg.commons.entity.report.dto.ReportCompanyDataDetailDto">
+        <include refid="detailSelect"/>
+        <include refid="detailWhere"/>
+        GROUP BY o.company_id, a.partner_company_id
+        ORDER BY o.company_id, a.partner_company_id
+    </select>
+
+</mapper>

+ 273 - 0
consoleStatistics/src/main/resources/mapper/ReportSalesmanDataMapper.xml

@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jzg.console.taskDataReport.mapper.ReportSalesmanDataMapper">
+
+    <!-- ==================== 列表汇总查询 ==================== -->
+    <sql id="summaryBase">
+        WITH orders AS (
+        SELECT o.id, o.quote_no, o.agreement_id, o.company_id, o.company_name,
+        o.product_id, o.product_name, o.order_status, o.entry_status,
+        o.audit_status, o.real_quote_user_id, o.order_source,
+        o.docking_person, o.docking_person_phone, o.create_time, o.signing_time,
+        o.system_code
+        FROM ins_orders o
+        LEFT JOIN ins_orders_car_info ioci ON o.id = ioci.order_no
+        LEFT JOIN ptl_agreement a ON a.id = o.agreement_id AND a.is_delete = 0
+        WHERE o.is_delete = 0
+        <if test="q != null and q.companyId != null and q.companyId != ''">AND o.company_id = #{q.companyId}</if>
+        <if test="q != null and q.recordTimeBegin != null and q.recordTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;=
+            #{q.recordTimeBegin}
+        </if>
+        <if test="q != null and q.recordTimeEnd != null and q.recordTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;=
+            #{q.recordTimeEnd}
+        </if>
+        <if test="q != null and q.createTimeBegin != null and q.createTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;=
+            #{q.createTimeBegin}
+        </if>
+        <if test="q != null and q.createTimeEnd != null and q.createTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;=
+            #{q.createTimeEnd}
+        </if>
+        <if test="q != null and q.signTimeBegin != null and q.signTimeBegin != ''">AND o.signing_time &gt;=
+            #{q.signTimeBegin}
+        </if>
+        <if test="q != null and q.signTimeEnd != null and q.signTimeEnd != ''">AND o.signing_time &lt;=
+            #{q.signTimeEnd}
+        </if>
+        <if test="q != null and q.systemCode != null and q.systemCode != ''">AND o.system_code = #{q.systemCode}</if>
+        <if test="q != null and q.salesmanPhone != null and q.salesmanPhone != ''">AND su.mobile =
+            #{q.salesmanPhone}
+        </if>
+        <if test="q != null and q.licenseNo != null and q.licenseNo != ''">AND ioci.license_no LIKE CONCAT('%',
+            #{q.licenseNo}, '%')
+        </if>
+        <if test="q != null and q.manageName != null and q.manageName != ''">AND o.docking_person LIKE CONCAT('%',
+            #{q.manageName}, '%')
+        </if>
+        <if test="q != null and q.managePhone != null and q.managePhone != ''">AND o.docking_person_phone =
+            #{q.managePhone}
+        </if>
+        <if test="q != null and q.orderStatus != null and q.orderStatus.size() &gt; 0">
+            AND o.order_status IN
+            <foreach collection="q.orderStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderSource != null and q.orderSource.size() &gt; 0">
+            AND o.order_source IN
+            <foreach collection="q.orderSource" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderTypes != null and q.orderTypes.size() &gt; 0">
+            AND o.entry_status IN
+            <foreach collection="q.orderTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.riskTypes != null and q.riskTypes.size() &gt; 0">
+            AND o.product_id IN
+            <foreach collection="q.riskTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.productType != null and q.productType.size() &gt; 0">
+            AND o.product_id IN
+            <foreach collection="q.productType" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() &gt; 0">
+            AND a.partner_company_id IN
+            <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderCheckStatus != null and q.orderCheckStatus.size() &gt; 0">
+            AND o.audit_status IN
+            <foreach collection="q.orderCheckStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        )
+    </sql>
+
+    <sql id="summaryAgg"><![CDATA[
+        SELECT ANY_VALUE(suji.name) salesmanName,
+               su.mobile salesmanPhone,
+               ANY_VALUE(sd.name) deptName,
+               COUNT(DISTINCT o.id) quoteOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 2 THEN o.id END) proxyCustomerOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_source = 0 THEN o.id END) pcOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_source = 1 THEN o.id END) appOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_status = '4' THEN o.id END) payPendingOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_status = '7' THEN o.id END) underwritRejectNum,
+               ROUND(IFNULL(COUNT(DISTINCT CASE WHEN o.order_status IN ('4','5') THEN o.id END) * 100.0
+                   / NULLIF(COUNT(DISTINCT CASE WHEN o.order_status IN ('4','5') THEN o.id END)
+                   + COUNT(DISTINCT CASE WHEN o.order_status = '7' THEN o.id END), 0), 0), 2) underwritPassRate,
+               ROUND(IFNULL(COUNT(DISTINCT CASE WHEN o.order_status = '5' THEN o.id END) * 100.0
+                   / NULLIF(COUNT(DISTINCT o.id), 0), 0), 2) underwriteRate,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 THEN o.id END) additionalRecordingOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 AND o.audit_status = 0 THEN o.id END) additionalRecordingPendingApprovalOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 AND o.audit_status = 1 THEN o.id END) additionalRecordingApprovalOrderNum,
+               ANY_VALUE(mgr_info.NAME) manegerName
+        FROM orders o
+        LEFT JOIN sys_user su ON su.mobile = o.real_quote_user_id
+        LEFT JOIN sys_user_jzg_info suji ON su.id = suji.user_id AND suji.system_code = #{q.systemCode} AND suji.type_attr = '6'
+        LEFT JOIN sys_dept sd ON sd.id = suji.dept_id
+        LEFT JOIN sys_user_jzg_info mgr_info ON mgr_info.id = suji.leader_id AND mgr_info.system_code = #{q.systemCode}
+        WHERE 1=1
+          AND suji.name IS NOT NULL
+          AND suji.name != ''
+        ]]>
+        <if test="q != null and q.salesmanName != null and q.salesmanName != ''">AND suji.name LIKE CONCAT('%',
+            #{q.salesmanName}, '%')
+        </if>
+        <if test="q != null and q.manageIds != null and q.manageIds.size() &gt; 0">
+            AND suji.leader_id IN
+            <foreach collection="q.manageIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orgIds != null and q.orgIds.size() &gt; 0">
+            AND sd.id IN
+            <foreach collection="q.orgIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        GROUP BY su.mobile
+    </sql>
+
+    <select id="page" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDto">
+        <include refid="summaryBase"/>
+        <include refid="summaryAgg"/>
+    </select>
+
+    <select id="export" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDto">
+        <include refid="summaryBase"/>
+        <include refid="summaryAgg"/>
+    </select>
+
+    <!-- ==================== 明细查询 ==================== -->
+    <sql id="detailSelect"><![CDATA[
+        SELECT suji.name                     salesmanName,
+               su.mobile                     salesmanPhone,
+               COALESCE(sd.name, '')         deptName,
+               o.quote_no                    orderNo,
+               COALESCE(ioci.license_no, '') licenseNo,
+               CASE o.entry_status
+                   WHEN 1 THEN '车险录入'
+                   WHEN 2 THEN '代客录单'
+                   ELSE '外部订单'
+                   END                       orderTypeName,
+               COALESCE(o.product_name, '')  riskName,
+               CASE o.order_source
+                   WHEN 0 THEN 'pc报价'
+                   WHEN 1 THEN 'app报价'
+                   ELSE ''
+                   END                       orderSourceName,
+               COALESCE(ioc.sum_premium, 0)  sumPremium,
+               CASE o.order_status
+                   WHEN '0' THEN '报价中'
+                   WHEN '1' THEN '待核保'
+                   WHEN '2' THEN '核保中'
+                   WHEN '3' THEN '人工处理'
+                   WHEN '4' THEN '待缴费'
+                   WHEN '5' THEN '已承保'
+                   WHEN '6' THEN '报价失败'
+                   WHEN '7' THEN '核保失败'
+                   WHEN '8' THEN '订单关闭'
+                   ELSE ''
+                   END                       orderStatusName,
+               o.create_time                 createTime,
+               o.signing_time                recordTime,
+               COALESCE(o.company_name, '')  companyName,
+               COALESCE(pc.name_simple, '')  partnerCompanyName
+        FROM ins_orders o
+                 LEFT JOIN ins_orders_car_info ioci ON o.id = ioci.order_no
+                 LEFT JOIN ins_orders_costs ioc ON o.id = ioc.order_no
+                 LEFT JOIN ptl_agreement a ON a.id = o.agreement_id AND a.is_delete = 0
+                 LEFT JOIN esm_ins_company pc ON pc.id = a.partner_company_id AND pc.is_delete = 0
+                 LEFT JOIN sys_user su ON su.mobile = o.real_quote_user_id
+                 LEFT JOIN sys_user_jzg_info suji
+                           ON su.id = suji.user_id AND suji.system_code = #{q.systemCode} AND suji.type_attr = '6'
+                 LEFT JOIN sys_dept sd ON sd.id = suji.dept_id
+        ]]></sql>
+
+    <sql id="detailWhere">
+        WHERE o.is_delete = 0
+        <if test="q != null and q.companyId != null and q.companyId != ''">AND o.company_id = #{q.companyId}</if>
+        <if test="q != null and q.recordTimeBegin != null and q.recordTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;=
+            #{q.recordTimeBegin}
+        </if>
+        <if test="q != null and q.recordTimeEnd != null and q.recordTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;=
+            #{q.recordTimeEnd}
+        </if>
+        <if test="q != null and q.createTimeBegin != null and q.createTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.createTimeBegin}
+        </if>
+        <if test="q != null and q.createTimeEnd != null and q.createTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.createTimeEnd}
+        </if>
+        <if test="q != null and q.signTimeBegin != null and q.signTimeBegin != ''">AND o.signing_time &gt;=
+            #{q.signTimeBegin}
+        </if>
+        <if test="q != null and q.signTimeEnd != null and q.signTimeEnd != ''">AND o.signing_time &lt;=
+            #{q.signTimeEnd}
+        </if>
+        <if test="q != null and q.systemCode != null and q.systemCode != ''">AND o.system_code = #{q.systemCode}</if>
+        <if test="q != null and q.salesmanName != null and q.salesmanName != ''">AND suji.name LIKE CONCAT('%',
+            #{q.salesmanName}, '%')
+        </if>
+        <if test="q != null and q.salesmanPhone != null and q.salesmanPhone != ''">AND su.mobile =
+            #{q.salesmanPhone}
+        </if>
+        <if test="q != null and q.licenseNo != null and q.licenseNo != ''">AND ioci.license_no LIKE CONCAT('%',
+            #{q.licenseNo}, '%')
+        </if>
+        <if test="q != null and q.orderStatus != null and q.orderStatus.size() &gt; 0">
+            AND o.order_status IN
+            <foreach collection="q.orderStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderSource != null and q.orderSource.size() &gt; 0">
+            AND o.order_source IN
+            <foreach collection="q.orderSource" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderTypes != null and q.orderTypes.size() &gt; 0">
+            AND o.entry_status IN
+            <foreach collection="q.orderTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.riskTypes != null and q.riskTypes.size() &gt; 0">
+            AND o.product_id IN
+            <foreach collection="q.riskTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.productType != null and q.productType.size() &gt; 0">
+            AND o.product_id IN
+            <foreach collection="q.productType" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() &gt; 0">
+            AND a.partner_company_id IN
+            <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orgIds != null and q.orgIds.size() &gt; 0">
+            AND sd.id IN
+            <foreach collection="q.orgIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.manageIds != null and q.manageIds.size() &gt; 0">
+            AND suji.leader_id IN
+            <foreach collection="q.manageIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.manageName != null and q.manageName != ''">AND o.docking_person LIKE CONCAT('%',
+            #{q.manageName}, '%')
+        </if>
+        <if test="q != null and q.managePhone != null and q.managePhone != ''">AND o.docking_person_phone =
+            #{q.managePhone}
+        </if>
+        <if test="q != null and q.orderCheckStatus != null and q.orderCheckStatus.size() &gt; 0">
+            AND o.audit_status IN
+            <foreach collection="q.orderCheckStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        AND suji.name IS NOT NULL
+        AND suji.name != ''
+    </sql>
+
+    <select id="detailPage" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto">
+        <include refid="detailSelect"/>
+        <include refid="detailWhere"/>
+        ORDER BY o.create_time DESC, o.id
+    </select>
+
+    <select id="detailExport" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto">
+        <include refid="detailSelect"/>
+        <include refid="detailWhere"/>
+        ORDER BY o.create_time DESC, o.id
+    </select>
+
+</mapper>

+ 234 - 0
consoleStatistics/src/main/resources/mapper/ReportTelemarketingDataMapper.xml

@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jzg.console.taskDataReport.mapper.ReportTelemarketingDataMapper">
+
+    <!-- ==================== 列表汇总查询(按电销用户聚合,type_attr=8) ==================== -->
+    <sql id="summaryBase">
+        WITH orders AS (
+        SELECT o.id, o.quote_no, o.agreement_id, o.company_id, o.company_name,
+        o.product_id, o.product_name, o.order_status, o.entry_status,
+        o.audit_status, o.real_quote_user_id, o.order_source,
+        o.docking_person, o.docking_person_phone, o.create_time, o.signing_time,
+        o.system_code
+        FROM ins_orders o
+        LEFT JOIN ins_orders_car_info ioci ON o.id = ioci.order_no
+        LEFT JOIN ptl_agreement a ON a.id = o.agreement_id AND a.is_delete = 0
+        WHERE o.is_delete = 0
+        <if test="q != null and q.companyId != null and q.companyId != ''">AND o.company_id = #{q.companyId}</if>
+        <if test="q != null and q.recordTimeBegin != null and q.recordTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.recordTimeBegin}
+        </if>
+        <if test="q != null and q.recordTimeEnd != null and q.recordTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.recordTimeEnd}
+        </if>
+        <if test="q != null and q.createTimeBegin != null and q.createTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.createTimeBegin}
+        </if>
+        <if test="q != null and q.createTimeEnd != null and q.createTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.createTimeEnd}
+        </if>
+        <if test="q != null and q.signTimeBegin != null and q.signTimeBegin != ''">AND o.signing_time &gt;=
+            #{q.signTimeBegin}
+        </if>
+        <if test="q != null and q.signTimeEnd != null and q.signTimeEnd != ''">AND o.signing_time &lt;=
+            #{q.signTimeEnd}
+        </if>
+        <if test="q != null and q.systemCode != null and q.systemCode != ''">AND o.system_code = #{q.systemCode}</if>
+        <if test="q != null and q.salesmanPhone != null and q.salesmanPhone != ''">AND o.real_quote_user_id =
+            #{q.salesmanPhone}
+        </if>
+        <if test="q != null and q.licenseNo != null and q.licenseNo != ''">AND ioci.license_no LIKE CONCAT('%',
+            #{q.licenseNo}, '%')
+        </if>
+        <if test="q != null and q.orderStatus != null and q.orderStatus.size() &gt; 0">
+            AND o.order_status IN
+            <foreach collection="q.orderStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderSource != null and q.orderSource.size() &gt; 0">
+            AND o.order_source IN
+            <foreach collection="q.orderSource" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderTypes != null and q.orderTypes.size() &gt; 0">
+            AND o.entry_status IN
+            <foreach collection="q.orderTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.riskTypes != null and q.riskTypes.size() &gt; 0">
+            AND o.product_id IN
+            <foreach collection="q.riskTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.productType != null and q.productType.size() &gt; 0">
+            AND o.product_id IN
+            <foreach collection="q.productType" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() &gt; 0">
+            AND a.partner_company_id IN
+            <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderCheckStatus != null and q.orderCheckStatus.size() &gt; 0">
+            AND o.audit_status IN
+            <foreach collection="q.orderCheckStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        )
+    </sql>
+
+    <sql id="summaryAgg"><![CDATA[
+        SELECT ANY_VALUE(suji.name) salesmanName,
+               su.mobile salesmanPhone,
+               ANY_VALUE(sd.name) deptName,
+               COUNT(DISTINCT o.id) quoteOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 2 THEN o.id END) proxyCustomerOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_source = 0 THEN o.id END) pcOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_source = 1 THEN o.id END) appOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_status = '4' THEN o.id END) payPendingOrderNum,
+               COUNT(DISTINCT CASE WHEN o.order_status = '7' THEN o.id END) underwritRejectNum,
+               ROUND(IFNULL(COUNT(DISTINCT CASE WHEN o.order_status IN ('4','5') THEN o.id END) * 100.0
+                   / NULLIF(COUNT(DISTINCT CASE WHEN o.order_status IN ('4','5') THEN o.id END)
+                   + COUNT(DISTINCT CASE WHEN o.order_status = '7' THEN o.id END), 0), 0), 2) underwritPassRate,
+               ROUND(IFNULL(COUNT(DISTINCT CASE WHEN o.order_status = '5' THEN o.id END) * 100.0
+                   / NULLIF(COUNT(DISTINCT o.id), 0), 0), 2) underwriteRate,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 THEN o.id END) additionalRecordingOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 AND o.audit_status = 0 THEN o.id END) additionalRecordingPendingApprovalOrderNum,
+               COUNT(DISTINCT CASE WHEN o.entry_status = 3 AND o.audit_status = 1 THEN o.id END) additionalRecordingApprovalOrderNum,
+               ANY_VALUE(mgr_info.NAME) manegerName
+        FROM orders o
+        LEFT JOIN sys_user su ON su.mobile = o.real_quote_user_id
+        LEFT JOIN sys_user_jzg_info suji ON su.id = suji.user_id AND suji.system_code = #{q.systemCode} AND suji.type_attr = '8'
+        LEFT JOIN sys_dept sd ON sd.id = suji.dept_id
+        LEFT JOIN sys_user_jzg_info mgr_info ON mgr_info.id = suji.leader_id AND mgr_info.system_code = #{q.systemCode}
+        WHERE 1=1
+          AND suji.name IS NOT NULL
+          AND suji.name != ''
+        ]]>
+        <if test="q != null and q.salesmanName != null and q.salesmanName != ''">AND suji.name LIKE CONCAT('%',
+            #{q.salesmanName}, '%')
+        </if>
+        <if test="q != null and q.orgIds != null and q.orgIds.size() &gt; 0">
+            AND sd.id IN
+            <foreach collection="q.orgIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        GROUP BY su.mobile
+    </sql>
+
+    <select id="page" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDto">
+        <include refid="summaryBase"/>
+        <include refid="summaryAgg"/>
+    </select>
+
+    <select id="export" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDto">
+        <include refid="summaryBase"/>
+        <include refid="summaryAgg"/>
+    </select>
+
+    <!-- ==================== 明细查询 ==================== -->
+    <sql id="detailSelect"><![CDATA[
+        SELECT suji.name                     salesmanName,
+               su.mobile                     salesmanPhone,
+               COALESCE(sd.name, '')         deptName,
+               o.quote_no                    orderNo,
+               COALESCE(ioci.license_no, '') licenseNo,
+               CASE o.entry_status
+                   WHEN 1 THEN '车险录入'
+                   WHEN 2 THEN '代客录单'
+                   ELSE '外部订单'
+                   END                       orderTypeName,
+               COALESCE(o.product_name, '')  riskName,
+               CASE o.order_source
+                   WHEN 0 THEN 'pc报价'
+                   WHEN 1 THEN 'app报价'
+                   ELSE ''
+                   END                       orderSourceName,
+               COALESCE(ioc.sum_premium, 0)  sumPremium,
+               CASE o.order_status
+                   WHEN '0' THEN '报价中'
+                   WHEN '1' THEN '待核保'
+                   WHEN '2' THEN '核保中'
+                   WHEN '3' THEN '人工处理'
+                   WHEN '4' THEN '待缴费'
+                   WHEN '5' THEN '已承保'
+                   WHEN '6' THEN '报价失败'
+                   WHEN '7' THEN '核保失败'
+                   WHEN '8' THEN '订单关闭'
+                   ELSE ''
+                   END                       orderStatusName,
+               o.create_time                 createTime,
+               o.signing_time                recordTime,
+               COALESCE(o.company_name, '')  companyName,
+               COALESCE(pc.name_simple, '')  partnerCompanyName
+        FROM ins_orders o
+                 LEFT JOIN ins_orders_car_info ioci ON o.id = ioci.order_no
+                 LEFT JOIN ins_orders_costs ioc ON o.id = ioc.order_no
+                 LEFT JOIN ptl_agreement a ON a.id = o.agreement_id AND a.is_delete = 0
+                 LEFT JOIN esm_ins_company pc ON pc.id = a.partner_company_id AND pc.is_delete = 0
+                 LEFT JOIN sys_user su ON su.mobile = o.real_quote_user_id
+                 LEFT JOIN sys_user_jzg_info suji
+                           ON su.id = suji.user_id AND suji.system_code = #{q.systemCode} AND suji.type_attr = '8'
+                 LEFT JOIN sys_dept sd ON sd.id = suji.dept_id
+        WHERE o.is_delete = 0
+          AND suji.name IS NOT NULL
+          AND suji.name != ''
+        ]]></sql>
+
+    <sql id="detailWhere">
+        <if test="q != null and q.companyId != null and q.companyId != ''">AND o.company_id = #{q.companyId}</if>
+        <if test="q != null and q.recordTimeBegin != null and q.recordTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.recordTimeBegin}
+        </if>
+        <if test="q != null and q.recordTimeEnd != null and q.recordTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.recordTimeEnd}
+        </if>
+        <if test="q != null and q.createTimeBegin != null and q.createTimeBegin != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &gt;= #{q.createTimeBegin}
+        </if>
+        <if test="q != null and q.createTimeEnd != null and q.createTimeEnd != ''">AND DATE_FORMAT(o.create_time,
+            '%Y-%m-%d') &lt;= #{q.createTimeEnd}
+        </if>
+        <if test="q != null and q.signTimeBegin != null and q.signTimeBegin != ''">AND o.signing_time &gt;=
+            #{q.signTimeBegin}
+        </if>
+        <if test="q != null and q.signTimeEnd != null and q.signTimeEnd != ''">AND o.signing_time &lt;=
+            #{q.signTimeEnd}
+        </if>
+        <if test="q != null and q.systemCode != null and q.systemCode != ''">AND o.system_code = #{q.systemCode}</if>
+        <if test="q != null and q.salesmanName != null and q.salesmanName != ''">AND suji.name LIKE CONCAT('%',
+            #{q.salesmanName}, '%')
+        </if>
+        <if test="q != null and q.salesmanPhone != null and q.salesmanPhone != ''">AND su.mobile = #{q.salesmanPhone}
+        </if>
+        <if test="q != null and q.licenseNo != null and q.licenseNo != ''">AND ioci.license_no LIKE CONCAT('%',
+            #{q.licenseNo}, '%')
+        </if>
+        <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() &gt; 0">
+            AND a.partner_company_id IN
+            <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderStatus != null and q.orderStatus.size() &gt; 0">
+            AND o.order_status IN
+            <foreach collection="q.orderStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderSource != null and q.orderSource.size() &gt; 0">
+            AND o.order_source IN
+            <foreach collection="q.orderSource" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orderTypes != null and q.orderTypes.size() &gt; 0">
+            AND o.entry_status IN
+            <foreach collection="q.orderTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+        <if test="q != null and q.orgIds != null and q.orgIds.size() &gt; 0">
+            AND sd.id IN
+            <foreach collection="q.orgIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+        </if>
+    </sql>
+
+    <select id="detailPage" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto">
+        <include refid="detailSelect"/>
+        <include refid="detailWhere"/>
+        ORDER BY o.create_time DESC, o.id
+    </select>
+
+    <select id="detailExport" resultType="com.jzg.commons.entity.report.dto.ReportSalesmanDataDetailDto">
+        <include refid="detailSelect"/>
+        <include refid="detailWhere"/>
+        ORDER BY o.create_time DESC, o.id
+    </select>
+
+</mapper>

+ 26 - 3
platform/src/main/resources/mapper/JyxConfigMapper.xml

@@ -121,9 +121,32 @@
 
     <select id="selectMainInsurance" resultType="com.jzg.commons.entity.vo.JyxConfigVo">
         select
-        <include refid="params"/> ,
-        jb.id as blame_id,jb.blame,jb.blame_code,jb.blame_coverage,jb.blame_premium,jb.system_code as blame_system_code,jb.jyx_config_id as blame_jyx_config_id,
-        js.id as setting_id,js.seats,js.coverage as setting_coverage,js.premium as setting_premium,js.system_code as setting_system_code,js.jyx_config_id as setting_jyx_config_id
+        jc.`id`,
+        jc.`product_type`,
+        jc.`parent_id`,
+        jc.`product_name`,
+        jc.`alias`,
+        jc.`company`,
+        jc.`product_code`,
+        jc.`connection_method`,
+        jc.`premium_setting`,
+        jc.`coverage` AS jsCoverage,
+        jc.`premium` AS jsPremium,
+        jc.`system_code`,
+        jc.`is_delete` AS isDelete,
+        jb.id AS blame_id,
+        jb.blame,
+        jb.blame_code,
+        jb.blame_coverage,
+        jb.blame_premium,
+        jb.system_code AS blame_system_code,
+        jb.jyx_config_id AS blame_jyx_config_id,
+        js.id AS setting_id,
+        js.seats,
+        js.coverage AS setting_coverage,
+        js.premium AS setting_premium,
+        js.system_code AS setting_system_code,
+        js.jyx_config_id AS setting_jyx_config_id
         from jyx_config jc
         left join jyx_blame jb on jc.id = jb.jyx_config_id AND jb.is_delete = 0
         left join jyx_setting js on jc.id = js.jyx_config_id AND js.is_delete = 0

+ 4 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/build/ChengTaiAPIQuoteResultsVoBuild.java

@@ -134,6 +134,10 @@ public final class ChengTaiAPIQuoteResultsVoBuild {
                     .fluentPut("scoreName", "自主定价系数")
                     .fluentPut("scoreKey","coefficient")
                     .fluentPut("score", coefficientVal));
+            scoreJson.add(new JSONObject()
+                    .fluentPut("scoreName", "一账通评分")
+                    .fluentPut("scoreKey", "YztScore")
+                    .fluentPut("score", premiumCalculationResponse.getYztScore()));
         }
         scoreVo.setScoreJson(scoreJson);
         return scoreVo;

+ 2 - 2
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/CarModelQueryResponse.java

@@ -163,12 +163,12 @@ public class CarModelQueryResponse {
 
         @Override
         public String getPurchasePrice() {
-            return null;
+            return this.vehiclePrice;
         }
 
         @Override
         public String getSeatCount() {
-            return null;
+            return this.seat;
         }
     }
 }

+ 1 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/filter/CarModelsFilterUtils.java

@@ -24,7 +24,7 @@ public final class CarModelsFilterUtils {
             stadarCarDTOS = carModelsFilterList.stream().filter(car -> carInfo.getCarYear().equals(car.getCarYear())).collect(Collectors.toList());
         }
         if (!StringUtils.isEmpty(carInfo.getSeatCount())) {
-            stadarCarDTOS = stadarCarDTOS.stream().filter(car -> carInfo.getSeatCount().equals(car.getSeatCount())).collect(Collectors.toList());
+            stadarCarDTOS = carModelsFilterList.stream().filter(car -> carInfo.getSeatCount().equals(car.getSeatCount())).collect(Collectors.toList());
         }
 
         if (!stadarCarDTOS.isEmpty()) {

+ 27 - 16
tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/service/impl/YongChengApiRequestImpl.java

@@ -169,12 +169,21 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
 
         //build参数
         List<String> requestInfoList = new ArrayList<>();
-
+        BigDecimal finalNegotiatedPrice = negotiatedPrice;
+        quoteVo.getKindInfoVo().stream()
+        .filter(Objects::nonNull) // 防止集合内元素为null
+        .forEach(item -> {
+            if ("A".equals(item.getPlatformKindCode())) {
+                String priceStr = finalNegotiatedPrice.toString();
+                item.setAmount(priceStr);
+                item.setUnitAmount(priceStr);
+            }
+        });
         QuoteRequest quoteRequest = this.builderParams(configurationProperties, quoteVo, vehicleInfo, negotiatedPrice.toString());
         QuoteResponse quoteResponse = this.getResponse(quoteRequest,quoteVo, requestInfoList,url);
 
         QuoteResultsVo quoteResultsVo = buildQuoteRespVo(order.getOrdersNo(), quoteResponse, quoteVo);
-
+        quoteResultsVo.setCarActualValue(depreciationPrice);
         return quoteResultsVo;
     }
 
@@ -483,11 +492,9 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
         // 保险公司订单号
         quoteRespVo.setCompanyOrderNo(rd.getBase().getCresvTxt6());
 
-        List<KindInfoVo> kindList = buildQuoteKindList(rd);
-
-        quoteRespVo.setKindInfoVo(kindList);
+//        List<KindInfoVo> kindList = buildQuoteKindList(rd);
 
-        buildQuoteKindList(rd,quoteVo.getKindInfoVo());
+        quoteRespVo.setKindInfoVo(buildQuoteKindList(rd,quoteVo.getKindInfoVo()));
 
         //车船税
         double sumTax = 0;
@@ -497,6 +504,8 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
         //意外险
         if (null != rd.getProposal()) {
             jyPremium = Double.parseDouble(rd.getProposal().getPremium());
+            quoteVo.getAccidentalDrivings().get(0).setPremium(String.valueOf(jyPremium));
+//            quoteRespVo.set
         }
 
 
@@ -691,15 +700,17 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
         if (null == rd.getCvrgListSY() || null == rd.getCvrgListSY().getCvrgSY()) {
             return Collections.emptyList();
         }
-
         List<KindInfoVo> kindList = new ArrayList<>();
 
-//        rd.getCvrgListSY().getCvrgSY().forEach(a -> {
-//
-//            String kindcode = a.getCCvrgNo();
+        rd.getCvrgListSY().getCvrgSY().forEach(a -> {
+
+            String kindcode = a.getCCvrgNo();
+            KindInfoVo kindInfoVo = new KindInfoVo();
+            kindInfoVo.setKindCode(kindcode);
+            kindInfoVo.setAmount(a.getNPrm());
 //            int i = ArrayUtil.indexOf(InsuranceTypeCorrespondence.getYongchengConnectInsuranceType(), kindcode);
-////            InsurKind insurKind = Enum.valueOf(InsurKind.class, InsuranceTypeCorrespondence.getJinZhangGuiType()[i]);
-//
+//            InsurKind insurKind = Enum.valueOf(InsurKind.class, InsuranceTypeCorrespondence.getJinZhangGuiType()[i]);
+
 //            double premium = Double.parseDouble(a.getNPrm());
 //            double amount = Double.parseDouble(a.getNPerAmt());
 //            QuoteKindRespVo kind;
@@ -724,10 +735,10 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
 //            if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getSpecialContractClause(), insurKind.getCode()) >= 0) {
 //                kind.setServiceTimes(a.getNLiabDaysLmt());
 //            }
-//
-//            kindList.add(kind);
-//
-//        });
+
+            kindList.add(kindInfoVo);
+
+        });
 
         return kindList;
     }

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/mapper/SysOrganizationUserLinkServiceMapper.java

@@ -12,5 +12,5 @@ public interface SysOrganizationUserLinkServiceMapper extends BaseMapper<SysOrga
 
     List<SysOrganizationUserLink> getOrganizationUser(@Param("userId") Long userId, @Param("systemCode") String systemCode);
 
-    void deleteOrganizationUser(String userId, String orgId);
+    void deleteOrganizationUser(@Param("userId")String userId);
 }

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/service/SysOrganizationUserLinkService.java

@@ -25,5 +25,5 @@ public interface SysOrganizationUserLinkService extends IService<SysOrganization
 
     SysOrganizationUserLink getOrganizationUser(Long userId, String systemCode);
 
-    void deleteOrganizationUser(String userId, String orgId);
+    void deleteOrganizationUser(String userId);
 }

+ 22 - 12
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java

@@ -637,27 +637,37 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
                         driving.setCoverage(setting.getCoverage() != null ? setting.getCoverage().toString() : null);
                     }
                 });
-                // 根据座位数范围过滤驾意险:只保留座位数在 minSeatCount~maxSeatCount 范围内的
-                drivings.removeIf(driving -> {
-                    if (driving.getMinSeatCount() != null && seats < driving.getMinSeatCount()) {
-                        return true;
-                    }
-                    if (driving.getMaxSeatCount() != null && seats > driving.getMaxSeatCount()) {
-                        return true;
-                    }
-                    return false;
-                });
             });
         }
 
+        // 解析座位数,备用
+        Integer parsedSeats = StrUtil.isNotBlank(seatCount) ? Integer.parseInt(seatCount) : null;
 
         // 遍历 schemeInsuranceInfo,把 drivings 合并
+        // 自选方案(schemeType=2)按 settingList 里的座位数过滤驾意险;settingList 为空表示无座位数限制,不过滤
         for (SchemeResultVo.SchemeVo insuranceScheme : schemeInsuranceInfo) {
             for (SchemeResultVo.SchemeInfoVo info : insuranceScheme.getInfos()) {
                 List<SchemeResultVo.Driving> drivings = drivingMap.get(info.getId());
-                if (drivings != null) {
-                    info.getDrivings().addAll(drivings); // 合并 drivings
+                if (drivings == null) {
+                    continue;
+                }
+                List<SchemeResultVo.Driving> toAdd = drivings;
+                // 用 SchemeInfoVo.schemeType 判断自选方案(来自 SQL 映射,初始就有值;SchemeVo.schemeType 在合并 drivings 之后才赋值)
+                if ("2".equals(info.getSchemeType()) && parsedSeats != null) {
+                    int seats = parsedSeats;
+                    toAdd = drivings.stream()
+                            .filter(driving -> {
+                                // settingList 为空视为没有座位数限制,不过滤
+                                List<jyxSetting> settings = driving.getSettingList();
+                                if (settings == null || settings.isEmpty()) {
+                                    return true;
+                                }
+                                // settingList 里能找到匹配座位数则保留,否则过滤
+                                return settings.stream().anyMatch(s -> s.getSeats() == seats);
+                            })
+                            .collect(Collectors.toList());
                 }
+                info.getDrivings().addAll(toAdd); // 合并 drivings
             }
         }
 

+ 36 - 3
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -463,6 +463,31 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                     }
                     return true;
                 };
+                // 保险公司
+                Predicate<InsPlyIncome> companySubIdPredicate = insPlyIncome -> {
+                    if(!names.contains(IncomeDataVO.SearchVO.companyId)){
+                        return true;
+                    }
+                    IncomeDataVO.SearchVO searchVO = searchVOMap.get(IncomeDataVO.SearchVO.companyId);
+                    String type = searchVO.getType();
+                    String search = searchVO.getSearch();
+                    if("为空".equals(type)|| "不为空".equals(type)){
+                        return true;
+                    }
+                    // 如果填写的查询条件,不完善,则该条件不进行过滤
+                    if(StrUtil.isEmpty(search)){
+                        return true;
+                    }
+                    if("等于".equalsIgnoreCase(type) || "包含".equalsIgnoreCase(type)){
+                        List<String> companyIds = Arrays.asList(search.split(","));
+                        return companyIds.contains(insPlyIncome.getPartnerCompanyId());
+                    }
+                    if("不等于".equalsIgnoreCase(type) || "不包含".equalsIgnoreCase(type)){
+                        List<String> companyIds = Arrays.asList(search.split(","));
+                        return !companyIds.contains(insPlyIncome.getPartnerCompanyId());
+                    }
+                    return true;
+                };
                 // 签单时间
                 Predicate<InsPlyIncome> signDatePredicate = insPlyIncome -> {
                     LocalDateTime signingTime = insPlyIncome.getSigningTime();
@@ -657,14 +682,14 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                     return true;
                 };
 
-
+                // add by lipf ,保险公司查询的时候,同时支持公司和子公司的查询 2026年7月29日10:30:05
                 if("and".equalsIgnoreCase(incomeDataVO.getLogicJudge())){
-                    Predicate<InsPlyIncome> and = companyIdPredicate.and(signDatePredicate).
+                    Predicate<InsPlyIncome> and = companyIdPredicate.or(companySubIdPredicate).and(signDatePredicate).
                             and(ptlAgreementPredicate).and(orderTypePredicate).and(signYearPredicate).and(licenseNoPredicate)
                             .and(contactPredicate).and(jqPolicyNoPredicate).and(syPolicyNoPredicate);
                     filterIncomes = incomes.stream().filter(and).toList();
                 }else if ("or".equalsIgnoreCase(incomeDataVO.getLogicJudge())){
-                    Predicate<InsPlyIncome> or = companyIdPredicate.or(signDatePredicate).
+                    Predicate<InsPlyIncome> or = companyIdPredicate.or(companySubIdPredicate).or(signDatePredicate).
                             or(ptlAgreementPredicate).or(orderTypePredicate).or(signYearPredicate).or(licenseNoPredicate)
                             .or(contactPredicate).or(jqPolicyNoPredicate).or(syPolicyNoPredicate);
                     filterIncomes = incomes.stream().filter(or).toList();
@@ -1332,7 +1357,15 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                     return invoiceType.equals(action.getInvoiceType());
                 }).collect(Collectors.toMap(InsPlyIncomeInvoiceLink::getIncomeId, InsPlyIncomeInvoiceLink::getInvoiceId, (oleItem, newItem) -> oleItem));
         Map<String, String> typeAttrMaps = sysUserJzgInfoSalesmanService.queryYwyTypeAttrMap();
+
+        Map<String, String> allCompanyHierarchyPaths = esmInsCompanyClient.getAllCompanyHierarchyPaths();
+
         records.forEach(insPlyIncome -> {
+            if(StrUtil.isNotEmpty(insPlyIncome.getPartnerCompanyId())){
+                insPlyIncome.setPartnerCompanyName(allCompanyHierarchyPaths.getOrDefault(insPlyIncome.getPartnerCompanyId(),insPlyIncome.getPartnerCompanyId()));
+            }
+
+
             if("0".equals(insPlyIncome.getSettlementStatus())){
                 insPlyIncome.setSettlementStatusName("未结算");
             }else if("1".equals(insPlyIncome.getSettlementStatus())){

+ 2 - 2
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysOrganizationUserLinkServiceImpl.java

@@ -71,8 +71,8 @@ public class SysOrganizationUserLinkServiceImpl extends ServiceImpl<SysOrganizat
     }
 
     @Override
-    public void deleteOrganizationUser(String userId, String orgId) {
-        sysOrganizationUserLinkServiceMapper.deleteOrganizationUser(userId,orgId);
+    public void deleteOrganizationUser(String userId) {
+        sysOrganizationUserLinkServiceMapper.deleteOrganizationUser(userId);
     }
 
 

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java

@@ -1018,7 +1018,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
         //修改团队信息
         if (sysUserVo.getOrganizationId() != null && !sysUserVo.getOrganizationId().isEmpty()) {
-            sysOrganizationUserLinkService.deleteOrganizationUser(sysUserVo.getUserId(), sysUserVo.getOrganizationId());
+            sysOrganizationUserLinkService.deleteOrganizationUser(sysUserVo.getUserId());
             SysOrganizationUserLink sysOrganizationUserLink = new SysOrganizationUserLink();
             sysOrganizationUserLink.setId(IdGenerate.nextId());
             sysOrganizationUserLink.setUserId(sysUserVo.getUserId());

+ 2 - 0
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -273,6 +273,7 @@
         iop.jy_policy_no, -- 非车险保单号
         io.company_name,
         io.company_id,
+        pa.partner_company_id,
         ipi.create_time,
         ipi.create_by,
         ipi.update_time,
@@ -287,6 +288,7 @@
         LEFT JOIN ins_orders_risk ior2 ON ipi.order_no = ior2.order_no and ior2.risk_code = '0510' AND ior2.is_delete = 0
         LEFT JOIN ins_orders_policy iop ON ipi.order_no = iop.order_no AND iop.is_delete = 0
         LEFT JOIN esm_ins_company eic on ipi.company_id = eic.id AND eic.is_delete = 0
+        left join ptl_agreement pa on pa.id = io.agreement_id
         where
             ipi.is_delete  = 0
     </sql>

+ 1 - 2
tenant/organization/src/main/resources/mapper/SysOrganizationUserLinkServiceMapper.xml

@@ -14,12 +14,11 @@
         id
         , user_id, organization_id
     </sql>
-
+<!--     一个人只有一个团队,更新时修改团队去掉旧团队       AND organization_id = #{orgId} -->
     <delete id="deleteOrganizationUser">
         DELETE
         FROM sys_organization_user_link
         WHERE user_id = #{userId}
-          AND organization_id = #{orgId}
     </delete>
 
     <!-- 根据用户ID获取组织关联信息 -->