问题修改
This commit is contained in:
parent
46b1e2a86d
commit
fe233dba7c
|
|
@ -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">
|
||||
|
|
|
|||
Loading…
Reference in New Issue