wanghao 1 месяц назад
Родитель
Сommit
65d2a296c3

+ 27 - 1
consoleStatistics/src/main/java/com/jzg/console/quotationReport/controller/QuotationReportController.java

@@ -1,5 +1,6 @@
 package com.jzg.console.quotationReport.controller;
 
+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.quotationReport.service.QuotationReportService;
@@ -18,12 +19,13 @@ import org.springframework.web.bind.annotation.RestController;
 @RequiredArgsConstructor
 @RequestMapping("/console/quotationReport")
 @Tag(name = "报价数据-报价订单")
-public class QuotationReportController {
+public class QuotationReportController extends BaseController {
     private final QuotationReportService quotationReportService;
 
     @PostMapping("/quotation/page")
     @Operation(summary = "报价订单报表分页查询")
     public HttpResult<?> quotationPage(@RequestBody ReportSearchCommonVo q) {
+        q.setSystemCode(getUserSystemCode());
         return HttpResult.ok(quotationReportService.quotationPage(q));
     }
 
@@ -31,6 +33,7 @@ public class QuotationReportController {
     @PostMapping("/quotation/export")
     @Operation(summary = "报价订单报表导出")
     public HttpResult<?> quotationExport(@RequestBody ReportSearchCommonVo q) {
+        q.setSystemCode(getUserSystemCode());
         quotationReportService.quotationExport(q);
         return HttpResult.ok("导出任务已提交,请在导出中心查看");
     }
@@ -39,14 +42,37 @@ public class QuotationReportController {
     @PostMapping("/company/page")
     @Operation(summary = "保险公司分页查询")
     public HttpResult<?> companyPage(@RequestBody ReportSearchCommonVo q) {
+        q.setSystemCode(getUserSystemCode());
         return HttpResult.ok(quotationReportService.companyPage(q));
     }
 
     @PostMapping("/company/export")
     @Operation(summary = "保险公司报表导出")
     public HttpResult<?> companyExport(@RequestBody ReportSearchCommonVo q) {
+        q.setSystemCode(getUserSystemCode());
         quotationReportService.companyExport(q);
         return HttpResult.ok("导出任务已提交,请在导出中心查看");
     }
 
+    @PostMapping("/salesman/page")
+    @Operation(summary = "业务员/渠道/电销/ 分页查询")
+    public HttpResult<?> salesmanPage(@RequestBody ReportSearchCommonVo q) {
+        if(q.getSalesmanTypes() == null ||q.getSalesmanTypes().isEmpty()){
+            return HttpResult.error("SalesmanTypes 业务员类型参数错误!");
+        }
+        q.setSystemCode(getUserSystemCode());
+        return HttpResult.ok(quotationReportService.salesmanPage(q));
+    }
+
+    @PostMapping("/salesman/export")
+    @Operation(summary = "保险公司报表导出")
+    public HttpResult<?> salesmanExport(@RequestBody ReportSearchCommonVo q) {
+        if(q.getSalesmanTypes() == null ||q.getSalesmanTypes().isEmpty()){
+            return HttpResult.error("SalesmanTypes 业务员类型参数错误!");
+        }
+        q.setSystemCode(getUserSystemCode());
+        quotationReportService.salesmanExport(q);
+        return HttpResult.ok("导出任务已提交,请在导出中心查看");
+    }
+
 }

+ 4 - 0
consoleStatistics/src/main/java/com/jzg/console/quotationReport/mapper/QuotationReportMapper.java

@@ -21,4 +21,8 @@ public interface QuotationReportMapper {
     IPage<ReportCompanyQuotationDataDto> companyPage(Page<ReportCompanyQuotationDataDto> p, @Param("q")ReportSearchCommonVo q);
     @IgnoreTenant
     List<ReportCompanyQuotationDataDto> companyExport( @Param("q")ReportSearchCommonVo q);
+    @IgnoreTenant
+    IPage<ReportCompanyQuotationDataDto> salesmanPage(Page<Object> objectPage, ReportSearchCommonVo q);
+    @IgnoreTenant
+    List<ReportCompanyQuotationDataDto> salesmanExport( @Param("q")ReportSearchCommonVo q);
 }

+ 4 - 0
consoleStatistics/src/main/java/com/jzg/console/quotationReport/service/QuotationReportService.java

@@ -18,4 +18,8 @@ public interface QuotationReportService {
     IPage<ReportCompanyQuotationDataDto> companyPage(ReportSearchCommonVo q);
 
     void companyExport(ReportSearchCommonVo q);
+
+    IPage<ReportCompanyQuotationDataDto> salesmanPage(ReportSearchCommonVo q);
+
+    void salesmanExport(ReportSearchCommonVo q);
 }

+ 21 - 0
consoleStatistics/src/main/java/com/jzg/console/quotationReport/service/impl/QuotationReportServiceImpl.java

@@ -13,6 +13,8 @@ import com.jzg.console.quotationReport.service.QuotationReportService;
 import com.jzg.console.service.impl.ReportBaseServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 保险公司业务报表独立实现。
  */
@@ -47,4 +49,23 @@ public class QuotationReportServiceImpl extends ReportBaseServiceImpl implements
     public void  companyExport(ReportSearchCommonVo q) {
         upLoadFile(q, ReportCompanyQuotationDataDto.class, mapper.companyExport(q), "报价数据-保险公司-列表-" + q.getUserId());
     }
+
+    @Override
+    public IPage<ReportCompanyQuotationDataDto> salesmanPage(ReportSearchCommonVo q) {
+        return mapper.salesmanPage(pageOf(q), q);
+    }
+
+    @Override
+    public void salesmanExport(ReportSearchCommonVo q) {
+        List<String> salesmanTypes = q.getSalesmanTypes();
+        String upLoadName = "";
+        if(salesmanTypes.get(0).equals("6")){
+            upLoadName = "业务员";
+        }else if(salesmanTypes.get(0).equals("7")){
+            upLoadName = "渠道";
+        }else if(salesmanTypes.get(0).equals("8")){
+            upLoadName = "电销";
+        }
+        upLoadFile(q, ReportCompanyQuotationDataDto.class, mapper.salesmanExport(q), "报价数据-"+upLoadName+"-列表-" + q.getUserId());
+    }
 }

+ 98 - 0
consoleStatistics/src/main/resources/mapper/QuotationReportMapper.xml

@@ -16,8 +16,14 @@
             left join ins_fee_orders ifo on o.id = ifo.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}
             WHERE o.is_delete = 0
 
+              <if test="q != null and q.salesmanTypes != null and q.salesmanTypes.size() &gt; 0">
+                    AND suji.type_attr IN
+                    <foreach collection="q.salesmanTypes" 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>
@@ -259,4 +265,96 @@
 
 
     </select>
+
+    <select id="salesmanPage" resultType="com.jzg.commons.entity.report.dto.ReportCompanyQuotationDataDto">
+        <include refid="base"/>,
+        company_stat AS (
+        SELECT
+        o.company_id AS companyId,
+        o.company_name AS companyName,
+        COALESCE(a.partner_company_id,'') partnerCompanyId,
+        COALESCE(pc.name_simple,'') partnerCompanyName,
+        COUNT(o.id) AS quoteCountNum,
+        SUM(CASE WHEN o.order_status IN (1,2,3,4,5,7) THEN 1 ELSE 0 END) AS quoteSuccessNum,
+        SUM(CASE WHEN o.order_status = 6 THEN 1 ELSE 0 END) AS quoteFailNum,
+        SUM(CASE WHEN o.quote_time IS NOT NULL THEN CAST(o.quote_time AS DECIMAL(10,2)) ELSE 0 END)  AS total_quote_second,
+        COUNT(CASE WHEN o.quote_time IS NOT NULL THEN 1 END) AS valid_quote_count,
+        SUM(CASE WHEN o.order_status IN (2,3,4,5,7) THEN 1 ELSE 0 END) AS waitAuditNum,
+        SUM(CASE WHEN o.order_status = 3 THEN 1 ELSE 0 END) AS staffProcessNum,
+        SUM(CASE WHEN o.order_status IN (4,5) THEN 1 ELSE 0 END) AS underwritPassNum,
+        SUM(CASE WHEN o.order_status = 7 THEN 1 ELSE 0 END) AS underwritRejectNum,
+        SUM(CASE WHEN o.order_status = 5  THEN 1 ELSE 0 END) AS dealOrderNum,
+        SUM(COUNT(*)) OVER () AS totalQuoteNum
+        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
+        GROUP BY o.company_id, o.company_name,a.partner_company_id,pc.name_simple
+        )
+        SELECT
+        companyId,
+        companyName,
+        partnerCompanyId,
+        partnerCompanyName,
+        quoteCountNum,
+        ROUND(quoteCountNum * 100.0 / totalQuoteNum, 2) AS quoteCountNumProportion,
+        quoteSuccessNum,
+        quoteFailNum,
+        CASE WHEN valid_quote_count = 0 THEN 0.00
+        ELSE ROUND(total_quote_second / valid_quote_count, 2)
+        END AS avgQuoteTime,
+        waitAuditNum,
+        staffProcessNum,
+        underwritPassNum,
+        underwritRejectNum,
+        CASE WHEN waitAuditNum = 0 THEN 0.00 ELSE ROUND(underwritPassNum * 100.0 / waitAuditNum, 2) END AS underwritPassRate,
+        dealOrderNum,
+        CASE WHEN quoteCountNum = 0 THEN 0.00 ELSE ROUND(dealOrderNum * 100.0 / quoteCountNum, 2) END AS conversionRate
+        FROM company_stat
+    </select>
+    <select id="salesmanExport" resultType="com.jzg.commons.entity.report.dto.ReportCompanyQuotationDataDto">
+        <include refid="base"/>,
+        company_stat AS (
+        SELECT
+        o.company_id AS companyId,
+        o.company_name AS companyName,
+        COALESCE(a.partner_company_id,'') partnerCompanyId,
+        COALESCE(pc.name_simple,'') partnerCompanyName,
+        COUNT(o.id) AS quoteCountNum,
+        SUM(CASE WHEN o.order_status IN (1,2,3,4,5,7) THEN 1 ELSE 0 END) AS quoteSuccessNum,
+        SUM(CASE WHEN o.order_status = 6 THEN 1 ELSE 0 END) AS quoteFailNum,
+        SUM(CASE WHEN o.quote_time IS NOT NULL THEN CAST(o.quote_time AS DECIMAL(10,2)) ELSE 0 END)  AS total_quote_second,
+        COUNT(CASE WHEN o.quote_time IS NOT NULL THEN 1 END) AS valid_quote_count,
+        SUM(CASE WHEN o.order_status IN (2,3,4,5,7) THEN 1 ELSE 0 END) AS waitAuditNum,
+        SUM(CASE WHEN o.order_status = 3 THEN 1 ELSE 0 END) AS staffProcessNum,
+        SUM(CASE WHEN o.order_status IN (4,5) THEN 1 ELSE 0 END) AS underwritPassNum,
+        SUM(CASE WHEN o.order_status = 7 THEN 1 ELSE 0 END) AS underwritRejectNum,
+        SUM(CASE WHEN o.order_status = 5  THEN 1 ELSE 0 END) AS dealOrderNum,
+        SUM(COUNT(*)) OVER () AS totalQuoteNum
+        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
+        GROUP BY o.company_id, o.company_name,a.partner_company_id,pc.name_simple
+        )
+        SELECT
+        companyId,
+        companyName,
+        partnerCompanyId,
+        partnerCompanyName,
+        quoteCountNum,
+        ROUND(quoteCountNum * 100.0 / totalQuoteNum, 2) AS quoteCountNumProportion,
+        quoteSuccessNum,
+        quoteFailNum,
+        CASE WHEN valid_quote_count = 0 THEN 0.00
+        ELSE ROUND(total_quote_second / valid_quote_count, 2)
+        END AS avgQuoteTime,
+        waitAuditNum,
+        staffProcessNum,
+        underwritPassNum,
+        underwritRejectNum,
+        CASE WHEN waitAuditNum = 0 THEN 0.00 ELSE ROUND(underwritPassNum * 100.0 / waitAuditNum, 2) END AS underwritPassRate,
+        dealOrderNum,
+        CASE WHEN quoteCountNum = 0 THEN 0.00 ELSE ROUND(dealOrderNum * 100.0 / quoteCountNum, 2) END AS conversionRate
+        FROM company_stat
+    </select>
+
 </mapper>