2025-10-17 14:38:57 +08:00
|
|
|
|
<?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.securitycontrol.screen.mapper.OverallEfficiencyAnalysisMapper">
|
|
|
|
|
|
|
|
|
|
|
|
<select id="selectOverallEfficiencyData" resultType="com.securitycontrol.screen.domain.OverallEfficiency">
|
|
|
|
|
|
select weather,count(id) as 'day'
|
|
|
|
|
|
from sj_efficiency_analysis
|
|
|
|
|
|
where create_time between #{startTime} and #{endTime}
|
|
|
|
|
|
GROUP BY weather
|
|
|
|
|
|
</select>
|
|
|
|
|
|
<select id="getPlanDay" resultType="com.securitycontrol.screen.domain.OverallEfficiency">
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
SUM(
|
|
|
|
|
|
DATEDIFF(LEAST(plan_end_time, #{endTime}), GREATEST(plan_start_time, #{startTime})) + 1
|
2025-10-18 17:01:27 +08:00
|
|
|
|
) AS planDay,
|
2025-10-17 14:38:57 +08:00
|
|
|
|
SUM(
|
|
|
|
|
|
CASE
|
|
|
|
|
|
WHEN start_time IS NOT NULL AND end_time IS NOT NULL THEN
|
|
|
|
|
|
GREATEST(
|
|
|
|
|
|
0,
|
|
|
|
|
|
DATEDIFF(
|
|
|
|
|
|
LEAST(end_time, #{endTime}),
|
|
|
|
|
|
GREATEST(start_time, #{startTime})
|
|
|
|
|
|
) + 1
|
|
|
|
|
|
)
|
|
|
|
|
|
ELSE 0
|
|
|
|
|
|
END
|
2025-10-18 17:01:27 +08:00
|
|
|
|
) AS effectiveDay
|
2025-10-17 14:38:57 +08:00
|
|
|
|
FROM
|
|
|
|
|
|
sj_construction_progress
|
|
|
|
|
|
WHERE
|
|
|
|
|
|
( #{endTime} >= plan_start_time AND plan_end_time >= #{startTime})
|
|
|
|
|
|
OR
|
|
|
|
|
|
(start_time IS NOT NULL AND end_time IS NOT NULL AND #{endTime} >= start_time AND end_time >= #{startTime});
|
|
|
|
|
|
</select>
|
|
|
|
|
|
<select id="getSjProjectQuality" resultType="com.securitycontrol.entity.background.vo.SjProjectQualityVo">
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
-- 总验收项合计(需排除空值,避免计算错误)
|
|
|
|
|
|
SUM(CASE WHEN total_item != '' THEN CAST(total_item AS UNSIGNED) ELSE 0 END) AS totalItem,
|
|
|
|
|
|
|
|
|
|
|
|
-- 已验收项合计(同样处理空值)
|
|
|
|
|
|
SUM(CASE WHEN accept_item != '' THEN CAST(accept_item AS UNSIGNED) ELSE 0 END) AS acceptItem,
|
|
|
|
|
|
|
|
|
|
|
|
-- 整体验收率(保留2位小数,避免除数为0)
|
|
|
|
|
|
CASE
|
|
|
|
|
|
WHEN SUM(CASE WHEN total_item != '' THEN CAST(total_item AS UNSIGNED) ELSE 0 END) = 0 THEN 0
|
|
|
|
|
|
ELSE ROUND(
|
|
|
|
|
|
SUM(CASE WHEN accept_item != '' THEN CAST(accept_item AS UNSIGNED) ELSE 0 END)
|
|
|
|
|
|
/ SUM(CASE WHEN total_item != '' THEN CAST(total_item AS UNSIGNED) ELSE 0 END)
|
|
|
|
|
|
* 100,
|
|
|
|
|
|
2
|
|
|
|
|
|
)
|
|
|
|
|
|
END AS acceptRate,
|
|
|
|
|
|
|
|
|
|
|
|
-- 主设备试验调试一次通过总数
|
|
|
|
|
|
SUM(CASE WHEN main_one_accept_num != '' THEN CAST(main_one_accept_num AS UNSIGNED) ELSE 0 END) AS mainOneAcceptNum,
|
|
|
|
|
|
|
|
|
|
|
|
-- 主设备试验调试通过总数
|
|
|
|
|
|
SUM(CASE WHEN main_accept_num != '' THEN CAST(main_accept_num AS UNSIGNED) ELSE 0 END) AS mainAcceptNum,
|
|
|
|
|
|
|
|
|
|
|
|
-- 主设备试验调试一次通过率(保留2位小数,避免除数为0)
|
|
|
|
|
|
CASE
|
|
|
|
|
|
WHEN SUM(CASE WHEN main_accept_num != '' THEN CAST(main_accept_num AS UNSIGNED) ELSE 0 END) = 0 THEN 0
|
|
|
|
|
|
ELSE ROUND(
|
|
|
|
|
|
SUM(CASE WHEN main_one_accept_num != '' THEN CAST(main_one_accept_num AS UNSIGNED) ELSE 0 END)
|
|
|
|
|
|
/ SUM(CASE WHEN main_accept_num != '' THEN CAST(main_accept_num AS UNSIGNED) ELSE 0 END)
|
|
|
|
|
|
* 100,
|
|
|
|
|
|
2
|
|
|
|
|
|
)
|
|
|
|
|
|
END AS mainAcceptRate
|
|
|
|
|
|
FROM
|
|
|
|
|
|
sj_project_quality;
|
|
|
|
|
|
</select>
|
|
|
|
|
|
<select id="getSjProjectSafety" resultType="com.securitycontrol.screen.domain.SjProjectSafety">
|
|
|
|
|
|
select name,count(id) as num
|
|
|
|
|
|
from sj_video_safety
|
|
|
|
|
|
where create_time between #{startTime} and #{endTime}
|
|
|
|
|
|
GROUP BY name
|
|
|
|
|
|
</select>
|
|
|
|
|
|
<select id="getProgress" resultType="com.securitycontrol.screen.domain.OverallEfficiency">
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
-- 计划进度:查询区间内的计划工作天数占总天数的百分比
|
|
|
|
|
|
ROUND(
|
|
|
|
|
|
SUM(
|
|
|
|
|
|
GREATEST(
|
|
|
|
|
|
0,
|
|
|
|
|
|
DATEDIFF(
|
|
|
|
|
|
LEAST(plan_end_time, #{startTime}),
|
|
|
|
|
|
GREATEST(plan_start_time, #{startTime})
|
|
|
|
|
|
) + 1
|
|
|
|
|
|
)
|
|
|
|
|
|
) / sum(NULLIF(DATEDIFF(plan_end_time, plan_start_time) + 1, 0)) * 100,
|
|
|
|
|
|
2
|
|
|
|
|
|
) AS planProgress,
|
|
|
|
|
|
|
|
|
|
|
|
-- 实际进度:查询区间内的实际工作天数占总天数的百分比
|
|
|
|
|
|
ROUND(
|
|
|
|
|
|
SUM(
|
|
|
|
|
|
CASE
|
|
|
|
|
|
-- 已完成工序:取实际时间与查询区间的交集天数
|
|
|
|
|
|
WHEN start_time IS NOT NULL AND end_time IS NOT NULL THEN
|
|
|
|
|
|
GREATEST(
|
|
|
|
|
|
0,
|
|
|
|
|
|
DATEDIFF(
|
|
|
|
|
|
LEAST(end_time, #{startTime}),
|
|
|
|
|
|
GREATEST(start_time, #{startTime})
|
|
|
|
|
|
) + 1
|
|
|
|
|
|
)
|
|
|
|
|
|
-- 进行中工序:从实际开始到查询结束的天数
|
|
|
|
|
|
WHEN start_time IS NOT NULL AND end_time IS NULL AND #{startTime} >=start_time THEN
|
|
|
|
|
|
GREATEST(
|
|
|
|
|
|
0,
|
|
|
|
|
|
DATEDIFF(#{startTime}, GREATEST(start_time, #{startTime})) + 1
|
|
|
|
|
|
)
|
|
|
|
|
|
-- 未开始或不相关工序:计为0
|
|
|
|
|
|
ELSE 0
|
|
|
|
|
|
END
|
|
|
|
|
|
) / sum(NULLIF(DATEDIFF(end_time, start_time) + 1, 0)) * 100,
|
|
|
|
|
|
2
|
|
|
|
|
|
) AS currentProgress,
|
|
|
|
|
|
|
|
|
|
|
|
-- 进度偏差:实际进度 - 计划进度(正数表示超前,负数表示滞后)
|
|
|
|
|
|
ROUND(
|
|
|
|
|
|
(
|
|
|
|
|
|
SUM(
|
|
|
|
|
|
CASE
|
|
|
|
|
|
WHEN start_time IS NOT NULL AND end_time IS NOT NULL THEN
|
|
|
|
|
|
GREATEST(
|
|
|
|
|
|
0,
|
|
|
|
|
|
DATEDIFF(
|
|
|
|
|
|
LEAST(end_time, #{startTime}),
|
|
|
|
|
|
GREATEST(start_time, #{startTime})
|
|
|
|
|
|
) + 1
|
|
|
|
|
|
)
|
|
|
|
|
|
WHEN start_time IS NOT NULL AND end_time IS NULL AND #{startTime} >= start_time THEN
|
|
|
|
|
|
GREATEST(
|
|
|
|
|
|
0,
|
|
|
|
|
|
DATEDIFF(#{startTime}, GREATEST(start_time, #{startTime})) + 1
|
|
|
|
|
|
)
|
|
|
|
|
|
ELSE 0
|
|
|
|
|
|
END
|
|
|
|
|
|
) / sum(NULLIF(DATEDIFF(end_time, start_time) + 1, 0)) * 100
|
|
|
|
|
|
) -
|
|
|
|
|
|
(
|
|
|
|
|
|
SUM(
|
|
|
|
|
|
GREATEST(
|
|
|
|
|
|
0,
|
|
|
|
|
|
DATEDIFF(
|
|
|
|
|
|
LEAST(plan_end_time, #{startTime}),
|
|
|
|
|
|
GREATEST(plan_start_time, #{startTime})
|
|
|
|
|
|
) + 1
|
|
|
|
|
|
)
|
|
|
|
|
|
) / sum(NULLIF(DATEDIFF(plan_end_time, plan_start_time) + 1, 0)) * 100
|
|
|
|
|
|
),
|
|
|
|
|
|
2
|
|
|
|
|
|
) AS deviationPercent
|
|
|
|
|
|
FROM
|
|
|
|
|
|
sj_construction_progress
|
|
|
|
|
|
WHERE
|
|
|
|
|
|
-- 筛选与查询时间段相关的记录
|
|
|
|
|
|
( #{startTime} >=plan_start_time AND plan_end_time >= #{startTime}) -- 计划时间在区间内
|
|
|
|
|
|
OR
|
|
|
|
|
|
(start_time IS NOT NULL AND #{startTime} >=start_time) -- 实际已开始且在区间内
|
|
|
|
|
|
|
|
|
|
|
|
</select>
|
|
|
|
|
|
<select id="getCost" resultType="com.securitycontrol.screen.domain.OverallEfficiency">
|
|
|
|
|
|
select sum(COALESCE(data_money, 0)) as dataMoney
|
|
|
|
|
|
from sj_project_manage where data_type= #{dataType}
|
|
|
|
|
|
and date_time between #{startTime} and #{endTime}
|
|
|
|
|
|
</select>
|
|
|
|
|
|
</mapper>
|