Commit 1a206627 authored by 鲁鸿波's avatar 鲁鸿波

危险作业监督检查统计修改

选择人员承包商名称不显示修改
parent d07ecb51
...@@ -223,8 +223,7 @@ public class TContractorPersonServiceImpl extends SuperServiceImpl<TContractorPe ...@@ -223,8 +223,7 @@ public class TContractorPersonServiceImpl extends SuperServiceImpl<TContractorPe
public List<TContractorPerson> ValidPeopleList(TContractorPersonParam param) { public List<TContractorPerson> ValidPeopleList(TContractorPersonParam param) {
QueryWrapper<TContractorPerson> query = this.createQuery(param); QueryWrapper<TContractorPerson> query = this.createQuery(param);
query.eq(TContractorPerson.JOB_STATUS, 1); query.eq(TContractorPerson.JOB_STATUS, 1);
return this.list(query).stream().filter(tContractorPerson -> { List<TContractorPerson> filteredList = this.list(query).stream().filter(tContractorPerson -> {
int age = IdcardUtil.getAgeByIdCard(tContractorPerson.getIdCardNo()); int age = IdcardUtil.getAgeByIdCard(tContractorPerson.getIdCardNo());
int gender = IdcardUtil.getGenderByIdCard(tContractorPerson.getIdCardNo()); int gender = IdcardUtil.getGenderByIdCard(tContractorPerson.getIdCardNo());
if (gender == 1){ if (gender == 1){
...@@ -233,6 +232,14 @@ public class TContractorPersonServiceImpl extends SuperServiceImpl<TContractorPe ...@@ -233,6 +232,14 @@ public class TContractorPersonServiceImpl extends SuperServiceImpl<TContractorPe
return age <= 55; return age <= 55;
} }
}).collect(Collectors.toList()); }).collect(Collectors.toList());
// 在过滤后设置 infoDesignation 属性
filteredList.forEach(tContractorPerson ->
tContractorPerson.setInfoDesignation(tContractorInfoService.getName(tContractorPerson.getInfoId()))
);
return filteredList;
} }
@Override @Override
......
...@@ -20,9 +20,6 @@ public class HazardWorkPlanCheckStatsDTO { ...@@ -20,9 +20,6 @@ public class HazardWorkPlanCheckStatsDTO {
@ApiModelProperty(value = "问题数") @ApiModelProperty(value = "问题数")
private Integer numberCount; private Integer numberCount;
@ApiModelProperty(value = "危险作业数量")
private Integer workCount;
@ApiModelProperty(value = "合规比例") @ApiModelProperty(value = "合规比例")
private double complianceRatio; private double complianceRatio;
......
...@@ -290,13 +290,10 @@ public class THazardWorkPlanCheckServiceImpl extends SuperServiceImpl<THazardWor ...@@ -290,13 +290,10 @@ public class THazardWorkPlanCheckServiceImpl extends SuperServiceImpl<THazardWor
//tHazardWorkPlanCheckParam.setOrgId("69223d5d1fa84ff29a0c11863d1b00b7"); //tHazardWorkPlanCheckParam.setOrgId("69223d5d1fa84ff29a0c11863d1b00b7");
HazardWorkPlanCheckStatsDTO hazardWorkPlanCheckStatsDTO = baseMapper.selectHazardWorkPlanCheckStats(tHazardWorkPlanCheckParam); HazardWorkPlanCheckStatsDTO hazardWorkPlanCheckStatsDTO = baseMapper.selectHazardWorkPlanCheckStats(tHazardWorkPlanCheckParam);
// 计算合规率(基于危险作业数量和问题数) // 计算合规比例(合规企业数/企业总数)
if (hazardWorkPlanCheckStatsDTO.getWorkCount() != null && hazardWorkPlanCheckStatsDTO.getWorkCount() > 0) { if (hazardWorkPlanCheckStatsDTO.getComplianceBasicUnitCount() != null && hazardWorkPlanCheckStatsDTO.getComplianceBasicUnitCount() > 0
// 使用公式 C = (B - A) / B × 100 && hazardWorkPlanCheckStatsDTO.getBasicUnitCount() != null && hazardWorkPlanCheckStatsDTO.getBasicUnitCount() > 0) {
// B = workCount(危险作业数量) hazardWorkPlanCheckStatsDTO.setComplianceRatio(Math.round(hazardWorkPlanCheckStatsDTO.getComplianceBasicUnitCount()/hazardWorkPlanCheckStatsDTO.getBasicUnitCount())); // 四舍五入保留两位小数
// A = numberCount(问题数)
double complianceRate = (hazardWorkPlanCheckStatsDTO.getWorkCount() - hazardWorkPlanCheckStatsDTO.getNumberCount()) * 100.0 / hazardWorkPlanCheckStatsDTO.getWorkCount();
hazardWorkPlanCheckStatsDTO.setComplianceRatio(Math.round(complianceRate * 100.0) / 100.0); // 四舍五入保留两位小数
} else { } else {
hazardWorkPlanCheckStatsDTO.setComplianceRatio(0.0); hazardWorkPlanCheckStatsDTO.setComplianceRatio(0.0);
} }
......
...@@ -290,7 +290,7 @@ ...@@ -290,7 +290,7 @@
<sql id="orgIdFilter"> <sql id="orgIdFilter">
AND basic_id IN ( AND basic_id IS NOT NULL AND basic_unit IS NOT NULL AND basic_id IN (
SELECT org_id FROM t_sys_org SELECT org_id FROM t_sys_org
WHERE org_id = #{param.orgId} OR parent_ids LIKE CONCAT('%', #{param.orgId}, '%') WHERE org_id = #{param.orgId} OR parent_ids LIKE CONCAT('%', #{param.orgId}, '%')
) )
...@@ -302,9 +302,9 @@ ...@@ -302,9 +302,9 @@
</if> </if>
</sql> </sql>
<select id="selectHazardWorkPlanCheckStats" resultType="com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO"> <!--<select id="selectHazardWorkPlanCheckStats" resultType="com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO">
SELECT SELECT
<!-- 企业总数(有检查记录的企业)--> &lt;!&ndash; 企业总数(有检查记录的企业)&ndash;&gt;
(SELECT COUNT(DISTINCT basic_unit) (SELECT COUNT(DISTINCT basic_unit)
FROM t_hazard_work_plan_check FROM t_hazard_work_plan_check
WHERE status = '0' WHERE status = '0'
...@@ -313,7 +313,7 @@ ...@@ -313,7 +313,7 @@
<include refid="checkTimeFilter" /> <include refid="checkTimeFilter" />
) AS basicUnitCount, ) AS basicUnitCount,
<!-- 合规企业数(企业合规率 >= 95%)--> &lt;!&ndash; 合规企业数(企业合规率 >= 95%)&ndash;&gt;
(SELECT COUNT(*) (SELECT COUNT(*)
FROM ( FROM (
SELECT basic_unit SELECT basic_unit
...@@ -330,7 +330,7 @@ ...@@ -330,7 +330,7 @@
END <![CDATA[ >= ]]> 95 END <![CDATA[ >= ]]> 95
) AS compliant_enterprises) AS complianceBasicUnitCount, ) AS compliant_enterprises) AS complianceBasicUnitCount,
<!-- 不合规企业数(企业合规率 < 95%)--> &lt;!&ndash; 不合规企业数(企业合规率 < 95%)&ndash;&gt;
(SELECT COUNT(*) (SELECT COUNT(*)
FROM ( FROM (
SELECT basic_unit SELECT basic_unit
...@@ -347,7 +347,7 @@ ...@@ -347,7 +347,7 @@
END <![CDATA[ < ]]> 95 END <![CDATA[ < ]]> 95
) AS non_compliant_enterprises) AS noComplianceBasicUnitCount, ) AS non_compliant_enterprises) AS noComplianceBasicUnitCount,
<!-- 问题数--> &lt;!&ndash; 问题数&ndash;&gt;
(SELECT COUNT(*) (SELECT COUNT(*)
FROM t_hazard_work_plan_check FROM t_hazard_work_plan_check
WHERE status = '0' WHERE status = '0'
...@@ -357,7 +357,7 @@ ...@@ -357,7 +357,7 @@
<include refid="checkTimeFilter" /> <include refid="checkTimeFilter" />
) AS numberCount, ) AS numberCount,
<!--危险作业数量--> &lt;!&ndash;危险作业数量&ndash;&gt;
(select count(1) from t_hazard_work_plan (select count(1) from t_hazard_work_plan
where work_status!='0' where work_status!='0'
AND org_id IN ( AND org_id IN (
...@@ -369,8 +369,75 @@ ...@@ -369,8 +369,75 @@
</if>) As workCount </if>) As workCount
FROM DUAL FROM DUAL
</select>-->
<select id="selectHazardWorkPlanCheckStats" resultType="com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO">
SELECT
<!-- 企业总数(有检查记录的企业)-->
(SELECT COUNT(DISTINCT basic_unit)
FROM t_hazard_work_plan_check
WHERE status = '0'
AND check_status = '2'
<include refid="orgIdFilter" />
<include refid="checkTimeFilter" />
) AS basicUnitCount,
<!--- 合规企业数(C >= 95)-->
SUM(
CASE
WHEN work_count > 0
AND ((work_count - problem_count)/ work_count * 100.0 ) <![CDATA[ >= ]]> 95
THEN 1 ELSE 0
END
) AS complianceBasicUnitCount,
<!-- 不合规企业数(C < 95)-->
SUM(
CASE
WHEN work_count > 0
AND ((work_count - problem_count)/ work_count * 100.0 ) <![CDATA[ < ]]> 95
THEN 1 ELSE 0
END
) AS noComplianceBasicUnitCount,
<!-- 问题数(保留原逻辑)-->
(SELECT COUNT(*)
FROM t_hazard_work_plan_check
WHERE status = '0'
AND check_status = '2'
AND is_compliant = '0'
<include refid="orgIdFilter" />
<include refid="checkTimeFilter" />
) AS numberCount
FROM (
<!-- 🔹 这里只计算一次每个企业的危险作业与问题数量-->
SELECT
wc.basic_unit,
COUNT(DISTINCT wp.id) AS work_count, <!-- 危险作业数量 (B)-->
COALESCE(SUM(CASE WHEN wc.is_compliant = '0' THEN 1 ELSE 0 END), 0) AS problem_count <!-- 问题数量 (A)-->
FROM t_hazard_work_plan wp
JOIN t_hazard_work_plan_check wc
ON wp.id = wc.plan_id
AND wc.status = '0'
AND wc.check_status = '2'
<include refid="checkTimeFilter" />
WHERE wp.work_status != '0'
AND wp.org_id IN (
SELECT org_id FROM t_sys_org
WHERE org_id = #{param.orgId}
OR parent_ids LIKE CONCAT('%', #{param.orgId}, '%')
)
<if test="param.startTime != null and param.startTime != '' and param.endTime != null and param.endTime != ''">
AND wp.create_date BETWEEN #{param.startTime} AND #{param.endTime}
</if>
GROUP BY wc.basic_unit
) AS t
</select> </select>
<select id="selectComplianceCount" resultType="java.lang.Integer"> <select id="selectComplianceCount" resultType="java.lang.Integer">
SELECT COUNT(*) SELECT COUNT(*)
FROM ( FROM (
...@@ -406,27 +473,51 @@ ...@@ -406,27 +473,51 @@
SELECT SELECT
t.basic_id, t.basic_id,
t.basic_unit, t.basic_unit,
<!-- 计算合规率(数值)-->
ROUND( ROUND(
(SUM(CASE WHEN is_compliant = '1' THEN 1 ELSE 0 END) * 100.0 / COUNT(*)), CASE WHEN t.total_count = 0 THEN 0
ELSE ((t.total_count - t.compliant_count) / t.total_count * 100.0 )
END,
2 2
) AS complianceRate, ) AS complianceRate,
<!-- 判断是否合规(合规率 >= 95%)-->
CASE CASE
WHEN COUNT(*) = 0 THEN '无数据' WHEN t.total_count = 0 THEN '无数据'
WHEN (SUM(CASE WHEN is_compliant = '1' THEN 1 ELSE 0 END) * 100.0 / COUNT(*)) <![CDATA[ >= ]]> 95 THEN '合规' WHEN ((t.total_count - t.compliant_count) / t.total_count * 100.0 ) <![CDATA[ >= ]]> 95 THEN '合规'
ELSE '不合规' ELSE '不合规'
END AS isCompliant END AS isCompliant
FROM t_hazard_work_plan_check t
WHERE status = '0' FROM (
AND check_status = '2' SELECT
<include refid="orgIdFilter" /> wc.basic_id,
wc.basic_unit,
COUNT(DISTINCT wp.id) AS total_count, -- 检查记录总数
COALESCE(SUM(CASE WHEN wc.is_compliant = '1' THEN 1 ELSE 0 END), 0) AS compliant_count
FROM t_hazard_work_plan wp
LEFT JOIN t_hazard_work_plan_check wc
ON wp.id = wc.plan_id
AND wc.status = '0'
AND wc.check_status = '2'
<include refid="checkTimeFilter" />
<include refid="orgIdFilter"/>
<if test="param.basicId != null and param.basicId != ''"> <if test="param.basicId != null and param.basicId != ''">
AND t.basic_id = #{param.basicId} AND wc.basic_id = #{param.basicId}
</if> </if>
<include refid="checkTimeFilter" /> WHERE wp.work_status != '0'
GROUP BY t.basic_id, t.basic_unit AND wp.org_id IN (
SELECT org_id FROM t_sys_org
WHERE org_id = #{param.orgId}
OR parent_ids LIKE CONCAT('%', #{param.orgId}, '%')
)
<if test="param.basicId != null and param.basicId != ''">
AND wp.org_id = #{param.basicId}
</if>
<if test="param.startTime != null and param.startTime != '' and param.endTime != null and param.endTime != ''">
AND wp.create_date BETWEEN #{param.startTime} AND #{param.endTime}
</if>
GROUP BY wc.basic_id, wc.basic_unit
) AS t
ORDER BY complianceRate DESC ORDER BY complianceRate DESC
</select> </select>
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment