新增海外仓阶梯费用

This commit is contained in:
2026-08-05 11:20:28 +08:00
parent 9678ee0f1f
commit cac377de96
20 changed files with 801 additions and 10 deletions
+7
View File
@@ -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;