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