This commit is contained in:
2026-08-20 15:58:25 +08:00
parent cd34cd426e
commit 2847ad1b2d
45 changed files with 921 additions and 68 deletions
@@ -1,25 +1,78 @@
USE baiyue_iam;
-- 尾程订单权限属于平台端;列表权限使用 MENU,其余操作使用 BUTTON。
-- 海外业务权限使用独立 5107000 号段,避免与消息中心 5106000 号段冲突。
DROP TEMPORARY TABLE IF EXISTS tmp_lastleg_role_grant;
CREATE TEMPORARY TABLE tmp_lastleg_role_grant (
tenant_id BIGINT NOT NULL, role_id BIGINT NOT NULL, permission_code VARCHAR(128) NOT NULL,
PRIMARY KEY (tenant_id, role_id, permission_code)
);
INSERT IGNORE INTO tmp_lastleg_role_grant (tenant_id, role_id, permission_code)
SELECT role_permission.tenant_id, role_permission.role_id, permission.permission_code
FROM iam_role_permission role_permission
JOIN iam_permission permission ON permission.id = role_permission.permission_id
WHERE permission.id BETWEEN 5106000 AND 5106004
AND permission.permission_code IN ('platform:lastleg:order:list', 'platform:lastleg:order:transfer');
DELETE role_permission FROM iam_role_permission role_permission
JOIN iam_permission permission ON permission.id = role_permission.permission_id
WHERE (permission.id BETWEEN 5106000 AND 5106004 AND permission.permission_code LIKE 'platform:lastleg:%')
OR permission.permission_code IN (
'platform:lastleg:order:detail', 'platform:lastleg:order:assign',
'platform:lastleg:order:merge-pallet');
DELETE FROM iam_permission
WHERE (id BETWEEN 5106000 AND 5106004 AND permission_code LIKE 'platform:lastleg:%')
OR (tenant_id = 0 AND app_code = 'PLATFORM' AND permission_code IN (
'platform:lastleg:order:detail', 'platform:lastleg:order:assign',
'platform:lastleg:order:merge-pallet'));
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
(5106000, 0, 'PLATFORM', 'MENU', 0, 'platform:lastleg:order:list', '尾程订单', '/lastleg/orders', 'GET', 60, 'ACTIVE', 1, 0),
(5106001, 0, 'PLATFORM', 'BUTTON', 5106000, 'platform:lastleg:order:detail', '查看尾程订单详情', NULL, 'GET', 10, 'ACTIVE', 1, 0),
(5106002, 0, 'PLATFORM', 'BUTTON', 5106000, 'platform:lastleg:order:assign', '分配尾程订单', NULL, 'POST', 20, 'ACTIVE', 1, 0),
(5106003, 0, 'PLATFORM', 'BUTTON', 5106000, 'platform:lastleg:order:transfer', '转派尾程订单', NULL, 'POST', 30, 'ACTIVE', 1, 0),
(5106004, 0, 'PLATFORM', 'BUTTON', 5106000, 'platform:lastleg:order:merge-pallet', '合并尾程托盘', NULL, 'POST', 40, 'ACTIVE', 1, 0)
ON DUPLICATE KEY UPDATE 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;
(5107000, 0, 'PLATFORM', 'MENU', 0, 'platform:lastleg', '海外仓业务', '/lastleg', NULL, 700, 'ACTIVE', 1, 0),
(5107010, 0, 'PLATFORM', 'MENU', 5107000, 'platform:lastleg:order:list', '尾程订单', '/lastleg/orders', 'GET', 10, 'ACTIVE', 1, 0),
(5107011, 0, 'PLATFORM', 'BUTTON', 5107010, 'platform:lastleg:order:export', '导出尾程订单', NULL, 'GET', 10, 'ACTIVE', 1, 0),
(5107012, 0, 'PLATFORM', 'BUTTON', 5107010, 'platform:lastleg:order:transfer', '尾程订单转仓', NULL, 'PUT', 20, 'ACTIVE', 1, 0),
(5107020, 0, 'PLATFORM', 'MENU', 5107000, 'platform:lastleg:inbound-plan:list', '入库单', '/lastleg/inbound-plans', 'GET', 20, 'ACTIVE', 1, 0),
(5107021, 0, 'PLATFORM', 'BUTTON', 5107020, 'platform:lastleg:inbound-plan:create', '新建入库单', NULL, 'POST', 10, 'ACTIVE', 1, 0),
(5107022, 0, 'PLATFORM', 'BUTTON', 5107020, 'platform:lastleg:inbound-plan:edit', '维护入库单', NULL, 'POST', 20, 'ACTIVE', 1, 0),
(5107023, 0, 'PLATFORM', 'BUTTON', 5107020, 'platform:lastleg:inbound-plan:appointment', 'FBA预约', NULL, 'POST', 30, 'ACTIVE', 1, 0),
(5107030, 0, 'PLATFORM', 'MENU', 5107000, 'platform:lastleg:relabel:list', '换标单', '/lastleg/relabels', 'GET', 30, 'ACTIVE', 1, 0),
(5107031, 0, 'PLATFORM', 'BUTTON', 5107030, 'platform:lastleg:relabel:create', '新增换标单', NULL, 'POST', 10, 'ACTIVE', 1, 0),
(5107032, 0, 'PLATFORM', 'BUTTON', 5107030, 'platform:lastleg:relabel:status', '操作换标状态', NULL, 'PUT', 20, 'ACTIVE', 1, 0),
(5107040, 0, 'PLATFORM', 'MENU', 5107000, 'platform:lastleg:inventory:list', '库存管理', '/lastleg/inventory', 'GET', 40, 'ACTIVE', 1, 0),
(5107041, 0, 'PLATFORM', 'BUTTON', 5107040, 'platform:lastleg:inventory:export', '导出库存', NULL, 'GET', 10, 'ACTIVE', 1, 0),
(5107042, 0, 'PLATFORM', 'BUTTON', 5107040, 'platform:lastleg:inventory:manage', '库存业务操作', NULL, 'POST', 20, 'ACTIVE', 1, 0),
(5107043, 0, 'PLATFORM', 'BUTTON', 5107040, 'platform:lastleg:inventory:adjust', '库存盘点调整', NULL, 'POST', 30, 'ACTIVE', 1, 0),
(5107050, 0, 'PLATFORM', 'MENU', 5107000, 'platform:lastleg:dispatch:list', '排车管理', '/lastleg/dispatches', 'GET', 50, 'ACTIVE', 1, 0),
(5107051, 0, 'PLATFORM', 'BUTTON', 5107050, 'platform:lastleg:dispatch:create', '创建预排车单', NULL, 'POST', 10, 'ACTIVE', 1, 0),
(5107052, 0, 'PLATFORM', 'BUTTON', 5107050, 'platform:lastleg:dispatch:edit', '编辑排车单', NULL, 'PUT', 20, 'ACTIVE', 1, 0),
(5107053, 0, 'PLATFORM', 'BUTTON', 5107050, 'platform:lastleg:dispatch:delete', '取消排车单', NULL, 'DELETE', 30, 'ACTIVE', 1, 0),
(5107060, 0, 'PLATFORM', 'MENU', 5107000, 'platform:lastleg:overseas-procurement:list', '海外采购', '/lastleg/overseas-procurements', 'GET', 60, 'ACTIVE', 1, 0),
(5107061, 0, 'PLATFORM', 'BUTTON', 5107060, 'platform:lastleg:overseas-procurement:edit', '编辑海外采购单', NULL, 'PATCH', 10, 'ACTIVE', 1, 0),
(5107062, 0, 'PLATFORM', 'BUTTON', 5107060, 'platform:lastleg:overseas-procurement:review', '审核海外采购单', NULL, 'POST', 20, 'ACTIVE', 1, 0),
(5107063, 0, 'PLATFORM', 'BUTTON', 5107060, 'platform:lastleg:overseas-procurement:outbound', '登记采购出库', NULL, 'POST', 30, 'ACTIVE', 1, 0),
(5107070, 0, 'PLATFORM', 'MENU', 5107000, 'platform:lastleg:us-trucking:list', '本土卡车', '/lastleg/us-truck-orders', 'GET', 70, 'ACTIVE', 1, 0),
(5107071, 0, 'PLATFORM', 'BUTTON', 5107070, 'platform:lastleg:us-trucking:status', '操作卡车订单状态', NULL, 'PATCH', 10, 'ACTIVE', 1, 0),
(5107072, 0, 'PLATFORM', 'BUTTON', 5107070, 'platform:lastleg:us-trucking:receive', '登记卡车收托', NULL, 'POST', 20, 'ACTIVE', 1, 0)
ON DUPLICATE KEY UPDATE
permission_name = VALUES(permission_name), parent_id = VALUES(parent_id),
permission_type = VALUES(permission_type), route_path = VALUES(route_path),
http_method = VALUES(http_method), sort_no = VALUES(sort_no),
status = 'ACTIVE', built_in = 1, deleted = 0;
INSERT IGNORE INTO iam_role_permission (tenant_id, role_id, permission_id, created_at)
SELECT saved.tenant_id, saved.role_id, permission.id, NOW(3)
FROM tmp_lastleg_role_grant saved
JOIN iam_permission permission ON permission.tenant_id = 0
AND permission.app_code = 'PLATFORM' AND permission.permission_code = saved.permission_code;
DROP TEMPORARY TABLE IF EXISTS tmp_lastleg_role_grant;
INSERT IGNORE INTO iam_role_permission (tenant_id, role_id, permission_id, created_at)
SELECT 0, role.id, permission.id, NOW(3)
FROM iam_role role
JOIN iam_permission permission ON permission.tenant_id=0 AND permission.app_code='PLATFORM'
WHERE role.tenant_id=0 AND role.app_code='PLATFORM' AND role.role_code='PLATFORM_ADMIN'
AND role.status='ACTIVE' AND role.deleted=0
AND permission.permission_code IN (
'platform:lastleg:order:list', 'platform:lastleg:order:detail',
'platform:lastleg:order:assign', 'platform:lastleg:order:transfer',
'platform:lastleg:order:merge-pallet');
JOIN iam_permission permission ON permission.tenant_id = 0 AND permission.app_code = 'PLATFORM'
WHERE role.tenant_id = 0 AND role.app_code = 'PLATFORM' AND role.role_code = 'PLATFORM_ADMIN'
AND role.status = 'ACTIVE' AND role.deleted = 0
AND (permission.permission_code = 'platform:lastleg'
OR permission.permission_code LIKE 'platform:lastleg:%');
@@ -0,0 +1,37 @@
package com.baiyue.iam.repository;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.ClassPathResource;
import java.nio.charset.StandardCharsets;
import static org.assertj.core.api.Assertions.assertThat;
class LastlegPermissionSqlContractTest {
@Test
void registersExistingOverseasBusinessesAndMigratesLegacyIds() throws Exception {
String sql = new ClassPathResource("db/lastleg-permissions.sql")
.getContentAsString(StandardCharsets.UTF_8);
assertThat(sql).contains(
"tmp_lastleg_role_grant", "id BETWEEN 5106000 AND 5106004",
"(5107000, 0, 'PLATFORM', 'MENU'",
"platform:lastleg:order:list", "platform:lastleg:inbound-plan:list",
"platform:lastleg:relabel:list", "platform:lastleg:inventory:list",
"platform:lastleg:dispatch:list", "platform:lastleg:overseas-procurement:list",
"platform:lastleg:us-trucking:list",
"INSERT IGNORE INTO iam_role_permission", "role.role_code = 'PLATFORM_ADMIN'");
assertThat(sql).doesNotContain("(5106000, 0, 'PLATFORM'", "platform:lastleg:order:view");
}
@Test
void listPermissionsOwnDetailsAndRetiredDetailPermissionIsDeleted() throws Exception {
String sql = new ClassPathResource("db/lastleg-permissions.sql")
.getContentAsString(StandardCharsets.UTF_8);
assertThat(sql).contains(
"platform:lastleg:order:detail", "DELETE FROM iam_permission",
"(5107010, 0, 'PLATFORM', 'MENU', 5107000, 'platform:lastleg:order:list'",
"(5107020, 0, 'PLATFORM', 'MENU', 5107000, 'platform:lastleg:inbound-plan:list'");
}
}