新增海外仓阶梯费用
This commit is contained in:
@@ -78,3 +78,10 @@ SELECT COUNT(*) = 8 AS scheduler_columns_ready
|
||||
- 当前固定入口 `头程数据库统一增量-MySQL8.sql` 已内联该增量以及订单船司字段、二期 28 项 IAM 权限和最新仓储资源租户字段。
|
||||
- 新增 `external_request_hash`、`inbound_detail_id`、`external_detail_no` 和第三方明细唯一索引,用于一条回传绑定一条订单货物明细及一张文件中心图片。
|
||||
- 部署 Firstleg 新版本前必须完整执行固定入口,并确认末尾总体验证为 `PASS`。
|
||||
|
||||
## 海外仓阶梯费用增量
|
||||
|
||||
- `2026-08-05` 增量已追加到固定入口末尾,不创建新的日期部署脚本。
|
||||
- Warehouse 新增 `wh_overseas_storage_fee_rule` 和 `wh_overseas_storage_fee_tier`,包含客户唯一索引、分页索引、阶梯起始天唯一索引和规则明细查询索引。
|
||||
- IAM 新增 `platform:overseas-storage-fee:list/create/edit/delete` 四项权限,默认授予平台系统管理员。
|
||||
- Warehouse Service 启动前必须先执行固定入口;末尾只有两张表、五个索引和四项权限均存在才返回 `PASS`。
|
||||
|
||||
@@ -3342,5 +3342,123 @@ DELIMITER ;
|
||||
CALL unified_assert_permission_count();
|
||||
DROP PROCEDURE IF EXISTS unified_assert_permission_count;
|
||||
|
||||
-- ============================================================================
|
||||
-- 2026-08-05:海外仓阶梯费用基础资料 CRUD 增量
|
||||
-- ============================================================================
|
||||
USE baiyue_warehouse;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS wh_overseas_storage_fee_rule (
|
||||
id BIGINT UNSIGNED NOT NULL COMMENT '海外仓阶梯费用规则ID(雪花ID)',
|
||||
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户账号ID,沿用tenant_id物理字段',
|
||||
customer_name VARCHAR(128) NOT NULL COMMENT '客户公司名称快照',
|
||||
currency CHAR(3) NOT NULL COMMENT 'ISO 4217币种三字码',
|
||||
created_by BIGINT UNSIGNED NULL COMMENT '创建人ID',
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||||
updated_by BIGINT UNSIGNED NULL COMMENT '最后修改人ID',
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)
|
||||
ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||||
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
active_customer_id BIGINT UNSIGNED
|
||||
GENERATED ALWAYS AS (CASE WHEN deleted = 0 THEN tenant_id ELSE NULL END) STORED
|
||||
COMMENT '未删除规则的客户唯一键',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_overseas_fee_active_customer (active_customer_id),
|
||||
KEY idx_overseas_fee_page (deleted, updated_at, id),
|
||||
KEY idx_overseas_fee_customer_name (customer_name, deleted)
|
||||
) ENGINE=InnoDB COMMENT='客户维度海外仓阶梯仓储费规则';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS wh_overseas_storage_fee_tier (
|
||||
id BIGINT UNSIGNED NOT NULL COMMENT '海外仓阶梯费用明细ID(雪花ID)',
|
||||
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户账号ID,沿用tenant_id物理字段',
|
||||
rule_id BIGINT UNSIGNED NOT NULL COMMENT '阶梯费用规则ID',
|
||||
start_day SMALLINT UNSIGNED NOT NULL COMMENT '起始天,含边界',
|
||||
end_day SMALLINT UNSIGNED NOT NULL COMMENT '结束天,含边界',
|
||||
unit_price DECIMAL(18,6) NOT NULL COMMENT '仓储费标准',
|
||||
sort_no SMALLINT UNSIGNED NOT NULL COMMENT '阶梯排序号',
|
||||
created_by BIGINT UNSIGNED NULL COMMENT '创建人ID',
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||||
updated_by BIGINT UNSIGNED NULL COMMENT '最后修改人ID',
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)
|
||||
ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||||
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
active_start_day SMALLINT UNSIGNED
|
||||
GENERATED ALWAYS AS (CASE WHEN deleted = 0 THEN start_day ELSE NULL END) STORED
|
||||
COMMENT '未删除阶梯的起始天唯一键',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_overseas_fee_tier_start (rule_id, active_start_day),
|
||||
KEY idx_overseas_fee_tier_rule (tenant_id, rule_id, deleted, sort_no, id),
|
||||
CONSTRAINT chk_overseas_fee_tier_days CHECK (start_day >= 1 AND end_day >= start_day),
|
||||
CONSTRAINT chk_overseas_fee_tier_price CHECK (unit_price > 0)
|
||||
) ENGINE=InnoDB COMMENT='海外仓阶梯仓储费明细';
|
||||
|
||||
USE baiyue_iam;
|
||||
INSERT INTO iam_permission (
|
||||
id, tenant_id, app_code, permission_type, parent_id, permission_code,
|
||||
permission_name, route_path, http_method, sort_no, status, built_in, deleted
|
||||
)
|
||||
VALUES
|
||||
(5100030, 0, 'PLATFORM', 'MENU', 5100000,
|
||||
'platform:overseas-storage-fee:list', '海外仓阶梯费用',
|
||||
'/customers/overseas-storage-fees', 'GET', 20, 'ACTIVE', 1, 0),
|
||||
(5100031, 0, 'PLATFORM', 'BUTTON', 5100030,
|
||||
'platform:overseas-storage-fee:create', '新增海外仓阶梯费用',
|
||||
NULL, NULL, 10, 'ACTIVE', 1, 0),
|
||||
(5100032, 0, 'PLATFORM', 'BUTTON', 5100030,
|
||||
'platform:overseas-storage-fee:edit', '编辑海外仓阶梯费用',
|
||||
NULL, NULL, 20, 'ACTIVE', 1, 0),
|
||||
(5100033, 0, 'PLATFORM', 'BUTTON', 5100030,
|
||||
'platform:overseas-storage-fee:delete', '删除海外仓阶梯费用',
|
||||
NULL, NULL, 30, 'ACTIVE', 1, 0)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
permission_type = VALUES(permission_type), parent_id = VALUES(parent_id),
|
||||
permission_name = VALUES(permission_name), route_path = VALUES(route_path),
|
||||
http_method = VALUES(http_method), sort_no = VALUES(sort_no),
|
||||
status = 'ACTIVE', built_in = 1, deleted = 0;
|
||||
|
||||
INSERT INTO iam_role_permission (role_id, permission_id, tenant_id)
|
||||
SELECT 4000001, id, 0
|
||||
FROM iam_permission
|
||||
WHERE tenant_id = 0 AND app_code = 'PLATFORM'
|
||||
AND permission_code IN (
|
||||
'platform:overseas-storage-fee:list',
|
||||
'platform:overseas-storage-fee:create',
|
||||
'platform:overseas-storage-fee:edit',
|
||||
'platform:overseas-storage-fee:delete'
|
||||
)
|
||||
ON DUPLICATE KEY UPDATE tenant_id = VALUES(tenant_id);
|
||||
|
||||
DROP PROCEDURE IF EXISTS unified_assert_overseas_storage_fee;
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE unified_assert_overseas_storage_fee()
|
||||
BEGIN
|
||||
IF (SELECT COUNT(*) FROM information_schema.tables
|
||||
WHERE table_schema = 'baiyue_warehouse'
|
||||
AND table_name IN ('wh_overseas_storage_fee_rule', 'wh_overseas_storage_fee_tier')) <> 2 THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '统一迁移失败:海外仓阶梯费用表未完整创建';
|
||||
END IF;
|
||||
IF (SELECT COUNT(DISTINCT index_name) FROM information_schema.statistics
|
||||
WHERE table_schema = 'baiyue_warehouse'
|
||||
AND index_name IN ('uk_overseas_fee_active_customer', 'idx_overseas_fee_page',
|
||||
'idx_overseas_fee_customer_name', 'uk_overseas_fee_tier_start',
|
||||
'idx_overseas_fee_tier_rule')) <> 5 THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '统一迁移失败:海外仓阶梯费用索引未完整创建';
|
||||
END IF;
|
||||
IF (SELECT COUNT(DISTINCT permission_code) FROM baiyue_iam.iam_permission
|
||||
WHERE tenant_id = 0 AND status = 'ACTIVE' AND deleted = 0
|
||||
AND permission_code IN (
|
||||
'platform:overseas-storage-fee:list', 'platform:overseas-storage-fee:create',
|
||||
'platform:overseas-storage-fee:edit', 'platform:overseas-storage-fee:delete')) <> 4 THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '统一迁移失败:海外仓阶梯费用权限未完整创建';
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
CALL unified_assert_overseas_storage_fee();
|
||||
DROP PROCEDURE IF EXISTS unified_assert_overseas_storage_fee;
|
||||
|
||||
SELECT 'PASS' AS migration_status,
|
||||
'一期与二期统一增量执行完成,关键结构与二期权限校验通过' AS message;
|
||||
'统一增量执行完成,海外仓阶梯费用表、索引和权限校验通过' AS message;
|
||||
|
||||
Reference in New Issue
Block a user