|
|
<?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>
|