优化
This commit is contained in:
@@ -5078,9 +5078,49 @@ WHERE tenant_id = 0 AND app_code = 'PLATFORM'
|
||||
)
|
||||
ON DUPLICATE KEY UPDATE tenant_id = VALUES(tenant_id);
|
||||
|
||||
-- 兼容已经执行过旧单行配置模型的开发/测试库。仅精确识别旧结构时丢弃旧值并重建;
|
||||
-- 已是四箱规结构时不做 DDL,避免破坏 Admin 已编辑的数据。
|
||||
DROP PROCEDURE IF EXISTS unified_upgrade_legacy_customer_dimension_config;
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE unified_upgrade_legacy_customer_dimension_config()
|
||||
BEGIN
|
||||
IF (SELECT COUNT(*) FROM information_schema.tables
|
||||
WHERE table_schema = 'baiyue_firstleg'
|
||||
AND table_name = 'fl_customer_dimension_config') = 1
|
||||
AND (SELECT COUNT(*) FROM information_schema.columns
|
||||
WHERE table_schema = 'baiyue_firstleg'
|
||||
AND table_name = 'fl_customer_dimension_config'
|
||||
AND column_name = 'box_type') = 0 THEN
|
||||
IF (SELECT COUNT(*) FROM information_schema.columns
|
||||
WHERE table_schema = 'baiyue_firstleg'
|
||||
AND table_name = 'fl_customer_dimension_config'
|
||||
AND column_name IN ('id', 'tenant_id', 'edge_addition_cm', 'remark', 'initialization_key',
|
||||
'created_by', 'created_at', 'updated_by', 'updated_at', 'deleted', 'version')) <> 11
|
||||
OR (SELECT COUNT(*) FROM information_schema.columns
|
||||
WHERE table_schema = 'baiyue_firstleg'
|
||||
AND table_name = 'fl_customer_dimension_config') <> 11
|
||||
OR (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = 'baiyue_firstleg'
|
||||
AND table_name = 'fl_customer_dimension_config'
|
||||
AND index_name = 'uk_customer_dimension_config_tenant'
|
||||
AND non_unique = 0 AND seq_in_index = 1 AND column_name = 'tenant_id') <> 1 THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '统一迁移失败:客户尺寸配置表不是可识别的旧单行结构';
|
||||
END IF;
|
||||
DROP TABLE baiyue_firstleg.fl_customer_dimension_config;
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
CALL unified_upgrade_legacy_customer_dimension_config();
|
||||
DROP PROCEDURE IF EXISTS unified_upgrade_legacy_customer_dimension_config;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS baiyue_firstleg.fl_customer_dimension_config (
|
||||
id BIGINT UNSIGNED NOT NULL COMMENT '配置ID',
|
||||
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户隔离ID',
|
||||
box_type VARCHAR(24) NOT NULL COMMENT '固定箱规类型:SMALL/MEDIUM/LARGE/EXTRA_LARGE',
|
||||
inner_length_cm DECIMAL(9,3) NOT NULL COMMENT '箱规内长(厘米)',
|
||||
inner_width_cm DECIMAL(9,3) NOT NULL COMMENT '箱规内宽(厘米)',
|
||||
inner_height_cm DECIMAL(9,3) NOT NULL COMMENT '箱规内高(厘米)',
|
||||
edge_addition_cm DECIMAL(6,3) NOT NULL DEFAULT 2.000 COMMENT '每个尺寸方向的单侧加宽厘米数',
|
||||
remark VARCHAR(500) NULL COMMENT '备注',
|
||||
initialization_key VARCHAR(128) NOT NULL COMMENT '创建流程幂等键及补偿归属',
|
||||
@@ -5091,10 +5131,45 @@ CREATE TABLE IF NOT EXISTS baiyue_firstleg.fl_customer_dimension_config (
|
||||
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_customer_dimension_config_tenant (tenant_id),
|
||||
UNIQUE KEY uk_customer_dimension_config_tenant_box (tenant_id, box_type),
|
||||
KEY idx_customer_dimension_config_initialization (tenant_id, initialization_key),
|
||||
CONSTRAINT chk_customer_dimension_box_type
|
||||
CHECK (box_type IN ('SMALL', 'MEDIUM', 'LARGE', 'EXTRA_LARGE')),
|
||||
CONSTRAINT chk_customer_dimension_inner_size
|
||||
CHECK (inner_length_cm >= 0.001 AND inner_width_cm >= 0.001 AND inner_height_cm >= 0.001),
|
||||
CONSTRAINT chk_customer_dimension_edge_addition
|
||||
CHECK (edge_addition_cm >= 0.001 AND edge_addition_cm <= 100.000)
|
||||
) ENGINE=InnoDB COMMENT='客户尺寸计算配置';
|
||||
) ENGINE=InnoDB COMMENT='客户固定四箱规尺寸配置';
|
||||
|
||||
-- 新结构首次部署或旧结构受控重建后,为所有现有企业客户补齐缺失箱规。
|
||||
-- 复跑命中 (tenant_id, box_type) 唯一键时只做空更新,不覆盖尺寸、备注、版本或审计字段。
|
||||
INSERT INTO baiyue_firstleg.fl_customer_dimension_config (
|
||||
id, tenant_id, box_type, inner_length_cm, inner_width_cm, inner_height_cm,
|
||||
edge_addition_cm, remark, initialization_key, created_by, created_at,
|
||||
updated_by, updated_at, deleted, version
|
||||
)
|
||||
SELECT UUID_SHORT(), tenant.tenant_id, defaults.box_type,
|
||||
defaults.inner_length_cm, defaults.inner_width_cm, defaults.inner_height_cm,
|
||||
2.000, defaults.remark,
|
||||
CONCAT('unified-four-box-default-v1:', tenant.tenant_id),
|
||||
COALESCE(tenant.created_by, 0), CURRENT_TIMESTAMP(3),
|
||||
COALESCE(tenant.created_by, 0), CURRENT_TIMESTAMP(3), 0, 0
|
||||
FROM (
|
||||
SELECT id AS tenant_id, created_by
|
||||
FROM baiyue_iam.iam_tenant
|
||||
WHERE tenant_type = 'MERCHANT' AND deleted = 0 AND id > 0
|
||||
) tenant
|
||||
CROSS JOIN (
|
||||
SELECT 'SMALL' AS box_type, 30.000 AS inner_length_cm, 20.000 AS inner_width_cm,
|
||||
20.000 AS inner_height_cm, '标准小箱' AS remark
|
||||
UNION ALL
|
||||
SELECT 'MEDIUM', 40.000, 30.000, 30.000, '标准中箱'
|
||||
UNION ALL
|
||||
SELECT 'LARGE', 50.000, 40.000, 40.000, '标准大箱'
|
||||
UNION ALL
|
||||
SELECT 'EXTRA_LARGE', 60.000, 50.000, 50.000, '特大箱'
|
||||
) defaults
|
||||
ON DUPLICATE KEY UPDATE id = id;
|
||||
|
||||
DROP PROCEDURE IF EXISTS unified_assert_final_extensions;
|
||||
DELIMITER $$
|
||||
@@ -5425,10 +5500,35 @@ BEGIN
|
||||
IF (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = 'baiyue_firstleg'
|
||||
AND table_name = 'fl_customer_dimension_config'
|
||||
AND index_name = 'uk_customer_dimension_config_tenant'
|
||||
AND non_unique = 0) <> 1 THEN
|
||||
AND index_name = 'uk_customer_dimension_config_tenant_box'
|
||||
AND non_unique = 0
|
||||
AND ((seq_in_index = 1 AND column_name = 'tenant_id')
|
||||
OR (seq_in_index = 2 AND column_name = 'box_type'))) <> 2 THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '统一迁移失败:客户尺寸计算配置唯一约束未创建';
|
||||
SET MESSAGE_TEXT = '统一迁移失败:客户四箱规尺寸配置唯一约束未创建';
|
||||
END IF;
|
||||
IF (SELECT COUNT(*) FROM information_schema.columns
|
||||
WHERE table_schema = 'baiyue_firstleg' AND table_name = 'fl_customer_dimension_config'
|
||||
AND column_name IN ('id', 'tenant_id', 'box_type', 'inner_length_cm', 'inner_width_cm',
|
||||
'inner_height_cm', 'edge_addition_cm', 'remark', 'initialization_key',
|
||||
'created_by', 'created_at', 'updated_by', 'updated_at', 'deleted', 'version')) <> 15 THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '统一迁移失败:客户四箱规尺寸配置字段不完整';
|
||||
END IF;
|
||||
IF EXISTS (
|
||||
SELECT tenant.id
|
||||
FROM baiyue_iam.iam_tenant tenant
|
||||
LEFT JOIN baiyue_firstleg.fl_customer_dimension_config config
|
||||
ON config.tenant_id = tenant.id AND config.deleted = 0
|
||||
WHERE tenant.tenant_type = 'MERCHANT' AND tenant.deleted = 0 AND tenant.id > 0
|
||||
GROUP BY tenant.id
|
||||
HAVING COUNT(config.id) <> 4
|
||||
OR COUNT(DISTINCT CASE
|
||||
WHEN config.box_type IN ('SMALL', 'MEDIUM', 'LARGE', 'EXTRA_LARGE')
|
||||
THEN config.box_type END) <> 4
|
||||
) THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '统一迁移失败:现有企业客户未完整持有固定四箱规尺寸配置';
|
||||
END IF;
|
||||
IF (SELECT COUNT(*) FROM baiyue_iam.iam_permission
|
||||
WHERE id = 5100010 AND tenant_id = 0 AND app_code = 'PLATFORM'
|
||||
|
||||
Reference in New Issue
Block a user