haogh 8 月之前
父节点
当前提交
b803effbfa

+ 13 - 7
sop-business/src/main/java/com/qmth/sop/business/service/impl/SopWarnMonitorServiceImpl.java

@@ -58,8 +58,10 @@ public class SopWarnMonitorServiceImpl extends ServiceImpl<SopWarnMonitorMapper,
                 result.setSupplierId(Long.parseLong(leadList.get(0).toString()));
                 result.setSupplierName(leadList.get(1).toString());
             } else {
-                result.setCoordinatorId(Long.parseLong(leadList.get(0).toString()));
-                result.setCoordinatorName(leadList.get(1).toString());
+                if (leadList.get(0) != null) {
+                    result.setCoordinatorId(Long.parseLong(leadList.get(0).toString()));
+                    result.setCoordinatorName(leadList.get(1).toString());
+                }
             }
 
             result.setTotal(detailList.size());
@@ -68,7 +70,7 @@ public class SopWarnMonitorServiceImpl extends ServiceImpl<SopWarnMonitorMapper,
 
         //设置预警数量和占比
         for (SopWarnMonitorResult result : resultList) {
-            List<SopWarnMonitorDetailResult> filterWarnList;
+            List<SopWarnMonitorDetailResult> filterWarnList = new ArrayList<>();
 
             if (type.equals(CrmProgressMonitorEnum.BY_LEAD)) {
                 filterWarnList = warnDetailList.stream()
@@ -79,9 +81,11 @@ public class SopWarnMonitorServiceImpl extends ServiceImpl<SopWarnMonitorMapper,
                         .filter(item -> item.getSupplierId().equals(result.getSupplierId()))
                         .collect(Collectors.toList());
             } else {
-                filterWarnList = warnDetailList.stream()
-                        .filter(item -> item.getCoordinatorId().equals(result.getCoordinatorId()))
-                        .collect(Collectors.toList());
+                if(result.getCoordinatorId() != null) {
+                    filterWarnList = warnDetailList.stream()
+                            .filter(item -> item.getCoordinatorId().equals(result.getCoordinatorId()))
+                            .collect(Collectors.toList());
+                }
             }
             getWarnFieldNum(result, filterWarnList);
         }
@@ -125,6 +129,8 @@ public class SopWarnMonitorServiceImpl extends ServiceImpl<SopWarnMonitorMapper,
     }
 
     private void getWarnFieldNum(SopWarnMonitorResult result, List<SopWarnMonitorDetailResult> filterWarnList) {
+        if (CollectionUtils.isEmpty(filterWarnList))
+            return;
         //按照预警字段分组,统计数量
         Map<String, List<SopWarnMonitorDetailResult>> map = filterWarnList.stream().collect(Collectors.groupingBy(SopWarnMonitorDetailResult::getFieldObj));
         for (WarnFieldEnum field : WarnFieldEnum.values()) {
@@ -161,7 +167,7 @@ public class SopWarnMonitorServiceImpl extends ServiceImpl<SopWarnMonitorMapper,
     }
 
     private String getRatio(BigDecimal total, BigDecimal num) {
-        String ratio = "";
+        String ratio = "0.00%";
         //计算占比
         if (total.intValue() != 0 && num.intValue() != 0) {
             num = num.divide(total, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));

+ 48 - 22
sop-business/src/main/resources/mapper/SopWarnMonitorMapper.xml

@@ -4,16 +4,26 @@
 
     <select id="listDelayWarn" resultType="com.qmth.sop.business.bean.result.SopWarnMonitorDetailResult">
         SELECT
-        tbdw.crm_no AS crmNo,
         tbdw.sop_no AS sopNo,
         tbdw.field_obj AS fieldObj,
-        tbc.lead_id AS leadId,
-        su.real_name AS leadName
+        res.lead_id AS leadId,
+        res.real_name AS leadName
         FROM
         t_b_delay_warn tbdw
-        LEFT JOIN t_b_crm tbc ON tbdw.crm_no = tbc.crm_no
-        INNER JOIN t_b_crm_detail tbcd on tbcd.crm_no = tbdw.crm_no and tbcd.sop_no = tbdw.sop_no
-        LEFT JOIN sys_user su ON su.id = tbc.lead_id
+        LEFT JOIN (
+        SELECT
+        tbsi.sop_no,
+        tbc.lead_id,
+        su.real_name
+        FROM
+        t_b_sop_info tbsi,
+        t_b_crm tbc,
+        sys_user su
+        WHERE
+        tbsi.crm_no = tbc.crm_no
+        AND su.id = tbc.lead_id
+        AND tbsi.service_id = #{serviceUnitId}
+        ) res ON tbdw.sop_no = res.sop_no
         WHERE
         tbdw.service_id = #{serviceUnitId}
         <if test="warnFieldList != null and warnFieldList.size() > 0">
@@ -24,24 +34,40 @@
         </if>
     </select>
     <select id="listDelayWarnByUserRole" resultType="com.qmth.sop.business.bean.result.SopWarnMonitorDetailResult">
-        SELECT  tbdw.crm_no AS crmNo,
+        SELECT
         tbdw.sop_no AS sopNo,
         tbdw.field_obj AS fieldObj,
-        ss.id AS supplierId,
-        ss.NAME AS supplierName,
-        tbaa.user_id AS coordinatorId,
-        su.real_name AS coordinatorName
-        FROM t_b_delay_warn tbdw
-        LEFT JOIN t_b_crm tbc ON tbc.crm_no = tbdw.crm_no
-        LEFT JOIN t_b_crm_detail tbcd ON tbcd.crm_no = tbc.crm_no AND tbcd.sop_no = tbdw.sop_no
-        LEFT JOIN t_b_user_archives_allocation tbaa ON tbaa.crm_detail_id = tbcd.id AND tbdw.user_id = tbaa.user_id
-        LEFT JOIN t_b_user_archives_supplier tbusa ON tbusa.user_archives_id = tbaa.archives_id
-        LEFT JOIN sys_supplier ss ON ss.id = tbusa.supplier_id
-        LEFT JOIN sys_user su ON su.id = tbaa.user_id
-        WHERE tbdw.service_id = #{serviceUnitId}
-        <if test="sopRoleType != null">
-            AND tbaa.sop_role_type = #{sopRoleType}
-        </if>
+        res.user_id AS coordinatorId,
+        res.real_name AS coordinatorName,
+        res.id AS supplierId,
+        res.NAME AS supplierName
+        FROM
+        t_b_delay_warn tbdw
+        INNER JOIN (
+        SELECT
+        tbcd.sop_no,
+        tbuaa.user_id,
+        su.real_name,
+        ss.id,
+        ss.NAME
+        FROM
+        t_b_crm tbc,
+        t_b_crm_detail tbcd,
+        t_b_user_archives_allocation tbuaa,
+        sys_user su,
+        t_b_user_archives_supplier tbusa,
+        sys_supplier ss
+        WHERE
+        tbc.crm_no = tbcd.crm_no
+        AND tbcd.id = tbuaa.crm_detail_id
+        AND su.id = tbuaa.user_id
+        AND tbusa.user_archives_id = tbuaa.archives_id
+        AND ss.id = tbusa.supplier_id
+        AND tbc.service_id = #{serviceUnitId}
+        AND tbuaa.sop_role_type = #{sopRoleType}
+        ) res ON tbdw.sop_no = res.sop_no
+        WHERE
+        tbdw.service_id = #{serviceUnitId}
         <if test="warnFieldList != null and warnFieldList.size() > 0">
             AND tbdw.field_obj IN
             <foreach collection="warnFieldList" item="item" index="index" separator="," open="(" close=")">