<?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">
|
<mapper namespace="com.vincent.rsf.server.manager.mapper.LocItemMapper">
|
<select id="listByMatnr" resultType="com.vincent.rsf.server.manager.entity.LocItem">
|
SELECT
|
*
|
FROM
|
(
|
SELECT
|
li.id,
|
li.loc_id,
|
li.loc_code,
|
l.barcode,
|
l.channel,
|
li.matnr_id,
|
li.matnr_code,
|
li.maktx,
|
li.batch,
|
li.unit,
|
SUM( li.anfme ) anfme,
|
li.fields_index
|
FROM
|
man_loc_item li
|
INNER JOIN man_loc l ON l.id = li.loc_id
|
WHERE l.use_status = #{type}
|
<if test="channel != null">
|
AND l.channel = #{channel}
|
</if>
|
GROUP BY
|
loc_id,
|
matnr_id,
|
batch,
|
fields_index
|
)t
|
${ew.customSqlSegment}
|
</select>
|
|
<select id="listStockByMatnrIds" resultType="java.util.HashMap">
|
SELECT
|
li.matnr_id AS matnrId,
|
COALESCE(SUM(li.anfme), 0) AS stockQty,
|
GROUP_CONCAT(DISTINCT li.loc_code ORDER BY li.loc_code) AS locCodes
|
<if test="locUseStatus == null or locUseStatus == ''">
|
, GROUP_CONCAT(DISTINCT l.use_status ORDER BY l.use_status) AS locStatuses
|
</if>
|
FROM man_loc_item li
|
INNER JOIN man_loc l ON l.id = li.loc_id AND (l.deleted = 0 OR l.deleted IS NULL)
|
WHERE li.deleted = 0
|
AND li.matnr_id IN
|
<foreach collection="matnrIds" item="id" open="(" separator="," close=")">
|
#{id}
|
</foreach>
|
<if test="locUseStatus != null and locUseStatus != ''">
|
AND l.use_status = #{locUseStatus}
|
</if>
|
GROUP BY li.matnr_id
|
</select>
|
|
<!-- 按物料+状态+库位分组:每行一个库位及其数量,汇总与拼接在 Java 中完成以减轻库压力 -->
|
<select id="listStockByMatnrIdsGroupByStatusAndLoc" resultType="java.util.HashMap">
|
SELECT
|
li.matnr_id AS matnrId,
|
l.use_status AS useStatus,
|
li.loc_code AS locCode,
|
COALESCE(SUM(li.anfme), 0) AS locQty
|
FROM man_loc_item li
|
INNER JOIN man_loc l ON l.id = li.loc_id AND (l.deleted = 0 OR l.deleted IS NULL)
|
WHERE li.deleted = 0
|
AND li.matnr_id IN
|
<foreach collection="matnrIds" item="id" open="(" separator="," close=")">
|
#{id}
|
</foreach>
|
<if test="locUseStatus != null and locUseStatus != ''">
|
AND l.use_status = #{locUseStatus}
|
</if>
|
GROUP BY li.matnr_id, l.use_status, li.loc_code
|
ORDER BY li.matnr_id, l.use_status, li.loc_code
|
</select>
|
</mapper>
|