You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

75 lines
4.7 KiB

<?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.gaotao.modules.autoWareHourceHaian.mapper.HaiAnSortingBoardMapper">
<!-- 全部表含关联和EXISTS均使用NOLOCK,可能脏读、漏读或重复读,仅供看板,不作为发料/预定/库存决策;以WCS标签驱动,WMS缺失也保留标签 - rqrq -->
<select id="listSortingBoardItems" resultType="com.gaotao.modules.autoWareHourceHaian.entity.dashboard.HaiAnSortingBoardItem">
SELECT requested.rfidBarcode AS rfidBarcode,
CASE WHEN hu.matchCount = 1 AND hu.reserveFlag = 'Y'
THEN ISNULL(hu.orderNo, '') ELSE '' END AS orderNo,
CASE WHEN hu.matchCount = 1 AND hu.reserveFlag = 'Y'
THEN ISNULL(ord.orderPartNo, '') ELSE '' END AS orderPartNo,
CASE WHEN hu.matchCount = 1 THEN ISNULL(hu.partNo, '') ELSE '' END AS partNo,
CASE WHEN hu.matchCount = 1 THEN ISNULL(hu.partDesc, '') ELSE '' END AS partDesc,
<!-- 数量只在唯一命中标签时取出,重码或未找到不拼最大值,避免看板显示错误数量 - rqrq -->
CASE WHEN hu.matchCount = 1 THEN hu.qty ELSE NULL END AS qty,
<!-- 人工看板仅在标签没有有效预留申请单时显示数据异常;产品编码关联及领料明细缺失不改变状态,无锁结果仅供展示 - rqrq -->
CASE WHEN ISNULL(hu.hasReservation, 0) = 0 THEN N'数据异常'
WHEN EXISTS (
SELECT 1
FROM haian_SOIssueNotifyOrderMaterialList_detail d WITH (NOLOCK)
WHERE d.site = #{site}
AND d.serialNo = requested.rfidBarcode
AND d.out_wcs_flag = 'N'
) THEN N'未完成' ELSE N'已完成' END AS status,
CASE WHEN hu.matchCount = 0 THEN N'WMS未找到该工厂标签'
WHEN ISNULL(hu.hasReservation, 0) = 0 THEN N'标签当前无有效预留信息'
WHEN hu.matchCount &gt; 1 THEN N'标签存在多条记录,请核对账套'
WHEN NULLIF(LTRIM(RTRIM(hu.orderNo)), '') IS NULL THEN N'标签预定工单号为空'
WHEN NULLIF(LTRIM(RTRIM(ord.orderPartNo)), '') IS NULL THEN N'预定订单未匹配产品编码'
ELSE '' END AS message
FROM (
<choose>
<when test="rfidBarcodes != null and rfidBarcodes.size() &gt; 0">
<foreach collection="rfidBarcodes" item="rfid" separator=" UNION ALL ">
SELECT CAST(#{rfid} AS NVARCHAR(200)) AS rfidBarcode
</foreach>
</when>
<otherwise>
SELECT CAST(NULL AS NVARCHAR(200)) AS rfidBarcode WHERE 1 = 0
</otherwise>
</choose>
) requested
<!-- 聚合检测同码多账套,并在同一条标签上确认预留标志与申请单号,避免不同记录拼出虚假的预留;工厂边界使用site_sub映射 - rqrq -->
OUTER APPLY (
SELECT COUNT(1) AS matchCount,
MAX(h.site) AS subSite,
MAX(h.part_no) AS partNo,
MAX(h.part_desc) AS partDesc,
MAX(h.qty) AS qty,
MAX(h.reserve_flag) AS reserveFlag,
MAX(CASE WHEN h.reserve_flag = 'Y'
AND NULLIF(LTRIM(RTRIM(h.reserve_order_ref1)), '') IS NOT NULL
THEN 1 ELSE 0 END) AS hasReservation,
MAX(h.reserve_order_ref1) AS notifyNo,
MAX(h.reserve_order_ref2) AS itemNo,
MAX(h.reserve_order_ref3) AS orderNo
FROM handling_unit h WITH (NOLOCK)
WHERE h.unit_id = requested.rfidBarcode
AND (h.site = #{site} OR EXISTS (
SELECT 1 FROM site_sub ss WITH (NOLOCK)
WHERE ss.siteid = #{site} AND ss.subsiteid = h.site
))
) hu
<!-- 仅当前有效预定按完整工厂/子账套/申请单/订单行关联产品,不反查标签历史任务,避免工单串单 - rqrq -->
OUTER APPLY (
SELECT CASE WHEN COUNT(1) = 1 THEN MAX(o.fgpart_no) ELSE '' END AS orderPartNo
FROM haian_SOIssueNotifyOrderList o WITH (NOLOCK)
WHERE hu.matchCount = 1 AND hu.reserveFlag = 'Y'
AND o.site = #{site}
AND o.sub_site = hu.subSite
AND o.notify_no = hu.notifyNo
AND CONVERT(VARCHAR(50), o.item_no) = hu.itemNo
AND o.soorder_no = hu.orderNo
) ord
</select>
</mapper>