Bonus-Cloud-Material-Mall/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/warehousing/WarehousingMapper.xml

221 lines
12 KiB
XML
Raw Normal View History

2025-12-23 16:26:26 +08:00
<?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">
<!-- namespace对应Mapper接口的全限定名 -->
<mapper namespace="com.bonus.material.warehousing.mapper.WarehousingMapper">
<!-- 新增 -->
<insert id="insert" parameterType="com.bonus.material.warehousing.domain.WarehousingEntity" useGeneratedKeys="true"
keyProperty="id">
INSERT INTO bm_warehousing (code, order_id, apply_id,
2025-12-29 09:35:54 +08:00
create_user, user_id)
VALUES (CONCAT(
DATE_FORMAT(NOW(), '%Y%m%d'), -- 日期前缀yyyyMMdd
'-', -- 添加分隔符
LPAD(
-- 外层子查询规避 MySQL 表引用限制
(SELECT inner_count + 1
FROM (SELECT COUNT(*) AS inner_count
FROM bm_warehousing
WHERE DATE(create_time) = CURDATE()
AND is_deleted = '0') AS temp_table),
4, '0' -- 序号补0到3位可调整为4位LPAD(...,4,'0')
)
), #{orderId}, #{applyId}, #{createUser}, #{userId})
2025-12-23 16:26:26 +08:00
</insert>
<!-- 逻辑删除 -->
<update id="deleteById">
UPDATE bm_warehousing
SET is_deleted = 1
WHERE id = #{id}
</update>
<!-- 根据id更新 -->
<update id="updateById" parameterType="com.bonus.material.warehousing.domain.WarehousingEntity">
UPDATE bm_warehousing
<set>
<if test="code != null">code = #{code},</if>
2025-12-29 09:35:54 +08:00
<if test="orderId != null">order_id = #{orderId},</if>
<if test="applyId != null">apply_id = #{applyId},</if>
2025-12-23 16:26:26 +08:00
<if test="status != null">status = #{status},</if>
<if test="createUser != null">create_user = #{createUser},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="approvalUser != null">approval_user = #{approvalUser},</if>
<if test="approvalTime != null">approval_time = #{approvalTime},</if>
</set>
WHERE id = #{id}
</update>
2025-12-29 09:35:54 +08:00
<update id="batchSubmission">
update bm_warehousing
set status ='1'
WHERE status in ('0','3') and id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<update id="batchRejection">
update bm_warehousing
set status ='3'
WHERE status ='1' and id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<update id="batchApproval">
update bm_warehousing
set status ='2',
approval_time = now(),
approval_user = #{nickName}
WHERE status ='1' and id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</update>
2025-12-23 16:26:26 +08:00
<!-- 根据id查询 -->
<select id="selectById" parameterType="Integer"
resultType="com.bonus.material.warehousing.domain.WarehousingEntity">
2025-12-29 09:35:54 +08:00
SELECT bw.id AS id,
bw.code AS code,
bw.order_id AS orderId,
bw.apply_id AS applyId,
bw.status AS status,
bw.create_user AS createUser,
-- 空值处理避免create_time为空时DATE_FORMAT返回NULL
DATE_FORMAT(IFNULL(bw.create_time, '1970-01-01 00:00:00'), '%Y-%m-%d %H:%i:%s') AS createTime,
bw.approval_user AS approvalUser,
-- 空值处理approval_time可能为空统一格式
DATE_FORMAT(IFNULL(bw.approval_time, '1970-01-01 00:00:00'), '%Y-%m-%d %H:%i:%s') AS approvalTime,
-- 替换子查询为LEFT JOIN避免逐行子查询的性能损耗
COALESCE(ma_detail.maNum, 0) AS maNum,
COALESCE(tool_detail.toolNum, 0) AS toolNum
FROM bm_warehousing bw
-- 预计算ma_apply_details的计数关联一次即可
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
2025-12-23 16:26:26 +08:00
WHERE id = #{id}
AND is_deleted = 0
</select>
<!-- 条件查询列表 -->
2025-12-29 09:35:54 +08:00
<select id="selectList" parameterType="com.bonus.material.warehousing.domain.WarehousingEntity"
resultType="com.bonus.material.warehousing.domain.WarehousingEntity">
2025-12-23 16:26:26 +08:00
SELECT
2025-12-29 09:35:54 +08:00
bw.id AS id,
bw.code AS code,
bw.order_id AS orderId,
bw.apply_id AS applyId,
bw.status AS status,
bw.create_user AS createUser,
-- 空值处理避免create_time为空时DATE_FORMAT返回NULL
DATE_FORMAT(IFNULL(bw.create_time, '1970-01-01 00:00:00'), '%Y-%m-%d %H:%i:%s') AS createTime,
bw.approval_user AS approvalUser,
-- 空值处理approval_time可能为空统一格式
DATE_FORMAT(IFNULL(bw.approval_time, '1970-01-01 00:00:00'), '%Y-%m-%d %H:%i:%s') AS approvalTime,
-- 替换子查询为LEFT JOIN避免逐行子查询的性能损耗
COALESCE(ma_detail.maNum, 0) AS maNum,
COALESCE(tool_detail.toolNum, 0) AS toolNum
FROM bm_warehousing bw
LEFT JOIN sys_user su ON su.user_id = bw.user_id
-- 预计算ma_apply_details的计数关联一次即可
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
2025-12-23 16:26:26 +08:00
<where>
is_deleted = 0
<if test="code != null and code != ''">
2025-12-29 09:35:54 +08:00
AND bw.code LIKE CONCAT('%', #{code}, '%')
2025-12-23 16:26:26 +08:00
</if>
<if test="createUser != null and createUser != ''">
2025-12-29 09:35:54 +08:00
AND bw.create_user LIKE CONCAT('%', #{createUser}, '%')
2025-12-23 16:26:26 +08:00
</if>
<if test="status != null and status != ''">
2025-12-29 09:35:54 +08:00
AND bw.status = #{status}
</if>
<if test="companyId != null and companyId != ''">
AND su.dept_id = #{companyId}
2025-12-23 16:26:26 +08:00
</if>
2025-12-29 09:35:54 +08:00
<if test="startTime != null and endTime != null ">
and bw.create_time &gt;= #{startTime}
and bw.create_time &lt; DATE_ADD(#{endTime}, INTERVAL 1 DAY)
2025-12-23 16:26:26 +08:00
</if>
</where>
2025-12-29 09:35:54 +08:00
order by bw.create_time DESC,bw.status
2025-12-23 16:26:26 +08:00
</select>
2025-12-29 09:35:54 +08:00
<select id="getDevDetails" resultType="com.bonus.material.warehousing.domain.WarehousingRecordEntity">
SELECT bw.code AS code,
dev.item_type_model AS devModel,
dev.device_name AS name,
dev.CODE AS devCode,
'施工装备' AS devType,
CASE
WHEN mt.actual_level = 5 THEN CONCAT_WS('>', mt.proType, mt.mainGx, mt.childGx, mt.devCategory)
WHEN mt.actual_level = 6 THEN CONCAT_WS('>', mt.proType, mt.mainGx, mt.childGx, mt.devCategory,
mt.devSubcategory)
ELSE CONCAT_WS('>', mt.proType, mt.mainGx, mt.childGx, mt.devCategory, mt.devSubcategory)
END AS category,
dev.identify_code AS identifyCode,
'1' AS num,
bw.create_user AS createUser,
-- 空值处理避免create_time为空时DATE_FORMAT返回NULL
DATE_FORMAT(IFNULL(bw.create_time, '1970-01-01 00:00:00'), '%Y-%m-%d %H:%i:%s') AS createTime,
bw.approval_user AS approvalUser,
-- 空值处理approval_time可能为空统一格式
DATE_FORMAT(IFNULL(bw.approval_time, '1970-01-01 00:00:00'), '%Y-%m-%d %H:%i:%s') AS approvalTime
FROM bm_warehousing bw
LEFT JOIN ma_apply_details mad ON mad.cs_id = bw.order_id
LEFT JOIN ma_dev_info dev ON mad.dev_id = dev.ma_id
INNER JOIN ma_type_view mt ON mt.typeId = dev.type_id
WHERE bw.id = #{id}
UNION ALL
SELECT bw.code AS code,
tt.type_name AS devModel,
tt1.type_name AS name,
ifnull(tl.tool_code, '/') AS devCode,
if(tt.manage_type = '1', '数量工具', '编码工具') AS devType,
CONCAT_WS('>', tt3.type_name, tt2.type_name, tt1.type_name) AS category,
ifnull(tl.identify_code, '/') AS identifyCode,
dc.apply_num AS num,
bw.create_user AS createUser,
-- 空值处理避免create_time为空时DATE_FORMAT返回NULL
DATE_FORMAT(IFNULL(bw.create_time, '1970-01-01 00:00:00'), '%Y-%m-%d %H:%i:%s') AS createTime,
bw.approval_user AS approvalUser,
-- 空值处理approval_time可能为空统一格式
DATE_FORMAT(IFNULL(bw.approval_time, '1970-01-01 00:00:00'), '%Y-%m-%d %H:%i:%s') AS approvalTime
FROM bm_warehousing bw -- 关联工具台账(变更详情的设备编码 = 工具编码)
LEFT JOIN tool_apply_details dc on dc.apply_id = bw.apply_id
LEFT JOIN tool_ledger tl ON tl.id = dc.tool_id
LEFT JOIN tool_type tt ON tl.type_id = tt.type_id
LEFT JOIN tool_type tt1 on tt.parent_id = tt1.type_id
LEFT JOIN tool_type tt2 on tt1.parent_id = tt2.type_id
LEFT JOIN tool_type tt3 on tt2.parent_id = tt3.type_id
LEFT JOIN tool_type tt4 on tt3.parent_id = tt4.type_id AND tt.del_flag = '0'
WHERE bw.id = #{id}
</select>
<select id="getMaIds" resultType="java.lang.String">
SELECT dev_id AS `key`
FROM ma_apply_details
where cs_id = #{orderId}
</select>
2025-12-23 16:26:26 +08:00
</mapper>