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

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

选择人员承包商名称不显示修改
parent d07ecb51
......@@ -223,8 +223,7 @@ public class TContractorPersonServiceImpl extends SuperServiceImpl<TContractorPe
public List<TContractorPerson> ValidPeopleList(TContractorPersonParam param) {
QueryWrapper<TContractorPerson> query = this.createQuery(param);
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 gender = IdcardUtil.getGenderByIdCard(tContractorPerson.getIdCardNo());
if (gender == 1){
......@@ -233,6 +232,14 @@ public class TContractorPersonServiceImpl extends SuperServiceImpl<TContractorPe
return age <= 55;
}
}).collect(Collectors.toList());
// 在过滤后设置 infoDesignation 属性
filteredList.forEach(tContractorPerson ->
tContractorPerson.setInfoDesignation(tContractorInfoService.getName(tContractorPerson.getInfoId()))
);
return filteredList;
}
@Override
......
......@@ -20,9 +20,6 @@ public class HazardWorkPlanCheckStatsDTO {
@ApiModelProperty(value = "问题数")
private Integer numberCount;
@ApiModelProperty(value = "危险作业数量")
private Integer workCount;
@ApiModelProperty(value = "合规比例")
private double complianceRatio;
......
......@@ -290,13 +290,10 @@ public class THazardWorkPlanCheckServiceImpl extends SuperServiceImpl<THazardWor
//tHazardWorkPlanCheckParam.setOrgId("69223d5d1fa84ff29a0c11863d1b00b7");
HazardWorkPlanCheckStatsDTO hazardWorkPlanCheckStatsDTO = baseMapper.selectHazardWorkPlanCheckStats(tHazardWorkPlanCheckParam);
// 计算合规率(基于危险作业数量和问题数)
if (hazardWorkPlanCheckStatsDTO.getWorkCount() != null && hazardWorkPlanCheckStatsDTO.getWorkCount() > 0) {
// 使用公式 C = (B - A) / B × 100
// B = workCount(危险作业数量)
// A = numberCount(问题数)
double complianceRate = (hazardWorkPlanCheckStatsDTO.getWorkCount() - hazardWorkPlanCheckStatsDTO.getNumberCount()) * 100.0 / hazardWorkPlanCheckStatsDTO.getWorkCount();
hazardWorkPlanCheckStatsDTO.setComplianceRatio(Math.round(complianceRate * 100.0) / 100.0); // 四舍五入保留两位小数
// 计算合规比例(合规企业数/企业总数)
if (hazardWorkPlanCheckStatsDTO.getComplianceBasicUnitCount() != null && hazardWorkPlanCheckStatsDTO.getComplianceBasicUnitCount() > 0
&& hazardWorkPlanCheckStatsDTO.getBasicUnitCount() != null && hazardWorkPlanCheckStatsDTO.getBasicUnitCount() > 0) {
hazardWorkPlanCheckStatsDTO.setComplianceRatio(Math.round(hazardWorkPlanCheckStatsDTO.getComplianceBasicUnitCount()/hazardWorkPlanCheckStatsDTO.getBasicUnitCount())); // 四舍五入保留两位小数
} else {
hazardWorkPlanCheckStatsDTO.setComplianceRatio(0.0);
}
......
......@@ -290,7 +290,7 @@
<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
WHERE org_id = #{param.orgId} OR parent_ids LIKE CONCAT('%', #{param.orgId}, '%')
)
......@@ -302,9 +302,9 @@
</if>
</sql>
<select id="selectHazardWorkPlanCheckStats" resultType="com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO">
<!--<select id="selectHazardWorkPlanCheckStats" resultType="com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO">
SELECT
<!-- 企业总数(有检查记录的企业)-->
&lt;!&ndash; 企业总数(有检查记录的企业)&ndash;&gt;
(SELECT COUNT(DISTINCT basic_unit)
FROM t_hazard_work_plan_check
WHERE status = '0'
......@@ -313,7 +313,7 @@
<include refid="checkTimeFilter" />
) AS basicUnitCount,
<!-- 合规企业数(企业合规率 >= 95%)-->
&lt;!&ndash; 合规企业数(企业合规率 >= 95%)&ndash;&gt;
(SELECT COUNT(*)
FROM (
SELECT basic_unit
......@@ -330,7 +330,7 @@
END <![CDATA[ >= ]]> 95
) AS compliant_enterprises) AS complianceBasicUnitCount,
<!-- 不合规企业数(企业合规率 < 95%)-->
&lt;!&ndash; 不合规企业数(企业合规率 < 95%)&ndash;&gt;
(SELECT COUNT(*)
FROM (
SELECT basic_unit
......@@ -347,7 +347,7 @@
END <![CDATA[ < ]]> 95
) AS non_compliant_enterprises) AS noComplianceBasicUnitCount,
<!-- 问题数-->
&lt;!&ndash; 问题数&ndash;&gt;
(SELECT COUNT(*)
FROM t_hazard_work_plan_check
WHERE status = '0'
......@@ -357,7 +357,7 @@
<include refid="checkTimeFilter" />
) AS numberCount,
<!--危险作业数量-->
&lt;!&ndash;危险作业数量&ndash;&gt;
(select count(1) from t_hazard_work_plan
where work_status!='0'
AND org_id IN (
......@@ -369,8 +369,75 @@
</if>) As workCount
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 id="selectComplianceCount" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM (
......@@ -406,27 +473,51 @@
SELECT
t.basic_id,
t.basic_unit,
<!-- 计算合规率(数值)-->
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
) AS complianceRate,
<!-- 判断是否合规(合规率 >= 95%)-->
CASE
WHEN 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 = 0 THEN '无数据'
WHEN ((t.total_count - t.compliant_count) / t.total_count * 100.0 ) <![CDATA[ >= ]]> 95 THEN '合规'
ELSE '不合规'
END AS isCompliant
FROM t_hazard_work_plan_check t
WHERE status = '0'
AND check_status = '2'
<include refid="orgIdFilter" />
FROM (
SELECT
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 != ''">
AND t.basic_id = #{param.basicId}
AND wc.basic_id = #{param.basicId}
</if>
<include refid="checkTimeFilter" />
GROUP BY t.basic_id, t.basic_unit
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.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
</select>
</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