feat(pk): implement PK (Player-Killer) system with lifecycle management
- Add PK entity fields: winner, scores, and setting_id - Implement force start/end API endpoints for clerk PK - Add PK lifecycle service with auto-start/end scheduling - Add Redis-based PK state management - Implement PK detail service with live/history/upcoming queries - Add WeChat PK controller with history and live PK endpoints - Add comprehensive PK integration tests - Create PK setting management with tenant-specific configs - Add database migrations for PK scores, winner, settings, and menu - Add PK-related DTOs and enums (status, menu paths) - Add TenantScope utility for tenant context management
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
CREATE TABLE `play_clerk_pk_settings` (
|
||||
`id` varchar(32) NOT NULL COMMENT 'UUID',
|
||||
`tenant_id` varchar(32) NOT NULL COMMENT '租户ID',
|
||||
`name` varchar(255) NOT NULL COMMENT '设置名称',
|
||||
`recurrence_type` varchar(32) NOT NULL COMMENT '循环类型',
|
||||
`day_of_week` varchar(16) DEFAULT NULL COMMENT '星期几',
|
||||
`day_of_month` int DEFAULT NULL COMMENT '每月第N天',
|
||||
`month_of_year` int DEFAULT NULL COMMENT '每年月份',
|
||||
`start_time_of_day` time NOT NULL COMMENT '每日开始时间',
|
||||
`duration_minutes` int NOT NULL COMMENT '持续分钟数',
|
||||
`effective_start_date` date NOT NULL COMMENT '生效开始日期',
|
||||
`effective_end_date` date DEFAULT NULL COMMENT '生效结束日期',
|
||||
`timezone` varchar(64) NOT NULL COMMENT '时区',
|
||||
`clerk_a_id` varchar(255) NOT NULL COMMENT '店员A ID',
|
||||
`clerk_b_id` varchar(255) NOT NULL COMMENT '店员B ID',
|
||||
`status` varchar(32) NOT NULL COMMENT '状态',
|
||||
`created_by` varchar(32) DEFAULT NULL COMMENT '创建人的id',
|
||||
`created_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`updated_by` varchar(32) DEFAULT NULL COMMENT '修改人的id',
|
||||
`updated_time` datetime DEFAULT NULL COMMENT '修改时间',
|
||||
`deleted` varchar(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除 1已删除 0未删除',
|
||||
`version` int NOT NULL DEFAULT '1' COMMENT '数据版本',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `key_tenant_id` (`tenant_id`) USING BTREE,
|
||||
KEY `idx_pk_settings_status` (`status`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='店员PK排期设置';
|
||||
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE `play_clerk_pk`
|
||||
ADD COLUMN `setting_id` varchar(32) DEFAULT NULL COMMENT 'PK排期设置ID' AFTER `status`,
|
||||
ADD KEY `idx_pk_setting_id` (`setting_id`);
|
||||
288
play-admin/src/main/resources/db/migration/V22__add_pk_menu.sql
Normal file
288
play-admin/src/main/resources/db/migration/V22__add_pk_menu.sql
Normal file
@@ -0,0 +1,288 @@
|
||||
-- Add PK management menus for PC tenant.
|
||||
|
||||
SET @pk_root_id := (
|
||||
SELECT menu_id
|
||||
FROM sys_menu
|
||||
WHERE menu_name = 'PK管理' AND parent_id = 0 AND deleted = 0
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
INSERT INTO sys_menu (
|
||||
menu_name,
|
||||
menu_code,
|
||||
icon,
|
||||
permission,
|
||||
menu_level,
|
||||
sort,
|
||||
parent_id,
|
||||
menu_type,
|
||||
status,
|
||||
remark,
|
||||
path,
|
||||
component,
|
||||
router_query,
|
||||
is_frame,
|
||||
visible,
|
||||
updated_time,
|
||||
updated_by,
|
||||
created_time,
|
||||
created_by,
|
||||
deleted,
|
||||
version,
|
||||
perms
|
||||
)
|
||||
SELECT
|
||||
'PK管理',
|
||||
'PkManage',
|
||||
'el-icon-trophy',
|
||||
'',
|
||||
1,
|
||||
90,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
'PK管理',
|
||||
'play/pk',
|
||||
'Layout',
|
||||
'',
|
||||
0,
|
||||
1,
|
||||
NOW(),
|
||||
'migration_v22_pk_menu',
|
||||
NOW(),
|
||||
'migration_v22_pk_menu',
|
||||
0,
|
||||
1,
|
||||
''
|
||||
WHERE @pk_root_id IS NULL;
|
||||
|
||||
SET @pk_root_id := (
|
||||
SELECT menu_id
|
||||
FROM sys_menu
|
||||
WHERE menu_name = 'PK管理' AND parent_id = 0 AND deleted = 0
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
SET @pk_schedule_id := (
|
||||
SELECT menu_id
|
||||
FROM sys_menu
|
||||
WHERE menu_name = '排期管理' AND parent_id = @pk_root_id AND deleted = 0
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
INSERT INTO sys_menu (
|
||||
menu_name,
|
||||
menu_code,
|
||||
icon,
|
||||
permission,
|
||||
menu_level,
|
||||
sort,
|
||||
parent_id,
|
||||
menu_type,
|
||||
status,
|
||||
remark,
|
||||
path,
|
||||
component,
|
||||
router_query,
|
||||
is_frame,
|
||||
visible,
|
||||
updated_time,
|
||||
updated_by,
|
||||
created_time,
|
||||
created_by,
|
||||
deleted,
|
||||
version,
|
||||
perms
|
||||
)
|
||||
SELECT
|
||||
'排期管理',
|
||||
'PkSchedule',
|
||||
'el-icon-date',
|
||||
'play:pk:schedule:list',
|
||||
2,
|
||||
1,
|
||||
@pk_root_id,
|
||||
1,
|
||||
0,
|
||||
'排期管理',
|
||||
'schedule',
|
||||
'play/pk/schedule/index',
|
||||
'',
|
||||
0,
|
||||
1,
|
||||
NOW(),
|
||||
'migration_v22_pk_menu',
|
||||
NOW(),
|
||||
'migration_v22_pk_menu',
|
||||
0,
|
||||
1,
|
||||
''
|
||||
WHERE @pk_root_id IS NOT NULL AND @pk_schedule_id IS NULL;
|
||||
|
||||
SET @pk_live_id := (
|
||||
SELECT menu_id
|
||||
FROM sys_menu
|
||||
WHERE menu_name = '实时监控' AND parent_id = @pk_root_id AND deleted = 0
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
INSERT INTO sys_menu (
|
||||
menu_name,
|
||||
menu_code,
|
||||
icon,
|
||||
permission,
|
||||
menu_level,
|
||||
sort,
|
||||
parent_id,
|
||||
menu_type,
|
||||
status,
|
||||
remark,
|
||||
path,
|
||||
component,
|
||||
router_query,
|
||||
is_frame,
|
||||
visible,
|
||||
updated_time,
|
||||
updated_by,
|
||||
created_time,
|
||||
created_by,
|
||||
deleted,
|
||||
version,
|
||||
perms
|
||||
)
|
||||
SELECT
|
||||
'实时监控',
|
||||
'PkLive',
|
||||
'el-icon-video-play',
|
||||
'play:pk:live:list',
|
||||
2,
|
||||
2,
|
||||
@pk_root_id,
|
||||
1,
|
||||
0,
|
||||
'实时监控',
|
||||
'live',
|
||||
'play/pk/live/index',
|
||||
'',
|
||||
0,
|
||||
1,
|
||||
NOW(),
|
||||
'migration_v22_pk_menu',
|
||||
NOW(),
|
||||
'migration_v22_pk_menu',
|
||||
0,
|
||||
1,
|
||||
''
|
||||
WHERE @pk_root_id IS NOT NULL AND @pk_live_id IS NULL;
|
||||
|
||||
SET @pk_history_id := (
|
||||
SELECT menu_id
|
||||
FROM sys_menu
|
||||
WHERE menu_name = '战绩列表' AND parent_id = @pk_root_id AND deleted = 0
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
INSERT INTO sys_menu (
|
||||
menu_name,
|
||||
menu_code,
|
||||
icon,
|
||||
permission,
|
||||
menu_level,
|
||||
sort,
|
||||
parent_id,
|
||||
menu_type,
|
||||
status,
|
||||
remark,
|
||||
path,
|
||||
component,
|
||||
router_query,
|
||||
is_frame,
|
||||
visible,
|
||||
updated_time,
|
||||
updated_by,
|
||||
created_time,
|
||||
created_by,
|
||||
deleted,
|
||||
version,
|
||||
perms
|
||||
)
|
||||
SELECT
|
||||
'战绩列表',
|
||||
'PkHistory',
|
||||
'el-icon-data-analysis',
|
||||
'play:pk:history:list',
|
||||
2,
|
||||
3,
|
||||
@pk_root_id,
|
||||
1,
|
||||
0,
|
||||
'战绩列表',
|
||||
'history',
|
||||
'play/pk/history/index',
|
||||
'',
|
||||
0,
|
||||
1,
|
||||
NOW(),
|
||||
'migration_v22_pk_menu',
|
||||
NOW(),
|
||||
'migration_v22_pk_menu',
|
||||
0,
|
||||
1,
|
||||
''
|
||||
WHERE @pk_root_id IS NOT NULL AND @pk_history_id IS NULL;
|
||||
|
||||
SET @pk_settings_id := (
|
||||
SELECT menu_id
|
||||
FROM sys_menu
|
||||
WHERE menu_name = '规则设置' AND parent_id = @pk_root_id AND deleted = 0
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
INSERT INTO sys_menu (
|
||||
menu_name,
|
||||
menu_code,
|
||||
icon,
|
||||
permission,
|
||||
menu_level,
|
||||
sort,
|
||||
parent_id,
|
||||
menu_type,
|
||||
status,
|
||||
remark,
|
||||
path,
|
||||
component,
|
||||
router_query,
|
||||
is_frame,
|
||||
visible,
|
||||
updated_time,
|
||||
updated_by,
|
||||
created_time,
|
||||
created_by,
|
||||
deleted,
|
||||
version,
|
||||
perms
|
||||
)
|
||||
SELECT
|
||||
'规则设置',
|
||||
'PkSettings',
|
||||
'el-icon-setting',
|
||||
'play:pk:settings:list',
|
||||
2,
|
||||
4,
|
||||
@pk_root_id,
|
||||
1,
|
||||
0,
|
||||
'规则设置',
|
||||
'settings',
|
||||
'play/pk/settings/index',
|
||||
'',
|
||||
0,
|
||||
1,
|
||||
NOW(),
|
||||
'migration_v22_pk_menu',
|
||||
NOW(),
|
||||
'migration_v22_pk_menu',
|
||||
0,
|
||||
1,
|
||||
''
|
||||
WHERE @pk_root_id IS NOT NULL AND @pk_settings_id IS NULL;
|
||||
@@ -0,0 +1,10 @@
|
||||
-- Fix PK root menu path to ensure correct routing.
|
||||
|
||||
UPDATE sys_menu
|
||||
SET path = '/play/pk',
|
||||
updated_time = NOW(),
|
||||
updated_by = 'migration_v23_fix_pk_path'
|
||||
WHERE menu_name = 'PK管理'
|
||||
AND parent_id = 0
|
||||
AND deleted = 0
|
||||
AND path = 'play/pk';
|
||||
Reference in New Issue
Block a user