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