-- 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);