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