dev
luotaiqian 2026-07-29 16:57:41 +08:00
parent 5b926d6554
commit d7651344a4
1 changed files with 100 additions and 102 deletions

View File

@ -1,7 +1,6 @@
<?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="org.qinan.safetyeval.infrastructure.mapper.EvalProjectMapper">
<!-- 项目进度管理分页查询(关联 eval_customer 获取客户名称;进度状态/剩余天数由业务代码计算) -->
<resultMap id="EvalProjectProgressCOMap"
type="org.qinan.safetyeval.client.co.institution.EvalProjectProgressCO"
@ -13,22 +12,20 @@
<select id="selectProgressPage"
resultMap="EvalProjectProgressCOMap">
SELECT
p.id,
p.project_no,
p.project_name,
c.customer_name,
p.customer_contact_name,
p.project_leader_name,
p.plan_end_date,
p.project_node
p.id,
p.project_no,
p.project_name,
c.customer_name,
p.customer_contact_name,
p.project_leader_name,
p.plan_end_date,
p.project_node
FROM eval_project p
LEFT JOIN eval_customer c
ON c.id = p.customer_id
AND c.delete_enum = 'false'
ON c.id = p.customer_id
AND c.delete_enum = 'false'
WHERE p.delete_enum = 'false'
<if test="query.orgId != null">
AND p.org_id = #{query.orgId}
</if>
AND p.org_id = #{query.orgId}
<if test="query.projectName != null and query.projectName != ''">
AND p.project_name LIKE CONCAT('%', #{query.projectName}, '%')
</if>
@ -52,15 +49,15 @@
<select id="selectRiskWarningPage"
resultType="org.qinan.safetyeval.client.co.institution.RiskWarningCO">
SELECT
p.id,
p.project_no,
p.project_name,
c.customer_name,
p.project_leader_name AS responsible_person
p.id,
p.project_no,
p.project_name,
c.customer_name,
p.project_leader_name AS responsible_person
FROM eval_project p
LEFT JOIN eval_customer c
ON c.id = p.customer_id
AND c.delete_enum = 'false'
ON c.id = p.customer_id
AND c.delete_enum = 'false'
WHERE p.delete_enum = 'false'
<if test="query.orgId != null">
AND p.org_id = #{query.orgId}
@ -70,79 +67,79 @@
<select id="onSiteTaskSum" resultType="java.lang.Long">
select count(id) from eval_project
where
id in
<foreach collection="pIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
and
JSON_CONTAINS(project_node, JSON_OBJECT('type', #{val},'state', 0))
id in
<foreach collection="pIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
and
JSON_CONTAINS(project_node, JSON_OBJECT('type', #{val},'state', 0))
</select>
<!-- 监管端-安评项目实时监控统计:未删除且法定项目(is_statutory=1) -->
<select id="selectRegulatorMonitorStat"
resultType="org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorStatCO">
SELECT
COUNT(*) AS monitoringCount,
IFNULL(SUM(CASE WHEN archive_flag =0 THEN 1 ELSE 0 END), 0) AS normalCount,
0 AS warningCount,
IFNULL(SUM(CASE WHEN plan_end_date BETWEEN DATE_FORMAT(NOW(), '%Y-%m-01')
AND DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH)
THEN 1 ELSE 0 END), 0) AS monthPlanCompleteCount
COUNT(*) AS monitoringCount,
IFNULL(SUM(CASE WHEN archive_flag =0 THEN 1 ELSE 0 END), 0) AS normalCount,
0 AS warningCount,
IFNULL(SUM(CASE WHEN plan_end_date BETWEEN DATE_FORMAT(NOW(), '%Y-%m-01')
AND DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH)
THEN 1 ELSE 0 END), 0) AS monthPlanCompleteCount
FROM eval_project
WHERE delete_enum = 'false'
AND is_statutory = 1
AND is_statutory = 1
</select>
<!-- 监管端-项目踏勘监管统计:未删除且法定项目(is_statutory=1)告知书归档关联eval_survey_attach人员打卡状态取clock_in_status -->
<select id="selectRegulatorSurveyStat"
resultType="org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectSurveyStatCO">
SELECT
IFNULL(SUM(CASE WHEN EXISTS (
SELECT 1 FROM eval_survey_attach sa
WHERE sa.project_id = p.id
AND sa.attach_type_code = 'PRACTICE_NOTIFICATION'
) THEN 1 ELSE 0 END), 0) AS notificationArchivedCount,
IFNULL(SUM(CASE WHEN EXISTS (
SELECT 1 FROM eval_survey_attach sa
WHERE sa.project_id = p.id
AND sa.attach_type_code = 'PRACTICE_NOTIFICATION'
) THEN 0 ELSE 1 END), 0) AS notificationAbnormalCount,
IFNULL(SUM(CASE WHEN p.clock_in_status = 'NORMAL' THEN 1 ELSE 0 END), 0) AS clockInNormalCount,
IFNULL(SUM(CASE WHEN p.clock_in_status = 'NORMAL' THEN 0 ELSE 1 END), 0) AS clockInAbnormalCount
IFNULL(SUM(CASE WHEN EXISTS (
SELECT 1 FROM eval_survey_attach sa
WHERE sa.project_id = p.id
AND sa.attach_type_code = 'PRACTICE_NOTIFICATION'
) THEN 1 ELSE 0 END), 0) AS notificationArchivedCount,
IFNULL(SUM(CASE WHEN EXISTS (
SELECT 1 FROM eval_survey_attach sa
WHERE sa.project_id = p.id
AND sa.attach_type_code = 'PRACTICE_NOTIFICATION'
) THEN 0 ELSE 1 END), 0) AS notificationAbnormalCount,
IFNULL(SUM(CASE WHEN p.clock_in_status = 'NORMAL' THEN 1 ELSE 0 END), 0) AS clockInNormalCount,
IFNULL(SUM(CASE WHEN p.clock_in_status = 'NORMAL' THEN 0 ELSE 1 END), 0) AS clockInAbnormalCount
FROM eval_project p
WHERE p.delete_enum = 'false'
AND p.is_statutory = 1
AND p.is_statutory = 1
</select>
<!-- 监管端-安评项目实时监控分页:未删除且法定项目(is_statutory=1),关联 org_info 获取评价机构名称,关联 eval_project_process_waring 获取预警信息 -->
<select id="selectRegulatorMonitorPage"
resultType="org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO">
SELECT
p.id,
p.org_id,
p.project_no,
p.project_name,
o.unit_name AS org_name,
p.eval_type_code,
p.industry_code,
p.customer_contact_name AS leader_name,
p.plan_end_date,
w.waring_status,
w.process_waring_status,
w.process_waring_msg,
w.personnel_waring_status,
w.personnel_waring_msg
p.id,
p.org_id,
p.project_no,
p.project_name,
o.unit_name AS org_name,
p.eval_type_code,
p.industry_code,
p.customer_contact_name AS leader_name,
p.plan_end_date,
w.waring_status,
w.process_waring_status,
w.process_waring_msg,
w.personnel_waring_status,
w.personnel_waring_msg
FROM eval_project p
LEFT JOIN org_info o
ON o.id = p.org_id
AND o.delete_enum = 'false'
ON o.id = p.org_id
AND o.delete_enum = 'false'
LEFT JOIN eval_project_process_waring w
ON w.project_id = p.id
ON w.project_id = p.id
WHERE p.delete_enum = 'false'
AND p.is_statutory = 1
AND p.is_statutory = 1
<if test="query.projectNameOrNo != null and query.projectNameOrNo != ''">
AND (p.project_name LIKE CONCAT('%', #{query.projectNameOrNo}, '%')
OR p.project_no LIKE CONCAT('%', #{query.projectNameOrNo}, '%'))
OR p.project_no LIKE CONCAT('%', #{query.projectNameOrNo}, '%'))
</if>
<if test="query.orgId != null">
AND p.org_id = #{query.orgId}
@ -176,20 +173,20 @@
<select id="selectRegulatorSurveyPage"
resultType="org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectSurveyPageCO">
SELECT
p.id,
p.org_id,
p.project_no,
p.project_name,
o.unit_name AS org_name
p.id,
p.org_id,
p.project_no,
p.project_name,
o.unit_name AS org_name
FROM eval_project p
LEFT JOIN org_info o
ON o.id = p.org_id
AND o.delete_enum = 'false'
ON o.id = p.org_id
AND o.delete_enum = 'false'
WHERE p.delete_enum = 'false'
AND p.is_statutory = 1
AND p.is_statutory = 1
<if test="query.projectNameOrNo != null and query.projectNameOrNo != ''">
AND (p.project_name LIKE CONCAT('%', #{query.projectNameOrNo}, '%')
OR p.project_no LIKE CONCAT('%', #{query.projectNameOrNo}, '%'))
OR p.project_no LIKE CONCAT('%', #{query.projectNameOrNo}, '%'))
</if>
<if test="query.orgId != null">
AND p.org_id = #{query.orgId}
@ -204,16 +201,17 @@
<select id="selectSurveyPersonnelStatByProjectIds"
resultType="org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectSurveyPageCO">
SELECT
s.project_id AS id,
COUNT(DISTINCT CASE WHEN s.sing_in_time IS NOT NULL AND s.sign_out_time IS NOT NULL THEN s.personnel_id END) AS actual_count,
COUNT(DISTINCT CASE WHEN s.sing_in_time IS NOT NULL THEN s.personnel_id END) AS sign_in_count,
COUNT(DISTINCT CASE WHEN s.sign_out_time IS NOT NULL THEN s.personnel_id END) AS sign_out_count
s.project_id AS id,
COUNT(DISTINCT CASE WHEN s.sing_in_time IS NOT NULL AND s.sign_out_time IS NOT NULL THEN s.personnel_id END) AS
actual_count,
COUNT(DISTINCT CASE WHEN s.sing_in_time IS NOT NULL THEN s.personnel_id END) AS sign_in_count,
COUNT(DISTINCT CASE WHEN s.sign_out_time IS NOT NULL THEN s.personnel_id END) AS sign_out_count
FROM eval_survey s
WHERE s.delete_enum = 'false'
AND s.project_id IN
<foreach collection="projectIds" item="pid" open="(" separator="," close=")">
#{pid}
</foreach>
AND s.project_id IN
<foreach collection="projectIds" item="pid" open="(" separator="," close=")">
#{pid}
</foreach>
GROUP BY s.project_id
</select>
@ -221,14 +219,15 @@
<select id="selectSurveyAttachStatByProjectIds"
resultType="org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectSurveyPageCO">
SELECT
sa.project_id AS id,
SUM(CASE WHEN sa.attach_type_code IN ('RECTIFICATION_REVIEW', 'SITE_INSPECTION_FORM') THEN 1 ELSE 0 END) AS scene_photo_count,
MAX(CASE WHEN sa.attach_type_code = 'PRACTICE_NOTIFICATION' THEN sa.file_url END) AS notification_file_url
sa.project_id AS id,
SUM(CASE WHEN sa.attach_type_code IN ('RECTIFICATION_REVIEW', 'SITE_INSPECTION_FORM') THEN 1 ELSE 0 END) AS
scene_photo_count,
MAX(CASE WHEN sa.attach_type_code = 'PRACTICE_NOTIFICATION' THEN sa.file_url END) AS notification_file_url
FROM eval_survey_attach sa
WHERE sa.project_id IN
<foreach collection="projectIds" item="pid" open="(" separator="," close=")">
#{pid}
</foreach>
<foreach collection="projectIds" item="pid" open="(" separator="," close=")">
#{pid}
</foreach>
GROUP BY sa.project_id
</select>
@ -236,21 +235,21 @@
<select id="selectRegulatorSurveyClockInList"
resultType="org.qinan.safetyeval.client.co.regulator.RegulatorEvalSurveyClockInCO">
SELECT
s.id,
op.user_name AS user_name,
s.role,
s.face_state,
s.gps_state,
s.sing_in_time,
s.sign_out_time,
s.scene_url,
s.signature_url
s.id,
op.user_name AS user_name,
s.role,
s.face_state,
s.gps_state,
s.sing_in_time,
s.sign_out_time,
s.scene_url,
s.signature_url
FROM eval_survey s
LEFT JOIN org_personnel op
ON op.id = s.personnel_id
AND op.delete_enum = 'false'
ON op.id = s.personnel_id
AND op.delete_enum = 'false'
WHERE s.delete_enum = 'false'
AND s.project_id = #{projectId}
AND s.project_id = #{projectId}
ORDER BY s.id ASC
</select>
<select id="getByPersonnelId" resultType="java.lang.Long">
@ -258,5 +257,4 @@
from eval_project
where JSON_CONTAINS(participants_json, JSON_OBJECT('id', #{currentUserId}));
</select>
</mapper>