WorkOrderScheduleMapper.xml 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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="cn.iocoder.yudao.module.makeplan.dal.mysql.WorkOrderScheduleMapper">
  4. <!-- 工单排产列表查询 -->
  5. <select id="selectSchedulePage" resultType="cn.iocoder.yudao.module.makeplan.controller.admin.workorder.vo.WorkOrderScheduleRespVO">
  6. SELECT
  7. a.RecID AS id,
  8. exm.checktime,
  9. a.Batch AS batch,
  10. a.Drawing AS drawing,
  11. a.Typed AS typed,
  12. a.WorkOrd AS workOrd,
  13. a.OrdDate AS ordDate,
  14. a.DueDate AS dueDate,
  15. a.ItemNum AS itemNum,
  16. a.Project AS project,
  17. a.QtyOrded AS qtyOrded,
  18. a.QtyCompleted AS qtyCompleted,
  19. a.Remark AS remark,
  20. LOWER(a.Status) AS status,
  21. a.WoTyped AS woTyped,
  22. b.Descr AS descr,
  23. b.Descr1 AS descr1,
  24. a.lbrvar,
  25. r.Area AS area,
  26. se.custom_no AS customNo,
  27. cm.Terms AS terms,
  28. a.IsInitial AS isInitial,
  29. CASE
  30. WHEN cm.Terms = '' OR cm.Terms IS NULL THEN
  31. CASE r.Area
  32. WHEN '中国' THEN DATE_ADD(a.DueDate, INTERVAL 15 DAY)
  33. WHEN '海外' THEN DATE_ADD(a.DueDate, INTERVAL 8 DAY)
  34. ELSE NULL
  35. END
  36. ELSE
  37. CASE
  38. WHEN cm.Terms = '海外' THEN DATE_ADD(a.DueDate, INTERVAL 8 DAY)
  39. ELSE DATE_ADD(a.DueDate, INTERVAL 15 DAY)
  40. END
  41. END AS mjtime,
  42. a.LotSerial AS lotSerial,
  43. CASE WHEN a.CreateGLforLaborVar = 1 THEN '是' ELSE '否' END AS createGLforLaborVar,
  44. a.QtyOrded - a.QtyCompleted AS zz,
  45. s.PlanDate AS planDate,
  46. s.ProdDate AS prodDate,
  47. CASE
  48. WHEN s.PlanDate IS NULL THEN ''
  49. WHEN s.PlanDate IS NOT NULL AND s.ProdDate IS NULL THEN
  50. CASE
  51. WHEN DATEDIFF(CURDATE(), s.PlanDate) <= 2 AND DATEDIFF(CURDATE(), s.PlanDate) > 0 THEN '低'
  52. WHEN DATEDIFF(CURDATE(), s.PlanDate) <= 5 AND DATEDIFF(CURDATE(), s.PlanDate) > 2 THEN '中'
  53. WHEN DATEDIFF(CURDATE(), s.PlanDate) > 5 THEN '高'
  54. END
  55. WHEN s.PlanDate IS NOT NULL AND s.ProdDate IS NOT NULL THEN
  56. CASE
  57. WHEN DATEDIFF(s.ProdDate, s.PlanDate) <= 2 AND DATEDIFF(s.ProdDate, s.PlanDate) > 0 THEN '低'
  58. WHEN DATEDIFF(s.ProdDate, s.PlanDate) <= 5 AND DATEDIFF(s.ProdDate, s.PlanDate) > 2 THEN '中'
  59. WHEN DATEDIFF(s.ProdDate, s.PlanDate) > 5 THEN '高'
  60. END
  61. END AS level,
  62. a.IssueSite AS issueSite,
  63. IFNULL(ins.WorkOrd, '') AS insWorkOrd,
  64. CASE
  65. WHEN a.DispatchWeek = '' OR a.DispatchWeek IS NULL THEN
  66. CASE
  67. WHEN a.LotSerial != '' AND a.LotSerial IS NOT NULL THEN
  68. CONCAT('WK', WEEK(STR_TO_DATE(SUBSTRING(a.LotSerial, 1, 6), '%y%m%d')))
  69. ELSE ''
  70. END
  71. ELSE a.DispatchWeek
  72. END AS checkweek,
  73. a.Priority AS priority,
  74. IFNULL(a.LocationStock, 0) + IFNULL(a.OpQtyCompleted, 0) AS locationStock
  75. FROM WorkOrdMaster a
  76. LEFT JOIN ItemMaster b ON a.ItemNum = b.ItemNum AND b.Domain = a.Domain
  77. LEFT JOIN ReplenishmentWeekPlan r ON a.WorkOrd = r.ProductionOrder AND a.Domain = r.factory_id
  78. LEFT JOIN crm_seorder se ON se.bill_no = a.SalesJob
  79. LEFT JOIN CustMaster cm ON cm.Cust = se.custom_no
  80. LEFT JOIN (
  81. SELECT Domain, WorkOrds, MIN(PlanDate) AS PlanDate, MIN(ProdDate) AS ProdDate
  82. FROM PeriodSequenceDet
  83. GROUP BY Domain, WorkOrds
  84. ) s ON a.Domain = s.Domain AND a.WorkOrd = s.WorkOrds
  85. LEFT JOIN (
  86. SELECT morder_no, create_time AS checktime
  87. FROM (
  88. SELECT morder_no, create_time,
  89. ROW_NUMBER() OVER (PARTITION BY morder_no ORDER BY create_time DESC) AS rn
  90. FROM b_examine_result
  91. ) ranked
  92. WHERE rn = 1
  93. ) exm ON exm.morder_no = a.WorkOrd
  94. LEFT JOIN WorkOrdInStorage ins ON a.WorkOrd = ins.WorkOrd AND ins.Remark = '工单预留'
  95. <where>
  96. a.Status != ''
  97. <if test="workOrd != null and workOrd != ''">
  98. AND a.WorkOrd LIKE CONCAT('%', #{workOrd}, '%')
  99. </if>
  100. <if test="itemNum != null and itemNum != ''">
  101. AND a.ItemNum LIKE CONCAT('%', #{itemNum}, '%')
  102. </if>
  103. <if test="status != null and status != ''">
  104. AND LOWER(a.Status) = #{status}
  105. </if>
  106. <if test="woTyped != null and woTyped != ''">
  107. AND a.WoTyped = #{woTyped}
  108. </if>
  109. <if test="batch != null and batch != ''">
  110. AND a.Batch = #{batch}
  111. </if>
  112. <if test="drawing != null and drawing != ''">
  113. AND a.Drawing = #{drawing}
  114. </if>
  115. <if test="customNo != null and customNo != ''">
  116. AND se.custom_no = #{customNo}
  117. </if>
  118. <if test="ordDateStart != null">
  119. AND a.OrdDate &gt;= #{ordDateStart}
  120. </if>
  121. <if test="ordDateEnd != null">
  122. AND a.OrdDate &lt;= #{ordDateEnd}
  123. </if>
  124. <if test="dueDateStart != null">
  125. AND a.DueDate &gt;= #{dueDateStart}
  126. </if>
  127. <if test="dueDateEnd != null">
  128. AND a.DueDate &lt;= #{dueDateEnd}
  129. </if>
  130. <if test="priority != null">
  131. AND a.Priority = #{priority}
  132. </if>
  133. <if test="urgent != null">
  134. AND a.Urgent = #{urgent}
  135. </if>
  136. <if test="isInitial != null">
  137. AND a.IsInitial = #{isInitial}
  138. </if>
  139. </where>
  140. ORDER BY a.UpdateTime DESC, a.Priority DESC
  141. </select>
  142. <!-- 根据ID查询工单详情 -->
  143. <select id="selectScheduleById" resultType="cn.iocoder.yudao.module.makeplan.controller.admin.workorder.vo.WorkOrderScheduleRespVO">
  144. SELECT
  145. a.RecID AS id,
  146. a.Batch AS batch,
  147. a.Drawing AS drawing,
  148. a.Typed AS typed,
  149. a.WorkOrd AS workOrd,
  150. a.OrdDate AS ordDate,
  151. a.DueDate AS dueDate,
  152. a.ItemNum AS itemNum,
  153. a.Project AS project,
  154. a.QtyOrded AS qtyOrded,
  155. a.QtyCompleted AS qtyCompleted,
  156. a.Remark AS remark,
  157. LOWER(a.Status) AS status,
  158. a.WoTyped AS woTyped,
  159. b.Descr AS descr,
  160. b.Descr1 AS descr1,
  161. a.lbrvar,
  162. a.IsInitial AS isInitial,
  163. a.LotSerial AS lotSerial,
  164. CASE WHEN a.CreateGLforLaborVar = 1 THEN '是' ELSE '否' END AS createGLforLaborVar,
  165. a.QtyOrded - a.QtyCompleted AS zz,
  166. a.IssueSite AS issueSite,
  167. a.Priority AS priority,
  168. IFNULL(a.LocationStock, 0) + IFNULL(a.OpQtyCompleted, 0) AS locationStock
  169. FROM WorkOrdMaster a
  170. LEFT JOIN ItemMaster b ON a.ItemNum = b.ItemNum AND b.Domain = a.Domain
  171. WHERE a.RecID = #{id}
  172. </select>
  173. <!-- 调用存储过程关闭工单 -->
  174. <select id="callCloseWorkOrders" statementType="CALLABLE">
  175. {CALL pr_MES_CloseWorkOrders(#{ids})}
  176. </select>
  177. <!-- 同步工艺路线 -->
  178. <update id="syncRoutingByWorkOrd">
  179. DELETE FROM WorkOrdRouting WHERE WorkOrd = #{workOrd};
  180. INSERT INTO WorkOrdRouting(
  181. Domain, Descr, MilestoneOp, WorkOrd, OP, ParentOp, RunTime, ItemNum,
  182. QtyOrded, OverlapUnits, Status, IsActive, CommentIndex, CreateTime,
  183. StdOp, PackingQty, WorkOrdMasterRecID
  184. )
  185. SELECT
  186. w.Domain, r.Descr, r.MilestoneOp, w.WorkOrd, r.OP, r.ParentOp, r.RunTime,
  187. w.ItemNum, w.QtyOrded, r.OverlapUnits, w.Status, 1, r.CommentIndex, NOW(),
  188. r.StdOp, r.PackingQty, w.RecID
  189. FROM WorkOrdMaster w
  190. LEFT JOIN RoutingOpDetail r ON w.ItemNum = r.RoutingCode
  191. WHERE w.WorkOrd = #{workOrd} AND r.MilestoneOp IS NOT NULL
  192. </update>
  193. <!-- 批量查询工单信息 -->
  194. <select id="selectBatchByIds" resultType="cn.iocoder.yudao.module.makeplan.dal.dataobject.WorkOrderScheduleDO">
  195. SELECT * FROM WorkOrdMaster
  196. WHERE RecID IN
  197. <foreach collection="ids" item="id" open="(" separator="," close=")">
  198. #{id}
  199. </foreach>
  200. </select>
  201. </mapper>