fix bugs
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-12-12 05:13:10 +08:00
parent 1c981a2fb7
commit 7aa6545cbb
82 changed files with 8495 additions and 28 deletions

305
docs/SCHEDULE_DEPLOYMENT.md Normal file
View File

@@ -0,0 +1,305 @@
# 赛程编排系统后端部署指南
## 📋 部署步骤
### 1. 数据库初始化
执行数据库表创建脚本:
```bash
mysql -u root -p martial_competition < database/martial-db/create_schedule_tables.sql
```
或者在MySQL客户端中直接执行 `database/martial-db/create_schedule_tables.sql`
### 2. 导入测试数据(可选)
如果需要测试编排功能,可以导入测试数据:
```bash
# 在前端项目的test-data目录下
mysql -u root -p martial_competition < test-data/create_100_team_participants.sql
```
这将创建:
- 100个集体项目队伍(500人)
- 5个集体项目类型
- 配合原有个人项目,总计1500人
### 3. 编译后端项目
```bash
cd martial-master
mvn clean package -DskipTests
```
### 4. 启动后端服务
```bash
java -jar target/martial-master.jar
```
### 5. 配置PowerJob定时任务
#### 5.1 访问PowerJob控制台
默认地址: `http://localhost:7700`
#### 5.2 创建定时任务
在PowerJob控制台中配置:
- **任务名称**: 赛程自动编排
- **任务描述**: 每10分钟自动编排未锁定的赛事
- **执行类型**: BASIC
- **处理器**: `org.springblade.job.processor.ScheduleAutoArrangeProcessor`
- **Cron表达式**: `0 */10 * * * ?` (每10分钟执行一次)
- **最大实例数**: 1 (避免并发)
- **运行超时时间**: 600000 (10分钟)
#### 5.3 启动任务
在PowerJob控制台中启动该任务
---
## 🔧 API接口说明
### 1. 获取编排结果
```http
GET /api/martial/schedule/result?competitionId={id}
```
**响应示例**:
```json
{
"code": 200,
"success": true,
"data": {
"scheduleStatus": 1,
"lastAutoScheduleTime": "2025-12-08 10:00:00",
"totalGroups": 45,
"totalParticipants": 1500,
"scheduleGroups": [
{
"id": 1,
"groupName": "太极拳集体 成年组",
"projectType": 2,
"displayOrder": 1,
"totalParticipants": 10,
"totalTeams": 2,
"organizationGroups": [
{
"organization": "少林寺武校",
"participants": [
{"playerName": "张三"},
{"playerName": "李四"}
],
"scheduleDetails": [
{
"venueId": 1,
"venueName": "一号场地",
"scheduleDate": "2025-11-06",
"timeSlot": "08:30",
"timePeriod": "morning"
}
]
}
]
}
]
}
}
```
### 2. 保存并锁定编排
```http
POST /api/martial/schedule/save-and-lock
Content-Type: application/json
{
"competitionId": 200
}
```
**响应示例**:
```json
{
"code": 200,
"success": true,
"msg": "编排已保存并锁定"
}
```
### 3. 手动触发自动编排(测试用)
```http
POST /api/martial/schedule/auto-arrange
Content-Type: application/json
{
"competitionId": 200
}
```
---
## 📊 数据库表说明
### 1. martial_schedule_group (编排分组表)
存储自动分组结果,包括集体项目和个人项目的分组信息。
### 2. martial_schedule_detail (编排明细表)
存储场地时间段分配结果,记录每个分组被分配到哪个场地和时间段。
### 3. martial_schedule_participant (参赛者关联表)
存储参赛者与编排的关联关系,记录每个参赛者的出场顺序。
### 4. martial_schedule_status (编排状态表)
存储每个赛事的编排状态:
- 0: 未编排
- 1: 编排中
- 2: 已保存锁定
---
## 🧪 测试流程
### 1. 准备测试数据
```bash
# 执行测试数据脚本
mysql -u root -p martial_competition < test-data/create_100_team_participants.sql
```
### 2. 手动触发编排
使用API测试工具(Postman/Apifox)调用:
```http
POST http://localhost/api/martial/schedule/auto-arrange
Content-Type: application/json
{
"competitionId": 200
}
```
### 3. 查看编排结果
```http
GET http://localhost/api/martial/schedule/result?competitionId=200
```
### 4. 前端测试
访问前端页面:
```
http://localhost:3000/martial/schedule?competitionId=200
```
应该能看到:
- 竞赛分组Tab: 按时间段显示分组
- 场地Tab: 按场地显示分组
- 集体项目按单位分组显示
- 个人项目直接列出参赛者
### 5. 保存并锁定
在前端页面点击"保存编排"按钮,或调用API:
```http
POST http://localhost/api/martial/schedule/save-and-lock
Content-Type: application/json
{
"competitionId": 200
}
```
锁定后,定时任务将不再自动编排该赛事。
---
## 🔍 故障排查
### 问题1: 编排结果为空
**原因**:
- 赛事没有参赛者
- 赛事没有配置场地
- 赛事时间未设置
**解决**:
- 检查 `martial_athlete` 表是否有该赛事的参赛者
- 检查 `martial_venue` 表是否有该赛事的场地
- 检查 `martial_competition` 表的 `competition_start_time``competition_end_time`
### 问题2: 定时任务未执行
**原因**:
- PowerJob服务未启动
- 任务未启动
- Worker未连接
**解决**:
- 检查PowerJob控制台任务状态
- 查看Worker日志
- 确认Cron表达式正确
### 问题3: 场地容量不足
**原因**:
- 参赛人数过多
- 时间段容量不够
**解决**:
- 增加比赛天数
- 增加场地数量
- 调整时间段容量配置
---
## 📝 注意事项
1. **定时任务执行频率**: 默认每10分钟执行一次,可以根据需要调整Cron表达式
2. **锁定机制**: 一旦保存并锁定,定时任务将不再自动编排该赛事
3. **容量检查**: 编排算法会自动检查时间段容量,超出容量的分组会报警
4. **项目类型**:
- type=1: 个人项目
- type=2: 双人项目
- type=3: 集体项目
5. **时间段容量**:
- 上午(08:30-11:30): 150分钟
- 下午(13:30-17:30): 210分钟
---
## 🚀 性能优化建议
1. **数据库索引**: 已自动创建必要索引,无需额外优化
2. **批量插入**: Service层使用批量插入,提升性能
3. **缓存**: 可以考虑使用Redis缓存编排结果(可选)
4. **并发控制**: PowerJob任务设置最大实例数为1,避免并发冲突
---
**版本**: v1.0
**创建时间**: 2025-12-08
**维护人**: 开发团队