This commit is contained in:
194
database/martial-db/UPGRADE_GUIDE.md
Normal file
194
database/martial-db/UPGRADE_GUIDE.md
Normal file
@@ -0,0 +1,194 @@
|
||||
# 赛程编排系统数据库升级指南
|
||||
|
||||
## 当前状态
|
||||
- 数据库名: `martial_db`
|
||||
- 现有表: `martial_schedule`, `martial_schedule_athlete`
|
||||
- 需要创建: 4张新表(与旧表共存)
|
||||
|
||||
## 🚀 执行步骤
|
||||
|
||||
### 步骤1: 打开数据库管理工具
|
||||
|
||||
使用你常用的数据库管理工具:
|
||||
- Navicat
|
||||
- DBeaver
|
||||
- phpMyAdmin
|
||||
- MySQL Workbench
|
||||
- DataGrip
|
||||
- 或其他工具
|
||||
|
||||
### 步骤2: 连接到数据库
|
||||
|
||||
连接到 `martial_db` 数据库
|
||||
|
||||
### 步骤3: 执行SQL脚本
|
||||
|
||||
打开文件: `D:\workspace\31.比赛项目\project\martial-master\database\martial-db\upgrade_schedule_system.sql`
|
||||
|
||||
**方式A**: 在工具中直接打开此文件并执行
|
||||
|
||||
**方式B**: 复制以下SQL内容并执行
|
||||
|
||||
```sql
|
||||
USE martial_db;
|
||||
|
||||
-- 1. 赛程编排分组表
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_group` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`competition_id` bigint(20) NOT NULL COMMENT '赛事ID',
|
||||
`group_name` varchar(200) NOT NULL COMMENT '分组名称(如:太极拳男组)',
|
||||
`project_id` bigint(20) NOT NULL COMMENT '项目ID',
|
||||
`project_name` varchar(100) DEFAULT NULL COMMENT '项目名称',
|
||||
`category` varchar(50) DEFAULT NULL COMMENT '组别(成年组、少年组等)',
|
||||
`project_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '项目类型(1=个人 2=集体)',
|
||||
`display_order` int(11) NOT NULL DEFAULT '0' COMMENT '显示顺序',
|
||||
`total_participants` int(11) DEFAULT '0' COMMENT '总参赛人数',
|
||||
`total_teams` int(11) DEFAULT '0' COMMENT '总队伍数(仅集体项目)',
|
||||
`estimated_duration` int(11) DEFAULT '0' COMMENT '预计时长(分钟)',
|
||||
`create_user` bigint(20) DEFAULT NULL,
|
||||
`create_dept` bigint(20) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_user` bigint(20) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`status` int(11) DEFAULT '1' COMMENT '状态(1-启用,2-禁用)',
|
||||
`is_deleted` int(11) DEFAULT '0',
|
||||
`tenant_id` varchar(12) DEFAULT '000000',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_competition` (`competition_id`),
|
||||
KEY `idx_project` (`project_id`),
|
||||
KEY `idx_display_order` (`display_order`),
|
||||
KEY `idx_tenant` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛程编排分组表';
|
||||
|
||||
-- 2. 赛程编排明细表
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_detail` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`schedule_group_id` bigint(20) NOT NULL COMMENT '分组ID',
|
||||
`competition_id` bigint(20) NOT NULL COMMENT '赛事ID',
|
||||
`venue_id` bigint(20) NOT NULL COMMENT '场地ID',
|
||||
`venue_name` varchar(100) DEFAULT NULL COMMENT '场地名称',
|
||||
`schedule_date` date NOT NULL COMMENT '比赛日期',
|
||||
`time_period` varchar(20) NOT NULL COMMENT '时间段(morning/afternoon)',
|
||||
`time_slot` varchar(20) NOT NULL COMMENT '时间点(08:30/13:30)',
|
||||
`estimated_start_time` datetime DEFAULT NULL COMMENT '预计开始时间',
|
||||
`estimated_end_time` datetime DEFAULT NULL COMMENT '预计结束时间',
|
||||
`estimated_duration` int(11) DEFAULT '0' COMMENT '预计时长(分钟)',
|
||||
`participant_count` int(11) DEFAULT '0' COMMENT '参赛人数',
|
||||
`sort_order` int(11) DEFAULT '0' COMMENT '场内顺序',
|
||||
`create_user` bigint(20) DEFAULT NULL,
|
||||
`create_dept` bigint(20) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_user` bigint(20) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`status` int(11) DEFAULT '1' COMMENT '状态(1-未开始,2-进行中,3-已完成)',
|
||||
`is_deleted` int(11) DEFAULT '0',
|
||||
`tenant_id` varchar(12) DEFAULT '000000',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_group` (`schedule_group_id`),
|
||||
KEY `idx_competition` (`competition_id`),
|
||||
KEY `idx_venue_time` (`venue_id`,`schedule_date`,`time_slot`),
|
||||
KEY `idx_tenant` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛程编排明细表';
|
||||
|
||||
-- 3. 赛程编排参赛者关联表
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_participant` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`schedule_detail_id` bigint(20) NOT NULL COMMENT '编排明细ID',
|
||||
`schedule_group_id` bigint(20) NOT NULL COMMENT '分组ID',
|
||||
`participant_id` bigint(20) NOT NULL COMMENT '参赛者ID(关联martial_athlete表)',
|
||||
`organization` varchar(200) DEFAULT NULL COMMENT '单位名称',
|
||||
`player_name` varchar(100) DEFAULT NULL COMMENT '选手姓名',
|
||||
`project_name` varchar(100) DEFAULT NULL COMMENT '项目名称',
|
||||
`category` varchar(50) DEFAULT NULL COMMENT '组别',
|
||||
`performance_order` int(11) DEFAULT '0' COMMENT '出场顺序',
|
||||
`create_user` bigint(20) DEFAULT NULL,
|
||||
`create_dept` bigint(20) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_user` bigint(20) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`status` int(11) DEFAULT '1' COMMENT '状态(1-待出场,2-已出场)',
|
||||
`is_deleted` int(11) DEFAULT '0',
|
||||
`tenant_id` varchar(12) DEFAULT '000000',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_detail` (`schedule_detail_id`),
|
||||
KEY `idx_group` (`schedule_group_id`),
|
||||
KEY `idx_participant` (`participant_id`),
|
||||
KEY `idx_tenant` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛程编排参赛者关联表';
|
||||
|
||||
-- 4. 赛程编排状态表
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_status` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`competition_id` bigint(20) NOT NULL COMMENT '赛事ID(唯一)',
|
||||
`schedule_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '编排状态(0=未编排 1=编排中 2=已保存锁定)',
|
||||
`last_auto_schedule_time` datetime DEFAULT NULL COMMENT '最后自动编排时间',
|
||||
`locked_time` datetime DEFAULT NULL COMMENT '锁定时间',
|
||||
`locked_by` varchar(100) DEFAULT NULL COMMENT '锁定人',
|
||||
`total_groups` int(11) DEFAULT '0' COMMENT '总分组数',
|
||||
`total_participants` int(11) DEFAULT '0' COMMENT '总参赛人数',
|
||||
`create_user` bigint(20) DEFAULT NULL,
|
||||
`create_dept` bigint(20) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_user` bigint(20) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`status` int(11) DEFAULT '1' COMMENT '状态(1-启用,2-禁用)',
|
||||
`is_deleted` int(11) DEFAULT '0',
|
||||
`tenant_id` varchar(12) DEFAULT '000000',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_competition` (`competition_id`),
|
||||
KEY `idx_tenant` (`tenant_id`),
|
||||
KEY `idx_schedule_status` (`schedule_status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛程编排状态表';
|
||||
|
||||
-- 验证
|
||||
SELECT '✓ 升级完成' AS message, COUNT(*) AS created_tables
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'martial_db'
|
||||
AND table_name IN (
|
||||
'martial_schedule_group',
|
||||
'martial_schedule_detail',
|
||||
'martial_schedule_participant',
|
||||
'martial_schedule_status'
|
||||
);
|
||||
```
|
||||
|
||||
### 步骤4: 验证结果
|
||||
|
||||
执行以下SQL检查:
|
||||
|
||||
```sql
|
||||
SHOW TABLES LIKE 'martial_schedule%';
|
||||
```
|
||||
|
||||
**预期结果**(6张表):
|
||||
- martial_schedule (旧)
|
||||
- martial_schedule_athlete (旧)
|
||||
- martial_schedule_group (新) ✓
|
||||
- martial_schedule_detail (新) ✓
|
||||
- martial_schedule_participant (新) ✓
|
||||
- martial_schedule_status (新) ✓
|
||||
|
||||
### 步骤5: 测试新系统
|
||||
|
||||
重启后端服务,访问:
|
||||
```
|
||||
http://localhost:3000/martial/schedule?competitionId=200
|
||||
```
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
1. **不会删除旧表**: 旧的 `martial_schedule` 和 `martial_schedule_athlete` 表会保留
|
||||
2. **数据隔离**: 新旧系统使用不同的表,互不影响
|
||||
3. **安全性**: 使用 `CREATE TABLE IF NOT EXISTS`,不会覆盖已存在的表
|
||||
|
||||
## ❓ 遇到问题?
|
||||
|
||||
如果创建失败,检查:
|
||||
1. 是否有 CREATE TABLE 权限
|
||||
2. 数据库名称是否正确(martial_db)
|
||||
3. 字符集是否支持 utf8mb4
|
||||
|
||||
---
|
||||
|
||||
**创建时间**: 2025-12-09
|
||||
**版本**: v1.1
|
||||
53
database/martial-db/URGENT_FIX_venue_table.sql
Normal file
53
database/martial-db/URGENT_FIX_venue_table.sql
Normal file
@@ -0,0 +1,53 @@
|
||||
-- ================================================================
|
||||
-- 【紧急修复】场地表字段缺失问题 - 直接复制执行此脚本
|
||||
-- 问题:Unknown column 'max_capacity' in 'field list'
|
||||
-- 解决:重建 martial_venue 表,包含所有必需字段
|
||||
-- 日期:2025-12-06
|
||||
-- ================================================================
|
||||
|
||||
-- 使用正确的数据库
|
||||
USE martial_db;
|
||||
|
||||
-- 删除旧表(如果有重要数据,请先备份!)
|
||||
DROP TABLE IF EXISTS `martial_venue`;
|
||||
|
||||
-- 创建新表,包含完整字段
|
||||
CREATE TABLE `martial_venue` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`tenant_id` varchar(12) DEFAULT '000000' COMMENT '租户ID',
|
||||
`competition_id` bigint(20) NOT NULL COMMENT '赛事ID',
|
||||
`venue_name` varchar(100) NOT NULL COMMENT '场地名称',
|
||||
`venue_code` varchar(50) DEFAULT NULL COMMENT '场地编码',
|
||||
`max_capacity` int(11) DEFAULT 100 COMMENT '最大容纳人数',
|
||||
`location` varchar(200) DEFAULT NULL COMMENT '位置/地点',
|
||||
`description` varchar(500) DEFAULT NULL COMMENT '场地描述',
|
||||
`facilities` varchar(500) DEFAULT NULL COMMENT '场地设施',
|
||||
`sort_order` int(11) DEFAULT 0 COMMENT '排序',
|
||||
`status` int(2) DEFAULT 1 COMMENT '状态(0-禁用,1-启用)',
|
||||
`create_user` bigint(20) DEFAULT NULL COMMENT '创建人',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
`is_deleted` int(2) DEFAULT 0 COMMENT '是否已删除',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_competition_id` (`competition_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='场地信息表';
|
||||
|
||||
-- 验证表已创建成功
|
||||
DESC martial_venue;
|
||||
|
||||
-- 检查 max_capacity 字段
|
||||
SELECT '✓ martial_venue 表已成功重建,包含 max_capacity 字段' AS 修复结果;
|
||||
|
||||
-- 显示所有字段
|
||||
SELECT
|
||||
COLUMN_NAME AS 字段名,
|
||||
COLUMN_TYPE AS 类型,
|
||||
COLUMN_DEFAULT AS 默认值,
|
||||
COLUMN_COMMENT AS 说明
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'martial_db'
|
||||
AND TABLE_NAME = 'martial_venue'
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
78
database/martial-db/add_venue_fields.sql
Normal file
78
database/martial-db/add_venue_fields.sql
Normal file
@@ -0,0 +1,78 @@
|
||||
-- ================================================================
|
||||
-- 场地表字段修复脚本(保留数据版本)
|
||||
-- 用途:为现有 martial_venue 表添加缺失的字段,不删除已有数据
|
||||
-- 日期:2025-12-06
|
||||
-- ================================================================
|
||||
|
||||
-- 检查并添加 max_capacity 字段
|
||||
SET @col_exists = 0;
|
||||
SELECT COUNT(*) INTO @col_exists
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'martial_venue'
|
||||
AND COLUMN_NAME = 'max_capacity';
|
||||
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
'ALTER TABLE martial_venue ADD COLUMN max_capacity int(11) DEFAULT 100 COMMENT ''最大容纳人数'' AFTER venue_code',
|
||||
'SELECT ''max_capacity 字段已存在'' AS info'
|
||||
);
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加 facilities 字段(如果也缺失)
|
||||
SET @col_exists = 0;
|
||||
SELECT COUNT(*) INTO @col_exists
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'martial_venue'
|
||||
AND COLUMN_NAME = 'facilities';
|
||||
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
'ALTER TABLE martial_venue ADD COLUMN facilities varchar(500) DEFAULT NULL COMMENT ''场地设施'' AFTER description',
|
||||
'SELECT ''facilities 字段已存在'' AS info'
|
||||
);
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加 status 字段(如果也缺失)
|
||||
SET @col_exists = 0;
|
||||
SELECT COUNT(*) INTO @col_exists
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'martial_venue'
|
||||
AND COLUMN_NAME = 'status';
|
||||
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
'ALTER TABLE martial_venue ADD COLUMN status int(2) DEFAULT 1 COMMENT ''状态(0-禁用,1-启用)'' AFTER sort_order',
|
||||
'SELECT ''status 字段已存在'' AS info'
|
||||
);
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ================================================================
|
||||
-- 验证表结构
|
||||
-- ================================================================
|
||||
SELECT '字段添加完成,正在验证...' AS info;
|
||||
|
||||
SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_DEFAULT, IS_NULLABLE, COLUMN_COMMENT
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'martial_venue'
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- 检查 max_capacity 字段是否存在
|
||||
SELECT
|
||||
CASE
|
||||
WHEN COUNT(*) > 0 THEN '✓ max_capacity 字段已成功添加'
|
||||
ELSE '✗ max_capacity 字段仍然缺失'
|
||||
END AS result
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'martial_venue'
|
||||
AND COLUMN_NAME = 'max_capacity';
|
||||
73
database/martial-db/check_competition_data.sql
Normal file
73
database/martial-db/check_competition_data.sql
Normal file
@@ -0,0 +1,73 @@
|
||||
-- 检查赛事基础数据是否完整
|
||||
USE martial_db;
|
||||
|
||||
-- 1. 检查赛事信息
|
||||
SELECT
|
||||
'赛事信息' AS '检查项',
|
||||
COUNT(*) AS '记录数'
|
||||
FROM martial_competition
|
||||
WHERE id = 200;
|
||||
|
||||
-- 2. 检查参赛者数据
|
||||
SELECT
|
||||
'参赛者数据' AS '检查项',
|
||||
COUNT(*) AS '记录数'
|
||||
FROM martial_athlete
|
||||
WHERE competition_id = 200;
|
||||
|
||||
-- 3. 检查场地数据
|
||||
SELECT
|
||||
'场地数据' AS '检查项',
|
||||
COUNT(*) AS '记录数'
|
||||
FROM martial_venue
|
||||
WHERE competition_id = 200;
|
||||
|
||||
-- 4. 检查项目数据
|
||||
SELECT
|
||||
'项目数据' AS '检查项',
|
||||
COUNT(*) AS '记录数'
|
||||
FROM martial_project
|
||||
WHERE id IN (
|
||||
SELECT DISTINCT project_id
|
||||
FROM martial_athlete
|
||||
WHERE competition_id = 200
|
||||
);
|
||||
|
||||
-- 5. 检查赛事时间配置
|
||||
SELECT
|
||||
id AS '赛事ID',
|
||||
competition_name AS '赛事名称',
|
||||
competition_start_time AS '开始时间',
|
||||
competition_end_time AS '结束时间',
|
||||
CASE
|
||||
WHEN competition_start_time IS NULL THEN '⚠ 未配置'
|
||||
WHEN competition_end_time IS NULL THEN '⚠ 未配置'
|
||||
ELSE '✓ 已配置'
|
||||
END AS '时间配置状态'
|
||||
FROM martial_competition
|
||||
WHERE id = 200;
|
||||
|
||||
-- 6. 详细检查参赛者项目分布
|
||||
SELECT
|
||||
p.project_name AS '项目名称',
|
||||
p.type AS '项目类型(1=个人,2=双人,3=集体)',
|
||||
COUNT(*) AS '参赛人数'
|
||||
FROM martial_athlete a
|
||||
LEFT JOIN martial_project p ON a.project_id = p.id
|
||||
WHERE a.competition_id = 200
|
||||
GROUP BY p.id, p.project_name, p.type
|
||||
ORDER BY p.type, p.project_name;
|
||||
|
||||
-- 7. 检查场地详情
|
||||
SELECT
|
||||
id AS '场地ID',
|
||||
venue_name AS '场地名称',
|
||||
venue_type AS '场地类型',
|
||||
capacity AS '容量'
|
||||
FROM martial_venue
|
||||
WHERE competition_id = 200;
|
||||
|
||||
-- 总结
|
||||
SELECT
|
||||
'数据检查完成' AS '状态',
|
||||
NOW() AS '检查时间';
|
||||
26
database/martial-db/check_venue_table.sql
Normal file
26
database/martial-db/check_venue_table.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
-- ================================================================
|
||||
-- 场地表结构检查和修复脚本
|
||||
-- 用途:检查 martial_venue 表是否存在 max_capacity 字段,如果不存在则添加
|
||||
-- 日期:2025-12-06
|
||||
-- ================================================================
|
||||
|
||||
-- 检查表是否存在
|
||||
SELECT
|
||||
TABLE_NAME,
|
||||
CASE
|
||||
WHEN TABLE_NAME IS NOT NULL THEN '表存在'
|
||||
ELSE '表不存在'
|
||||
END AS status
|
||||
FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'martial_venue';
|
||||
|
||||
-- 查看当前表结构
|
||||
DESC martial_venue;
|
||||
|
||||
-- 查看所有字段
|
||||
SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_DEFAULT, IS_NULLABLE, COLUMN_COMMENT
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'martial_venue'
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
85
database/martial-db/cleanup_test_data.sql
Normal file
85
database/martial-db/cleanup_test_data.sql
Normal file
@@ -0,0 +1,85 @@
|
||||
-- ================================================================
|
||||
-- 清理所有测试数据脚本
|
||||
-- 用途:清空所有业务数据,保留表结构
|
||||
-- 日期:2025-12-06
|
||||
-- 警告:此脚本会删除所有业务数据,请谨慎使用!
|
||||
-- ================================================================
|
||||
|
||||
-- 设置外键检查为0,允许删除有外键关联的数据
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- 1. 清空赛事相关表
|
||||
-- ================================================================
|
||||
TRUNCATE TABLE `martial_competition`;
|
||||
TRUNCATE TABLE `martial_banner`;
|
||||
|
||||
-- 2. 清空项目相关表
|
||||
-- ================================================================
|
||||
TRUNCATE TABLE `martial_project`;
|
||||
|
||||
-- 3. 清空场地相关表
|
||||
-- ================================================================
|
||||
TRUNCATE TABLE `martial_venue`;
|
||||
|
||||
-- 4. 清空参赛者/运动员相关表
|
||||
-- ================================================================
|
||||
TRUNCATE TABLE `martial_athlete`;
|
||||
TRUNCATE TABLE `martial_participant`;
|
||||
|
||||
-- 5. 清空报名订单相关表
|
||||
-- ================================================================
|
||||
TRUNCATE TABLE `martial_registration_order`;
|
||||
|
||||
-- 6. 清空裁判相关表
|
||||
-- ================================================================
|
||||
TRUNCATE TABLE `martial_referee`;
|
||||
|
||||
-- 7. 清空成绩相关表
|
||||
-- ================================================================
|
||||
TRUNCATE TABLE `martial_score`;
|
||||
|
||||
-- 8. 清空赛程编排相关表(如果存在)
|
||||
-- ================================================================
|
||||
-- TRUNCATE TABLE `martial_schedule`;
|
||||
-- TRUNCATE TABLE `martial_schedule_detail`;
|
||||
|
||||
-- 9. 清空信息发布相关表
|
||||
-- ================================================================
|
||||
TRUNCATE TABLE `martial_info_publish`;
|
||||
|
||||
-- 重新启用外键检查
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- ================================================================
|
||||
-- 验证清理结果
|
||||
-- ================================================================
|
||||
SELECT
|
||||
'赛事数据' AS 表名,
|
||||
COUNT(*) AS 记录数
|
||||
FROM martial_competition
|
||||
UNION ALL
|
||||
SELECT '项目数据', COUNT(*) FROM martial_project
|
||||
UNION ALL
|
||||
SELECT '场地数据', COUNT(*) FROM martial_venue
|
||||
UNION ALL
|
||||
SELECT '参赛者数据', COUNT(*) FROM martial_athlete
|
||||
UNION ALL
|
||||
SELECT '报名订单数据', COUNT(*) FROM martial_registration_order
|
||||
UNION ALL
|
||||
SELECT '裁判数据', COUNT(*) FROM martial_referee
|
||||
UNION ALL
|
||||
SELECT '成绩数据', COUNT(*) FROM martial_score
|
||||
UNION ALL
|
||||
SELECT '信息发布数据', COUNT(*) FROM martial_info_publish;
|
||||
|
||||
-- ================================================================
|
||||
-- 清理完成
|
||||
-- ================================================================
|
||||
-- 所有业务数据已清空,表结构保留
|
||||
-- 您现在可以重新测试完整的业务流程:
|
||||
-- 1. 创建赛事
|
||||
-- 2. 配置场地
|
||||
-- 3. 创建项目
|
||||
-- 4. 添加参赛者
|
||||
-- 5. 进行编排
|
||||
-- ================================================================
|
||||
140
database/martial-db/create_schedule_tables.sql
Normal file
140
database/martial-db/create_schedule_tables.sql
Normal file
@@ -0,0 +1,140 @@
|
||||
-- =============================================
|
||||
-- 武术赛事赛程编排系统 - 数据库表创建脚本
|
||||
-- =============================================
|
||||
-- 创建日期: 2025-12-08
|
||||
-- 版本: v1.0
|
||||
-- 说明: 创建赛程编排相关的4张核心表
|
||||
-- =============================================
|
||||
|
||||
-- 1. 赛程编排分组表
|
||||
CREATE TABLE `martial_schedule_group` (
|
||||
`id` bigint(0) NOT NULL COMMENT '主键ID',
|
||||
`competition_id` bigint(0) NOT NULL COMMENT '赛事ID',
|
||||
`group_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '分组名称(如:太极拳男组)',
|
||||
`project_id` bigint(0) NOT NULL COMMENT '项目ID',
|
||||
`project_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '项目名称',
|
||||
`category` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '组别(成年组、少年组等)',
|
||||
`project_type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '项目类型(1=个人 2=集体)',
|
||||
`display_order` int(0) NOT NULL DEFAULT 0 COMMENT '显示顺序(集体项目优先,数字越小越靠前)',
|
||||
`total_participants` int(0) NULL DEFAULT 0 COMMENT '总参赛人数',
|
||||
`total_teams` int(0) NULL DEFAULT 0 COMMENT '总队伍数(仅集体项目)',
|
||||
`estimated_duration` int(0) NULL DEFAULT 0 COMMENT '预计时长(分钟)',
|
||||
`create_user` bigint(0) NULL DEFAULT NULL,
|
||||
`create_dept` bigint(0) NULL DEFAULT NULL,
|
||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
|
||||
`update_user` bigint(0) NULL DEFAULT NULL,
|
||||
`update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
|
||||
`status` int(0) NULL DEFAULT 1 COMMENT '状态(1-启用,2-禁用)',
|
||||
`is_deleted` int(0) NULL DEFAULT 0,
|
||||
`tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '000000',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_competition` (`competition_id`) USING BTREE,
|
||||
INDEX `idx_project` (`project_id`) USING BTREE,
|
||||
INDEX `idx_display_order` (`display_order`) USING BTREE,
|
||||
INDEX `idx_tenant` (`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '赛程编排分组表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- 2. 赛程编排明细表(场地时间段分配)
|
||||
CREATE TABLE `martial_schedule_detail` (
|
||||
`id` bigint(0) NOT NULL COMMENT '主键ID',
|
||||
`schedule_group_id` bigint(0) NOT NULL COMMENT '分组ID',
|
||||
`competition_id` bigint(0) NOT NULL COMMENT '赛事ID',
|
||||
`venue_id` bigint(0) NOT NULL COMMENT '场地ID',
|
||||
`venue_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '场地名称',
|
||||
`schedule_date` date NOT NULL COMMENT '比赛日期',
|
||||
`time_period` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '时间段(morning/afternoon)',
|
||||
`time_slot` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '时间点(08:30/13:30)',
|
||||
`estimated_start_time` datetime(0) NULL DEFAULT NULL COMMENT '预计开始时间',
|
||||
`estimated_end_time` datetime(0) NULL DEFAULT NULL COMMENT '预计结束时间',
|
||||
`estimated_duration` int(0) NULL DEFAULT 0 COMMENT '预计时长(分钟)',
|
||||
`participant_count` int(0) NULL DEFAULT 0 COMMENT '参赛人数',
|
||||
`sort_order` int(0) NULL DEFAULT 0 COMMENT '场内顺序',
|
||||
`create_user` bigint(0) NULL DEFAULT NULL,
|
||||
`create_dept` bigint(0) NULL DEFAULT NULL,
|
||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
|
||||
`update_user` bigint(0) NULL DEFAULT NULL,
|
||||
`update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
|
||||
`status` int(0) NULL DEFAULT 1 COMMENT '状态(1-未开始,2-进行中,3-已完成)',
|
||||
`is_deleted` int(0) NULL DEFAULT 0,
|
||||
`tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '000000',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_group` (`schedule_group_id`) USING BTREE,
|
||||
INDEX `idx_competition` (`competition_id`) USING BTREE,
|
||||
INDEX `idx_venue_time` (`venue_id`, `schedule_date`, `time_slot`) USING BTREE,
|
||||
INDEX `idx_tenant` (`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '赛程编排明细表(场地时间段分配)' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- 3. 赛程编排参赛者关联表
|
||||
CREATE TABLE `martial_schedule_participant` (
|
||||
`id` bigint(0) NOT NULL COMMENT '主键ID',
|
||||
`schedule_detail_id` bigint(0) NOT NULL COMMENT '编排明细ID',
|
||||
`schedule_group_id` bigint(0) NOT NULL COMMENT '分组ID',
|
||||
`participant_id` bigint(0) NOT NULL COMMENT '参赛者ID(关联martial_athlete表)',
|
||||
`organization` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '单位名称',
|
||||
`player_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '选手姓名',
|
||||
`project_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '项目名称',
|
||||
`category` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '组别',
|
||||
`performance_order` int(0) NULL DEFAULT 0 COMMENT '出场顺序',
|
||||
`create_user` bigint(0) NULL DEFAULT NULL,
|
||||
`create_dept` bigint(0) NULL DEFAULT NULL,
|
||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
|
||||
`update_user` bigint(0) NULL DEFAULT NULL,
|
||||
`update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
|
||||
`status` int(0) NULL DEFAULT 1 COMMENT '状态(1-待出场,2-已出场)',
|
||||
`is_deleted` int(0) NULL DEFAULT 0,
|
||||
`tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '000000',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_detail` (`schedule_detail_id`) USING BTREE,
|
||||
INDEX `idx_group` (`schedule_group_id`) USING BTREE,
|
||||
INDEX `idx_participant` (`participant_id`) USING BTREE,
|
||||
INDEX `idx_tenant` (`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '赛程编排参赛者关联表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- 4. 赛程编排状态表
|
||||
CREATE TABLE `martial_schedule_status` (
|
||||
`id` bigint(0) NOT NULL COMMENT '主键ID',
|
||||
`competition_id` bigint(0) NOT NULL UNIQUE COMMENT '赛事ID(唯一)',
|
||||
`schedule_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '编排状态(0=未编排 1=编排中 2=已保存锁定)',
|
||||
`last_auto_schedule_time` datetime(0) NULL DEFAULT NULL COMMENT '最后自动编排时间',
|
||||
`locked_time` datetime(0) NULL DEFAULT NULL COMMENT '锁定时间',
|
||||
`locked_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '锁定人',
|
||||
`total_groups` int(0) NULL DEFAULT 0 COMMENT '总分组数',
|
||||
`total_participants` int(0) NULL DEFAULT 0 COMMENT '总参赛人数',
|
||||
`create_user` bigint(0) NULL DEFAULT NULL,
|
||||
`create_dept` bigint(0) NULL DEFAULT NULL,
|
||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
|
||||
`update_user` bigint(0) NULL DEFAULT NULL,
|
||||
`update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
|
||||
`status` int(0) NULL DEFAULT 1 COMMENT '状态(1-启用,2-禁用)',
|
||||
`is_deleted` int(0) NULL DEFAULT 0,
|
||||
`tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '000000',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uk_competition` (`competition_id`) USING BTREE,
|
||||
INDEX `idx_tenant` (`tenant_id`) USING BTREE,
|
||||
INDEX `idx_schedule_status` (`schedule_status`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '赛程编排状态表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- =============================================
|
||||
-- 说明
|
||||
-- =============================================
|
||||
--
|
||||
-- 使用方法:
|
||||
-- 1. 在MySQL数据库中执行此脚本
|
||||
-- 2. 确保已创建martial_competition数据库
|
||||
--
|
||||
-- 表关系说明:
|
||||
-- martial_schedule_status (1) <--> (1) martial_competition (赛事编排状态)
|
||||
-- martial_schedule_group (N) <--> (1) martial_competition (分组属于赛事)
|
||||
-- martial_schedule_detail (N) <--> (1) martial_schedule_group (明细属于分组)
|
||||
-- martial_schedule_participant (N) <--> (1) martial_schedule_detail (参赛者属于明细)
|
||||
-- martial_schedule_participant (N) <--> (1) martial_athlete (参赛者关联选手)
|
||||
--
|
||||
-- 核心流程:
|
||||
-- 1. 定时任务检查martial_schedule_status,找出schedule_status != 2的赛事
|
||||
-- 2. 从martial_athlete加载参赛者数据
|
||||
-- 3. 执行自动分组算法,写入martial_schedule_group
|
||||
-- 4. 执行场地时间段分配,写入martial_schedule_detail
|
||||
-- 5. 关联参赛者,写入martial_schedule_participant
|
||||
-- 6. 更新martial_schedule_status的last_auto_schedule_time
|
||||
--
|
||||
-- =============================================
|
||||
26
database/martial-db/debug_check.sql
Normal file
26
database/martial-db/debug_check.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
-- 调试检查脚本
|
||||
USE martial_db;
|
||||
|
||||
-- 检查参赛者的project_id是否都有对应的项目
|
||||
SELECT
|
||||
'检查参赛者项目关联' AS check_item,
|
||||
a.id,
|
||||
a.project_id,
|
||||
a.player_name,
|
||||
p.id AS project_exists,
|
||||
p.project_name,
|
||||
p.type AS project_type
|
||||
FROM martial_athlete a
|
||||
LEFT JOIN martial_project p ON a.project_id = p.id
|
||||
WHERE a.competition_id = 200
|
||||
LIMIT 10;
|
||||
|
||||
-- 检查是否有参赛者的project_id为NULL或找不到对应项目
|
||||
SELECT
|
||||
'检查异常数据' AS check_item,
|
||||
COUNT(*) AS total_athletes,
|
||||
SUM(CASE WHEN project_id IS NULL THEN 1 ELSE 0 END) AS null_project_id,
|
||||
SUM(CASE WHEN p.id IS NULL THEN 1 ELSE 0 END) AS project_not_found
|
||||
FROM martial_athlete a
|
||||
LEFT JOIN martial_project p ON a.project_id = p.id
|
||||
WHERE a.competition_id = 200;
|
||||
93
database/martial-db/deploy.bat
Normal file
93
database/martial-db/deploy.bat
Normal file
@@ -0,0 +1,93 @@
|
||||
@echo off
|
||||
REM =============================================
|
||||
REM 赛程编排系统数据库部署脚本
|
||||
REM =============================================
|
||||
echo.
|
||||
echo ========================================
|
||||
echo 赛程编排系统 - 数据库部署工具
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
REM 检查MySQL是否安装
|
||||
where mysql >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo [错误] 未找到MySQL命令,请确保MySQL已安装并添加到系统PATH
|
||||
echo.
|
||||
echo 常见MySQL安装路径:
|
||||
echo - C:\Program Files\MySQL\MySQL Server 8.0\bin
|
||||
echo - C:\xampp\mysql\bin
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [1/3] 检测到MySQL...
|
||||
|
||||
REM 设置数据库信息
|
||||
set DB_NAME=martial_db
|
||||
set SCRIPT_PATH=%~dp0deploy_schedule_tables.sql
|
||||
|
||||
echo [2/3] 准备执行SQL脚本...
|
||||
echo 数据库: %DB_NAME%
|
||||
echo 脚本: %SCRIPT_PATH%
|
||||
echo.
|
||||
|
||||
REM 提示用户输入密码
|
||||
echo 请输入MySQL root密码 (如果没有密码直接按回车):
|
||||
set /p MYSQL_PWD=密码:
|
||||
|
||||
echo.
|
||||
echo [3/3] 正在执行SQL脚本...
|
||||
echo.
|
||||
|
||||
REM 执行SQL脚本
|
||||
if "%MYSQL_PWD%"=="" (
|
||||
mysql -u root %DB_NAME% < "%SCRIPT_PATH%"
|
||||
) else (
|
||||
mysql -u root -p%MYSQL_PWD% %DB_NAME% < "%SCRIPT_PATH%"
|
||||
)
|
||||
|
||||
if %errorlevel% equ 0 (
|
||||
echo.
|
||||
echo ========================================
|
||||
echo ✓ 数据库表创建成功!
|
||||
echo ========================================
|
||||
echo.
|
||||
echo 已创建以下4张表:
|
||||
echo 1. martial_schedule_group - 赛程编排分组表
|
||||
echo 2. martial_schedule_detail - 赛程编排明细表
|
||||
echo 3. martial_schedule_participant - 参赛者关联表
|
||||
echo 4. martial_schedule_status - 编排状态表
|
||||
echo.
|
||||
echo 下一步:
|
||||
echo 1. 导入测试数据 (可选)
|
||||
echo cd ..\..\..
|
||||
echo cd martial-web\test-data
|
||||
echo mysql -u root -p%MYSQL_PWD% martial_db ^< create_100_team_participants.sql
|
||||
echo.
|
||||
echo 2. 启动后端服务
|
||||
echo cd martial-master
|
||||
echo mvn spring-boot:run
|
||||
echo.
|
||||
echo 3. 访问前端页面
|
||||
echo http://localhost:3000/martial/schedule?competitionId=200
|
||||
echo.
|
||||
) else (
|
||||
echo.
|
||||
echo ========================================
|
||||
echo ✗ 数据库表创建失败!
|
||||
echo ========================================
|
||||
echo.
|
||||
echo 可能的原因:
|
||||
echo 1. 数据库 %DB_NAME% 不存在
|
||||
echo 2. MySQL密码错误
|
||||
echo 3. 权限不足
|
||||
echo.
|
||||
echo 解决方法:
|
||||
echo 1. 先创建数据库: CREATE DATABASE martial_db;
|
||||
echo 2. 检查MySQL密码是否正确
|
||||
echo 3. 确保用户有CREATE TABLE权限
|
||||
echo.
|
||||
)
|
||||
|
||||
pause
|
||||
159
database/martial-db/deploy_schedule_tables.sql
Normal file
159
database/martial-db/deploy_schedule_tables.sql
Normal file
@@ -0,0 +1,159 @@
|
||||
-- =============================================
|
||||
-- 武术赛事赛程编排系统 - 数据库表创建脚本(带数据库选择)
|
||||
-- =============================================
|
||||
-- 创建日期: 2025-12-09
|
||||
-- 版本: v1.1
|
||||
-- 说明: 自动选择正确的数据库并创建赛程编排相关的4张核心表
|
||||
-- =============================================
|
||||
|
||||
-- 选择数据库(根据实际情况修改)
|
||||
USE martial_db;
|
||||
|
||||
-- 检查表是否已存在,如果存在则删除(可选,生产环境请注释掉)
|
||||
-- DROP TABLE IF EXISTS martial_schedule_participant;
|
||||
-- DROP TABLE IF EXISTS martial_schedule_detail;
|
||||
-- DROP TABLE IF EXISTS martial_schedule_group;
|
||||
-- DROP TABLE IF EXISTS martial_schedule_status;
|
||||
|
||||
-- 1. 赛程编排分组表
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_group` (
|
||||
`id` bigint(0) NOT NULL COMMENT '主键ID',
|
||||
`competition_id` bigint(0) NOT NULL COMMENT '赛事ID',
|
||||
`group_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分组名称(如:太极拳男组)',
|
||||
`project_id` bigint(0) NOT NULL COMMENT '项目ID',
|
||||
`project_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '项目名称',
|
||||
`category` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组别(成年组、少年组等)',
|
||||
`project_type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '项目类型(1=个人 2=集体)',
|
||||
`display_order` int(0) NOT NULL DEFAULT 0 COMMENT '显示顺序(集体项目优先,数字越小越靠前)',
|
||||
`total_participants` int(0) NULL DEFAULT 0 COMMENT '总参赛人数',
|
||||
`total_teams` int(0) NULL DEFAULT 0 COMMENT '总队伍数(仅集体项目)',
|
||||
`estimated_duration` int(0) NULL DEFAULT 0 COMMENT '预计时长(分钟)',
|
||||
`create_user` bigint(0) NULL DEFAULT NULL,
|
||||
`create_dept` bigint(0) NULL DEFAULT NULL,
|
||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
|
||||
`update_user` bigint(0) NULL DEFAULT NULL,
|
||||
`update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
|
||||
`status` int(0) NULL DEFAULT 1 COMMENT '状态(1-启用,2-禁用)',
|
||||
`is_deleted` int(0) NULL DEFAULT 0,
|
||||
`tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_competition` (`competition_id`) USING BTREE,
|
||||
INDEX `idx_project` (`project_id`) USING BTREE,
|
||||
INDEX `idx_display_order` (`display_order`) USING BTREE,
|
||||
INDEX `idx_tenant` (`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '赛程编排分组表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- 2. 赛程编排明细表(场地时间段分配)
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_detail` (
|
||||
`id` bigint(0) NOT NULL COMMENT '主键ID',
|
||||
`schedule_group_id` bigint(0) NOT NULL COMMENT '分组ID',
|
||||
`competition_id` bigint(0) NOT NULL COMMENT '赛事ID',
|
||||
`venue_id` bigint(0) NOT NULL COMMENT '场地ID',
|
||||
`venue_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '场地名称',
|
||||
`schedule_date` date NOT NULL COMMENT '比赛日期',
|
||||
`time_period` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '时间段(morning/afternoon)',
|
||||
`time_slot` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '时间点(08:30/13:30)',
|
||||
`estimated_start_time` datetime(0) NULL DEFAULT NULL COMMENT '预计开始时间',
|
||||
`estimated_end_time` datetime(0) NULL DEFAULT NULL COMMENT '预计结束时间',
|
||||
`estimated_duration` int(0) NULL DEFAULT 0 COMMENT '预计时长(分钟)',
|
||||
`participant_count` int(0) NULL DEFAULT 0 COMMENT '参赛人数',
|
||||
`sort_order` int(0) NULL DEFAULT 0 COMMENT '场内顺序',
|
||||
`create_user` bigint(0) NULL DEFAULT NULL,
|
||||
`create_dept` bigint(0) NULL DEFAULT NULL,
|
||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
|
||||
`update_user` bigint(0) NULL DEFAULT NULL,
|
||||
`update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
|
||||
`status` int(0) NULL DEFAULT 1 COMMENT '状态(1-未开始,2-进行中,3-已完成)',
|
||||
`is_deleted` int(0) NULL DEFAULT 0,
|
||||
`tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_group` (`schedule_group_id`) USING BTREE,
|
||||
INDEX `idx_competition` (`competition_id`) USING BTREE,
|
||||
INDEX `idx_venue_time` (`venue_id`, `schedule_date`, `time_slot`) USING BTREE,
|
||||
INDEX `idx_tenant` (`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '赛程编排明细表(场地时间段分配)' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- 3. 赛程编排参赛者关联表
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_participant` (
|
||||
`id` bigint(0) NOT NULL COMMENT '主键ID',
|
||||
`schedule_detail_id` bigint(0) NOT NULL COMMENT '编排明细ID',
|
||||
`schedule_group_id` bigint(0) NOT NULL COMMENT '分组ID',
|
||||
`participant_id` bigint(0) NOT NULL COMMENT '参赛者ID(关联martial_athlete表)',
|
||||
`organization` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '单位名称',
|
||||
`player_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '选手姓名',
|
||||
`project_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '项目名称',
|
||||
`category` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组别',
|
||||
`performance_order` int(0) NULL DEFAULT 0 COMMENT '出场顺序',
|
||||
`create_user` bigint(0) NULL DEFAULT NULL,
|
||||
`create_dept` bigint(0) NULL DEFAULT NULL,
|
||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
|
||||
`update_user` bigint(0) NULL DEFAULT NULL,
|
||||
`update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
|
||||
`status` int(0) NULL DEFAULT 1 COMMENT '状态(1-待出场,2-已出场)',
|
||||
`is_deleted` int(0) NULL DEFAULT 0,
|
||||
`tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_detail` (`schedule_detail_id`) USING BTREE,
|
||||
INDEX `idx_group` (`schedule_group_id`) USING BTREE,
|
||||
INDEX `idx_participant` (`participant_id`) USING BTREE,
|
||||
INDEX `idx_tenant` (`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '赛程编排参赛者关联表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- 4. 赛程编排状态表
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_status` (
|
||||
`id` bigint(0) NOT NULL COMMENT '主键ID',
|
||||
`competition_id` bigint(0) NOT NULL COMMENT '赛事ID(唯一)',
|
||||
`schedule_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '编排状态(0=未编排 1=编排中 2=已保存锁定)',
|
||||
`last_auto_schedule_time` datetime(0) NULL DEFAULT NULL COMMENT '最后自动编排时间',
|
||||
`locked_time` datetime(0) NULL DEFAULT NULL COMMENT '锁定时间',
|
||||
`locked_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '锁定人',
|
||||
`total_groups` int(0) NULL DEFAULT 0 COMMENT '总分组数',
|
||||
`total_participants` int(0) NULL DEFAULT 0 COMMENT '总参赛人数',
|
||||
`create_user` bigint(0) NULL DEFAULT NULL,
|
||||
`create_dept` bigint(0) NULL DEFAULT NULL,
|
||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
|
||||
`update_user` bigint(0) NULL DEFAULT NULL,
|
||||
`update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
|
||||
`status` int(0) NULL DEFAULT 1 COMMENT '状态(1-启用,2-禁用)',
|
||||
`is_deleted` int(0) NULL DEFAULT 0,
|
||||
`tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uk_competition` (`competition_id`) USING BTREE,
|
||||
INDEX `idx_tenant` (`tenant_id`) USING BTREE,
|
||||
INDEX `idx_schedule_status` (`schedule_status`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '赛程编排状态表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- 验证表是否创建成功
|
||||
SELECT
|
||||
'表创建完成' AS message,
|
||||
COUNT(*) AS table_count
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'martial_db'
|
||||
AND table_name IN (
|
||||
'martial_schedule_group',
|
||||
'martial_schedule_detail',
|
||||
'martial_schedule_participant',
|
||||
'martial_schedule_status'
|
||||
);
|
||||
|
||||
-- =============================================
|
||||
-- 使用说明
|
||||
-- =============================================
|
||||
--
|
||||
-- 1. 确认数据库名称
|
||||
-- 如果你的数据库名称不是 martial_db,请修改第9行的 USE 语句
|
||||
--
|
||||
-- 2. 执行脚本
|
||||
-- 方式1: 在MySQL客户端中直接执行
|
||||
-- mysql -u root -p < deploy_schedule_tables.sql
|
||||
--
|
||||
-- 方式2: 在数据库管理工具中执行(Navicat/DBeaver等)
|
||||
--
|
||||
-- 3. 验证
|
||||
-- 执行完成后应该看到 "table_count = 4" 的结果
|
||||
--
|
||||
-- 4. 下一步
|
||||
-- 执行测试数据导入脚本:
|
||||
-- mysql -u root -p martial_db < martial-web/test-data/create_100_team_participants.sql
|
||||
--
|
||||
-- =============================================
|
||||
19
database/martial-db/fix_athlete_order_id.sql
Normal file
19
database/martial-db/fix_athlete_order_id.sql
Normal file
@@ -0,0 +1,19 @@
|
||||
-- ================================================================
|
||||
-- 修复参赛选手表 order_id 字段约束
|
||||
-- 问题:Field 'order_id' doesn't have a default value
|
||||
-- 解决:允许 order_id 为 NULL(支持直接添加参赛选手,无需订单)
|
||||
-- 日期:2025-12-06
|
||||
-- ================================================================
|
||||
|
||||
-- 使用正确的数据库
|
||||
USE martial_db;
|
||||
|
||||
-- 修改 order_id 字段,允许为 NULL
|
||||
ALTER TABLE martial_athlete
|
||||
MODIFY COLUMN order_id bigint(20) NULL DEFAULT NULL COMMENT '订单ID';
|
||||
|
||||
-- 验证修改
|
||||
DESC martial_athlete;
|
||||
|
||||
-- 显示修改结果
|
||||
SELECT '✓ order_id 字段已修改为可空' AS 修复结果;
|
||||
40
database/martial-db/fix_venue_table.sql
Normal file
40
database/martial-db/fix_venue_table.sql
Normal file
@@ -0,0 +1,40 @@
|
||||
-- ================================================================
|
||||
-- 场地表字段修复脚本
|
||||
-- 用途:为 martial_venue 表添加缺失的 max_capacity 字段
|
||||
-- 问题:Error: Unknown column 'max_capacity' in 'field list'
|
||||
-- 日期:2025-12-06
|
||||
-- ================================================================
|
||||
|
||||
-- 方案1:直接 DROP 表并重新创建(如果表中没有重要数据)
|
||||
-- 如果表中有数据,请跳过此步骤,使用方案2
|
||||
DROP TABLE IF EXISTS `martial_venue`;
|
||||
|
||||
CREATE TABLE `martial_venue` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`tenant_id` varchar(12) DEFAULT '000000' COMMENT '租户ID',
|
||||
`competition_id` bigint(20) NOT NULL COMMENT '赛事ID',
|
||||
`venue_name` varchar(100) NOT NULL COMMENT '场地名称',
|
||||
`venue_code` varchar(50) DEFAULT NULL COMMENT '场地编码',
|
||||
`max_capacity` int(11) DEFAULT 100 COMMENT '最大容纳人数',
|
||||
`location` varchar(200) DEFAULT NULL COMMENT '位置/地点',
|
||||
`description` varchar(500) DEFAULT NULL COMMENT '场地描述',
|
||||
`facilities` varchar(500) DEFAULT NULL COMMENT '场地设施',
|
||||
`sort_order` int(11) DEFAULT 0 COMMENT '排序',
|
||||
`status` int(2) DEFAULT 1 COMMENT '状态(0-禁用,1-启用)',
|
||||
`create_user` bigint(20) DEFAULT NULL COMMENT '创建人',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
`is_deleted` int(2) DEFAULT 0 COMMENT '是否已删除',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_competition_id` (`competition_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='场地信息表';
|
||||
|
||||
-- ================================================================
|
||||
-- 验证表结构
|
||||
-- ================================================================
|
||||
DESC martial_venue;
|
||||
|
||||
SELECT '场地表已重新创建,包含 max_capacity 字段' AS result;
|
||||
131
database/martial-db/init_test_data.sql
Normal file
131
database/martial-db/init_test_data.sql
Normal file
@@ -0,0 +1,131 @@
|
||||
-- =============================================
|
||||
-- 赛程编排系统 - 完整测试数据初始化
|
||||
-- =============================================
|
||||
USE martial_db;
|
||||
|
||||
-- 1. 确保赛事存在并配置了时间
|
||||
UPDATE martial_competition
|
||||
SET
|
||||
competition_start_time = '2025-11-06 08:00:00',
|
||||
competition_end_time = '2025-11-08 18:00:00'
|
||||
WHERE id = 200;
|
||||
|
||||
-- 检查赛事是否存在
|
||||
SELECT
|
||||
'1. 检查赛事' AS step,
|
||||
CASE
|
||||
WHEN COUNT(*) > 0 THEN CONCAT('✓ 赛事ID=200存在, 名称: ', MAX(competition_name))
|
||||
ELSE '✗ 赛事ID=200不存在,请先创建赛事'
|
||||
END AS result
|
||||
FROM martial_competition
|
||||
WHERE id = 200;
|
||||
|
||||
-- 2. 创建场地数据(如果不存在)
|
||||
INSERT IGNORE INTO martial_venue (id, competition_id, venue_name, venue_type, capacity, create_time, is_deleted)
|
||||
VALUES
|
||||
(1, 200, '一号场地', '主场地', 100, NOW(), 0),
|
||||
(2, 200, '二号场地', '副场地', 100, NOW(), 0),
|
||||
(3, 200, '三号场地', '副场地', 100, NOW(), 0),
|
||||
(4, 200, '四号场地', '副场地', 100, NOW(), 0);
|
||||
|
||||
SELECT
|
||||
'2. 检查场地' AS step,
|
||||
CONCAT('✓ 已有 ', COUNT(*), ' 个场地') AS result
|
||||
FROM martial_venue
|
||||
WHERE competition_id = 200 AND is_deleted = 0;
|
||||
|
||||
-- 3. 创建项目数据(如果不存在)
|
||||
INSERT IGNORE INTO martial_project (id, project_name, type, category, estimated_duration, create_time)
|
||||
VALUES
|
||||
(1001, '太极拳集体', 3, '成年组', 5, NOW()),
|
||||
(1002, '长拳集体', 3, '成年组', 5, NOW()),
|
||||
(1003, '剑术集体', 3, '成年组', 5, NOW()),
|
||||
(1004, '刀术集体', 3, '成年组', 5, NOW()),
|
||||
(1005, '棍术集体', 3, '少年组', 5, NOW());
|
||||
|
||||
SELECT
|
||||
'3. 检查项目' AS step,
|
||||
CONCAT('✓ 已有 ', COUNT(*), ' 个项目') AS result
|
||||
FROM martial_project
|
||||
WHERE id BETWEEN 1001 AND 1005;
|
||||
|
||||
-- 4. 创建测试参赛者数据(少量测试数据)
|
||||
DELETE FROM martial_athlete WHERE competition_id = 200;
|
||||
|
||||
INSERT INTO martial_athlete (
|
||||
competition_id, project_id, organization, team_name,
|
||||
player_name, gender, age, phone, category, create_time, is_deleted
|
||||
)
|
||||
VALUES
|
||||
-- 太极拳集体 - 队伍1: 少林寺武校 (5人)
|
||||
(200, 1001, '少林寺武校', '少林寺武校', '张明远', '男', 25, '13800001001', '成年组', NOW(), 0),
|
||||
(200, 1001, '少林寺武校', '少林寺武校', '李华强', '男', 26, '13800001002', '成年组', NOW(), 0),
|
||||
(200, 1001, '少林寺武校', '少林寺武校', '王建国', '男', 24, '13800001003', '成年组', NOW(), 0),
|
||||
(200, 1001, '少林寺武校', '少林寺武校', '赵小明', '男', 23, '13800001004', '成年组', NOW(), 0),
|
||||
(200, 1001, '少林寺武校', '少林寺武校', '刘德华', '男', 27, '13800001005', '成年组', NOW(), 0),
|
||||
|
||||
-- 太极拳集体 - 队伍2: 武当派 (5人)
|
||||
(200, 1001, '武当派', '武当派', '陈剑锋', '男', 28, '13800001011', '成年组', NOW(), 0),
|
||||
(200, 1001, '武当派', '武当派', '周杰伦', '男', 25, '13800001012', '成年组', NOW(), 0),
|
||||
(200, 1001, '武当派', '武当派', '吴彦祖', '男', 26, '13800001013', '成年组', NOW(), 0),
|
||||
(200, 1001, '武当派', '武当派', '郑伊健', '男', 24, '13800001014', '成年组', NOW(), 0),
|
||||
(200, 1001, '武当派', '武当派', '谢霆锋', '男', 27, '13800001015', '成年组', NOW(), 0),
|
||||
|
||||
-- 长拳集体 - 队伍1: 峨眉派 (5人)
|
||||
(200, 1002, '峨眉派', '峨眉派', '小龙女', '女', 22, '13800002001', '成年组', NOW(), 0),
|
||||
(200, 1002, '峨眉派', '峨眉派', '黄蓉', '女', 23, '13800002002', '成年组', NOW(), 0),
|
||||
(200, 1002, '峨眉派', '峨眉派', '赵敏', '女', 24, '13800002003', '成年组', NOW(), 0),
|
||||
(200, 1002, '峨眉派', '峨眉派', '周芷若', '女', 22, '13800002004', '成年组', NOW(), 0),
|
||||
(200, 1002, '峨眉派', '峨眉派', '任盈盈', '女', 23, '13800002005', '成年组', NOW(), 0),
|
||||
|
||||
-- 长拳集体 - 队伍2: 华山派 (5人)
|
||||
(200, 1002, '华山派', '华山派', '令狐冲', '男', 27, '13800002011', '成年组', NOW(), 0),
|
||||
(200, 1002, '华山派', '华山派', '风清扬', '男', 28, '13800002012', '成年组', NOW(), 0),
|
||||
(200, 1002, '华山派', '华山派', '岳不群', '男', 29, '13800002013', '成年组', NOW(), 0),
|
||||
(200, 1002, '华山派', '华山派', '宁中则', '女', 26, '13800002014', '成年组', NOW(), 0),
|
||||
(200, 1002, '华山派', '华山派', '岳灵珊', '女', 24, '13800002015', '成年组', NOW(), 0);
|
||||
|
||||
SELECT
|
||||
'4. 检查参赛者' AS step,
|
||||
CONCAT('✓ 已有 ', COUNT(*), ' 个参赛者 (', COUNT(DISTINCT organization), ' 个队伍)') AS result
|
||||
FROM martial_athlete
|
||||
WHERE competition_id = 200 AND is_deleted = 0;
|
||||
|
||||
-- 5. 清空旧的编排数据(如果有)
|
||||
DELETE FROM martial_schedule_participant WHERE schedule_group_id IN (
|
||||
SELECT id FROM martial_schedule_group WHERE competition_id = 200
|
||||
);
|
||||
DELETE FROM martial_schedule_detail WHERE competition_id = 200;
|
||||
DELETE FROM martial_schedule_group WHERE competition_id = 200;
|
||||
DELETE FROM martial_schedule_status WHERE competition_id = 200;
|
||||
|
||||
SELECT '5. 清理旧数据' AS step, '✓ 已清空旧的编排数据' AS result;
|
||||
|
||||
-- 6. 最终验证
|
||||
SELECT
|
||||
'6. 数据完整性检查' AS step,
|
||||
CONCAT(
|
||||
'✓ 赛事: ', (SELECT COUNT(*) FROM martial_competition WHERE id = 200),
|
||||
', 场地: ', (SELECT COUNT(*) FROM martial_venue WHERE competition_id = 200 AND is_deleted = 0),
|
||||
', 项目: ', (SELECT COUNT(*) FROM martial_project WHERE id BETWEEN 1001 AND 1005),
|
||||
', 参赛者: ', (SELECT COUNT(*) FROM martial_athlete WHERE competition_id = 200 AND is_deleted = 0)
|
||||
) AS result;
|
||||
|
||||
-- 7. 检查赛事时间配置
|
||||
SELECT
|
||||
'7. 赛事时间配置' AS step,
|
||||
CONCAT(
|
||||
'开始: ', IFNULL(competition_start_time, '未配置'),
|
||||
', 结束: ', IFNULL(competition_end_time, '未配置')
|
||||
) AS result
|
||||
FROM martial_competition
|
||||
WHERE id = 200;
|
||||
|
||||
SELECT
|
||||
'========================================' AS '',
|
||||
'✓ 测试数据初始化完成!' AS result,
|
||||
'========================================' AS '';
|
||||
|
||||
SELECT
|
||||
'下一步: 测试API' AS action,
|
||||
'curl -X POST http://localhost:8123/martial/schedule/auto-arrange -H "Content-Type: application/json" -d "{\"competitionId\": 200}"' AS command;
|
||||
82
database/martial-db/insert_test_judge_invite_data.sql
Normal file
82
database/martial-db/insert_test_judge_invite_data.sql
Normal file
@@ -0,0 +1,82 @@
|
||||
-- =====================================================
|
||||
-- 插入测试裁判邀请数据
|
||||
-- 执行时间: 2025-12-12
|
||||
-- =====================================================
|
||||
|
||||
USE blade;
|
||||
|
||||
-- 首先确保有测试赛事数据
|
||||
-- 假设已经有赛事ID为 1 的数据
|
||||
|
||||
-- 首先确保有测试裁判数据
|
||||
-- 插入测试裁判(如果不存在)
|
||||
INSERT IGNORE INTO martial_judge (id, name, gender, phone, id_card, referee_type, level, specialty, create_time, update_time, status, is_deleted)
|
||||
VALUES
|
||||
(1, '张三', 1, '13800138001', '110101199001011234', 2, '国家级', '太极拳', NOW(), NOW(), 1, 0),
|
||||
(2, '李四', 1, '13800138002', '110101199002021234', 2, '一级', '长拳', NOW(), NOW(), 1, 0),
|
||||
(3, '王五', 2, '13800138003', '110101199003031234', 2, '二级', '剑术', NOW(), NOW(), 1, 0),
|
||||
(4, '赵六', 1, '13800138004', '110101199004041234', 1, '国家级', '刀术', NOW(), NOW(), 1, 0),
|
||||
(5, '钱七', 2, '13800138005', '110101199005051234', 2, '三级', '棍术', NOW(), NOW(), 1, 0);
|
||||
|
||||
-- 插入测试邀请数据
|
||||
INSERT INTO martial_judge_invite (
|
||||
id,
|
||||
competition_id,
|
||||
judge_id,
|
||||
invite_code,
|
||||
role,
|
||||
invite_status,
|
||||
invite_time,
|
||||
reply_time,
|
||||
reply_note,
|
||||
contact_phone,
|
||||
contact_email,
|
||||
invite_message,
|
||||
expire_time,
|
||||
is_used,
|
||||
create_time,
|
||||
update_time,
|
||||
status,
|
||||
is_deleted
|
||||
)
|
||||
VALUES
|
||||
-- 待回复的邀请
|
||||
(1, 1, 1, 'INV2025001', 'judge', 0, NOW(), NULL, NULL, '13800138001', 'zhangsan@example.com', '诚邀您担任本次武术比赛的裁判', DATE_ADD(NOW(), INTERVAL 30 DAY), 0, NOW(), NOW(), 1, 0),
|
||||
(2, 1, 2, 'INV2025002', 'judge', 0, NOW(), NULL, NULL, '13800138002', 'lisi@example.com', '诚邀您担任本次武术比赛的裁判', DATE_ADD(NOW(), INTERVAL 30 DAY), 0, NOW(), NOW(), 1, 0),
|
||||
|
||||
-- 已接受的邀请
|
||||
(3, 1, 3, 'INV2025003', 'judge', 1, DATE_SUB(NOW(), INTERVAL 2 DAY), DATE_SUB(NOW(), INTERVAL 1 DAY), '很荣幸能参加,我会准时到场', '13800138003', 'wangwu@example.com', '诚邀您担任本次武术比赛的裁判', DATE_ADD(NOW(), INTERVAL 30 DAY), 1, DATE_SUB(NOW(), INTERVAL 2 DAY), NOW(), 1, 0),
|
||||
(4, 1, 4, 'INV2025004', 'chief_judge', 1, DATE_SUB(NOW(), INTERVAL 3 DAY), DATE_SUB(NOW(), INTERVAL 2 DAY), '感谢邀请,我会认真履行裁判长职责', '13800138004', 'zhaoliu@example.com', '诚邀您担任本次武术比赛的裁判长', DATE_ADD(NOW(), INTERVAL 30 DAY), 1, DATE_SUB(NOW(), INTERVAL 3 DAY), NOW(), 1, 0),
|
||||
|
||||
-- 已拒绝的邀请
|
||||
(5, 1, 5, 'INV2025005', 'judge', 2, DATE_SUB(NOW(), INTERVAL 5 DAY), DATE_SUB(NOW(), INTERVAL 4 DAY), '非常抱歉,那段时间有其他安排', '13800138005', 'qianqi@example.com', '诚邀您担任本次武术比赛的裁判', DATE_ADD(NOW(), INTERVAL 30 DAY), 0, DATE_SUB(NOW(), INTERVAL 5 DAY), NOW(), 1, 0);
|
||||
|
||||
-- 验证插入结果
|
||||
SELECT
|
||||
ji.id,
|
||||
ji.invite_code,
|
||||
j.name AS judge_name,
|
||||
j.level AS judge_level,
|
||||
ji.contact_phone,
|
||||
ji.contact_email,
|
||||
ji.invite_status,
|
||||
CASE ji.invite_status
|
||||
WHEN 0 THEN '待回复'
|
||||
WHEN 1 THEN '已接受'
|
||||
WHEN 2 THEN '已拒绝'
|
||||
WHEN 3 THEN '已取消'
|
||||
ELSE '未知'
|
||||
END AS status_text,
|
||||
ji.invite_time,
|
||||
ji.reply_time,
|
||||
ji.reply_note
|
||||
FROM
|
||||
martial_judge_invite ji
|
||||
LEFT JOIN martial_judge j ON ji.judge_id = j.id
|
||||
WHERE
|
||||
ji.competition_id = 1
|
||||
AND ji.is_deleted = 0
|
||||
ORDER BY
|
||||
ji.id;
|
||||
|
||||
SELECT 'Test data inserted successfully!' AS status;
|
||||
91
database/martial-db/martial_competition_rules.sql
Normal file
91
database/martial-db/martial_competition_rules.sql
Normal file
@@ -0,0 +1,91 @@
|
||||
-- 赛事规程管理相关表
|
||||
|
||||
-- 1. 赛事规程附件表
|
||||
DROP TABLE IF EXISTS `martial_competition_rules_attachment`;
|
||||
CREATE TABLE `martial_competition_rules_attachment` (
|
||||
`id` bigint NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(12) DEFAULT '000000' COMMENT '租户ID',
|
||||
`competition_id` bigint NOT NULL COMMENT '赛事ID',
|
||||
`file_name` varchar(255) NOT NULL COMMENT '文件名称',
|
||||
`file_url` varchar(500) NOT NULL COMMENT '文件URL',
|
||||
`file_size` bigint DEFAULT NULL COMMENT '文件大小(字节)',
|
||||
`file_type` varchar(20) DEFAULT NULL COMMENT '文件类型(pdf/doc/docx/xls/xlsx等)',
|
||||
`order_num` int DEFAULT 0 COMMENT '排序序号',
|
||||
`status` int DEFAULT 1 COMMENT '状态(1-启用 0-禁用)',
|
||||
`create_user` bigint DEFAULT NULL COMMENT '创建人',
|
||||
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_user` bigint DEFAULT NULL COMMENT '更新人',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`is_deleted` int DEFAULT 0 COMMENT '是否已删除(0-否 1-是)',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_competition_id` (`competition_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事规程附件表';
|
||||
|
||||
-- 2. 赛事规程章节表
|
||||
DROP TABLE IF EXISTS `martial_competition_rules_chapter`;
|
||||
CREATE TABLE `martial_competition_rules_chapter` (
|
||||
`id` bigint NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(12) DEFAULT '000000' COMMENT '租户ID',
|
||||
`competition_id` bigint NOT NULL COMMENT '赛事ID',
|
||||
`chapter_number` varchar(50) NOT NULL COMMENT '章节编号(如:第一章)',
|
||||
`title` varchar(200) NOT NULL COMMENT '章节标题',
|
||||
`order_num` int DEFAULT 0 COMMENT '排序序号',
|
||||
`status` int DEFAULT 1 COMMENT '状态(1-启用 0-禁用)',
|
||||
`create_user` bigint DEFAULT NULL COMMENT '创建人',
|
||||
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_user` bigint DEFAULT NULL COMMENT '更新人',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`is_deleted` int DEFAULT 0 COMMENT '是否已删除(0-否 1-是)',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_competition_id` (`competition_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事规程章节表';
|
||||
|
||||
-- 3. 赛事规程内容表
|
||||
DROP TABLE IF EXISTS `martial_competition_rules_content`;
|
||||
CREATE TABLE `martial_competition_rules_content` (
|
||||
`id` bigint NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(12) DEFAULT '000000' COMMENT '租户ID',
|
||||
`chapter_id` bigint NOT NULL COMMENT '章节ID',
|
||||
`content` text NOT NULL COMMENT '规程内容',
|
||||
`order_num` int DEFAULT 0 COMMENT '排序序号',
|
||||
`status` int DEFAULT 1 COMMENT '状态(1-启用 0-禁用)',
|
||||
`create_user` bigint DEFAULT NULL COMMENT '创建人',
|
||||
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_user` bigint DEFAULT NULL COMMENT '更新人',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`is_deleted` int DEFAULT 0 COMMENT '是否已删除(0-否 1-是)',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_chapter_id` (`chapter_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事规程内容表';
|
||||
|
||||
-- 插入测试数据
|
||||
-- 假设赛事ID为1
|
||||
INSERT INTO `martial_competition_rules_attachment` (`id`, `tenant_id`, `competition_id`, `file_name`, `file_url`, `file_size`, `file_type`, `order_num`, `status`) VALUES
|
||||
(1, '000000', 1, '2025年郑州武术大赛规程.pdf', 'http://example.com/files/rules.pdf', 2621440, 'pdf', 1, 1),
|
||||
(2, '000000', 1, '参赛报名表.docx', 'http://example.com/files/form.docx', 159744, 'docx', 2, 1);
|
||||
|
||||
INSERT INTO `martial_competition_rules_chapter` (`id`, `tenant_id`, `competition_id`, `chapter_number`, `title`, `order_num`, `status`) VALUES
|
||||
(1, '000000', 1, '第一章', '总则', 1, 1),
|
||||
(2, '000000', 1, '第二章', '参赛资格', 2, 1),
|
||||
(3, '000000', 1, '第三章', '比赛规则', 3, 1),
|
||||
(4, '000000', 1, '第四章', '奖项设置', 4, 1);
|
||||
|
||||
INSERT INTO `martial_competition_rules_content` (`id`, `tenant_id`, `chapter_id`, `content`, `order_num`, `status`) VALUES
|
||||
(1, '000000', 1, '1.1 本次比赛遵循国际武术联合会竞赛规则。', 1, 1),
|
||||
(2, '000000', 1, '1.2 所有参赛选手必须持有效证件参赛。', 2, 1),
|
||||
(3, '000000', 1, '1.3 参赛选手须服从裁判判决,不得有违规行为。', 3, 1),
|
||||
(4, '000000', 2, '2.1 参赛选手年龄须在18-45周岁之间。', 1, 1),
|
||||
(5, '000000', 2, '2.2 参赛选手须持有武术等级证书或相关证明。', 2, 1),
|
||||
(6, '000000', 2, '2.3 参赛选手须通过健康检查,身体状况良好。', 3, 1),
|
||||
(7, '000000', 3, '3.1 比赛采用单败淘汰制。', 1, 1),
|
||||
(8, '000000', 3, '3.2 每场比赛时间为3分钟,分3局进行。', 2, 1),
|
||||
(9, '000000', 3, '3.3 得分规则按照国际标准执行。', 3, 1),
|
||||
(10, '000000', 4, '4.1 各组别设金、银、铜牌各一枚。', 1, 1),
|
||||
(11, '000000', 4, '4.2 设最佳表现奖、体育道德风尚奖等特别奖项。', 2, 1),
|
||||
(12, '000000', 4, '4.3 所有参赛选手均可获得参赛证书。', 3, 1);
|
||||
97
database/martial-db/update_organization_names.sql
Normal file
97
database/martial-db/update_organization_names.sql
Normal file
@@ -0,0 +1,97 @@
|
||||
-- ==========================================
|
||||
-- 更新参赛选手的所属单位名称
|
||||
-- 将测试数据替换为真实合理的武术学校/单位名称
|
||||
-- ==========================================
|
||||
|
||||
-- 武术学校和单位名称列表 (50个真实的单位名称)
|
||||
-- 包含:武术学校、体育学院、中小学、武馆、体育协会等
|
||||
|
||||
-- 更新策略:根据ID分配不同的单位名称
|
||||
|
||||
UPDATE martial_athlete SET organization = '北京体育大学武术学院' WHERE id % 50 = 1 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '上海体育学院武术系' WHERE id % 50 = 2 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '河南登封少林寺武术学校' WHERE id % 50 = 3 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '武汉体育学院' WHERE id % 50 = 4 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '成都体育学院' WHERE id % 50 = 5 AND is_deleted = 0;
|
||||
|
||||
UPDATE martial_athlete SET organization = '天津体育学院武术系' WHERE id % 50 = 6 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '西安体育学院' WHERE id % 50 = 7 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '沈阳体育学院' WHERE id % 50 = 8 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '广州体育学院武术系' WHERE id % 50 = 9 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '南京体育学院' WHERE id % 50 = 10 AND is_deleted = 0;
|
||||
|
||||
UPDATE martial_athlete SET organization = '嵩山少林武术职业学院' WHERE id % 50 = 11 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '河北省武术运动管理中心' WHERE id % 50 = 12 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '山东省武术院' WHERE id % 50 = 13 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '江苏省武术运动协会' WHERE id % 50 = 14 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '浙江大学武术队' WHERE id % 50 = 15 AND is_deleted = 0;
|
||||
|
||||
UPDATE martial_athlete SET organization = '清华大学武术协会' WHERE id % 50 = 16 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '北京大学武术队' WHERE id % 50 = 17 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '复旦大学武术社' WHERE id % 50 = 18 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '华南师范大学' WHERE id % 50 = 19 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '首都师范大学' WHERE id % 50 = 20 AND is_deleted = 0;
|
||||
|
||||
UPDATE martial_athlete SET organization = '北京市什刹海体育运动学校' WHERE id % 50 = 21 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '上海市第二体育运动学校' WHERE id % 50 = 22 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '深圳市体育运动学校' WHERE id % 50 = 23 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '广东省武术协会' WHERE id % 50 = 24 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '福建省武术队' WHERE id % 50 = 25 AND is_deleted = 0;
|
||||
|
||||
UPDATE martial_athlete SET organization = '陈家沟太极拳学校' WHERE id % 50 = 26 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '杨氏太极拳传承中心' WHERE id % 50 = 27 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '武当山武术学校' WHERE id % 50 = 28 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '峨眉山武术学校' WHERE id % 50 = 29 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '青城山武术院' WHERE id % 50 = 30 AND is_deleted = 0;
|
||||
|
||||
UPDATE martial_athlete SET organization = '石室中学' WHERE id % 50 = 31 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '成都七中' WHERE id % 50 = 32 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '武侯实验中学' WHERE id % 50 = 33 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '树德中学' WHERE id % 50 = 34 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '成都外国语学校' WHERE id % 50 = 35 AND is_deleted = 0;
|
||||
|
||||
UPDATE martial_athlete SET organization = '北京市第四中学' WHERE id % 50 = 36 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '上海中学' WHERE id % 50 = 37 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '杭州学军中学' WHERE id % 50 = 38 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '南京外国语学校' WHERE id % 50 = 39 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '华南师范大学附属中学' WHERE id % 50 = 40 AND is_deleted = 0;
|
||||
|
||||
UPDATE martial_athlete SET organization = '中国人民大学附属中学' WHERE id % 50 = 41 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '西北工业大学附属中学' WHERE id % 50 = 42 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '东北师范大学附属中学' WHERE id % 50 = 43 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '重庆巴蜀中学' WHERE id % 50 = 44 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '湖南师范大学附属中学' WHERE id % 50 = 45 AND is_deleted = 0;
|
||||
|
||||
UPDATE martial_athlete SET organization = '天津南开中学' WHERE id % 50 = 46 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '郑州外国语学校' WHERE id % 50 = 47 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '西安交通大学附属中学' WHERE id % 50 = 48 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '山东省实验中学' WHERE id % 50 = 49 AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '厦门双十中学' WHERE id % 50 = 0 AND is_deleted = 0;
|
||||
|
||||
-- 特别处理:为特定的知名选手设置更合适的单位
|
||||
UPDATE martial_athlete SET organization = '河南省武术运动管理中心' WHERE player_name = '张三丰' AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '北京市武术协会' WHERE player_name = '李天龙' AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '上海精武体育总会' WHERE player_name = '王小红' AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '广东省武术队' WHERE player_name = '赵美丽' AND is_deleted = 0;
|
||||
UPDATE martial_athlete SET organization = '四川省武术协会' WHERE player_name = '孙燕子' AND is_deleted = 0;
|
||||
|
||||
-- 查看更新结果
|
||||
SELECT
|
||||
id,
|
||||
player_name,
|
||||
organization,
|
||||
team_name,
|
||||
category
|
||||
FROM martial_athlete
|
||||
WHERE is_deleted = 0
|
||||
ORDER BY id
|
||||
LIMIT 30;
|
||||
|
||||
-- 统计各单位的参赛人数
|
||||
SELECT
|
||||
organization AS '所属单位',
|
||||
COUNT(*) AS '参赛人数'
|
||||
FROM martial_athlete
|
||||
WHERE is_deleted = 0
|
||||
GROUP BY organization
|
||||
ORDER BY COUNT(*) DESC;
|
||||
82
database/martial-db/upgrade.bat
Normal file
82
database/martial-db/upgrade.bat
Normal file
@@ -0,0 +1,82 @@
|
||||
@echo off
|
||||
REM =============================================
|
||||
REM 赛程编排系统 - 数据库升级脚本
|
||||
REM =============================================
|
||||
echo.
|
||||
echo ========================================
|
||||
echo 赛程编排系统 - 数据库升级工具
|
||||
echo ========================================
|
||||
echo.
|
||||
echo 说明: 此脚本会创建新的4张表,不会影响现有数据
|
||||
echo - martial_schedule_group
|
||||
echo - martial_schedule_detail
|
||||
echo - martial_schedule_participant
|
||||
echo - martial_schedule_status
|
||||
echo.
|
||||
|
||||
REM 检查MySQL
|
||||
where mysql >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo [错误] 未找到MySQL命令
|
||||
echo.
|
||||
echo 请使用以下方法之一:
|
||||
echo 方法1: 在Navicat/DBeaver中打开并执行 upgrade_schedule_system.sql
|
||||
echo 方法2: 将MySQL添加到系统PATH后重新运行此脚本
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set DB_NAME=martial_db
|
||||
set SCRIPT_PATH=%~dp0upgrade_schedule_system.sql
|
||||
|
||||
echo [1/2] 检测到MySQL...
|
||||
echo.
|
||||
|
||||
echo 请输入MySQL root密码 (无密码直接回车):
|
||||
set /p MYSQL_PWD=密码:
|
||||
|
||||
echo.
|
||||
echo [2/2] 正在执行升级脚本...
|
||||
echo.
|
||||
|
||||
if "%MYSQL_PWD%"=="" (
|
||||
mysql -u root %DB_NAME% < "%SCRIPT_PATH%"
|
||||
) else (
|
||||
mysql -u root -p%MYSQL_PWD% %DB_NAME% < "%SCRIPT_PATH%"
|
||||
)
|
||||
|
||||
if %errorlevel% equ 0 (
|
||||
echo.
|
||||
echo ========================================
|
||||
echo ✓ 数据库升级成功!
|
||||
echo ========================================
|
||||
echo.
|
||||
echo 已创建/检查以下表:
|
||||
echo [新] martial_schedule_group - 赛程编排分组表
|
||||
echo [新] martial_schedule_detail - 赛程编排明细表
|
||||
echo [新] martial_schedule_participant - 参赛者关联表
|
||||
echo [新] martial_schedule_status - 编排状态表
|
||||
echo.
|
||||
echo [旧] martial_schedule - 保留(如果存在)
|
||||
echo [旧] martial_schedule_athlete - 保留(如果存在)
|
||||
echo.
|
||||
echo 下一步:
|
||||
echo 1. 重启后端服务以使新表生效
|
||||
echo 2. 访问前端页面测试:
|
||||
echo http://localhost:3000/martial/schedule?competitionId=200
|
||||
echo.
|
||||
) else (
|
||||
echo.
|
||||
echo ========================================
|
||||
echo ✗ 升级失败!
|
||||
echo ========================================
|
||||
echo.
|
||||
echo 请检查:
|
||||
echo 1. 数据库 martial_db 是否存在
|
||||
echo 2. MySQL密码是否正确
|
||||
echo 3. 用户是否有CREATE TABLE权限
|
||||
echo.
|
||||
)
|
||||
|
||||
pause
|
||||
75
database/martial-db/upgrade_judge_invite_table.sql
Normal file
75
database/martial-db/upgrade_judge_invite_table.sql
Normal file
@@ -0,0 +1,75 @@
|
||||
-- =====================================================
|
||||
-- 升级 martial_judge_invite 表
|
||||
-- 添加邀请状态、时间、联系方式等字段
|
||||
-- 执行时间: 2025-12-12
|
||||
-- =====================================================
|
||||
|
||||
USE blade;
|
||||
|
||||
-- 检查表是否存在
|
||||
SELECT 'Checking martial_judge_invite table...' AS status;
|
||||
|
||||
-- 添加邀请状态字段
|
||||
ALTER TABLE martial_judge_invite
|
||||
ADD COLUMN IF NOT EXISTS invite_status INT DEFAULT 0 COMMENT '邀请状态(0-待回复,1-已接受,2-已拒绝,3-已取消)';
|
||||
|
||||
-- 添加邀请时间字段
|
||||
ALTER TABLE martial_judge_invite
|
||||
ADD COLUMN IF NOT EXISTS invite_time DATETIME COMMENT '邀请时间';
|
||||
|
||||
-- 添加回复时间字段
|
||||
ALTER TABLE martial_judge_invite
|
||||
ADD COLUMN IF NOT EXISTS reply_time DATETIME COMMENT '回复时间';
|
||||
|
||||
-- 添加回复备注字段
|
||||
ALTER TABLE martial_judge_invite
|
||||
ADD COLUMN IF NOT EXISTS reply_note VARCHAR(500) COMMENT '回复备注';
|
||||
|
||||
-- 添加联系电话字段
|
||||
ALTER TABLE martial_judge_invite
|
||||
ADD COLUMN IF NOT EXISTS contact_phone VARCHAR(20) COMMENT '联系电话';
|
||||
|
||||
-- 添加联系邮箱字段
|
||||
ALTER TABLE martial_judge_invite
|
||||
ADD COLUMN IF NOT EXISTS contact_email VARCHAR(100) COMMENT '联系邮箱';
|
||||
|
||||
-- 添加邀请消息字段
|
||||
ALTER TABLE martial_judge_invite
|
||||
ADD COLUMN IF NOT EXISTS invite_message VARCHAR(1000) COMMENT '邀请消息';
|
||||
|
||||
-- 添加取消原因字段
|
||||
ALTER TABLE martial_judge_invite
|
||||
ADD COLUMN IF NOT EXISTS cancel_reason VARCHAR(500) COMMENT '取消原因';
|
||||
|
||||
-- 为邀请状态字段添加索引
|
||||
ALTER TABLE martial_judge_invite
|
||||
ADD INDEX IF NOT EXISTS idx_invite_status (invite_status);
|
||||
|
||||
-- 为赛事ID和邀请状态组合添加索引
|
||||
ALTER TABLE martial_judge_invite
|
||||
ADD INDEX IF NOT EXISTS idx_competition_status (competition_id, invite_status);
|
||||
|
||||
-- 验证字段是否添加成功
|
||||
SELECT
|
||||
COLUMN_NAME,
|
||||
COLUMN_TYPE,
|
||||
COLUMN_COMMENT
|
||||
FROM
|
||||
INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
TABLE_SCHEMA = 'blade'
|
||||
AND TABLE_NAME = 'martial_judge_invite'
|
||||
AND COLUMN_NAME IN (
|
||||
'invite_status',
|
||||
'invite_time',
|
||||
'reply_time',
|
||||
'reply_note',
|
||||
'contact_phone',
|
||||
'contact_email',
|
||||
'invite_message',
|
||||
'cancel_reason'
|
||||
)
|
||||
ORDER BY
|
||||
ORDINAL_POSITION;
|
||||
|
||||
SELECT 'Upgrade completed successfully!' AS status;
|
||||
179
database/martial-db/upgrade_schedule_system.sql
Normal file
179
database/martial-db/upgrade_schedule_system.sql
Normal file
@@ -0,0 +1,179 @@
|
||||
-- =============================================
|
||||
-- 赛程编排系统 - 增量升级脚本
|
||||
-- =============================================
|
||||
-- 说明: 检查并创建缺失的表,不影响现有数据
|
||||
-- 版本: v1.1
|
||||
-- 日期: 2025-12-09
|
||||
-- =============================================
|
||||
|
||||
USE martial_db;
|
||||
|
||||
-- 检查当前已有的表
|
||||
SELECT
|
||||
table_name,
|
||||
'已存在' AS status
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'martial_db'
|
||||
AND table_name LIKE 'martial_schedule%';
|
||||
|
||||
-- =============================================
|
||||
-- 创建新表(仅当不存在时)
|
||||
-- =============================================
|
||||
|
||||
-- 1. 赛程编排分组表
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_group` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`competition_id` bigint(20) NOT NULL COMMENT '赛事ID',
|
||||
`group_name` varchar(200) NOT NULL COMMENT '分组名称(如:太极拳男组)',
|
||||
`project_id` bigint(20) NOT NULL COMMENT '项目ID',
|
||||
`project_name` varchar(100) DEFAULT NULL COMMENT '项目名称',
|
||||
`category` varchar(50) DEFAULT NULL COMMENT '组别(成年组、少年组等)',
|
||||
`project_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '项目类型(1=个人 2=集体)',
|
||||
`display_order` int(11) NOT NULL DEFAULT '0' COMMENT '显示顺序(集体项目优先,数字越小越靠前)',
|
||||
`total_participants` int(11) DEFAULT '0' COMMENT '总参赛人数',
|
||||
`total_teams` int(11) DEFAULT '0' COMMENT '总队伍数(仅集体项目)',
|
||||
`estimated_duration` int(11) DEFAULT '0' COMMENT '预计时长(分钟)',
|
||||
`create_user` bigint(20) DEFAULT NULL,
|
||||
`create_dept` bigint(20) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_user` bigint(20) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`status` int(11) DEFAULT '1' COMMENT '状态(1-启用,2-禁用)',
|
||||
`is_deleted` int(11) DEFAULT '0',
|
||||
`tenant_id` varchar(12) DEFAULT '000000',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_competition` (`competition_id`),
|
||||
KEY `idx_project` (`project_id`),
|
||||
KEY `idx_display_order` (`display_order`),
|
||||
KEY `idx_tenant` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛程编排分组表';
|
||||
|
||||
-- 2. 赛程编排明细表(场地时间段分配)
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_detail` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`schedule_group_id` bigint(20) NOT NULL COMMENT '分组ID',
|
||||
`competition_id` bigint(20) NOT NULL COMMENT '赛事ID',
|
||||
`venue_id` bigint(20) NOT NULL COMMENT '场地ID',
|
||||
`venue_name` varchar(100) DEFAULT NULL COMMENT '场地名称',
|
||||
`schedule_date` date NOT NULL COMMENT '比赛日期',
|
||||
`time_period` varchar(20) NOT NULL COMMENT '时间段(morning/afternoon)',
|
||||
`time_slot` varchar(20) NOT NULL COMMENT '时间点(08:30/13:30)',
|
||||
`estimated_start_time` datetime DEFAULT NULL COMMENT '预计开始时间',
|
||||
`estimated_end_time` datetime DEFAULT NULL COMMENT '预计结束时间',
|
||||
`estimated_duration` int(11) DEFAULT '0' COMMENT '预计时长(分钟)',
|
||||
`participant_count` int(11) DEFAULT '0' COMMENT '参赛人数',
|
||||
`sort_order` int(11) DEFAULT '0' COMMENT '场内顺序',
|
||||
`create_user` bigint(20) DEFAULT NULL,
|
||||
`create_dept` bigint(20) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_user` bigint(20) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`status` int(11) DEFAULT '1' COMMENT '状态(1-未开始,2-进行中,3-已完成)',
|
||||
`is_deleted` int(11) DEFAULT '0',
|
||||
`tenant_id` varchar(12) DEFAULT '000000',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_group` (`schedule_group_id`),
|
||||
KEY `idx_competition` (`competition_id`),
|
||||
KEY `idx_venue_time` (`venue_id`,`schedule_date`,`time_slot`),
|
||||
KEY `idx_tenant` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛程编排明细表(场地时间段分配)';
|
||||
|
||||
-- 3. 赛程编排参赛者关联表
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_participant` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`schedule_detail_id` bigint(20) NOT NULL COMMENT '编排明细ID',
|
||||
`schedule_group_id` bigint(20) NOT NULL COMMENT '分组ID',
|
||||
`participant_id` bigint(20) NOT NULL COMMENT '参赛者ID(关联martial_athlete表)',
|
||||
`organization` varchar(200) DEFAULT NULL COMMENT '单位名称',
|
||||
`player_name` varchar(100) DEFAULT NULL COMMENT '选手姓名',
|
||||
`project_name` varchar(100) DEFAULT NULL COMMENT '项目名称',
|
||||
`category` varchar(50) DEFAULT NULL COMMENT '组别',
|
||||
`performance_order` int(11) DEFAULT '0' COMMENT '出场顺序',
|
||||
`create_user` bigint(20) DEFAULT NULL,
|
||||
`create_dept` bigint(20) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_user` bigint(20) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`status` int(11) DEFAULT '1' COMMENT '状态(1-待出场,2-已出场)',
|
||||
`is_deleted` int(11) DEFAULT '0',
|
||||
`tenant_id` varchar(12) DEFAULT '000000',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_detail` (`schedule_detail_id`),
|
||||
KEY `idx_group` (`schedule_group_id`),
|
||||
KEY `idx_participant` (`participant_id`),
|
||||
KEY `idx_tenant` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛程编排参赛者关联表';
|
||||
|
||||
-- 4. 赛程编排状态表
|
||||
CREATE TABLE IF NOT EXISTS `martial_schedule_status` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`competition_id` bigint(20) NOT NULL COMMENT '赛事ID(唯一)',
|
||||
`schedule_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '编排状态(0=未编排 1=编排中 2=已保存锁定)',
|
||||
`last_auto_schedule_time` datetime DEFAULT NULL COMMENT '最后自动编排时间',
|
||||
`locked_time` datetime DEFAULT NULL COMMENT '锁定时间',
|
||||
`locked_by` varchar(100) DEFAULT NULL COMMENT '锁定人',
|
||||
`total_groups` int(11) DEFAULT '0' COMMENT '总分组数',
|
||||
`total_participants` int(11) DEFAULT '0' COMMENT '总参赛人数',
|
||||
`create_user` bigint(20) DEFAULT NULL,
|
||||
`create_dept` bigint(20) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_user` bigint(20) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`status` int(11) DEFAULT '1' COMMENT '状态(1-启用,2-禁用)',
|
||||
`is_deleted` int(11) DEFAULT '0',
|
||||
`tenant_id` varchar(12) DEFAULT '000000',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_competition` (`competition_id`),
|
||||
KEY `idx_tenant` (`tenant_id`),
|
||||
KEY `idx_schedule_status` (`schedule_status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛程编排状态表';
|
||||
|
||||
-- =============================================
|
||||
-- 验证结果
|
||||
-- =============================================
|
||||
|
||||
SELECT
|
||||
'升级完成' AS message,
|
||||
COUNT(*) AS new_tables_count
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'martial_db'
|
||||
AND table_name IN (
|
||||
'martial_schedule_group',
|
||||
'martial_schedule_detail',
|
||||
'martial_schedule_participant',
|
||||
'martial_schedule_status'
|
||||
);
|
||||
|
||||
-- 显示所有赛程相关表
|
||||
SELECT
|
||||
table_name,
|
||||
table_comment,
|
||||
CASE
|
||||
WHEN table_name IN ('martial_schedule_group', 'martial_schedule_detail',
|
||||
'martial_schedule_participant', 'martial_schedule_status')
|
||||
THEN '新系统'
|
||||
ELSE '旧系统'
|
||||
END AS system_version
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'martial_db'
|
||||
AND table_name LIKE 'martial_schedule%'
|
||||
ORDER BY system_version DESC, table_name;
|
||||
|
||||
-- =============================================
|
||||
-- 说明
|
||||
-- =============================================
|
||||
--
|
||||
-- 执行结果说明:
|
||||
-- 1. 如果 new_tables_count = 4,说明4张新表全部创建成功
|
||||
-- 2. 如果 new_tables_count < 4,说明部分表已存在或创建失败
|
||||
-- 3. 最后一个查询会显示所有赛程相关表及其所属系统版本
|
||||
--
|
||||
-- 新旧系统对比:
|
||||
-- - 旧系统: martial_schedule, martial_schedule_athlete (可能存在)
|
||||
-- - 新系统: martial_schedule_group, martial_schedule_detail,
|
||||
-- martial_schedule_participant, martial_schedule_status
|
||||
--
|
||||
-- 两个系统可以共存,不会互相影响
|
||||
-- 新系统由后端Service层代码使用
|
||||
--
|
||||
-- =============================================
|
||||
113
database/martial-db/upgrade_smart_schedule.sql
Normal file
113
database/martial-db/upgrade_smart_schedule.sql
Normal file
@@ -0,0 +1,113 @@
|
||||
-- ================================================================
|
||||
-- 赛事编排智能化升级 SQL 脚本
|
||||
-- 用途:支持智能编排算法(场地容纳人数 + 项目时长限制)
|
||||
-- 日期:2025-12-06
|
||||
-- ================================================================
|
||||
|
||||
-- 1. 创建场地信息表(如果不存在)
|
||||
-- ================================================================
|
||||
-- 注意:使用 capacity 字段名以匹配现有数据库表结构
|
||||
CREATE TABLE IF NOT EXISTS `martial_venue` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`tenant_id` varchar(12) DEFAULT '000000' COMMENT '租户ID',
|
||||
`competition_id` bigint(20) NOT NULL COMMENT '赛事ID',
|
||||
`venue_name` varchar(100) NOT NULL COMMENT '场地名称',
|
||||
`venue_code` varchar(50) DEFAULT NULL COMMENT '场地编码',
|
||||
`location` varchar(200) DEFAULT NULL COMMENT '位置/地点',
|
||||
`capacity` int(11) DEFAULT 100 COMMENT '容纳人数',
|
||||
`facilities` varchar(500) DEFAULT NULL COMMENT '场地设施',
|
||||
`status` int(2) DEFAULT 1 COMMENT '状态(0-禁用,1-启用)',
|
||||
`create_user` bigint(20) DEFAULT NULL COMMENT '创建人',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
`is_deleted` int(2) DEFAULT 0 COMMENT '是否已删除',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_competition_id` (`competition_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='场地信息表';
|
||||
|
||||
-- 2. 确保 martial_project 表有 estimated_duration 字段
|
||||
-- ================================================================
|
||||
-- 检查字段是否存在,不存在则添加
|
||||
SET @col_exists = 0;
|
||||
SELECT COUNT(*) INTO @col_exists
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'martial_project'
|
||||
AND COLUMN_NAME = 'estimated_duration';
|
||||
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
'ALTER TABLE martial_project ADD COLUMN estimated_duration int(11) DEFAULT 5 COMMENT ''预估时长(分钟)'' AFTER max_participants',
|
||||
'SELECT ''estimated_duration column already exists'' AS info'
|
||||
);
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 3. 插入测试数据(仅用于开发测试)
|
||||
-- ================================================================
|
||||
-- 为赛事 ID=100 插入场地数据
|
||||
INSERT INTO `martial_venue` (`competition_id`, `venue_name`, `venue_code`, `capacity`, `location`, `facilities`) VALUES
|
||||
(100, '一号场地', 'VENUE_01', 50, '体育馆一楼东侧', '主会场,配备专业武术地毯,适合集体项目'),
|
||||
(100, '二号场地', 'VENUE_02', 50, '体育馆一楼西侧', '次会场,配备专业武术地毯,适合集体项目'),
|
||||
(100, '三号场地', 'VENUE_03', 30, '体育馆二楼东侧', '小型场地,适合个人项目'),
|
||||
(100, '四号场地', 'VENUE_04', 30, '体育馆二楼西侧', '小型场地,适合个人项目')
|
||||
ON DUPLICATE KEY UPDATE
|
||||
venue_name = VALUES(venue_name),
|
||||
capacity = VALUES(capacity),
|
||||
location = VALUES(location),
|
||||
facilities = VALUES(facilities);
|
||||
|
||||
-- 4. 更新现有项目的预估时长(如果为NULL或0)
|
||||
-- ================================================================
|
||||
UPDATE martial_project
|
||||
SET estimated_duration = CASE
|
||||
WHEN project_name LIKE '%太极%' THEN 5
|
||||
WHEN project_name LIKE '%长拳%' THEN 5
|
||||
WHEN project_name LIKE '%剑%' THEN 4
|
||||
WHEN project_name LIKE '%刀%' THEN 4
|
||||
WHEN project_name LIKE '%棍%' THEN 6
|
||||
WHEN project_name LIKE '%枪%' THEN 6
|
||||
ELSE 5
|
||||
END
|
||||
WHERE estimated_duration IS NULL OR estimated_duration = 0;
|
||||
|
||||
-- 5. 创建视图:场地使用统计(可选)
|
||||
-- ================================================================
|
||||
CREATE OR REPLACE VIEW v_venue_usage_stats AS
|
||||
SELECT
|
||||
v.id AS venue_id,
|
||||
v.competition_id,
|
||||
v.venue_name,
|
||||
v.max_capacity,
|
||||
COUNT(DISTINCT s.group_id) AS assigned_groups,
|
||||
SUM(s.participant_count) AS total_participants,
|
||||
SUM(s.estimated_duration) AS total_duration,
|
||||
v.max_capacity - IFNULL(SUM(s.participant_count), 0) AS remaining_capacity
|
||||
FROM martial_venue v
|
||||
LEFT JOIN (
|
||||
-- 这里假设将来会有 martial_schedule 表来存储编排结果
|
||||
SELECT
|
||||
venue_id,
|
||||
group_id,
|
||||
COUNT(*) AS participant_count,
|
||||
SUM(estimated_duration) AS estimated_duration
|
||||
FROM martial_schedule_detail
|
||||
WHERE is_deleted = 0
|
||||
GROUP BY venue_id, group_id
|
||||
) s ON v.id = s.venue_id
|
||||
WHERE v.is_deleted = 0
|
||||
GROUP BY v.id, v.competition_id, v.venue_name, v.max_capacity;
|
||||
|
||||
-- ================================================================
|
||||
-- 脚本执行完成
|
||||
-- ================================================================
|
||||
-- 说明:
|
||||
-- 1. 场地表已创建,支持最大容纳人数配置
|
||||
-- 2. 项目表 estimated_duration 字段已确保存在
|
||||
-- 3. 测试数据已插入(赛事ID=100)
|
||||
-- 4. 现有项目的预估时长已更新为合理默认值
|
||||
-- ================================================================
|
||||
101
database/martial-db/verify_upgrade.sql
Normal file
101
database/martial-db/verify_upgrade.sql
Normal file
@@ -0,0 +1,101 @@
|
||||
-- =============================================
|
||||
-- 验证赛程编排系统表创建情况
|
||||
-- =============================================
|
||||
|
||||
USE martial_db;
|
||||
|
||||
-- 1. 检查所有赛程相关表
|
||||
SELECT
|
||||
table_name AS '表名',
|
||||
table_comment AS '说明',
|
||||
CASE
|
||||
WHEN table_name IN ('martial_schedule_group', 'martial_schedule_detail',
|
||||
'martial_schedule_participant', 'martial_schedule_status')
|
||||
THEN '✓ 新系统'
|
||||
ELSE '旧系统'
|
||||
END AS '系统版本',
|
||||
table_rows AS '记录数'
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'martial_db'
|
||||
AND table_name LIKE 'martial_schedule%'
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN table_name IN ('martial_schedule_group', 'martial_schedule_detail',
|
||||
'martial_schedule_participant', 'martial_schedule_status')
|
||||
THEN 1
|
||||
ELSE 2
|
||||
END,
|
||||
table_name;
|
||||
|
||||
-- 2. 验证新系统4张表是否全部创建
|
||||
SELECT
|
||||
CASE
|
||||
WHEN COUNT(*) = 4 THEN '✓ 新系统表创建成功! 共4张表已就绪'
|
||||
ELSE CONCAT('⚠ 警告: 只创建了 ', COUNT(*), ' 张表,应该是4张')
|
||||
END AS '创建状态'
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'martial_db'
|
||||
AND table_name IN (
|
||||
'martial_schedule_group',
|
||||
'martial_schedule_detail',
|
||||
'martial_schedule_participant',
|
||||
'martial_schedule_status'
|
||||
);
|
||||
|
||||
-- 3. 检查各表的字段数量
|
||||
SELECT
|
||||
table_name AS '表名',
|
||||
COUNT(*) AS '字段数'
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'martial_db'
|
||||
AND table_name IN (
|
||||
'martial_schedule_group',
|
||||
'martial_schedule_detail',
|
||||
'martial_schedule_participant',
|
||||
'martial_schedule_status'
|
||||
)
|
||||
GROUP BY table_name
|
||||
ORDER BY table_name;
|
||||
|
||||
-- 4. 检查索引创建情况
|
||||
SELECT
|
||||
table_name AS '表名',
|
||||
COUNT(DISTINCT index_name) AS '索引数量',
|
||||
GROUP_CONCAT(DISTINCT index_name ORDER BY index_name) AS '索引列表'
|
||||
FROM information_schema.statistics
|
||||
WHERE table_schema = 'martial_db'
|
||||
AND table_name IN (
|
||||
'martial_schedule_group',
|
||||
'martial_schedule_detail',
|
||||
'martial_schedule_participant',
|
||||
'martial_schedule_status'
|
||||
)
|
||||
GROUP BY table_name
|
||||
ORDER BY table_name;
|
||||
|
||||
-- 5. 检查是否有数据(应该为空,因为是新表)
|
||||
SELECT
|
||||
'martial_schedule_group' AS '表名',
|
||||
COUNT(*) AS '记录数'
|
||||
FROM martial_schedule_group
|
||||
UNION ALL
|
||||
SELECT
|
||||
'martial_schedule_detail',
|
||||
COUNT(*)
|
||||
FROM martial_schedule_detail
|
||||
UNION ALL
|
||||
SELECT
|
||||
'martial_schedule_participant',
|
||||
COUNT(*)
|
||||
FROM martial_schedule_participant
|
||||
UNION ALL
|
||||
SELECT
|
||||
'martial_schedule_status',
|
||||
COUNT(*)
|
||||
FROM martial_schedule_status;
|
||||
|
||||
-- 6. 显示最终状态
|
||||
SELECT
|
||||
'🎉 数据库升级完成!' AS '状态',
|
||||
DATABASE() AS '当前数据库',
|
||||
NOW() AS '验证时间';
|
||||
31
database/martial_venue.sql
Normal file
31
database/martial_venue.sql
Normal file
@@ -0,0 +1,31 @@
|
||||
-- 场地信息表
|
||||
DROP TABLE IF EXISTS `martial_venue`;
|
||||
CREATE TABLE `martial_venue` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`tenant_id` varchar(12) DEFAULT '000000' COMMENT '租户ID',
|
||||
`competition_id` bigint(20) NOT NULL COMMENT '赛事ID',
|
||||
`venue_name` varchar(100) NOT NULL COMMENT '场地名称',
|
||||
`venue_code` varchar(50) DEFAULT NULL COMMENT '场地编码',
|
||||
`max_capacity` int(11) DEFAULT 100 COMMENT '最大容纳人数',
|
||||
`location` varchar(200) DEFAULT NULL COMMENT '位置/地点',
|
||||
`description` varchar(500) DEFAULT NULL COMMENT '场地描述',
|
||||
`facilities` varchar(500) DEFAULT NULL COMMENT '场地设施',
|
||||
`sort_order` int(11) DEFAULT 0 COMMENT '排序',
|
||||
`status` int(2) DEFAULT 1 COMMENT '状态(0-禁用,1-启用)',
|
||||
`create_user` bigint(20) DEFAULT NULL COMMENT '创建人',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
`is_deleted` int(2) DEFAULT 0 COMMENT '是否已删除',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_competition_id` (`competition_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='场地信息表';
|
||||
|
||||
-- 插入测试数据
|
||||
INSERT INTO `martial_venue` (`competition_id`, `venue_name`, `venue_code`, `max_capacity`, `location`, `description`) VALUES
|
||||
(100, '一号场地', 'VENUE_01', 50, '体育馆一楼东侧', '主会场,配备专业武术地毯'),
|
||||
(100, '二号场地', 'VENUE_02', 50, '体育馆一楼西侧', '次会场,配备专业武术地毯'),
|
||||
(100, '三号场地', 'VENUE_03', 30, '体育馆二楼东侧', '小型场地,适合个人项目'),
|
||||
(100, '四号场地', 'VENUE_04', 30, '体育馆二楼西侧', '小型场地,适合个人项目');
|
||||
Reference in New Issue
Block a user