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

221 lines
12 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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,
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})
</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>
<if test="orderId != null">order_id = #{orderId},</if>
<if test="applyId != null">apply_id = #{applyId},</if>
<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>
<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>
<!-- 根据id查询 -->
<select id="selectById" parameterType="Integer"
resultType="com.bonus.material.warehousing.domain.WarehousingEntity">
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
WHERE id = #{id}
AND is_deleted = 0
</select>
<!-- 条件查询列表 -->
<select id="selectList" parameterType="com.bonus.material.warehousing.domain.WarehousingEntity"
resultType="com.bonus.material.warehousing.domain.WarehousingEntity">
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
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
<where>
is_deleted = 0
<if test="code != null and code != ''">
AND bw.code LIKE CONCAT('%', #{code}, '%')
</if>
<if test="createUser != null and createUser != ''">
AND bw.create_user LIKE CONCAT('%', #{createUser}, '%')
</if>
<if test="status != null and status != ''">
AND bw.status = #{status}
</if>
<if test="companyId != null and companyId != ''">
AND su.dept_id = #{companyId}
</if>
<if test="startTime != null and endTime != null ">
and bw.create_time &gt;= #{startTime}
and bw.create_time &lt; DATE_ADD(#{endTime}, INTERVAL 1 DAY)
</if>
</where>
order by bw.create_time DESC,bw.status
</select>
<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>
</mapper>