|
@@ -0,0 +1,299 @@
|
|
|
|
+<?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.qmth.sop.business.mapper.ServiceAnalyseMapper">
|
|
|
|
+ <select id="list" resultType="com.qmth.sop.business.entity.TBService">
|
|
|
|
+ select * from t_b_service s
|
|
|
|
+ <where>
|
|
|
|
+ and s.status in ('PUBLISH','FINISH')
|
|
|
|
+
|
|
|
|
+ <if test="year != null and year != ''">
|
|
|
|
+ and YEAR ( FROM_UNIXTIME( s.start_time / 1000 ))= #{year}
|
|
|
|
+ </if>
|
|
|
|
+
|
|
|
|
+ </where>
|
|
|
|
+ order by s.start_time desc
|
|
|
|
+ </select>
|
|
|
|
+ <select id="equipmentOutboundTotal" resultType="java.lang.Integer">
|
|
|
|
+ SELECT
|
|
|
|
+ sum(case when d.bound='OUT' then 1 else 0 end ) OUTS
|
|
|
|
+ FROM
|
|
|
|
+ t_b_service s
|
|
|
|
+ LEFT JOIN t_b_crm c ON c.service_id = s.id
|
|
|
|
+ left join t_b_device_in_out io on io.service_id=s.id
|
|
|
|
+ left join sys_device d on d.device_code=io.device_no
|
|
|
|
+ <where>
|
|
|
|
+ <if test="serviceUnitId != null and serviceUnitId != ''">
|
|
|
|
+ and s.id = #{serviceUnitId}
|
|
|
|
+ </if>
|
|
|
|
+ </where>
|
|
|
|
+ </select>
|
|
|
|
+ <select id="projectProgress" resultType="java.lang.Long">
|
|
|
|
+ SELECT
|
|
|
|
+ sum(case when c.`status`='FINISH' then 1 else 0 end)*100/count(c.id)
|
|
|
|
+ FROM
|
|
|
|
+ t_b_service s
|
|
|
|
+ LEFT JOIN t_b_crm c ON c.service_id = s.id
|
|
|
|
+ <where>
|
|
|
|
+
|
|
|
|
+ <if test="serviceUnitId != null and serviceUnitId != ''">
|
|
|
|
+ and s.id = #{serviceUnitId}
|
|
|
|
+ </if>
|
|
|
|
+
|
|
|
|
+ </where>
|
|
|
|
+ </select>
|
|
|
|
+ <select id="servicePersonnelTotal" resultType="java.lang.Integer">
|
|
|
|
+ SELECT
|
|
|
|
+ count( sd.region_user_id )+
|
|
|
|
+ count( sd.engineer_user_id )+
|
|
|
|
+ SUM( length( sd.assistant_engineer_user_ids )- length( REPLACE ( sd.assistant_engineer_user_ids, ',', '' ))+ 1 )
|
|
|
|
+ FROM
|
|
|
|
+ t_b_service s
|
|
|
|
+ LEFT JOIN t_b_sop_info sop ON sop.service_id = s.id
|
|
|
|
+ LEFT JOIN t_b_sop_info_detail sd ON sd.sop_info_id = sop.id
|
|
|
|
+ <where>
|
|
|
|
+
|
|
|
|
+ <if test="serviceUnitId != null and serviceUnitId != ''">
|
|
|
|
+ and s.id = #{serviceUnitId}
|
|
|
|
+ </if>
|
|
|
|
+
|
|
|
|
+ </where>
|
|
|
|
+ </select>
|
|
|
|
+ <select id="projectCount" resultType="java.lang.Integer">
|
|
|
|
+ SELECT
|
|
|
|
+ count( c.id )
|
|
|
|
+ FROM
|
|
|
|
+ t_b_service s
|
|
|
|
+ LEFT JOIN t_b_crm c ON c.service_id = s.id
|
|
|
|
+ <where>
|
|
|
|
+ and c.region_coordinator_id is not null
|
|
|
|
+ <if test="serviceUnitId != null and serviceUnitId != ''">
|
|
|
|
+ and s.id = #{serviceUnitId}
|
|
|
|
+ </if>
|
|
|
|
+
|
|
|
|
+ </where>
|
|
|
|
+ </select>
|
|
|
|
+ <select id="supplierDistribution" resultType="java.util.Map">
|
|
|
|
+ SELECT
|
|
|
|
+ su.id,
|
|
|
|
+ su.`name`,
|
|
|
|
+ count(DISTINCT c.id ) count
|
|
|
|
+ FROM
|
|
|
|
+ t_b_user_archives_allocation aa
|
|
|
|
+ LEFT JOIN t_b_crm c ON c.service_id = aa.service_id
|
|
|
|
+ LEFT JOIN t_b_user_archives_supplier uas ON uas.user_archives_id = aa.archives_id
|
|
|
|
+ LEFT JOIN sys_supplier su ON su.id = uas.supplier_id
|
|
|
|
+ <where>
|
|
|
|
+
|
|
|
|
+ <if test="serviceUnitId != null and serviceUnitId != ''">
|
|
|
|
+ and aa.service_id = #{serviceUnitId}
|
|
|
|
+ </if>
|
|
|
|
+ </where>
|
|
|
|
+ GROUP BY
|
|
|
|
+ su.id,
|
|
|
|
+ su.`name`
|
|
|
|
+ </select>
|
|
|
|
+ <select id="crmDetail" resultType="com.qmth.sop.business.bean.result.TBCrmResult">
|
|
|
|
+ SELECT
|
|
|
|
+ a.*,
|
|
|
|
+ tbs.name service,
|
|
|
|
+ cru.real_name crm_user_name,
|
|
|
|
+ sc.NAME custom,
|
|
|
|
+ sc.type custom_type,
|
|
|
|
+ p.name product,
|
|
|
|
+ lu.real_name leadName,
|
|
|
|
+ cu.real_name createName,
|
|
|
|
+ tbs.status serviceUnitStatus,
|
|
|
|
+ u.real_name regionCoordinator,
|
|
|
|
+ su.name supplier
|
|
|
|
+ FROM
|
|
|
|
+ t_b_crm a
|
|
|
|
+ LEFT JOIN sys_user cru ON cru.id = a.crm_user_id
|
|
|
|
+ LEFT JOIN sys_user lu ON lu.id = a.lead_id
|
|
|
|
+ LEFT JOIN sys_user cu ON cu.id = a.create_id
|
|
|
|
+ LEFT JOIN t_b_product p ON p.id = a.product_id
|
|
|
|
+ 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 sys_custom sc ON sc.id = a.custom_id
|
|
|
|
+
|
|
|
|
+ LEFT JOIN sys_user u ON u.id = a.region_coordinator_id
|
|
|
|
+ LEFT JOIN t_b_user_archives ua ON u.mobile_number = ua.mobile_number
|
|
|
|
+ LEFT JOIN t_b_user_archives_supplier us ON us.user_archives_id = ua.id
|
|
|
|
+ LEFT JOIN sys_supplier su ON su.id = us.supplier_id
|
|
|
|
+ <where>
|
|
|
|
+ <if test="serviceUnitId != null and serviceUnitId != ''">
|
|
|
|
+ and a.service_id = #{serviceUnitId}
|
|
|
|
+ </if>
|
|
|
|
+
|
|
|
|
+ <if test="supplierId != null and supplierId != ''">
|
|
|
|
+ and su.id = #{supplierId}
|
|
|
|
+ </if>
|
|
|
|
+ </where>
|
|
|
|
+
|
|
|
|
+ ORDER BY
|
|
|
|
+ a.create_time DESC
|
|
|
|
+ </select>
|
|
|
|
+ <select id="supplierRole" resultType="java.util.Map">
|
|
|
|
+ SELECT
|
|
|
|
+ r.NAME,
|
|
|
|
+ count( DISTINCT ua.archives_id ) count
|
|
|
|
+ FROM
|
|
|
|
+ t_b_user_archives_allocation ua
|
|
|
|
+ LEFT JOIN sys_role r ON r.id = ua.role_id
|
|
|
|
+ LEFT JOIN t_b_user_archives_supplier us ON us.user_archives_id = ua.archives_id
|
|
|
|
+ <where>
|
|
|
|
+ and us.authentication_valid_time > UNIX_TIMESTAMP()* 1000
|
|
|
|
+ <if test="supplierId != null and supplierId != ''">
|
|
|
|
+ and us.supplier_id = #{supplierId}
|
|
|
|
+ </if>
|
|
|
|
+ </where>
|
|
|
|
+ GROUP BY
|
|
|
|
+ r.NAME
|
|
|
|
+ </select>
|
|
|
|
+ <select id="supplierRegion" resultType="java.util.Map">
|
|
|
|
+ SELECT DISTINCT
|
|
|
|
+ rd.province
|
|
|
|
+ FROM
|
|
|
|
+ t_b_crm c
|
|
|
|
+ LEFT JOIN t_b_service_region sr ON c.service_id = sr.service_id
|
|
|
|
+ LEFT JOIN t_b_service_region_detail rd ON rd.service_region_id = sr.id
|
|
|
|
+ LEFT JOIN t_b_user_archives_allocation ua ON ua.user_id = c.region_coordinator_id
|
|
|
|
+ LEFT JOIN t_b_user_archives_supplier us ON us.user_archives_id = ua.archives_id
|
|
|
|
+ <where>
|
|
|
|
+ and rd.id IS NOT NULL
|
|
|
|
+ <if test="serviceUnitId != null and serviceUnitId != ''">
|
|
|
|
+ and c.service_id = #{serviceUnitId}
|
|
|
|
+ </if>
|
|
|
|
+ <if test="supplierId != null and supplierId != ''">
|
|
|
|
+ and us.supplier_id = #{supplierId}
|
|
|
|
+ </if>
|
|
|
|
+ </where>
|
|
|
|
+ </select>
|
|
|
|
+ <select id="findCrmAllocation"
|
|
|
|
+ resultType="com.qmth.sop.business.bean.result.UserArchivesAllocationResult">
|
|
|
|
+ SELECT
|
|
|
|
+ *,
|
|
|
|
+ (result.effectQuota + result.assistantQuota + result.coordinatorQuota) AS quota,
|
|
|
|
+ (result.coordinatorUnDistributed + result.effectUnDistributed + result.assistantUnDistributed) AS unDistributed
|
|
|
|
+ FROM
|
|
|
|
+ (SELECT
|
|
|
|
+ tbs.id AS serviceUnitId,
|
|
|
|
+ tbs.name AS serviceUnitName,
|
|
|
|
+ tbc.id AS crmId,
|
|
|
|
+ tbc.crm_no AS crmNo,
|
|
|
|
+ su.id AS customId,
|
|
|
|
+ su.name AS customName,
|
|
|
|
+ su.type AS customType,
|
|
|
|
+ su.province AS province,
|
|
|
|
+ su.city AS city,
|
|
|
|
+ su.area AS area,
|
|
|
|
+ sl.id AS levelId,
|
|
|
|
+ sl.level AS level,
|
|
|
|
+ 1 AS coordinatorQuota,
|
|
|
|
+ IFNULL(effectQ.quota, 0) AS effectQuota,
|
|
|
|
+ IFNULL(assistantQ.quota, 0) AS assistantQuota,
|
|
|
|
+ IF(tbc.region_coordinator_id IS NULL, 0, 1) AS coordinatorDistributed,
|
|
|
|
+ IFNULL(effectR.reality, 0) AS effectDistributed,
|
|
|
|
+ IFNULL(assistantR.reality, 0) AS assistantDistributed,
|
|
|
|
+ IF(tbc.region_coordinator_id IS NULL, 0, 1) + IFNULL(effectR.reality, 0) + IFNULL(assistantR.reality, 0) AS distributed,
|
|
|
|
+ IF(tbc.region_coordinator_id IS NULL, 1, 0) AS coordinatorUnDistributed,
|
|
|
|
+ IF(IFNULL(effectQ.quota, 0) - IFNULL(effectR.reality, 0) < 0, 0, IFNULL(effectQ.quota, 0) - IFNULL(effectR.reality, 0)) AS effectUnDistributed,
|
|
|
|
+ IF(IFNULL(assistantQ.quota, 0) - IFNULL(assistantR.reality, 0) < 0, 0, IFNULL(assistantQ.quota, 0) - IFNULL(assistantR.reality, 0)) AS assistantUnDistributed,
|
|
|
|
+ tbc.status AS crmStatus,
|
|
|
|
+ tbs.service_lead_id AS serviceUnitLeaderId,
|
|
|
|
+ tbc.lead_id AS regionManagerId,
|
|
|
|
+ rm.real_name AS regionManagerName,
|
|
|
|
+ pu.real_name AS publishUserName,
|
|
|
|
+ tbc.publish_time AS publishTime,
|
|
|
|
+ us.supplier_id
|
|
|
|
+ FROM
|
|
|
|
+ t_b_crm tbc
|
|
|
|
+ LEFT JOIN t_b_user_archives_allocation ua ON ua.user_id = tbc.region_coordinator_id
|
|
|
|
+ LEFT JOIN t_b_user_archives_supplier us ON us.user_archives_id = ua.archives_id
|
|
|
|
+ LEFT JOIN t_b_service tbs ON tbc.service_id = tbs.id
|
|
|
|
+ LEFT JOIN sys_custom su ON tbc.custom_id = su.id
|
|
|
|
+ LEFT JOIN sys_level sl ON su.level_id = sl.id
|
|
|
|
+ LEFT JOIN sys_user pu ON tbc.publish_user_id = pu.id
|
|
|
|
+ LEFT JOIN sys_user rm ON tbc.lead_id = rm.id
|
|
|
|
+ LEFT JOIN (SELECT
|
|
|
|
+ slr.quota, slr.level_id
|
|
|
|
+ FROM
|
|
|
|
+ sys_level_role slr
|
|
|
|
+ LEFT JOIN sys_role sr ON sr.id = slr.role_id
|
|
|
|
+ WHERE
|
|
|
|
+ sr.type = 'EFFECT_ENGINEER') effectQ ON effectQ.level_id = sl.id
|
|
|
|
+ LEFT JOIN (SELECT
|
|
|
|
+ slr.quota, slr.level_id
|
|
|
|
+ FROM
|
|
|
|
+ sys_level_role slr
|
|
|
|
+ LEFT JOIN sys_role sr ON sr.id = slr.role_id
|
|
|
|
+ WHERE
|
|
|
|
+ sr.type = 'ASSISTANT_ENGINEER') assistantQ ON assistantQ.level_id = sl.id
|
|
|
|
+ LEFT JOIN (SELECT
|
|
|
|
+ tbuaa.crm_no, COUNT(*) AS reality
|
|
|
|
+ FROM
|
|
|
|
+ t_b_user_archives_allocation tbuaa
|
|
|
|
+ LEFT JOIN sys_role sr ON sr.id = tbuaa.role_id
|
|
|
|
+ WHERE
|
|
|
|
+ sr.type = 'EFFECT_ENGINEER'
|
|
|
|
+ GROUP BY tbuaa.crm_no) effectR ON effectR.crm_no = tbc.crm_no
|
|
|
|
+ LEFT JOIN (SELECT
|
|
|
|
+ tbuaa.crm_no, COUNT(*) AS reality
|
|
|
|
+ FROM
|
|
|
|
+ t_b_user_archives_allocation tbuaa
|
|
|
|
+ LEFT JOIN sys_role sr ON sr.id = tbuaa.role_id
|
|
|
|
+ WHERE
|
|
|
|
+ sr.type = 'ASSISTANT_ENGINEER'
|
|
|
|
+ GROUP BY tbuaa.crm_no) assistantR ON assistantR.crm_no = tbc.crm_no ) result
|
|
|
|
+ <where>
|
|
|
|
+ <if test="serviceUnitId != null">
|
|
|
|
+ AND result.serviceUnitId = #{serviceUnitId}
|
|
|
|
+ </if>
|
|
|
|
+ <if test="province != null and province != ''">
|
|
|
|
+ AND result.province LIKE CONCAT('%',#{province},'%')
|
|
|
|
+ </if>
|
|
|
|
+ <if test="supplierId != null and supplierId != ''">
|
|
|
|
+ AND result.supplier_id = #{supplierId}
|
|
|
|
+ </if>
|
|
|
|
+ </where>
|
|
|
|
+ ORDER BY result.serviceUnitId DESC, result.crmId DESC
|
|
|
|
+ </select>
|
|
|
|
+ <select id="device" resultType="java.util.Map">
|
|
|
|
+ SELECT
|
|
|
|
+ su.`name` NAME,
|
|
|
|
+ sum( CASE WHEN d.bound = 'OUT' THEN 1 ELSE 0 END )/ sum( CASE WHEN d.`status` = 'NORMAL' THEN 1 ELSE 0 END ) percent
|
|
|
|
+ FROM
|
|
|
|
+ t_b_service s
|
|
|
|
+ LEFT JOIN t_b_device_in_out io ON io.service_id = s.id
|
|
|
|
+ LEFT JOIN sys_device d ON d.device_code = io.device_no
|
|
|
|
+ LEFT JOIN sys_supplier su ON su.id = d.supplier_id
|
|
|
|
+ <where>
|
|
|
|
+ and io.id IS NOT NULL
|
|
|
|
+ <if test="serviceUnitId != null and serviceUnitId != ''">
|
|
|
|
+ and s.id = #{serviceUnitId}
|
|
|
|
+ </if>
|
|
|
|
+ </where>
|
|
|
|
+ GROUP BY
|
|
|
|
+ su.`name`
|
|
|
|
+ </select>
|
|
|
|
+ <select id="personnel" resultType="java.util.Map">
|
|
|
|
+ SELECT
|
|
|
|
+ su.`name`,
|
|
|
|
+ sc.province,
|
|
|
|
+ count( DISTINCT aa.id ) count
|
|
|
|
+ FROM
|
|
|
|
+ t_b_user_archives_allocation aa
|
|
|
|
+ LEFT JOIN t_b_crm c ON c.service_id = aa.service_id
|
|
|
|
+ LEFT JOIN sys_custom sc ON c.custom_id = sc.id
|
|
|
|
+ LEFT JOIN t_b_user_archives_supplier uas ON uas.user_archives_id = aa.archives_id
|
|
|
|
+ LEFT JOIN sys_supplier su ON su.id = uas.supplier_id
|
|
|
|
+ <where>
|
|
|
|
+ <if test="serviceUnitId != null and serviceUnitId != ''">
|
|
|
|
+ and aa.service_id = #{serviceUnitId}
|
|
|
|
+ </if>
|
|
|
|
+ </where>
|
|
|
|
+ GROUP BY
|
|
|
|
+ su.`name`,
|
|
|
|
+ sc.province
|
|
|
|
+
|
|
|
|
+ </select>
|
|
|
|
+</mapper>
|