-- ============================================================================ -- S7 FQC 成品检验全链路 · 阶段 1A · P0 基础设施迁移 -- 内容:① 报检/检验单幂等 UNIQUE(G3) ② SQLSERVER 入站实体 status→0 切源护栏(P0) -- ③ 检规↔物料映射桥表(G1,不改原始 qms_ccjygf.wlbm) -- 幂等:全部 IF-NOT-EXISTS 守卫,可重复执行。 -- 迁移前已实测三处 UNIQUE 目标 0 冲突、桥表不存在。 -- 占位名:提交那刻 rename 为正式 1.0..sql 并登记 csproj Copy。 -- ============================================================================ -- ---- ① qms_fqcbj: 报检单号租户内唯一 ---- SET @exist := (SELECT COUNT(1) FROM information_schema.statistics WHERE table_schema=DATABASE() AND table_name='qms_fqcbj' AND index_name='uk_qms_fqcbj_tenant_billno'); SET @sql := IF(@exist=0, 'ALTER TABLE qms_fqcbj ADD UNIQUE KEY uk_qms_fqcbj_tenant_billno (tenant_id, FBILLNO)', 'SELECT 1'); PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s; -- ---- ② qms_qcpp_inspbill: 检验单号租户内唯一 ---- SET @exist := (SELECT COUNT(1) FROM information_schema.statistics WHERE table_schema=DATABASE() AND table_name='qms_qcpp_inspbill' AND index_name='uk_qms_qcpp_inspbill_tenant_billno'); SET @sql := IF(@exist=0, 'ALTER TABLE qms_qcpp_inspbill ADD UNIQUE KEY uk_qms_qcpp_inspbill_tenant_billno (tenant_id, FBILLNO)', 'SELECT 1'); PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s; -- ---- ③ qms_qcpp_inspbill: 一个报检(lydjbh=报检FBILLNO, hid=报检id)只生成一张检验单(G3 DB层幂等) ---- SET @exist := (SELECT COUNT(1) FROM information_schema.statistics WHERE table_schema=DATABASE() AND table_name='qms_qcpp_inspbill' AND index_name='uk_qms_qcpp_inspbill_source'); SET @sql := IF(@exist=0, 'ALTER TABLE qms_qcpp_inspbill ADD UNIQUE KEY uk_qms_qcpp_inspbill_source (tenant_id, lydjbh, hid)', 'SELECT 1'); PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s; -- ---- ④ 切源护栏:FQC 三个 SQLSERVER 入站实体 status→0(就位不启用),防 RunSourceSwitchFull 覆盖 DOP 写入 ---- UPDATE mdp_entity SET status=0 WHERE entity_code IN ('S7_FQC_TASK_SQLSERVER','S7_FQC_RESULT_SQLSERVER','S7_FQC_RESULT_DETAIL_SQLSERVER') AND status<>0; -- ---- ⑤ 检规↔标准物料 派生映射桥表(G1)。不改原始 qms_ccjygf.wlbm,此表为派生+人工订正层 ---- CREATE TABLE IF NOT EXISTS ado_s7_fqc_spec_material_map ( id BIGINT NOT NULL COMMENT '主键(雪花)', tenant_id BIGINT NOT NULL COMMENT '租户Id', jygfid BIGINT NOT NULL COMMENT '检规主表 qms_ccjygf.id', wjbh VARCHAR(100) NULL COMMENT '检规文件编号(冗余便于查)', bb VARCHAR(50) NULL COMMENT '检规版本', seq INT NULL COMMENT 'wlbm 内序号', raw_token VARCHAR(200) NULL COMMENT 'wlbm 拆出的原始 token', cleaned_token VARCHAR(200) NULL COMMENT '分隔符归一后 token', material_code VARCHAR(100) NULL COMMENT '匹配到的 ItemMaster.ItemNum(EXACT/MANUAL 时有值)', match_status VARCHAR(30) NOT NULL DEFAULT 'NOT_FOUND' COMMENT 'EXACT/RANGE_EXPANDED/GLUE_UNRESOLVED/NOT_FOUND/MANUAL', normalized_effective_date DATETIME NULL COMMENT '规范化生效日期(源 sxrq 清洗,原值不改)', note VARCHAR(500) NULL COMMENT '备注/unresolved 原因', is_manual TINYINT NOT NULL DEFAULT 0 COMMENT '1=人工维护绑定', status TINYINT NOT NULL DEFAULT 1 COMMENT '1启用 0停用', create_time DATETIME NULL COMMENT '创建时间', create_user_id BIGINT NULL COMMENT '创建人', update_time DATETIME NULL COMMENT '更新时间', update_user_id BIGINT NULL COMMENT '更新人', PRIMARY KEY (id), UNIQUE KEY uk_fqc_spec_map (tenant_id, jygfid, raw_token, is_manual), KEY idx_fqc_spec_map_mat (tenant_id, material_code, status), KEY idx_fqc_spec_map_jygf (tenant_id, jygfid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='S7 FQC 检规↔标准物料 派生映射桥(不改源 wlbm)';