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

2 months ago
​
​
2 months ago
2 months ago
​
​
​
​
​
​
​
1 week ago
​
4 weeks ago
​
1 month ago
2 months ago
​
​
​
​
​
​
4 weeks ago
2 months ago
2 months ago
​
2 months ago
​
​
​
​
​
​
​
​
​
​
​
​
4 weeks ago
2 months ago
​
​
​
​
1 week ago
2 months ago
4 weeks ago
​
​
2 months ago
​
​
​
​
​
​
​
​
​
2 months ago
2 months ago
​
​
​
​
​
​
​
​
​
​
​
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.gaotao.modules.autoWareHourceHaian.mapper.HaiAnSortingBoardMapper">
  4. <!-- 全部表含关联和EXISTS均使用NOLOCK,可能脏读、漏读或重复读,仅供看板,不作为发料/预定/库存决策;以WCS标签驱动,WMS缺失也保留标签 - rqrq -->
  5. <select id="listSortingBoardItems" resultType="com.gaotao.modules.autoWareHourceHaian.entity.dashboard.HaiAnSortingBoardItem">
  6. SELECT requested.rfidBarcode AS rfidBarcode,
  7. CASE WHEN hu.matchCount = 1 AND hu.reserveFlag = 'Y'
  8. THEN ISNULL(hu.orderNo, '') ELSE '' END AS orderNo,
  9. CASE WHEN hu.matchCount = 1 AND hu.reserveFlag = 'Y'
  10. THEN ISNULL(ord.orderPartNo, '') ELSE '' END AS orderPartNo,
  11. CASE WHEN hu.matchCount = 1 THEN ISNULL(hu.partNo, '') ELSE '' END AS partNo,
  12. CASE WHEN hu.matchCount = 1 THEN ISNULL(hu.partDesc, '') ELSE '' END AS partDesc,
  13. <!-- 数量只在唯一命中标签时取出,重码或未找到不拼最大值,避免看板显示错误数量 - rqrq -->
  14. CASE WHEN hu.matchCount = 1 THEN hu.qty ELSE NULL END AS qty,
  15. <!-- 人工看板仅在标签没有有效预留申请单时显示数据异常;产品编码关联及领料明细缺失不改变状态,无锁结果仅供展示 - rqrq -->
  16. CASE WHEN ISNULL(hu.hasReservation, 0) = 0 THEN N'数据异常'
  17. WHEN EXISTS (
  18. SELECT 1
  19. FROM haian_SOIssueNotifyOrderMaterialList_detail d WITH (NOLOCK)
  20. WHERE d.site = #{site}
  21. AND d.serialNo = requested.rfidBarcode
  22. AND d.out_wcs_flag = 'N'
  23. ) THEN N'未完成' ELSE N'已完成' END AS status,
  24. CASE WHEN hu.matchCount = 0 THEN N'WMS未找到该工厂标签'
  25. WHEN ISNULL(hu.hasReservation, 0) = 0 THEN N'标签当前无有效预留信息'
  26. WHEN hu.matchCount &gt; 1 THEN N'标签存在多条记录,请核对账套'
  27. WHEN NULLIF(LTRIM(RTRIM(hu.orderNo)), '') IS NULL THEN N'标签预定工单号为空'
  28. WHEN NULLIF(LTRIM(RTRIM(ord.orderPartNo)), '') IS NULL THEN N'预定订单未匹配产品编码'
  29. ELSE '' END AS message
  30. FROM (
  31. <choose>
  32. <when test="rfidBarcodes != null and rfidBarcodes.size() &gt; 0">
  33. <foreach collection="rfidBarcodes" item="rfid" separator=" UNION ALL ">
  34. SELECT CAST(#{rfid} AS NVARCHAR(200)) AS rfidBarcode
  35. </foreach>
  36. </when>
  37. <otherwise>
  38. SELECT CAST(NULL AS NVARCHAR(200)) AS rfidBarcode WHERE 1 = 0
  39. </otherwise>
  40. </choose>
  41. ) requested
  42. <!-- 聚合检测同码多账套,并在同一条标签上确认预留标志与申请单号,避免不同记录拼出虚假的预留;工厂边界使用site_sub映射 - rqrq -->
  43. OUTER APPLY (
  44. SELECT COUNT(1) AS matchCount,
  45. MAX(h.site) AS subSite,
  46. MAX(h.part_no) AS partNo,
  47. MAX(h.part_desc) AS partDesc,
  48. MAX(h.qty) AS qty,
  49. MAX(h.reserve_flag) AS reserveFlag,
  50. MAX(CASE WHEN h.reserve_flag = 'Y'
  51. AND NULLIF(LTRIM(RTRIM(h.reserve_order_ref1)), '') IS NOT NULL
  52. THEN 1 ELSE 0 END) AS hasReservation,
  53. MAX(h.reserve_order_ref1) AS notifyNo,
  54. MAX(h.reserve_order_ref2) AS itemNo,
  55. MAX(h.reserve_order_ref3) AS orderNo
  56. FROM handling_unit h WITH (NOLOCK)
  57. WHERE h.unit_id = requested.rfidBarcode
  58. AND (h.site = #{site} OR EXISTS (
  59. SELECT 1 FROM site_sub ss WITH (NOLOCK)
  60. WHERE ss.siteid = #{site} AND ss.subsiteid = h.site
  61. ))
  62. ) hu
  63. <!-- 仅当前有效预定按完整工厂/子账套/申请单/订单行关联产品,不反查标签历史任务,避免工单串单 - rqrq -->
  64. OUTER APPLY (
  65. SELECT CASE WHEN COUNT(1) = 1 THEN MAX(o.fgpart_no) ELSE '' END AS orderPartNo
  66. FROM haian_SOIssueNotifyOrderList o WITH (NOLOCK)
  67. WHERE hu.matchCount = 1 AND hu.reserveFlag = 'Y'
  68. AND o.site = #{site}
  69. AND o.sub_site = hu.subSite
  70. AND o.notify_no = hu.notifyNo
  71. AND CONVERT(VARCHAR(50), o.item_no) = hu.itemNo
  72. AND o.soorder_no = hu.orderNo
  73. ) ord
  74. </select>
  75. </mapper>