| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- -- =====================================================================================
- -- 1.0.507 · S0 MASTER DATA PLATFORM · PHASE 2 · BATCH 5
- --
- -- CustMaster → mdp_stg_s0_customer → dim_customer
- -- PersonSkill → mdp_stg_s0_person_skill → dim_person_skill
- --
- -- 身份口径(按「当前业务证据优先」判定,**不继承旧物理唯一键**):
- -- · Customer 身份 = tenant_id + Cust
- -- - CRUD 查重 = tenant + FactoryRefId + Cust,而 FactoryRefId 由 AdoS0OrgScope 仅按租户解析
- -- 并强制 stamp(payload 覆盖)⇒ 等价 tenant + Cust;DomainCode 只是可选列表筛选。
- -- - 数据实测:tenant+Cust / +Domain / +factory 三候选租户内重复全部 = 0;
- -- company/factory 每租户单一取值(常量、零区分力)。
- -- - 租户必须入身份:Cust 跨租户碰撞 4 个编码。
- -- · PersonSkill 身份 = tenant_id + Code
- -- - 现有消费方 AdoS0MfgLinePostsController.ResolvePersonSkillCodesAsync 已明确按 (租户, Code)
- -- 解析,并把「同租户跨公司/工厂重码」当作歧义**报错**,而非两个不同技能。
- -- - 数据实测:三候选租户内重复全部 = 0;Code 跨租户碰撞 5 个编码。
- --
- -- 🔴 源表 CustMaster 另有不含 tenant_id 的旧唯一键 uk_CustMaster_factory_cust(factory_ref_id, Cust),
- -- 且 factory_ref_id=1000 被两租户共用 —— 属源表治理缺陷(KNOWN-ISSUES I-016)。
- -- **本批 NO SOURCE TABLE DDL CHANGE**:不顺手治理它,dim 侧靠自己的 tenant 前缀保证隔离。
- --
- -- 边界:不复用历史 mdp_stg_customer(即便 0 行,它属 DOPDEMORQ/S1,不是 S0 authority);
- -- 不碰 mdp_std_item / mdp_std_supplier;不动 S0 CRUD / 前端 / S1–S9 既有对象。
- -- =====================================================================================
- CREATE TABLE IF NOT EXISTS `mdp_stg_s0_customer` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `tenant_id` bigint NOT NULL DEFAULT 0,
- `factory_id` bigint DEFAULT NULL,
- `source_system` varchar(50) NOT NULL DEFAULT 'AIDOPDEV_MYSQL',
- `source_table` varchar(100) NOT NULL,
- `source_row_id` varchar(100) NOT NULL,
- `source_biz_key` varchar(300) DEFAULT NULL,
- `sync_batch_id` varchar(100) NOT NULL,
- `sync_time` datetime NOT NULL,
- `process_status` varchar(20) NOT NULL DEFAULT 'PENDING',
- `raw_data` json NOT NULL,
- `process_message` varchar(500) DEFAULT NULL,
- `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_stg_s0_customer` (`tenant_id`,`source_system`,`source_table`,`source_row_id`),
- KEY `idx_stg_s0_customer_biz` (`source_biz_key`),
- KEY `idx_stg_s0_customer_batch` (`tenant_id`,`sync_batch_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='S0 主数据贴源:客户(源 CustMaster)';
- CREATE TABLE IF NOT EXISTS `mdp_stg_s0_person_skill` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `tenant_id` bigint NOT NULL DEFAULT 0,
- `factory_id` bigint DEFAULT NULL,
- `source_system` varchar(50) NOT NULL DEFAULT 'AIDOPDEV_MYSQL',
- `source_table` varchar(100) NOT NULL,
- `source_row_id` varchar(100) NOT NULL,
- `source_biz_key` varchar(300) DEFAULT NULL,
- `sync_batch_id` varchar(100) NOT NULL,
- `sync_time` datetime NOT NULL,
- `process_status` varchar(20) NOT NULL DEFAULT 'PENDING',
- `raw_data` json NOT NULL,
- `process_message` varchar(500) DEFAULT NULL,
- `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_stg_s0_person_skill` (`tenant_id`,`source_system`,`source_table`,`source_row_id`),
- KEY `idx_stg_s0_person_skill_biz` (`source_biz_key`),
- KEY `idx_stg_s0_person_skill_batch` (`tenant_id`,`sync_batch_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='S0 主数据贴源:人员技能字典(源 PersonSkill)';
- CREATE TABLE IF NOT EXISTS `dim_customer` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT '技术行号;每轮 FULL 重建即变,禁止外部引用',
- `tenant_id` bigint NOT NULL COMMENT '租户',
- `customer_code` varchar(100) NOT NULL COMMENT '客户编码(**唯一业务键**)← $.Cust',
- `customer_name` varchar(200) DEFAULT NULL COMMENT 'ATTRIBUTE ← $.SortName(源 1333/1333 填充)',
- `domain_code` varchar(50) DEFAULT NULL COMMENT 'LEGACY_SCOPE ← $.Domain;**不是身份**',
- `company_id` bigint NOT NULL COMMENT 'LEGACY_SCOPE ← $.company_ref_id;f(tenant),**不是身份**',
- `factory_id` bigint NOT NULL COMMENT 'LEGACY_SCOPE ← $.factory_ref_id;f(tenant),**不是身份**',
- `shipping_lead_time` int DEFAULT NULL COMMENT 'ATTRIBUTE ← $.CustShippingLT(源 1328/1333)',
- `is_active` tinyint(1) NOT NULL COMMENT '源 IsActive 透传',
- `is_confirmed` tinyint(1) NOT NULL COMMENT '源 IsConfirm 透传',
- `source_system` varchar(50) NOT NULL,
- `source_biz_key` varchar(300) NOT NULL COMMENT '回溯 staging 用',
- `source_updated_at` datetime DEFAULT NULL COMMENT '← $.UpdateTime;源 1232/1333,允许 NULL',
- `sync_batch_id` varchar(64) NOT NULL,
- `sync_time` datetime NOT NULL,
- `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_dim_customer` (`tenant_id`,`customer_code`),
- KEY `idx_dim_customer_batch` (`sync_batch_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='S0 主数据维度:客户。源 CustMaster,FULL REPLACE。';
- CREATE TABLE IF NOT EXISTS `dim_person_skill` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT '技术行号;每轮 FULL 重建即变,禁止外部引用',
- `tenant_id` bigint NOT NULL COMMENT '租户',
- `skill_code` varchar(100) NOT NULL COMMENT '技能编码(**唯一业务键**)← $.Code',
- `skill_name` varchar(200) DEFAULT NULL COMMENT 'ATTRIBUTE ← $.Name',
- `skill_level` varchar(50) DEFAULT NULL COMMENT 'ATTRIBUTE ← $.SkillLevel',
- `remark` varchar(500) DEFAULT NULL COMMENT 'ATTRIBUTE ← $.Remark',
- `company_id` bigint NOT NULL COMMENT 'LEGACY_SCOPE ← $.CompanyRefId;**不是身份**',
- `factory_id` bigint NOT NULL COMMENT 'LEGACY_SCOPE ← $.FactoryRefId;**不是身份**',
- `is_active` tinyint(1) NOT NULL COMMENT '源 IsEnabled 透传',
- `source_system` varchar(50) NOT NULL,
- `source_biz_key` varchar(300) NOT NULL COMMENT '回溯 staging 用',
- `source_updated_at` datetime DEFAULT NULL COMMENT '← $.UpdatedAt(维护时间;源 5/46 非空 = 只有改过的行才有值)。不得用 CreatedAt 冒充',
- `sync_batch_id` varchar(64) NOT NULL,
- `sync_time` datetime NOT NULL,
- `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_dim_person_skill` (`tenant_id`,`skill_code`),
- KEY `idx_dim_person_skill_batch` (`sync_batch_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='S0 主数据维度:人员技能字典。源 PersonSkill,FULL REPLACE。不设父维度(EmpSkills.SkillNo 与本表 Code 实测 632/650 对不上)。';
- SET @src_id = (SELECT `id` FROM `mdp_source` WHERE `source_code` = 'AIDOPDEV_MYSQL' LIMIT 1);
- INSERT INTO `mdp_entity`
- (`tenant_id`,`source_id`,`entity_code`,`entity_name`,`entity_type`,
- `source_table_name`,`target_table_name`,`sync_mode`,`incr_column`,`batch_size`,
- `biz_key_expr`,`status`,`create_time`,`update_time`)
- SELECT 0, @src_id, 'S0_CUSTOMER', 'S0 客户主数据入站', 'TABLE',
- 'CustMaster', 'mdp_stg_s0_customer', 'FULL', NULL, 5000,
- 'Cust', 1, NOW(), NOW()
- WHERE @src_id IS NOT NULL
- AND NOT EXISTS (SELECT 1 FROM `mdp_entity` WHERE `entity_code` = 'S0_CUSTOMER');
- INSERT INTO `mdp_entity`
- (`tenant_id`,`source_id`,`entity_code`,`entity_name`,`entity_type`,
- `source_table_name`,`target_table_name`,`sync_mode`,`incr_column`,`batch_size`,
- `biz_key_expr`,`status`,`create_time`,`update_time`)
- SELECT 0, @src_id, 'S0_PERSON_SKILL', 'S0 人员技能字典入站', 'TABLE',
- 'PersonSkill', 'mdp_stg_s0_person_skill', 'FULL', NULL, 5000,
- 'Code', 1, NOW(), NOW()
- WHERE @src_id IS NOT NULL
- AND NOT EXISTS (SELECT 1 FROM `mdp_entity` WHERE `entity_code` = 'S0_PERSON_SKILL');
- -- ── 回滚(注释,非可执行)──────────────────────────────────────────────────────────
- -- DROP TABLE IF EXISTS `dim_person_skill`;
- -- DROP TABLE IF EXISTS `dim_customer`;
- -- DROP TABLE IF EXISTS `mdp_stg_s0_person_skill`;
- -- DROP TABLE IF EXISTS `mdp_stg_s0_customer`;
- -- DELETE FROM `mdp_entity` WHERE `tenant_id` = 0 AND `entity_code` IN ('S0_CUSTOMER','S0_PERSON_SKILL');
|