|
|
@@ -0,0 +1,78 @@
|
|
|
+-- =====================================================================================
|
|
|
+-- WIP-SUPPLIER · S0 · 供应商维度(占位名,提交那刻 rename 为正式 1.0.<next>.sql)
|
|
|
+--
|
|
|
+-- SuppMaster → mdp_stg_s0_supplier → dim_supplier
|
|
|
+--
|
|
|
+-- 身份 = tenant_id + Supp(租户内重复 0 组;Supp 跨租户碰撞 13 码/27 行 ⇒ 租户必须入身份)。
|
|
|
+-- 旧唯一键 uk_SuppMaster_factory_supp 含 factory_ref_id,不予继承:
|
|
|
+-- Domain / company_ref_id / factory_ref_id **每租户各只有 1 个取值**(严格 f(tenant)、零判别力),
|
|
|
+-- 且 factory_ref_id=1000 被 797403760988229 与 824585161322565 两租户共用。
|
|
|
+-- CRUD 的 (TenantId && FactoryRefId && Supp) 查重守卫不构成 factory 入身份的证据 ——
|
|
|
+-- 其 factoryId 来自 AdoS0OrgScope.ResolveAsync(db, tenantId),仅凭 tenantId 解析并强制盖章、
|
|
|
+-- 忽略 payload,故该守卫语义上等价于 tenant + Supp。
|
|
|
+-- 真实消费方按 tenant + 编码关联:SrmPurchase.SupplierNumber == Supp 命中 4447/4449;
|
|
|
+-- 而 srm_purchase.supplier_id → SuppMaster.RecID 命中 0/4449 ⇒ RecID 无消费方,不物化。
|
|
|
+-- =====================================================================================
|
|
|
+
|
|
|
+CREATE TABLE IF NOT EXISTS `mdp_stg_s0_supplier` (
|
|
|
+ `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_supplier` (`tenant_id`,`source_system`,`source_table`,`source_row_id`),
|
|
|
+ KEY `idx_stg_s0_supplier_biz` (`source_biz_key`),
|
|
|
+ KEY `idx_stg_s0_supplier_batch` (`tenant_id`,`sync_batch_id`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='S0 贴源:供应商(源 SuppMaster)';
|
|
|
+
|
|
|
+CREATE TABLE IF NOT EXISTS `dim_supplier` (
|
|
|
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT '技术行号;每轮 FULL REPLACE 即变,禁止外部引用',
|
|
|
+ `tenant_id` bigint NOT NULL,
|
|
|
+ `supplier_code` varchar(100) NOT NULL COMMENT '供应商编码(**唯一业务键**)← $.Supp',
|
|
|
+ `supplier_name` varchar(200) DEFAULT NULL COMMENT '← $.SortName(DDL 注释即「简称」;本表无全称列,不发明第二个名称列)。🔴 21 行 NULL(全在租户 797),绝不能设 Required',
|
|
|
+ `is_active` tinyint(1) NOT NULL COMMENT '← $.IsActive(源 tinyint(1) NOT NULL,3462 启用 / 113 停用)',
|
|
|
+ `tax_included` tinyint(1) NOT NULL COMMENT '← $.TaxIn(含税;源 tinyint(1) NOT NULL,实测仅 1 行为 1)',
|
|
|
+ `domain_code` varchar(50) DEFAULT NULL COMMENT 'LEGACY_SCOPE ← $.Domain;f(tenant),**不是身份**',
|
|
|
+ `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) 且 1000 被两租户共用,**不是身份**',
|
|
|
+ `source_system` varchar(50) NOT NULL,
|
|
|
+ `source_biz_key` varchar(300) NOT NULL,
|
|
|
+ `source_updated_at` datetime DEFAULT NULL COMMENT '← $.UpdateTime;12 行 NULL(全在租户 838257186181189),故可空',
|
|
|
+ `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`),
|
|
|
+ -- 索引字节 = 8 + 100*4 = 408 < 3072
|
|
|
+ UNIQUE KEY `uk_dim_supplier` (`tenant_id`,`supplier_code`),
|
|
|
+ KEY `idx_dim_supplier_batch` (`sync_batch_id`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
|
+ COMMENT='S0 主数据维度:供应商。源 SuppMaster,FULL REPLACE。**S0 的 Supplier 权威**,与 Supply/S3 的多源 mdp_std_supplier 语义不同。RecID 无消费方故不物化 legacy_source_id。';
|
|
|
+
|
|
|
+SET @src_id = (SELECT `id` FROM `mdp_source` WHERE `source_code` = 'AIDOPDEV_MYSQL' LIMIT 1);
|
|
|
+
|
|
|
+-- batch_size 20000:单租户最大 3185 行;默认 5000 只有 1.57× 头寸,而
|
|
|
+-- AssertNoSourceDuplicateAsync 是 sourceCount >= batchSize 硬失败。该值是 entity 级,不影响其它维度。
|
|
|
+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_SUPPLIER', 'S0 供应商入站', 'TABLE',
|
|
|
+ 'SuppMaster', 'mdp_stg_s0_supplier', 'FULL', NULL, 20000,
|
|
|
+ 'Supp', 1, NOW(), NOW()
|
|
|
+WHERE @src_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM `mdp_entity` WHERE `entity_code` = 'S0_SUPPLIER');
|
|
|
+
|
|
|
+-- ── 回滚(注释,非可执行)──
|
|
|
+-- DROP TABLE IF EXISTS `dim_supplier`, `mdp_stg_s0_supplier`;
|
|
|
+-- DELETE FROM `mdp_entity` WHERE `tenant_id`=0 AND `entity_code`='S0_SUPPLIER';
|