-- ============================================================================ -- S7-FQC-UAT-GOLDEN-FIXTURE-1 · UATA-A01 解锁 -- -- 目标:为 UATTEST_CHL 落一套最小 FQC 成品检规,使报检 FQCBJ202609020001 -- (物料 3121C0035)可经 FqcApplyService.GenerateInspection 生成检验单, -- 并同时覆盖 NUMERIC 自动判定 / NON_NUMERIC 人工确认两条分支。 -- -- ⚠️⚠️⚠️ UAT TEST FIXTURE ONLY ⚠️⚠️⚠️ -- ⚠️ NON-PRODUCTION FQC SPEC -- ⚠️ 下方所有尺寸、公差、技术要求、检验方法均为 UAT 夹具占位值, -- ⚠️ 不是「上底(45PUL)」的真实工艺规范,禁止用于任何生产判定或对外交付。 -- ⚠️ Numeric limits exist only to exercise the NUMERIC / NON_NUMERIC UAT branches. -- -- 写入范围(INSERT 6 行 · UPDATE 0 · DELETE 0 · DDL 0): -- qms_ccjygf 1 行 UATA-FQC-3121C0035 / A.0 -- qms_ccjygfzb 4 行 xh=1..4 -- ado_s7_fqc_spec_material_map 1 行 3121C0035 → 上述检规(MANUAL / is_manual=1) -- -- 明确不碰: -- · 租户 797403760988229 的 68 条 qms_ccjygf / 1053 条 qms_ccjygfzb / 1554 条桥表行 -- · UATTEST_CHL 现有 3 条 qms_fqcjygf(UATD-FQC-001..003)—— 归并属后续独立批次 -- · 默认租户 1300000000001 全部数据 -- 本脚本对 797 与默认租户 WRITE = 0。 -- -- 关键物理事实(Phase A 实测,2026-09-02): -- · qms_ccjygf / qms_ccjygfzb **零索引、无 PRIMARY KEY、无任何唯一约束** -- → DB 层完全不防重,幂等只能靠业务键 NOT EXISTS 自证 -- · qms_ccjygf 业务键取 tenant_id + wjbh + bb(797 侧有 8 组历史重复,故为「意图键」非「已强制键」) -- · qms_ccjygfzb 归属 = glid + tenant_id(FqcApplyService.cs:231 / FqcSpecRuleService.cs:70-73 双条件) -- · ado_s7_fqc_spec_material_map 有 UNIQUE uk_fqc_spec_map(tenant_id, jygfid, raw_token, is_manual) -- · match_status='MANUAL' 是**运行链路可消费**状态 -- (FqcSpecMaterialMapService.cs:257 `match_status IN ('EXACT','MANUAL')`; -- 797 侧已有同形态真实行 id=838738227814474 / 1A0049H) -- · lrlx 仅 'NUMERIC' / 'NON_NUMERIC' 合法(FqcApplyService.cs:237 兜底校验) -- · 797 侧 lrlx 与上下限当前 100% 为 NULL → 本 fixture 是全库首次 NUMERIC 自动判定样本 -- -- ID BLOCK(固定确定性区间,已实测三表在 3000000000000020000..29999 collision = 0) -- master 3000000000000020001 -- detail 3000000000000021001 .. 021004 -- map 3000000000000022001 -- ============================================================================ SET @dst := (SELECT t.Id FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId WHERE o.Code = 'UATTEST_CHL' AND t.Status = 1 LIMIT 1); SET @fixture_note := 'UAT TEST FIXTURE - NON-PRODUCTION SPEC'; -- =========================================================================== -- 1 · qms_ccjygf 检规主表 1 行 -- 幂等键:tenant_id + wjbh + bb -- FK 闭合:目标租户 ItemMaster 必须已有 3121C0035(与 Bind() 运行期校验同口径) -- =========================================================================== INSERT INTO qms_ccjygf (id, tenant_id, wjbh, bb, cpmc, cpxh, sxrq, wlbm, fj) SELECT 3000000000000020001, @dst, 'UATA-FQC-3121C0035', 'A.0', '上底(45PUL)', '5PUL', '2026-09-01 00:00:00', '3121C0035', NULL WHERE @dst IS NOT NULL AND EXISTS (SELECT 1 FROM ItemMaster i WHERE i.tenant_id = @dst AND i.ItemNum = '3121C0035') AND NOT EXISTS (SELECT 1 FROM qms_ccjygf x WHERE x.tenant_id = @dst AND x.wjbh = 'UATA-FQC-3121C0035' AND x.bb = 'A.0'); -- 回绑真实 master id(不假定 ID BLOCK 一定被采用:若主表已存在则取既有行) SET @master := (SELECT id FROM qms_ccjygf WHERE tenant_id = @dst AND wjbh = 'UATA-FQC-3121C0035' AND bb = 'A.0' LIMIT 1); -- =========================================================================== -- 2 · qms_ccjygfzb 检规明细 4 行 -- 幂等键:tenant_id + glid + xh -- 列语义依据 FqcApplyService.cs:229-262 的快照读取集(未被快照消费的列不写): -- xh / jyxm / UpperToleranceLimit→sx / LowerToleranceLimit→xx / lrlx / -- jsyq / jyyqsbgj / jyff / jytk / jsbz / cyfa / jl / SizeSpecifications -- isDisplay / isPeel / bztk 留 NULL,与 797 侧 1040/1053 行现状一致 -- Remarks 承载 fixture 标识(qms_ccjygf 主表无任何备注列,故标识只落明细 + 本注释) -- -- ⚠️ 下表 44.5/45.5/2.8/3.2 为 UAT 占位公差,非真实工艺标准。 -- =========================================================================== INSERT INTO qms_ccjygfzb (id, tenant_id, glid, xh, jyxm, lrlx, UpperToleranceLimit, LowerToleranceLimit, SizeSpecifications, jsyq, jyyqsbgj, jyff, jytk, jsbz, cyfa, jl, Remarks) SELECT c.new_id, @dst, @master, c.xh, c.jyxm, c.lrlx, c.up, c.lo, c.sz, c.jsyq, c.jyyqsbgj, c.jyff, c.jytk, c.jsbz, c.cyfa, c.jl, @fixture_note FROM ( SELECT 3000000000000021001 AS new_id, '1' AS xh, '外观' AS jyxm, 'NON_NUMERIC' AS lrlx, NULL AS up, NULL AS lo, NULL AS sz, '表面无划伤、无毛刺、无变形,色泽均匀(UAT 占位技术要求)' AS jsyq, NULL AS jyyqsbgj, '目视检查' AS jyff, NULL AS jytk, 'UAT 夹具基准,非真实工艺标准' AS jsbz, 'S-2;AQL2.5' AS cyfa, NULL AS jl UNION ALL SELECT 3000000000000021002, '2', '外形尺寸(长)', 'NUMERIC', '45.5', '44.5', '45.0±0.5 mm', '长度 45.0±0.5 mm(UAT 占位公差)', '游标卡尺', '游标卡尺测量', NULL, 'UAT 夹具基准,非真实工艺标准', 'S-2;AQL2.5', NULL UNION ALL SELECT 3000000000000021003, '3', '厚度', 'NUMERIC', '3.2', '2.8', '3.0±0.2 mm', '厚度 3.0±0.2 mm(UAT 占位公差)', '千分尺', '千分尺测量', NULL, 'UAT 夹具基准,非真实工艺标准', 'S-2;AQL2.5', NULL UNION ALL SELECT 3000000000000021004, '4', '标识/包装', 'NON_NUMERIC', NULL, NULL, NULL, '标签内容与实物一致,包装完好无破损(UAT 占位技术要求)', NULL, '目视核对', NULL, 'UAT 夹具基准,非真实工艺标准', 'S-2;AQL2.5', NULL ) c WHERE @dst IS NOT NULL AND @master IS NOT NULL AND NOT EXISTS (SELECT 1 FROM qms_ccjygfzb z WHERE z.tenant_id = @dst AND z.glid = @master AND z.xh = c.xh); -- =========================================================================== -- 3 · ado_s7_fqc_spec_material_map 桥表 1 行 -- 幂等键:tenant_id + material_code + jygfid -- (DB 侧另有 UNIQUE uk_fqc_spec_map(tenant_id, jygfid, raw_token, is_manual) 兜底) -- match_status='MANUAL' + is_manual=1 + status=1 -- → 被 ResolveInternalAsync 消费(FqcSpecMaterialMapService.cs:256-258) -- → 且 is_manual=1 使其不会被 Rebuild 的 `DELETE ... is_manual=0`(:114)清掉 -- normalized_effective_date 与主表 sxrq 经 NormalizeDate 后等价(2026-09-01) -- =========================================================================== INSERT INTO ado_s7_fqc_spec_material_map (id, tenant_id, jygfid, wjbh, bb, seq, raw_token, cleaned_token, material_code, match_status, normalized_effective_date, note, is_manual, status, create_time, create_user_id) SELECT 3000000000000022001, @dst, @master, 'UATA-FQC-3121C0035', 'A.0', 0, '3121C0035', '3121C0035', '3121C0035', 'MANUAL', '2026-09-01 00:00:00', 'UAT TEST FIXTURE - UATA-A01', 1, 1, NOW(), NULL WHERE @dst IS NOT NULL AND @master IS NOT NULL AND EXISTS (SELECT 1 FROM ItemMaster i WHERE i.tenant_id = @dst AND i.ItemNum = '3121C0035') AND NOT EXISTS (SELECT 1 FROM ado_s7_fqc_spec_material_map m WHERE m.tenant_id = @dst AND m.material_code = '3121C0035' AND m.jygfid = @master);