2026-04-17_aidopdev_linkage_ddl_part6_procedure.sql 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  1. DELIMITER //
  2. DROP PROCEDURE IF EXISTS `pr_Mes_LinkagePlan`//
  3. CREATE PROCEDURE `pr_Mes_LinkagePlan`(IN Params VARCHAR(1000))
  4. BEGIN
  5. DECLARE RowCnt INT DEFAULT 0;
  6. -- 清空表
  7. DELETE FROM LinkagePlan;
  8. -- 第一部分:插入计划数据和实际数据
  9. INSERT INTO LinkagePlan(
  10. id, bill_no, custom_no, order_type, item_number, Descr, Descr1, ItemType,
  11. qty, update_time, sys_capacity_date, bomstart, bomend, linestart, lineend,
  12. productstart, productend, needtime, sys_material_date, cgneedtime, cgend,
  13. blstart, blend, starttime, endtime, ipqcjystart, ipqcjyend, fqcjystart,
  14. fqcjyend, rkstart, rkend, fystarttime, fyendtime, `type`, levelnum, isuse
  15. )
  16. SELECT * FROM (
  17. -- 计划数据查询
  18. SELECT
  19. b.id,
  20. a.bill_no,
  21. a.custom_no,
  22. IF(a.order_type='1', '销售', '计划') as order_type,
  23. b.item_number,
  24. c.Descr,
  25. c.Descr1,
  26. c.ownerapplication as ItemType,
  27. b.qty,
  28. h.create_time as update_time,
  29. b.sys_capacity_date,
  30. h.create_time as bomstart,
  31. DATE_ADD(h.create_time, INTERVAL IFNULL(c.BOMDesignTime, 0) DAY) as bomend,
  32. DATE_ADD(h.create_time, INTERVAL IFNULL(c.BOMDesignTime, 0) DAY) as linestart,
  33. DATE_ADD(h.create_time, INTERVAL (IFNULL(c.BOMDesignTime, 0) + IFNULL(c.RoutingDesignTime, 0)) DAY) as lineend,
  34. DATE_ADD(h.create_time, INTERVAL (IFNULL(c.BOMDesignTime, 0) + IFNULL(c.RoutingDesignTime, 0)) DAY) as productstart,
  35. DATE_ADD(h.create_time, INTERVAL (IFNULL(c.BOMDesignTime, 0) + IFNULL(c.RoutingDesignTime, 0) +
  36. CEILING(IFNULL(((b.qty-1)*d.maxruntime+d.runtime)/8, 0))) DAY) as productend,
  37. h.create_time as needtime,
  38. b.sys_material_date,
  39. h.create_time as cgneedtime,
  40. e.kitting_time as cgend,
  41. e.kitting_time as blstart,
  42. DATE_ADD(e.kitting_time, INTERVAL IFNULL(c.mfgmttr, 0) DAY) as blend,
  43. g.starttime,
  44. g.endtime,
  45. g.endtime as ipqcjystart,
  46. DATE_ADD(g.endtime, INTERVAL IFNULL(c.InsLT, 0) DAY) as ipqcjyend,
  47. g.endtime as fqcjystart,
  48. DATE_ADD(g.endtime, INTERVAL IFNULL(c.InsLT, 0) DAY) as fqcjyend,
  49. DATE_ADD(g.endtime, INTERVAL IFNULL(c.InsLT, 0) DAY) as rkstart,
  50. DATE_ADD(g.endtime, INTERVAL (IFNULL(c.InsLT, 0) + 1) DAY) as rkend,
  51. DATE_ADD(g.endtime, INTERVAL (IFNULL(c.InsLT, 0) + 1) DAY) as fystarttime,
  52. DATE_ADD(g.endtime, INTERVAL (IFNULL(c.InsLT, 0) + 2) DAY) as fyendtime,
  53. '计划' as `type`,
  54. 2 as levelnum,
  55. 0 as isuse
  56. FROM crm_seorder a
  57. LEFT JOIN crm_seorderentry b ON a.bill_no = b.bill_no
  58. LEFT JOIN ItemMaster c ON b.item_number = c.ItemNum
  59. LEFT JOIN (
  60. SELECT RoutingCode, SUM(runtime) as runtime, MAX(runtime) as maxruntime
  61. FROM RoutingOpDetail
  62. GROUP BY RoutingCode
  63. ) d ON c.ItemNum = d.RoutingCode
  64. LEFT JOIN (
  65. SELECT sentry_id, MAX(kitting_time) as kitting_time
  66. FROM (
  67. SELECT
  68. a.sentry_id,
  69. b.kitting_time,
  70. ROW_NUMBER() OVER (PARTITION BY a.sentry_id ORDER BY a.create_time DESC) AS rn
  71. FROM b_examine_result a
  72. JOIN b_bom_child_examine b ON a.id = b.examine_id
  73. WHERE a.sorderid IS NOT NULL AND b.erp_cls IN ('2','3')
  74. ) ex
  75. WHERE rn = 1
  76. GROUP BY sentry_id
  77. ) e ON b.id = e.sentry_id
  78. LEFT JOIN mes_moentry f ON b.id = f.soentry_id
  79. LEFT JOIN mes_morder h ON f.moentry_mono = h.morder_no AND h.parent_id IS NULL
  80. LEFT JOIN (
  81. SELECT workords, MIN(plandate) as starttime, MAX(plandate) as endtime
  82. FROM PeriodSequenceDet
  83. GROUP BY workords
  84. ) g ON f.moentry_mono = g.workords
  85. WHERE a.IsDeleted = 0 AND h.create_time IS NOT NULL
  86. UNION ALL
  87. -- 实际数据查询
  88. SELECT
  89. b.id,
  90. a.bill_no,
  91. a.custom_no,
  92. IF(a.order_type='1', '销售', '计划') as order_type,
  93. b.item_number,
  94. c.Descr,
  95. c.Descr1,
  96. c.ownerapplication as ItemType,
  97. b.qty,
  98. h.create_time as update_time,
  99. b.sys_capacity_date,
  100. h.create_time as bomstart,
  101. nb.CreateTime as bomend,
  102. h.create_time as linestart,
  103. nb.CreateTime as lineend,
  104. d.starttime as productstart,
  105. d.endtime as productend,
  106. h.create_time as needtime,
  107. b.sys_material_date,
  108. e.cgneedtime as cgneedtime,
  109. e.kitting_time as cgend,
  110. nb.CreateTime as blstart,
  111. nd.blend as blend,
  112. g.starttime,
  113. g.endtime,
  114. e.FAPPLYTIME as ipqcjystart,
  115. e.FINSPESTARTDATE as ipqcjyend,
  116. g.endtime as fqcjystart,
  117. fqc.fqcDate as fqcjyend,
  118. i.starttime as rkstart,
  119. i.endtime as rkend,
  120. asn.starttime as fystarttime,
  121. asn.endtime as fyendtime,
  122. '实际' as `type`,
  123. 1 as levelnum,
  124. 0 as isuse
  125. FROM crm_seorder a
  126. LEFT JOIN crm_seorderentry b ON a.bill_no = b.bill_no
  127. LEFT JOIN ItemMaster c ON b.item_number = c.ItemNum
  128. LEFT JOIN (
  129. SELECT
  130. pr.sentry_id,
  131. MAX(sh.createtime) as kitting_time,
  132. MIN(jq.jqhf) as cgneedtime,
  133. MIN(iqcjy.FINSPESTARTDATE) as FINSPESTARTDATE,
  134. MAX(iqcjy.FAPPLYTIME) as FAPPLYTIME
  135. FROM srm_pr_main pr
  136. LEFT JOIN PurOrdDetail pod ON pr.pr_billno = pod.Req
  137. LEFT JOIN vscm_cgshrk sh ON pod.PurOrd = sh.OrdNbr AND pod.Line = sh.OrdLine
  138. LEFT JOIN scm_jhjh_jq jq ON pod.PurOrd = jq.cgdd AND pod.Line = jq.ddhh
  139. LEFT JOIN (
  140. SELECT
  141. f.po_bill,
  142. f.po_billline,
  143. MIN(a.FINSPESTARTDATE) as FINSPESTARTDATE,
  144. MAX(b.FAPPLYTIME) as FAPPLYTIME
  145. FROM qms_qcp_inspbill a
  146. LEFT JOIN qms_qcp_inspecapplyn b ON a.lydjbh = b.FBILLNO
  147. LEFT JOIN qms_qcp_insappnentry c ON b.id = c.glid
  148. JOIN scm_shd cd ON c.shdh = cd.shddh
  149. LEFT JOIN scm_shdzb f ON f.shpc = c.FLOTNUMBER
  150. AND f.sh_material_code = c.FMATERIALCFG
  151. AND f.glid = cd.id
  152. GROUP BY f.po_bill, f.po_billline
  153. ) iqcjy ON pod.PurOrd = iqcjy.po_bill AND pod.Line = iqcjy.po_billline
  154. WHERE jq.flag = '1' AND pr.sentry_id IS NOT NULL
  155. GROUP BY pr.sentry_id
  156. ) e ON e.sentry_id = b.id
  157. LEFT JOIN mes_moentry f ON b.id = f.soentry_id
  158. LEFT JOIN mes_morder h ON f.moentry_mono = h.morder_no AND h.parent_id IS NULL
  159. LEFT JOIN (
  160. SELECT workords, MIN(plandate) as starttime, MAX(plandate) as endtime
  161. FROM PeriodSequenceDet
  162. GROUP BY workords
  163. ) d ON h.morder_no = d.workords
  164. LEFT JOIN (
  165. SELECT WorkOrd, MIN(CreateTime) as CreateTime
  166. FROM NbrMaster
  167. WHERE Type = 'SM'
  168. GROUP BY WorkOrd
  169. ) nb ON h.morder_no = nb.WorkOrd
  170. LEFT JOIN (
  171. SELECT WorkOrd, MIN(UpdateTime) as blend
  172. FROM NbrDetail
  173. GROUP BY WorkOrd
  174. ) nd ON h.morder_no = nd.WorkOrd
  175. LEFT JOIN (
  176. SELECT workords, MIN(plandate) as starttime, MAX(plandate) as endtime
  177. FROM PeriodSequenceDet
  178. WHERE CompQty > 0
  179. GROUP BY workords
  180. ) g ON f.moentry_mono = g.workords
  181. LEFT JOIN (
  182. SELECT WorkOrd, MIN(CreateTime) as starttime, MAX(CreateTime) as endtime
  183. FROM InvTransHist
  184. WHERE TransType = 'rct-wo' AND QtyChange > 0
  185. GROUP BY WorkOrd
  186. ) i ON h.morder_no = i.WorkOrd
  187. LEFT JOIN (
  188. SELECT
  189. ad.OrdNbr,
  190. ad.ContainerItem,
  191. ad.OrdLine,
  192. MIN(ad.CreateTime) as starttime,
  193. MAX(ad.UpdateTime) as endtime
  194. FROM ASNBOLShipperDetail ad
  195. INNER JOIN ASNBOLShipperMaster am ON ad.ASNBOLShipperRecID = am.RecID
  196. WHERE am.shtype = 'SH' AND am.typed <> 'S'
  197. GROUP BY ad.OrdNbr, ad.ContainerItem, ad.OrdLine
  198. ) asn ON b.bill_no = asn.OrdNbr AND b.item_number = asn.ContainerItem
  199. LEFT JOIN WorkOrdMaster wm ON h.morder_no = wm.WorkOrd
  200. LEFT JOIN (
  201. SELECT sczld, MAX(FINSPEENDDATE) as fqcDate
  202. FROM qms_qcpp_inspbill
  203. GROUP BY sczld
  204. ) fqc ON wm.Batch = fqc.sczld
  205. WHERE a.IsDeleted = 0 AND h.create_time IS NOT NULL
  206. ) as viewall;
  207. -- 第二部分:插入偏差数据
  208. INSERT INTO LinkagePlan(
  209. id, bill_no, custom_no, order_type, item_number, Descr, Descr1, ItemType,
  210. qty, update_time, sys_capacity_date, bomstart, bomend, linestart, lineend,
  211. productstart, productend, needtime, sys_material_date, cgneedtime, cgend,
  212. blstart, blend, starttime, endtime, ipqcjystart, ipqcjyend, fqcjystart,
  213. fqcjyend, rkstart, rkend, fystarttime, fyendtime, `type`, levelnum, isuse
  214. )
  215. SELECT
  216. a.id,
  217. a.bill_no,
  218. a.custom_no,
  219. a.order_type,
  220. b.item_number,
  221. a.Descr,
  222. a.Descr1,
  223. a.ItemType,
  224. b.qty,
  225. a.update_time,
  226. b.sys_capacity_date,
  227. DATEDIFF(b.bomstart, a.bomstart) as bomstart,
  228. DATEDIFF(b.bomend, a.bomend) as bomend,
  229. DATEDIFF(b.linestart, a.linestart) as linestart,
  230. DATEDIFF(b.lineend, a.lineend) as lineend,
  231. DATEDIFF(b.productstart, a.productstart) as productstart,
  232. DATEDIFF(b.productend, a.productend) as productend,
  233. DATEDIFF(b.needtime, a.needtime) as needtime,
  234. DATEDIFF(b.sys_material_date, a.sys_material_date) as sys_material_date,
  235. DATEDIFF(b.cgneedtime, a.cgneedtime) as cgneedtime,
  236. DATEDIFF(b.cgend, a.cgend) as cgend,
  237. DATEDIFF(b.blstart, a.blstart) as blstart,
  238. DATEDIFF(b.blend, a.blend) as blend,
  239. DATEDIFF(b.starttime, a.starttime) as starttime,
  240. DATEDIFF(b.endtime, a.endtime) as endtime,
  241. DATEDIFF(b.ipqcjystart, a.ipqcjystart) as ipqcjystart,
  242. DATEDIFF(b.ipqcjyend, a.ipqcjyend) as ipqcjyend,
  243. DATEDIFF(b.fqcjystart, a.fqcjystart) as fqcjystart,
  244. DATEDIFF(b.fqcjyend, a.fqcjyend) as fqcjyend,
  245. DATEDIFF(b.rkstart, a.rkstart) as rkstart,
  246. DATEDIFF(b.rkend, a.rkend) as rkend,
  247. DATEDIFF(b.fystarttime, a.fystarttime) as fystarttime,
  248. DATEDIFF(b.fyendtime, a.fyendtime) as fyendtime,
  249. '偏差' as `type`,
  250. 0 as levelnum,
  251. 0 as isuse
  252. FROM (SELECT * FROM LinkagePlan WHERE `type` = '计划') a
  253. LEFT JOIN (SELECT * FROM LinkagePlan WHERE `type` = '实际') b ON a.id = b.id;
  254. -- 统计行数
  255. SELECT COUNT(*) INTO RowCnt FROM LinkagePlan WHERE isuse = 1;
  256. -- 第三部分:更新背景色标记
  257. UPDATE LinkagePlan a
  258. LEFT JOIN (
  259. SELECT
  260. a.id,
  261. a.`type`,
  262. CONCAT(
  263. -- bomstart背景色
  264. CASE
  265. WHEN a.`type` = '计划' THEN
  266. CASE
  267. WHEN a.bomstart IS NOT NULL AND b.bomstart IS NULL AND DATEDIFF(NOW(), a.bomstart) > 7 THEN 'bomstart:red;'
  268. WHEN a.bomstart IS NOT NULL AND b.bomstart IS NULL AND DATEDIFF(NOW(), a.bomstart) > 0 THEN 'bomstart:yellow;'
  269. ELSE ''
  270. END
  271. WHEN a.`type` = '偏差' THEN
  272. CASE
  273. WHEN IFNULL(CAST(a.bomstart AS SIGNED), 0) > 7 THEN 'bomstart:red;'
  274. WHEN IFNULL(CAST(a.bomstart AS SIGNED), 0) > 0 THEN 'bomstart:yellow;'
  275. ELSE ''
  276. END
  277. ELSE ''
  278. END,
  279. -- bomend背景色
  280. CASE
  281. WHEN a.`type` = '计划' THEN
  282. CASE
  283. WHEN a.bomend IS NOT NULL AND b.bomend IS NULL AND DATEDIFF(NOW(), a.bomend) > 7 THEN 'bomend:red;'
  284. WHEN a.bomend IS NOT NULL AND b.bomend IS NULL AND DATEDIFF(NOW(), a.bomend) > 0 THEN 'bomend:yellow;'
  285. ELSE ''
  286. END
  287. WHEN a.`type` = '偏差' THEN
  288. CASE
  289. WHEN IFNULL(CAST(a.bomend AS SIGNED), 0) > 7 THEN 'bomend:red;'
  290. WHEN IFNULL(CAST(a.bomend AS SIGNED), 0) > 0 THEN 'bomend:yellow;'
  291. ELSE ''
  292. END
  293. ELSE ''
  294. END,
  295. -- linestart背景色
  296. CASE
  297. WHEN a.`type` = '计划' THEN
  298. CASE
  299. WHEN a.linestart IS NOT NULL AND b.linestart IS NULL AND DATEDIFF(NOW(), a.linestart) > 7 THEN 'linestart:red;'
  300. WHEN a.linestart IS NOT NULL AND b.linestart IS NULL AND DATEDIFF(NOW(), a.linestart) > 0 THEN 'linestart:yellow;'
  301. ELSE ''
  302. END
  303. WHEN a.`type` = '偏差' THEN
  304. CASE
  305. WHEN IFNULL(CAST(a.linestart AS SIGNED), 0) > 7 THEN 'linestart:red;'
  306. WHEN IFNULL(CAST(a.linestart AS SIGNED), 0) > 0 THEN 'linestart:yellow;'
  307. ELSE ''
  308. END
  309. ELSE ''
  310. END,
  311. -- lineend背景色
  312. CASE
  313. WHEN a.`type` = '计划' THEN
  314. CASE
  315. WHEN a.lineend IS NOT NULL AND b.lineend IS NULL AND DATEDIFF(NOW(), a.lineend) > 7 THEN 'lineend:red;'
  316. WHEN a.lineend IS NOT NULL AND b.lineend IS NULL AND DATEDIFF(NOW(), a.lineend) > 0 THEN 'lineend:yellow;'
  317. ELSE ''
  318. END
  319. WHEN a.`type` = '偏差' THEN
  320. CASE
  321. WHEN IFNULL(CAST(a.lineend AS SIGNED), 0) > 7 THEN 'lineend:red;'
  322. WHEN IFNULL(CAST(a.lineend AS SIGNED), 0) > 0 THEN 'lineend:yellow;'
  323. ELSE ''
  324. END
  325. ELSE ''
  326. END,
  327. -- productstart背景色
  328. CASE
  329. WHEN a.`type` = '计划' THEN
  330. CASE
  331. WHEN a.productstart IS NOT NULL AND b.productstart IS NULL AND DATEDIFF(NOW(), a.productstart) > 7 THEN 'productstart:red;'
  332. WHEN a.productstart IS NOT NULL AND b.productstart IS NULL AND DATEDIFF(NOW(), a.productstart) > 0 THEN 'productstart:yellow;'
  333. ELSE ''
  334. END
  335. WHEN a.`type` = '偏差' THEN
  336. CASE
  337. WHEN IFNULL(CAST(a.productstart AS SIGNED), 0) > 7 THEN 'productstart:red;'
  338. WHEN IFNULL(CAST(a.productstart AS SIGNED), 0) > 0 THEN 'productstart:yellow;'
  339. ELSE ''
  340. END
  341. ELSE ''
  342. END,
  343. -- productend背景色
  344. CASE
  345. WHEN a.`type` = '计划' THEN
  346. CASE
  347. WHEN a.productend IS NOT NULL AND b.productend IS NULL AND DATEDIFF(NOW(), a.productend) > 7 THEN 'productend:red;'
  348. WHEN a.productend IS NOT NULL AND b.productend IS NULL AND DATEDIFF(NOW(), a.productend) > 0 THEN 'productend:yellow;'
  349. ELSE ''
  350. END
  351. WHEN a.`type` = '偏差' THEN
  352. CASE
  353. WHEN IFNULL(CAST(a.productend AS SIGNED), 0) > 7 THEN 'productend:red;'
  354. WHEN IFNULL(CAST(a.productend AS SIGNED), 0) > 0 THEN 'productend:yellow;'
  355. ELSE ''
  356. END
  357. ELSE ''
  358. END,
  359. -- needtime, sys_material_date, cgneedtime, cgend背景色
  360. CASE
  361. WHEN a.`type` = '计划' THEN
  362. CASE
  363. WHEN a.needtime IS NOT NULL AND b.needtime IS NULL AND DATEDIFF(NOW(), a.needtime) > 7 THEN 'needtime:red;'
  364. WHEN a.needtime IS NOT NULL AND b.needtime IS NULL AND DATEDIFF(NOW(), a.needtime) > 0 THEN 'needtime:yellow;'
  365. ELSE ''
  366. END
  367. WHEN a.`type` = '偏差' THEN
  368. CASE
  369. WHEN IFNULL(CAST(a.needtime AS SIGNED), 0) > 7 THEN 'needtime:red;'
  370. WHEN IFNULL(CAST(a.needtime AS SIGNED), 0) > 0 THEN 'needtime:yellow;'
  371. ELSE ''
  372. END
  373. ELSE ''
  374. END,
  375. CASE
  376. WHEN a.`type` = '计划' THEN
  377. CASE
  378. WHEN a.sys_material_date IS NOT NULL AND b.sys_material_date IS NULL AND DATEDIFF(NOW(), a.sys_material_date) > 7 THEN 'sys_material_date:red;'
  379. WHEN a.sys_material_date IS NOT NULL AND b.sys_material_date IS NULL AND DATEDIFF(NOW(), a.sys_material_date) > 0 THEN 'sys_material_date:yellow;'
  380. ELSE ''
  381. END
  382. WHEN a.`type` = '偏差' THEN
  383. CASE
  384. WHEN IFNULL(CAST(a.sys_material_date AS SIGNED), 0) > 7 THEN 'sys_material_date:red;'
  385. WHEN IFNULL(CAST(a.sys_material_date AS SIGNED), 0) > 0 THEN 'sys_material_date:yellow;'
  386. ELSE ''
  387. END
  388. ELSE ''
  389. END,
  390. CASE
  391. WHEN a.`type` = '计划' THEN
  392. CASE
  393. WHEN a.cgneedtime IS NOT NULL AND b.cgneedtime IS NULL AND DATEDIFF(NOW(), a.cgneedtime) > 7 THEN 'cgneedtime:red;'
  394. WHEN a.cgneedtime IS NOT NULL AND b.cgneedtime IS NULL AND DATEDIFF(NOW(), a.cgneedtime) > 0 THEN 'cgneedtime:yellow;'
  395. ELSE ''
  396. END
  397. WHEN a.`type` = '偏差' THEN
  398. CASE
  399. WHEN IFNULL(CAST(a.cgneedtime AS SIGNED), 0) > 7 THEN 'cgneedtime:red;'
  400. WHEN IFNULL(CAST(a.cgneedtime AS SIGNED), 0) > 0 THEN 'cgneedtime:yellow;'
  401. ELSE ''
  402. END
  403. ELSE ''
  404. END,
  405. CASE
  406. WHEN a.`type` = '计划' THEN
  407. CASE
  408. WHEN a.cgend IS NOT NULL AND b.cgend IS NULL AND DATEDIFF(NOW(), a.cgend) > 7 THEN 'cgend:red;'
  409. WHEN a.cgend IS NOT NULL AND b.cgend IS NULL AND DATEDIFF(NOW(), a.cgend) > 0 THEN 'cgend:yellow;'
  410. ELSE ''
  411. END
  412. WHEN a.`type` = '偏差' THEN
  413. CASE
  414. WHEN IFNULL(CAST(a.cgend AS SIGNED), 0) > 7 THEN 'cgend:red;'
  415. WHEN IFNULL(CAST(a.cgend AS SIGNED), 0) > 0 THEN 'cgend:yellow;'
  416. ELSE ''
  417. END
  418. ELSE ''
  419. END,
  420. -- blstart, starttime, endtime背景色
  421. CASE
  422. WHEN a.`type` = '计划' THEN
  423. CASE
  424. WHEN a.blstart IS NOT NULL AND b.blstart IS NULL AND DATEDIFF(NOW(), a.blstart) > 7 THEN 'blstart:red;'
  425. WHEN a.blstart IS NOT NULL AND b.blstart IS NULL AND DATEDIFF(NOW(), a.blstart) > 0 THEN 'blstart:yellow;'
  426. ELSE ''
  427. END
  428. WHEN a.`type` = '偏差' THEN
  429. CASE
  430. WHEN IFNULL(CAST(a.blstart AS SIGNED), 0) > 7 THEN 'blstart:red;'
  431. WHEN IFNULL(CAST(a.blstart AS SIGNED), 0) > 0 THEN 'blstart:yellow;'
  432. ELSE ''
  433. END
  434. ELSE ''
  435. END,
  436. CASE
  437. WHEN a.`type` = '计划' THEN
  438. CASE
  439. WHEN a.starttime IS NOT NULL AND b.starttime IS NULL AND DATEDIFF(NOW(), a.starttime) > 7 THEN 'starttime:red;'
  440. WHEN a.starttime IS NOT NULL AND b.starttime IS NULL AND DATEDIFF(NOW(), a.starttime) > 0 THEN 'starttime:yellow;'
  441. ELSE ''
  442. END
  443. WHEN a.`type` = '偏差' THEN
  444. CASE
  445. WHEN IFNULL(CAST(a.starttime AS SIGNED), 0) > 7 THEN 'starttime:red;'
  446. WHEN IFNULL(CAST(a.starttime AS SIGNED), 0) > 0 THEN 'starttime:yellow;'
  447. ELSE ''
  448. END
  449. ELSE ''
  450. END,
  451. CASE
  452. WHEN a.`type` = '计划' THEN
  453. CASE
  454. WHEN a.endtime IS NOT NULL AND b.endtime IS NULL AND DATEDIFF(NOW(), a.endtime) > 7 THEN 'endtime:red;'
  455. WHEN a.endtime IS NOT NULL AND b.endtime IS NULL AND DATEDIFF(NOW(), a.endtime) > 0 THEN 'endtime:yellow;'
  456. ELSE ''
  457. END
  458. WHEN a.`type` = '偏差' THEN
  459. CASE
  460. WHEN IFNULL(CAST(a.endtime AS SIGNED), 0) > 7 THEN 'endtime:red;'
  461. WHEN IFNULL(CAST(a.endtime AS SIGNED), 0) > 0 THEN 'endtime:yellow;'
  462. ELSE ''
  463. END
  464. ELSE ''
  465. END,
  466. -- ipqcjystart, ipqcjyend, fqcjystart, fqcjyend背景色
  467. CASE
  468. WHEN a.`type` = '计划' THEN
  469. CASE
  470. WHEN a.ipqcjystart IS NOT NULL AND b.ipqcjystart IS NULL AND DATEDIFF(NOW(), a.ipqcjystart) > 7 THEN 'ipqcjystart:red;'
  471. WHEN a.ipqcjystart IS NOT NULL AND b.ipqcjystart IS NULL AND DATEDIFF(NOW(), a.ipqcjystart) > 0 THEN 'ipqcjystart:yellow;'
  472. ELSE ''
  473. END
  474. WHEN a.`type` = '偏差' THEN
  475. CASE
  476. WHEN IFNULL(CAST(a.ipqcjystart AS SIGNED), 0) > 7 THEN 'ipqcjystart:red;'
  477. WHEN IFNULL(CAST(a.ipqcjystart AS SIGNED), 0) > 0 THEN 'ipqcjystart:yellow;'
  478. ELSE ''
  479. END
  480. ELSE ''
  481. END,
  482. CASE
  483. WHEN a.`type` = '计划' THEN
  484. CASE
  485. WHEN a.ipqcjyend IS NOT NULL AND b.ipqcjyend IS NULL AND DATEDIFF(NOW(), a.ipqcjyend) > 7 THEN 'ipqcjyend:red;'
  486. WHEN a.ipqcjyend IS NOT NULL AND b.ipqcjyend IS NULL AND DATEDIFF(NOW(), a.ipqcjyend) > 0 THEN 'ipqcjyend:yellow;'
  487. ELSE ''
  488. END
  489. WHEN a.`type` = '偏差' THEN
  490. CASE
  491. WHEN IFNULL(CAST(a.ipqcjyend AS SIGNED), 0) > 7 THEN 'ipqcjyend:red;'
  492. WHEN IFNULL(CAST(a.ipqcjyend AS SIGNED), 0) > 0 THEN 'ipqcjyend:yellow;'
  493. ELSE ''
  494. END
  495. ELSE ''
  496. END,
  497. CASE
  498. WHEN a.`type` = '计划' THEN
  499. CASE
  500. WHEN a.fqcjystart IS NOT NULL AND b.fqcjystart IS NULL AND DATEDIFF(NOW(), a.fqcjystart) > 7 THEN 'fqcjystart:red;'
  501. WHEN a.fqcjystart IS NOT NULL AND b.fqcjystart IS NULL AND DATEDIFF(NOW(), a.fqcjystart) > 0 THEN 'fqcjystart:yellow;'
  502. ELSE ''
  503. END
  504. WHEN a.`type` = '偏差' THEN
  505. CASE
  506. WHEN IFNULL(CAST(a.fqcjystart AS SIGNED), 0) > 7 THEN 'fqcjystart:red;'
  507. WHEN IFNULL(CAST(a.fqcjystart AS SIGNED), 0) > 0 THEN 'fqcjystart:yellow;'
  508. ELSE ''
  509. END
  510. ELSE ''
  511. END,
  512. CASE
  513. WHEN a.`type` = '计划' THEN
  514. CASE
  515. WHEN a.fqcjyend IS NOT NULL AND b.fqcjyend IS NULL AND DATEDIFF(NOW(), a.fqcjyend) > 7 THEN 'fqcjyend:red;'
  516. WHEN a.fqcjyend IS NOT NULL AND b.fqcjyend IS NULL AND DATEDIFF(NOW(), a.fqcjyend) > 0 THEN 'fqcjyend:yellow;'
  517. ELSE ''
  518. END
  519. WHEN a.`type` = '偏差' THEN
  520. CASE
  521. WHEN IFNULL(CAST(a.fqcjyend AS SIGNED), 0) > 7 THEN 'fqcjyend:red;'
  522. WHEN IFNULL(CAST(a.fqcjyend AS SIGNED), 0) > 0 THEN 'fqcjyend:yellow;'
  523. ELSE ''
  524. END
  525. ELSE ''
  526. END,
  527. -- rkstart, rkend, fystarttime, fyendtime背景色
  528. CASE
  529. WHEN a.`type` = '计划' THEN
  530. CASE
  531. WHEN a.rkstart IS NOT NULL AND b.rkstart IS NULL AND DATEDIFF(NOW(), a.rkstart) > 7 THEN 'rkstart:red;'
  532. WHEN a.rkstart IS NOT NULL AND b.rkstart IS NULL AND DATEDIFF(NOW(), a.rkstart) > 0 THEN 'rkstart:yellow;'
  533. ELSE ''
  534. END
  535. WHEN a.`type` = '偏差' THEN
  536. CASE
  537. WHEN IFNULL(CAST(a.rkstart AS SIGNED), 0) > 7 THEN 'rkstart:red;'
  538. WHEN IFNULL(CAST(a.rkstart AS SIGNED), 0) > 0 THEN 'rkstart:yellow;'
  539. ELSE ''
  540. END
  541. ELSE ''
  542. END,
  543. CASE
  544. WHEN a.`type` = '计划' THEN
  545. CASE
  546. WHEN a.rkend IS NOT NULL AND b.rkend IS NULL AND DATEDIFF(NOW(), a.rkend) > 7 THEN 'rkend:red;'
  547. WHEN a.rkend IS NOT NULL AND b.rkend IS NULL AND DATEDIFF(NOW(), a.rkend) > 0 THEN 'rkend:yellow;'
  548. ELSE ''
  549. END
  550. WHEN a.`type` = '偏差' THEN
  551. CASE
  552. WHEN IFNULL(CAST(a.rkend AS SIGNED), 0) > 7 THEN 'rkend:red;'
  553. WHEN IFNULL(CAST(a.rkend AS SIGNED), 0) > 0 THEN 'rkend:yellow;'
  554. ELSE ''
  555. END
  556. ELSE ''
  557. END,
  558. CASE
  559. WHEN a.`type` = '计划' THEN
  560. CASE
  561. WHEN a.fystarttime IS NOT NULL AND b.fystarttime IS NULL AND DATEDIFF(NOW(), a.fystarttime) > 7 THEN 'fystarttime:red;'
  562. WHEN a.fystarttime IS NOT NULL AND b.fystarttime IS NULL AND DATEDIFF(NOW(), a.fystarttime) > 0 THEN 'fystarttime:yellow;'
  563. ELSE ''
  564. END
  565. WHEN a.`type` = '偏差' THEN
  566. CASE
  567. WHEN IFNULL(CAST(a.fystarttime AS SIGNED), 0) > 7 THEN 'fystarttime:red;'
  568. WHEN IFNULL(CAST(a.fystarttime AS SIGNED), 0) > 0 THEN 'fystarttime:yellow;'
  569. ELSE ''
  570. END
  571. ELSE ''
  572. END,
  573. CASE
  574. WHEN a.`type` = '计划' THEN
  575. CASE
  576. WHEN a.fyendtime IS NOT NULL AND b.fyendtime IS NULL AND DATEDIFF(NOW(), a.fyendtime) > 7 THEN 'fyendtime:red;'
  577. WHEN a.fyendtime IS NOT NULL AND b.fyendtime IS NULL AND DATEDIFF(NOW(), a.fyendtime) > 0 THEN 'fyendtime:yellow;'
  578. ELSE ''
  579. END
  580. WHEN a.`type` = '偏差' THEN
  581. CASE
  582. WHEN IFNULL(CAST(a.fyendtime AS SIGNED), 0) > 7 THEN 'fyendtime:red;'
  583. WHEN IFNULL(CAST(a.fyendtime AS SIGNED), 0) > 0 THEN 'fyendtime:yellow;'
  584. ELSE ''
  585. END
  586. ELSE ''
  587. END
  588. ) AS background
  589. FROM LinkagePlan a
  590. LEFT JOIN (SELECT * FROM LinkagePlan WHERE `type` = '实际') b ON a.id = b.id
  591. LEFT JOIN (SELECT * FROM LinkagePlan WHERE `type` = '偏差') c ON a.id = c.id
  592. ) AS bg ON a.id = bg.id AND a.`type` = bg.`type`
  593. SET a.background = bg.background;
  594. END//
  595. DELIMITER ;