shudonghui 1 年之前
父节点
当前提交
8cb7f59551

+ 1 - 1
sop-business/src/main/java/com/qmth/sop/business/mapper/CrmAnalyseMapper.java

@@ -52,7 +52,7 @@ public interface CrmAnalyseMapper extends BaseMapper<TBCrm> {
         return crmDetail(iPage, startTime, endTime, null, null, null, null, null, serviceId, dpr);
         return crmDetail(iPage, startTime, endTime, null, null, null, null, null, serviceId, dpr);
     }
     }
 
 
-    List<CrmAnalyseResult> project(@Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("dpr") DataPermissionDto dpr);
+    List<Map<String, Object>> project(@Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("dpr") DataPermissionDto dpr);
 
 
     @SuppressWarnings("MybatisXMapperMethodInspection")
     @SuppressWarnings("MybatisXMapperMethodInspection")
     Map<String, Object> projectCount(@Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("dpr") DataPermissionDto dpr);
     Map<String, Object> projectCount(@Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("dpr") DataPermissionDto dpr);

+ 30 - 5
sop-business/src/main/java/com/qmth/sop/business/service/impl/CrmAnalyseServiceImpl.java

@@ -16,10 +16,7 @@ import com.qmth.sop.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 
 
@@ -104,7 +101,35 @@ public class CrmAnalyseServiceImpl extends ServiceImpl<CrmAnalyseMapper, TBCrm>
     public List<CrmAnalyseResult> project(Long startTime, Long endTime) {
     public List<CrmAnalyseResult> project(Long startTime, Long endTime) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         DataPermissionDto dpr = sysUserService.buildUserDataPermission(requestUser.getId());
         DataPermissionDto dpr = sysUserService.buildUserDataPermission(requestUser.getId());
-        return this.baseMapper.project(startTime, endTime, dpr);
+        List<Map<String, Object>> project = this.baseMapper.project(startTime, endTime, dpr);
+        List<CrmAnalyseResult> list=new ArrayList<>();
+
+        project.stream().collect(Collectors.groupingBy(map -> map.get("name"))).forEach((k, v) -> {
+            CrmAnalyseResult crmAnalyseResult = new CrmAnalyseResult();
+            crmAnalyseResult.setName((String) k);
+            crmAnalyseResult.setId(Long.valueOf(v.get(0).get("id").toString()));
+            int crmNum=v.stream().collect(Collectors.groupingBy(map -> map.get("crm_no"))).size();
+            final int[] finsh = {0};
+            v.stream().collect(Collectors.groupingBy(map -> map.get("crm_no")))
+                    .forEach((k1, v1) -> {
+                        if (v1.stream().filter(map -> map.get("sop_no") != null).count() == v1.stream().filter(map -> "FINISH".equals(map.get("status"))).count()) {
+                            finsh[0] = finsh[0] + 1;
+                        }
+                    });
+            crmAnalyseResult.setRate(finsh[0] *100/crmNum+"%");
+            list.add(crmAnalyseResult);
+        });
+        //list 按字符串Rate升序排列
+        Collections.sort(list, new Comparator<CrmAnalyseResult>() {
+            @Override
+            public int compare(CrmAnalyseResult o1, CrmAnalyseResult o2) {
+                return Double.compare(Double.parseDouble(o1.getRate().replace("%","")),Double.parseDouble(o2.getRate().replace("%","")));
+            }
+        });
+        return list;
+
+
+
     }
     }
 
 
     @Override
     @Override

+ 50 - 17
sop-business/src/main/resources/mapper/CrmAnalyseMapper.xml

@@ -31,7 +31,7 @@
         <!--        r.region_name-->
         <!--        r.region_name-->
         <!--        order by count( c.id )-->
         <!--        order by count( c.id )-->
         SELECT
         SELECT
-<!--        r.id,-->
+        <!--        r.id,-->
         rd.province name,
         rd.province name,
         count(DISTINCT c.id ) count
         count(DISTINCT c.id ) count
         FROM
         FROM
@@ -61,21 +61,57 @@
             </if>
             </if>
         </where>
         </where>
         GROUP BY
         GROUP BY
-<!--        r.id,-->
+        <!--        r.id,-->
         rd.province
         rd.province
         order by count(DISTINCT c.id ) desc
         order by count(DISTINCT c.id ) desc
     </select>
     </select>
-    <select id="project" resultType="com.qmth.sop.business.bean.result.CrmAnalyseResult">
+    <select id="project" resultType="java.util.Map">
+        <!--        SELECT-->
+        <!--        s.id,-->
+        <!--        s.`name`,-->
+        <!--        sum(case when c.`status`='FINISH' then 1 else 0 end)/count( c.id ) count-->
+        <!--        FROM-->
+        <!--        t_b_service s-->
+        <!--        LEFT JOIN t_b_crm c ON c.service_id = s.id-->
+        <!--        LEFT JOIN sys_custom cu ON cu.id = c.custom_id-->
+        <!--        <where>-->
+        <!--            s.`status` IN ( 'PUBLISH', 'FINISH' ) and c.status is not null-->
+        <!--            &lt;!&ndash;            <if test="year != null and year != ''">&ndash;&gt;-->
+        <!--            &lt;!&ndash;                and YEAR ( FROM_UNIXTIME( s.start_time / 1000 ))=  #{year}&ndash;&gt;-->
+        <!--            &lt;!&ndash;            </if>&ndash;&gt;-->
+        <!--            <if test="startTime != null">-->
+        <!--                AND s.start_time <![CDATA[ >= ]]> #{startTime}-->
+        <!--            </if>-->
+        <!--            <if test="endTime != null">-->
+        <!--                AND s.start_time <![CDATA[ <= ]]> #{endTime}-->
+        <!--            </if>-->
+        <!--            <if test="dpr != null and !dpr.hasAdmin and !dpr.hasPmo">-->
+        <!--                <if test="dpr.hasBusiness">-->
+        <!--                    AND s.service_lead_id = #{dpr.requestUserId}-->
+        <!--                </if>-->
+        <!--            </if>-->
+        <!--        </where>-->
+        <!--        GROUP BY-->
+        <!--        s.id,-->
+        <!--        s.`name`-->
+
+
         SELECT
         SELECT
         s.id,
         s.id,
         s.`name`,
         s.`name`,
-        sum(case when c.`status`='FINISH' then 1 else 0 end)/count( c.id ) count
+        c.crm_no,
+        si.sop_no,
+        tffa.`status`
         FROM
         FROM
         t_b_service s
         t_b_service s
         LEFT JOIN t_b_crm c ON c.service_id = s.id
         LEFT JOIN t_b_crm c ON c.service_id = s.id
         LEFT JOIN sys_custom cu ON cu.id = c.custom_id
         LEFT JOIN sys_custom cu ON cu.id = c.custom_id
+        LEFT JOIN t_b_sop_info si ON si.crm_no = c.crm_no
+        LEFT JOIN t_f_custom_flow_entity tfcfe ON tfcfe.CODE = si.sop_no
+        LEFT JOIN t_f_flow_approve tffa ON tffa.flow_id = tfcfe.flow_id
+
         <where>
         <where>
-            s.`status` IN ( 'PUBLISH', 'FINISH' ) and c.status is not null
+            s.`status` IN ( 'PUBLISH', 'FINISH' ) and c.crm_no is not null
             <!--            <if test="year != null and year != ''">-->
             <!--            <if test="year != null and year != ''">-->
             <!--                and YEAR ( FROM_UNIXTIME( s.start_time / 1000 ))=  #{year}-->
             <!--                and YEAR ( FROM_UNIXTIME( s.start_time / 1000 ))=  #{year}-->
             <!--            </if>-->
             <!--            </if>-->
@@ -91,9 +127,6 @@
                 </if>
                 </if>
             </if>
             </if>
         </where>
         </where>
-        GROUP BY
-        s.id,
-        s.`name`
     </select>
     </select>
 
 
     <select id="supplier" resultType="com.qmth.sop.business.bean.result.CrmAnalyseResult">
     <select id="supplier" resultType="com.qmth.sop.business.bean.result.CrmAnalyseResult">
@@ -205,7 +238,7 @@
     <select id="crmDetail" resultType="com.qmth.sop.business.bean.result.TBCrmResult">
     <select id="crmDetail" resultType="com.qmth.sop.business.bean.result.TBCrmResult">
         SELECT
         SELECT
         distinct a.id as crmId,a.crm_no as crmNo,
         distinct a.id as crmId,a.crm_no as crmNo,
-        a.begin_time  as beginTime,
+        a.begin_time as beginTime,
         a.name,
         a.name,
         tbs.id,
         tbs.id,
         tbs.name service,
         tbs.name service,
@@ -218,8 +251,8 @@
         tbs.status serviceUnitStatus,
         tbs.status serviceUnitStatus,
         u.real_name regionCoordinator,
         u.real_name regionCoordinator,
         su.name supplier
         su.name supplier
-        from t_b_service tbs
-        LEFT JOIN  t_b_crm a ON a.service_id = tbs.id
+        from t_b_crm a
+        LEFT JOIN t_b_service tbs ON a.service_id = tbs.id
         left join t_b_service_region r on r.service_id=tbs.id
         left join t_b_service_region r on r.service_id=tbs.id
         left join t_b_service_region_detail rd on rd.service_region_id=r.id
         left join t_b_service_region_detail rd on rd.service_region_id=r.id
         LEFT JOIN t_b_product p ON p.id = a.product_id
         LEFT JOIN t_b_product p ON p.id = a.product_id
@@ -236,9 +269,9 @@
             <if test="serviceId != null and serviceId != ''">
             <if test="serviceId != null and serviceId != ''">
                 and a.service_id = #{serviceId}
                 and a.service_id = #{serviceId}
             </if>
             </if>
-<!--            <if test="regionId != null and regionId != ''">-->
-<!--                and r.id = #{regionId}-->
-<!--            </if>-->
+            <!--            <if test="regionId != null and regionId != ''">-->
+            <!--                and r.id = #{regionId}-->
+            <!--            </if>-->
             <if test="province != null and province != ''">
             <if test="province != null and province != ''">
                 and tbs.`status`='PUBLISH' and a.service_id is not null and r.id is not null
                 and tbs.`status`='PUBLISH' and a.service_id is not null and r.id is not null
                 and rd.province = #{province}
                 and rd.province = #{province}
@@ -249,9 +282,9 @@
             <if test="supplierId != null and supplierId != ''">
             <if test="supplierId != null and supplierId != ''">
                 and su.id = #{supplierId}
                 and su.id = #{supplierId}
             </if>
             </if>
-<!--            <if test="supplierId == null or supplierId = ''">-->
-<!--                and su.id is null-->
-<!--            </if>-->
+            <!--            <if test="supplierId == null or supplierId = ''">-->
+            <!--                and su.id is null-->
+            <!--            </if>-->
             <!--            <if test="year != null and year != ''">-->
             <!--            <if test="year != null and year != ''">-->
             <!--                and YEAR ( FROM_UNIXTIME( tbs.start_time / 1000 ))=  #{year}-->
             <!--                and YEAR ( FROM_UNIXTIME( tbs.start_time / 1000 ))=  #{year}-->
             <!--            </if>-->
             <!--            </if>-->