1.0.379.sql 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. -- 1.0.379:S7 FQC 检验单四字段历史回填(物料编码 / 检验数量 / 检验人 / 检验时间)
  2. -- 背景:源 qms_qcpp_inspbill 的 FMATERIALCFG/jysj 生成时漏写、jyr/FINSPEENDDATE 从未写;
  3. -- 新单已由 FqcApplyService.GenerateInspection / FqcInspBillFlowService.SubmitResult 补齐,本脚本仅回填存量历史单。
  4. -- 口径:
  5. -- ① FMATERIALCFG = 报检 qms_fqcbj.wlbm;jysj = 报检数量 qms_fqcbj.sl(非指令单数量 sczldsl)。
  6. -- ② 仅已录结果(pd 非空)的历史单:jyr = 负责人 jyfzr(=SysUser.Id) 对应 RealName(空回退 Account) 的【推定值】,
  7. -- FINSPEENDDATE = qms_fqcbj.jywcsj(检验完成时刻)。历史 jyr 非"实际 submit 操作者"的直接证据,仅历史补齐。
  8. -- 关联:b.lydjbh=q.FBILLNO AND b.hid=q.id AND b.tenant_id=q.tenant_id(精确,禁 LIKE/单键,防串单)。
  9. -- 幂等:只补 NULL/空,IFNULL 不覆盖任何已有有效值;可重复执行,二次运行 0/极少变更。
  10. -- 方言:MySQL(当前主库 aidopdev,DATABASE() 解析当前库)。SysUser 为框架表 PascalCase,Linux 下大小写敏感。
  11. -- ① 物料编码 + 检验数量(全部历史单,仅补空)
  12. UPDATE qms_qcpp_inspbill b
  13. JOIN qms_fqcbj q
  14. ON q.FBILLNO = b.lydjbh
  15. AND q.id = b.hid
  16. AND q.tenant_id = b.tenant_id
  17. SET
  18. b.FMATERIALCFG = IFNULL(NULLIF(TRIM(b.FMATERIALCFG), ''), q.wlbm),
  19. b.jysj = IFNULL(b.jysj, q.sl)
  20. WHERE NULLIF(TRIM(b.FMATERIALCFG), '') IS NULL
  21. OR b.jysj IS NULL;
  22. -- ② 检验人 + 检验时间(仅已录结果 pd 非空,仅补空;jyfzr 非纯数字则不解析姓名、保持 NULL)
  23. UPDATE qms_qcpp_inspbill b
  24. JOIN qms_fqcbj q
  25. ON q.FBILLNO = b.lydjbh
  26. AND q.id = b.hid
  27. AND q.tenant_id = b.tenant_id
  28. LEFT JOIN SysUser u
  29. ON q.jyfzr REGEXP '^[0-9]+$'
  30. AND u.Id = CAST(q.jyfzr AS UNSIGNED)
  31. SET
  32. b.jyr = IFNULL(NULLIF(TRIM(b.jyr), ''),
  33. COALESCE(NULLIF(TRIM(u.RealName), ''), NULLIF(TRIM(u.Account), ''))),
  34. b.FINSPEENDDATE = IFNULL(b.FINSPEENDDATE, q.jywcsj)
  35. WHERE b.pd IS NOT NULL
  36. AND (NULLIF(TRIM(b.jyr), '') IS NULL OR b.FINSPEENDDATE IS NULL);