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
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 > 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() > 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>
|