Commit Graph
98 Commits
Author SHA1 Message Date
hongjianli 254b22c969 fix: 优化重复报名检查逻辑 - 只检查registration_status=1的记录,跳过而非拒绝重复报名 2026-01-15 17:30:01 +08:00
hongjianli b9d1d2987e fix: 防止重复报名 - 个人项目和集体项目都添加重复检查
- 个人项目:检测到重复报名时返回错误而非更新
- 集体项目:添加重复报名检查
- 新增 /martial/athlete/registered API 用于查询已报名选手

Closes #3
2026-01-15 15:56:29 +08:00
hongjianliandfactory-droid[bot] c6bf0d3404 fix: 移除MartialAthleteMapper中排除集体项目的过滤条件
- 删除 AND (a.team_name IS NULL OR a.player_name != a.team_name) 条件
- 使统计页面能够正确包含集体项目数据
- 修复Issue #3: 统计页面未包含集体项目数据

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-15 15:56:29 +08:00
hongjianliandfactory-droid[bot] 868b4be356 fix: 修复generateInitialScheduleResult方法,根据maxParticipants拆分单人项目分组
- 当单人项目参赛人数超过maxParticipants时,自动拆分成多个分组
- 添加createSingleGroup辅助方法
- 修复Issue #1: 编排分组算法使用错误字段导致分组数计算不准确

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-15 15:56:29 +08:00
hongjianliandfactory-droid[bot] 106e563f2e fix: save draft schedule with negative IDs from auto-arrange
- Handle negative groupId by creating new schedule groups
- Extract projectId from code format C{competitionId}-P{projectId}
- Save project type, participant count, and team count
- Query participants by participant_id instead of primary key
- Create new participant records if not exists

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-15 15:56:29 +08:00
hongjianliandfactory-droid[bot] ba9b8609e9 fix: 在编排结果中添加 projectId 字段
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-15 15:56:29 +08:00
hongjianliandfactory-droid[bot] 30c05f3e54 feat: scheduling improvements and export enhancements
- Improved auto-scheduling with venue load balancing
- Added evening time slots support
- Enhanced export controller
- Updated captcha token granter
- Added minio_data to gitignore

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-15 15:56:28 +08:00
hongjianliandfactory-droid[bot] fd3cc6aa54 Add Flyway migrations V3-V5 and database backup
- V3: Add venue_type, result fields, project venue_id
- V4: Create contact, exception_event, judge_project, team tables
- V5: Create schedule_plan, slot, conflict, adjustment_log tables
- Add full database backup 20260113

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-15 15:56:28 +08:00
hongjianliandfactory-droid[bot] 77b324cd4c 出场顺序:显示预计出场时间和评分完成状态
- LineupParticipantVO添加estimatedTime字段
- 根据出场顺序计算预计出场时间(每人5分钟)
- 根据martial_result.score_status判断已完成状态

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-15 15:56:28 +08:00
hongjianliandfactory-droid[bot] 42b25a7cf2 添加导出Excel组别字段、isMe标记、小程序出场顺序优化
- ScheduleGroupData添加category字段
- 编排保存时写入组别(男子/女子/混合)
- LineupParticipantVO添加isMe字段标记当前用户选手
- 修复SQL participant_id映射

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-15 15:56:28 +08:00
hongjianliandfactory-droid[bot] bc235b8fbe feat: 添加编排预计时长显示
1. CompetitionGroupDTO添加estimatedDuration字段
2. ScheduleGroupDetailVO添加estimatedDuration字段
3. SQL查询添加estimated_duration
4. 前端场地视图显示合计时间

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-15 15:56:28 +08:00
hongjianliandfactory-droid[bot] 82ae96503d feat: 优化编排分组逻辑
1. 根据项目分组类别(男子/女子/混合)过滤运动员
2. 使用项目的category字段显示分组名称
3. 按team_name统计队伍数量(集体项目)
4. 添加场地容量约束和负载均衡分配

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-15 15:56:28 +08:00
hongjianli aee06393d7 feat(schedule): 优化编排时间分配逻辑
- 添加晚上时段(19:00-22:00, 180分钟)
- 调整时段容量: 上午240分钟, 下午240分钟, 晚上180分钟
- 按实际时长累加分配,同一时段可安排多个项目
- 同一项目的所有分组优先安排在同一场地同一时段
2026-01-15 15:56:28 +08:00
hongjianli 8b0305997e feat(schedule): 优化编排逻辑,同一项目尽量在同一时间段完成
- 按项目为单位进行分配,而不是按分组
- 计算每个项目的总时长,优先找能容纳整个项目的时间段
- 如果项目总时长不超过时间段容量(480分钟),所有分组都在同一时间段
- 只有当项目总时长超过单个时间段容量时才分散到多个时间段
- 分散时优先选择同一场地的连续时间段
2026-01-15 15:56:28 +08:00
hongjianli 529ac81131 feat(schedule): 同一项目优先分配到同一场地
- 新增projectVenueMap记录每个项目首次分配的场地
- 同一项目的后续分组优先分配到相同场地
- 只有当优先场地容量不足时才分配到其他场地
- 新增日志输出项目-场地分配情况
2026-01-15 15:56:28 +08:00
hongjianli df7efac819 fix(schedule): 修复集体项目类型显示为双人的问题
- 修改MartialScheduleServiceImpl中type=2的显示文本从双人改为集体
- 保持与前端项目管理页面的类型定义一致(1=单人,2=集体)
2026-01-09 12:58:28 +08:00
hongjianliandfactory-droid[bot] 559dea702a feat: 项目编码自动生成
- 新增项目时自动生成编码,格式: C{赛事ID}-P{序号}
- 移除手动输入项目编码

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-08 17:19:23 +08:00
hongjianliandfactory-droid[bot] c40ca5b35b fix: 修复联系人默认唯一性问题 & 添加单位统计API
- 问题1: 设置默认联系人时自动取消其他默认联系人
- 问题3: 新增 /organization-stats API 按单位统计运动员、项目、金额

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-08 16:08:31 +08:00
hongjianliandfactory-droid[bot] 742272026b 重构项2: 优化编排规则
变更点1 - 使用项目maxParticipants:
- 优先使用项目配置的单位容纳人数进行分组
- 未配置时回退到全局配置(35人)
- 添加日志记录使用的容纳人数

变更点2 - 实现集体优先策略:
- 集体项目(projectType=2)优先于单人项目(projectType=1)
- 同类型项目按预计时长降序排列
- 添加排序结果日志便于调试

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-08 15:50:21 +08:00
hongjianliandfactory-droid[bot] 496537ceef 重构项4: 添加出场顺序显示功能
后端:
- 新增LineupGroupVO和LineupParticipantVO类
- 在MartialMiniController中添加/schedule/status和/schedule/lineup接口
- 注入MartialScheduleStatusMapper和MartialScheduleGroupMapper

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-08 15:42:47 +08:00
hongjianliandfactory-droid[bot] e0d3572e34 feat: add score VO with deduction items and player number assignment
- Add selectScoreVOPage for score list with deduction items text
- Add chiefJudgeScore and scoreStatus fields to MartialScoreVO
- Add player number assignment in saveAndLockSchedule method

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-07 14:56:25 +08:00
hongjianliandfactory-droid[bot] a262ca9279 fix: 修复安全配置,移除/**通配符放行
- 移除skip-url中的/**通配符,恢复接口认证
- 添加必要的公开接口放行路径
- 修复AuthUtil.getUserId()返回-1的问题

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-07 13:05:46 +08:00
hongjianliandfactory-droid[bot] b94ac501de feat: 编排保存时同步更新项目的venue_id
- 在saveDraftSchedule方法中添加同步逻辑
- 保存编排详情后自动更新martial_project.venue_id
- 保持编排系统和项目管理的数据一致性

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-07 11:55:03 +08:00
hongjianliandfactory-droid[bot] ea50330a5d fix: 场地无项目时返回空列表而非所有项目
- 修改login和refreshLoginInfo方法中的项目获取逻辑
- 当场地没有关联项目时返回空列表
- 初始化projects变量为空ArrayList

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-07 11:31:27 +08:00
hongjianliandfactory-droid[bot] e3f158985a fix: 添加@Slf4j注解修复编译错误
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-07 11:05:49 +08:00
hongjianliandfactory-droid[bot] eefe7167ee fix: 报名时检查是否已存在相同选手记录,避免重复创建
- 在提交报名时,先检查是否已存在相同选手+比赛+项目的记录
- 如果存在则更新订单ID,而不是创建新记录
- 解决添加选手后再报名导致重复记录的问题

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-06 16:24:23 +08:00
hongjianliandfactory-droid[bot] 550802a029 feat: 添加场地类型(venueType)字段支持
- MartialVenue实体添加venueType字段
- 支持室内/室外场地类型区分

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-06 15:18:00 +08:00
hongjianli ac44bd45fa fix(deduction): 修复扣分项编辑时赛事ID未携带的问题
- 实体类添加competitionId字段
- Controller查询时从关联项目获取competitionId
- 修复project为null时的空指针异常
2026-01-06 14:56:07 +08:00
hongjianliandfactory-droid[bot] 8193baf314 fix: 添加报名时间和比赛结束时间校验
- 报名时检查报名时间是否在有效范围内
- 报名时检查比赛是否已结束
- 如果比赛已结束,返回错误提示

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-05 17:50:38 +08:00
hongjianliandfactory-droid[bot] 3af34506ba fix(mini): ensure general judge sees all projects regardless of venue
- Add check for refereeType == 3 or role == general_judge before filtering by venue
- General judges now always get all projects for the competition
- Prevents issue where general judge assigned to a venue would see no projects

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-05 16:38:30 +08:00
hongjianliandfactory-droid[bot] 55ccf08246 fix(mini): 根据场地获取项目列表,解决同一项目显示在多个场地的问题
- 在MartialProject实体添加venueId字段
- 数据库martial_project表添加venue_id列
- 修改MartialMiniController:当裁判未指定项目时,根据venue_id获取该场地的项目
- 新增getProjectsByVenue方法

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-05 15:51:38 +08:00
hongjianliandfactory-droid[bot] 29e9fb4e0a feat: add contact management and judge project assignment features
- Add MartialContact entity, mapper, service, and controller for contact management
- Add updateProjects endpoint to MartialJudgeInviteController for project assignment
- Fix MartialRegistrationOrderController for multi-project registration
- Update MartialJudgeInviteVO with projects field

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-05 15:10:27 +08:00
hongjianli 9fa5eb46df fix(score): 按场地统计裁判数量而非按项目 2025-12-31 17:32:13 +08:00
hongjianli d3c7dccf05 fix(mini): 修复裁判类型判断逻辑 - refereeType=1为主裁判 2025-12-31 16:55:22 +08:00
hongjianli 370cdc8e1e feat(judgeInvite): 支持按场地过滤裁判邀请列表 2025-12-31 16:20:29 +08:00
hongjianli e70dbd1144 fix(athlete): 选手列表过滤掉集体报名记录 2025-12-31 15:56:24 +08:00
hongjianli 760b7d0039 feat(registration): 报名成功后自动确认选手状态 2025-12-31 15:47:04 +08:00
hongjianli e50b71a13d fix(registration): 根据赛事时间动态计算报名状态
- 1: 待开始 (赛事未开始)
- 2: 进行中 (赛事进行中)
- 3: 已结束 (赛事已结束)
2025-12-31 15:10:37 +08:00
hongjianli e1bf9a4351 fix(registration): 查询选手时过滤已删除记录 2025-12-31 14:42:09 +08:00
hongjianli 2f9fbbb2aa fix(schedule): 修复集体项目类型显示为单人的问题
- 修改autoGroupParticipants方法中的projectType判断逻辑
- type=2(双人)或type=3(集体)都映射为projectType=2(集体)
- 之前只处理了type=3的情况,导致type=2的集体项目被错误标记为单人
2025-12-31 14:15:26 +08:00
hongjianli f45fee050e feat(registration): 支持集体项目报名
- DTO添加teamIds字段接收集体ID列表
- Controller处理集体报名逻辑
- 为每个集体创建martial_athlete记录用于编排
2025-12-31 13:48:04 +08:00
hongjianli 18895dcb76 fix(team): 修复编辑集体变成新增的问题
- 将DTO中的id字段改为teamId,避免uni-app对id字段的特殊处理
- 使用String类型接收teamId,避免JavaScript大数精度丢失
- 添加日志记录便于调试
2025-12-31 13:09:43 +08:00
hongjianli 89962c69e6 feat(team): 添加集体编辑功能 2025-12-31 11:51:12 +08:00
hongjianli 45758108a8 fix(team): 修复删除选手后集体信息未同步更新的问题
- 删除选手时级联删除集体成员关系
- 集体列表动态计算有效成员数(排除已删除选手)
- 集体详情过滤已删除的选手
2025-12-31 11:37:37 +08:00
hongjianli 19e3d94a33 fix(team): 修复集体列表不显示的问题,设置createUser字段 2025-12-31 11:16:30 +08:00
hongjianli 7fae2f0ff8 fix(competition): 修复赛事详情页面报名人数显示为0的问题 2025-12-31 11:07:14 +08:00
hongjianli fe5ddfa253 fix(mini): 修复裁判员角色判断逻辑
- 修复role和referee_type不一致导致的权限问题
- 裁判员(role=judge)应该只能评分,不能修改
- 主裁判(role=chief_judge)才能修改评分
2025-12-30 18:06:25 +08:00
hongjianli c7038a5883 feat(team): 添加集体/团队管理功能
- 创建martial_team和martial_team_member表
- 添加MartialTeam和MartialTeamMember实体类
- 添加MartialTeamController提供集体CRUD接口
- 支持集体成员关联管理
2025-12-30 18:02:00 +08:00
hongjianli 87a05df04f fix(registration): 修复我的报名列表信息显示不全问题
- 修改list接口返回VO而非Entity
- 添加getListWithRelations方法批量加载关联数据
- 返回赛事名称、地点、时间、项目名称、选手名称等完整信息
- 优化批量查询减少数据库访问次数
2025-12-30 17:43:45 +08:00
hongjianli b7ad819a29 fix(schedule): 完成编排时允许空分组状态 2025-12-30 12:59:08 +08:00