1.0.358.sql 4.3 KB

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