问题修改

This commit is contained in:
jiang 2026-01-05 13:46:28 +08:00
parent 46b1e2a86d
commit fe233dba7c
1 changed files with 56 additions and 55 deletions

View File

@ -249,68 +249,69 @@
</select>
<select id="getDeviceNumByMonth" resultType="java.util.Map">
SELECT
-- 自用申请数量类型2自用申请
IFNULL(SUM(CASE WHEN cdc.type = '2' AND cdc.review_status = 2 THEN cdcd.real_num ELSE 0 END),0) AS
selfUseApplyNum,
-- 自用出库数量类型2的实际出库数
IFNULL(SUM(CASE WHEN cdc.type = '2' AND cdc.review_status = 2 AND cdcd.dev_type ='1' THEN cdcd.real_num ELSE 0
END),0) AS selfUseOutNum,
-- 自用审核数量类型2+审核通过状态2的申请数
IFNULL(SUM(CASE WHEN cdc.review_status = 2 AND cdc.type = '2' AND cdcd.dev_type ='2' THEN cdcd.real_num ELSE 0
END),0) AS selfUseAuditNum,
-- 自用相关统计
IFNULL(SUM(CASE WHEN cdc.type = '2' AND cdc.review_status = 2 THEN cdcd.real_num ELSE 0 END), 0) AS selfUseApplyNum, -- 自用申请数量
IFNULL(SUM(CASE WHEN cdc.type = '2' AND cdc.review_status = 2 AND cdcd.dev_type = '1' THEN cdcd.real_num ELSE 0 END), 0) AS selfUseOutNum, -- 自用出库数量
IFNULL(SUM(CASE WHEN cdc.type = '2' AND cdc.review_status = 2 AND cdcd.dev_type = '2' THEN cdcd.real_num ELSE 0 END), 0) AS selfUseAuditNum, -- 自用审核数量
-- 退库申请数量类型1原始退库申请
IFNULL(SUM(CASE WHEN cdc.type = '1' AND cdc.review_status = 2 THEN cdcd.num ELSE 0 END),0) AS returnApplyNum,
-- 退库审核数量类型1+审核通过状态2的申请数
IFNULL(SUM(CASE WHEN cdc.review_status = 2 AND cdc.type = '1' AND cdcd.dev_type ='1' THEN cdcd.num ELSE 0
END),0) AS
returnAuditApplyNum,
-- 退库维修数量类型1+审核通过状态2的实际维修数
IFNULL(SUM(CASE WHEN cdc.review_status = 2 AND cdc.type = '1' AND cdcd.dev_type ='2' THEN cdcd.num ELSE 0
END),0) AS
returnAuditRepairNum,
-- 退库相关统计
IFNULL(SUM(CASE WHEN cdc.type = '1' AND cdc.review_status = 2 THEN cdcd.num ELSE 0 END), 0) AS returnApplyNum, -- 退库申请数量
IFNULL(SUM(CASE WHEN cdc.type = '1' AND cdc.review_status = 2 AND cdcd.dev_type = '1' THEN cdcd.num ELSE 0 END), 0) AS returnAuditApplyNum, -- 退库审核数量
IFNULL(SUM(CASE WHEN cdc.type = '1' AND cdc.review_status = 2 AND cdcd.dev_type = '2' THEN cdcd.num ELSE 0 END), 0) AS returnAuditRepairNum, -- 退库维修数量
IFNULL(SUM(CASE WHEN cdc.type = '1' AND cdc.review_status = 2 THEN (cdcd.num - cdcd.real_num) ELSE 0 END), 0) AS returnAuditStoreNum, -- 退库入库数量
-- 维修相关统计
IFNULL(SUM(CASE WHEN cdc.type = '4' AND cdc.review_status != 2 THEN cdcd.num ELSE 0 END), 0) AS repairPendingNum, -- 待维修数量
-- 维修退役数量类型4退役+类型3审核通过
IFNULL(SUM(CASE WHEN cdc.type = '4' AND cdc.review_status = 2 AND cdcd.is_scrap = '1' THEN cdcd.real_num ELSE 0 END), 0)
+ IFNULL(SUM(CASE WHEN cdc.type = '3' AND cdc.review_status = 2 THEN cdcd.real_num ELSE 0 END), 0) AS repairRetireNum,
IFNULL(SUM(CASE WHEN cdc.type = '4' AND cdc.review_status = 2 AND cdcd.is_scrap = '0' THEN cdcd.real_num ELSE 0 END), 0) AS repairQualifiedNum, -- 维修合格数量
-- 退库入库数量类型1+审核通过状态2的申请数-实际维修数,即可入库数量)
IFNULL(SUM(CASE WHEN cdc.review_status = 2 AND cdc.type = '1' THEN (cdcd.num - cdcd.real_num) ELSE 0 END),0) AS
returnAuditStoreNum,
-- 类型4待维修数量未审核通过/审核中 + 申请数)
IFNULL(SUM(CASE WHEN cdc.type = '4' AND cdc.review_status != 2 THEN cdcd.num ELSE 0 END),0) AS repairPendingNum,
-- 类型4维修退役数量审核通过 + 实际退役数)
IFNULL(SUM(CASE WHEN cdc.type = '4' AND cdc.review_status = 2 AND cdcd.is_scrap = '1' THEN cdcd.real_num ELSE 0
END),0) + IFNULL(SUM(CASE WHEN cdc.type = '3' AND cdc.review_status = 2 THEN cdcd.real_num ELSE 0
END),0) AS
repairRetireNum,
-- 类型4维修合格数量审核通过 + 申请数-实际退役数,即可入库/复用数量)
IFNULL(SUM(CASE WHEN cdc.type = '4' AND cdc.review_status = 2 AND cdcd.is_scrap = '0' THEN (cdcd.real_num) ELSE
0 END),0) AS
repairQualifiedNum,
IFNULL((SELECT-- 替换子查询为LEFT JOIN避免逐行子查询的性能损耗
COALESCE ( ma_detail.maNum, 0 ) + COALESCE ( tool_detail.toolNum, 0 ) AS maNum
FROM
bm_warehousing bw
LEFT JOIN ( SELECT cs_id, COUNT( 1 ) AS maNum FROM ma_apply_details GROUP BY cs_id ) ma_detail ON
ma_detail.cs_id = bw.order_id -- 预计算tool_apply_details的计数关联一次即可
LEFT JOIN ( SELECT apply_id, SUM( apply_num ) AS toolNum FROM tool_apply_details WHERE del_flag = '0' GROUP BY
apply_id ) tool_detail ON tool_detail.apply_id = bw.apply_id
WHERE bw.`status` = 2 AND DATE_FORMAT(bw.create_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')),0) AS
warehousingNum
-- 入库数量原独立子查询改为LEFT JOIN避免多行返回错误
IFNULL(warehouse_stats.total_num, 0) AS warehousingNum
FROM
cs_device_change cdc
-- 原LEFT JOIN + cdcd.id IS NOT NULL 等价于INNER JOIN性能更优
INNER JOIN cs_device_change_details cdcd
ON cdcd.change_id = cdc.id
AND cdcd.del_flag = '0' -- 子表未删除
<where>
cdc.del_flag = '0' -- 主表未删除
-- 筛选本月数据(年、月与当前日期一致)
AND DATE_FORMAT(cdc.create_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
<if test="companyId != null">
and cdc.company_id = #{companyId}
</if>
</where>
AND cdcd.del_flag = '0' -- 子表未删除
-- 关联入库统计子查询改为JOIN确保单行返回
LEFT JOIN (
SELECT
-- 若需按company_id分组需添加GROUP BY su.dept_id
COALESCE(SUM(ma_detail.maNum), 0) + COALESCE(SUM(tool_detail.toolNum), 0) AS total_num
-- , su.dept_id -- 如需按公司筛选,保留该字段
FROM
bm_warehousing bw
LEFT JOIN sys_user su
ON su.user_id = bw.user_id
LEFT JOIN (
SELECT cs_id, COUNT(1) AS maNum
FROM ma_apply_details
GROUP BY cs_id
) ma_detail
ON ma_detail.cs_id = bw.order_id
LEFT JOIN (
SELECT apply_id, SUM(apply_num) AS toolNum
FROM tool_apply_details
WHERE del_flag = '0'
GROUP BY apply_id
) tool_detail
ON tool_detail.apply_id = bw.apply_id
WHERE
bw.`status` = 2
AND DATE_FORMAT(bw.create_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
<if test="companyId != null">
AND su.dept_id = #{companyId}
</if>
) warehouse_stats ON 1=1
WHERE
cdc.del_flag = '0'
AND DATE_FORMAT(cdc.create_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
<if test="companyId != null">
AND cdc.company_id = #{companyId}
</if>
</select>
<!-- MySQL版本使用MyBatis的foreach循环拼接OR条件 -->
<select id="getApprover" resultType="java.util.Map">