Files
martial-master/docs/SCHEDULE_DEPLOYMENT.md
宅房 7aa6545cbb
All checks were successful
continuous-integration/drone/push Build is passing
fix bugs
2025-12-12 05:13:10 +08:00

6.0 KiB

赛程编排系统后端部署指南

📋 部署步骤

1. 数据库初始化

执行数据库表创建脚本:

mysql -u root -p martial_competition < database/martial-db/create_schedule_tables.sql

或者在MySQL客户端中直接执行 database/martial-db/create_schedule_tables.sql

2. 导入测试数据(可选)

如果需要测试编排功能,可以导入测试数据:

# 在前端项目的test-data目录下
mysql -u root -p martial_competition < test-data/create_100_team_participants.sql

这将创建:

  • 100个集体项目队伍(500人)
  • 5个集体项目类型
  • 配合原有个人项目,总计1500人

3. 编译后端项目

cd martial-master
mvn clean package -DskipTests

4. 启动后端服务

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. 获取编排结果

GET /api/martial/schedule/result?competitionId={id}

响应示例:

{
  "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. 保存并锁定编排

POST /api/martial/schedule/save-and-lock
Content-Type: application/json

{
  "competitionId": 200
}

响应示例:

{
  "code": 200,
  "success": true,
  "msg": "编排已保存并锁定"
}

3. 手动触发自动编排(测试用)

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. 准备测试数据

# 执行测试数据脚本
mysql -u root -p martial_competition < test-data/create_100_team_participants.sql

2. 手动触发编排

使用API测试工具(Postman/Apifox)调用:

POST http://localhost/api/martial/schedule/auto-arrange
Content-Type: application/json

{
  "competitionId": 200
}

3. 查看编排结果

GET http://localhost/api/martial/schedule/result?competitionId=200

4. 前端测试

访问前端页面:

http://localhost:3000/martial/schedule?competitionId=200

应该能看到:

  • 竞赛分组Tab: 按时间段显示分组
  • 场地Tab: 按场地显示分组
  • 集体项目按单位分组显示
  • 个人项目直接列出参赛者

5. 保存并锁定

在前端页面点击"保存编排"按钮,或调用API:

POST http://localhost/api/martial/schedule/save-and-lock
Content-Type: application/json

{
  "competitionId": 200
}

锁定后,定时任务将不再自动编排该赛事。


🔍 故障排查

问题1: 编排结果为空

原因:

  • 赛事没有参赛者
  • 赛事没有配置场地
  • 赛事时间未设置

解决:

  • 检查 martial_athlete 表是否有该赛事的参赛者
  • 检查 martial_venue 表是否有该赛事的场地
  • 检查 martial_competition 表的 competition_start_timecompetition_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 维护人: 开发团队