Commit Graph
100 Commits
Author SHA1 Message Date
hongjianli 1cecb8330f refactor: update controller to use MiniScoringService
Phase 1, Step 1.3.3: Delegate scoring to service layer
- Add IMiniScoringService dependency to controller
- Replace 43 lines of business logic with service call
- Controller now delegates scoring to service
- All tests passing

Related to Phase 1 refactoring plan
2026-01-17 18:21:56 +08:00
hongjianli 4aeac05c4b refactor: implement MiniScoringServiceImpl
Phase 1, Step 1.3.2: Extract scoring logic from controller
- Move submitScore business logic to service layer
- Add parseLong helper method
- Placeholder for score calculation (to be extracted later)

Related to Phase 1 refactoring plan
2026-01-17 18:06:59 +08:00
hongjianli 8cb82c874a refactor: define IMiniScoringService interface
Phase 1, Step 1.3.1: Extract scoring logic interface
- Define submitScore() method signature

Related to Phase 1 refactoring plan
2026-01-17 18:05:44 +08:00
hongjianli c9cd4d6e88 refactor: update controller to use MiniAuthService
Phase 1, Step 1.2.3: Delegate login to service layer
- Add IMiniAuthService dependency to controller
- Replace 95 lines of business logic with service call
- Controller now only handles HTTP layer
- All tests passing

Related to Phase 1 refactoring plan
2026-01-17 18:04:57 +08:00
hongjianli 070c1054cf refactor: implement MiniAuthServiceImpl
Phase 1, Step 1.2.2: Extract login logic from controller
- Move login business logic to service layer
- Extract helper methods for project retrieval
- Add logout and verifyToken implementations
- Reduce controller responsibility

Related to Phase 1 refactoring plan
2026-01-17 18:01:34 +08:00
hongjianli b9de322b07 refactor: define IMiniAuthService interface
Phase 1, Step 1.2.1: Extract authentication logic interface
- Define login() method signature
- Define logout() method signature
- Define verifyToken() method signature

Related to Phase 1 refactoring plan
2026-01-17 17:58:24 +08:00
hongjianli f3fe693204 test: add baseline tests for MartialMiniController
Phase 1, Step 1.1.1: Document current state before refactoring
- Controller has 1054 lines (God Class anti-pattern)
- Controller has 15 API endpoints
- Controller has 13 dependencies (Fat Controller)

Related to Phase 1 refactoring plan
2026-01-17 17:57:35 +08:00
hongjianli 8caed3ae8a refactor: Phase 5 - Clean up Orchestrator, remove deprecated methods
- Remove deprecated wrapper methods (generateTimeSlots, autoGroupParticipants, etc.)
- Update autoArrange() to call services directly
- Final class size: 288 lines (75% reduction from original 1148 lines)
- All 438 tests passing

Closes #11 - God Class refactoring complete
2026-01-17 00:43:00 +08:00
hongjianli fbde7b196d refactor: Phase 4 - Extract ScheduleQueryService from God Class
- Create ScheduleQueryService in schedule/query/
- Delegate getUnlockedCompetitions() and getScheduleResult() to new service
- Original class reduced from 502 to 342 lines (70% reduction from original 1148)
- All 438 tests passing

Related to Issue #11
2026-01-17 00:37:47 +08:00
hongjianli c0f3e4d971 refactor: Phase 3 - Extract VenueAllocationService from God Class
- Create VenueAllocationService in schedule/allocation/
- Modify MartialScheduleArrangeServiceImpl to use VenueAllocationService
- Remove validateCapacity, assignVenueAndTimeSlot methods and SlotInfo class
- Original class reduced from 692 to ~500 lines
- All 438 tests passing

Related to Issue #11
2026-01-17 00:15:31 +08:00
hongjianli 017264fd0f refactor: Phase 2 - Extract ParticipantGroupingService from God Class
- Create ScheduleGroupData model class in schedule/model/
- Create ParticipantGroupingService in schedule/grouping/
- Modify MartialScheduleArrangeServiceImpl to use ParticipantGroupingService
- Remove internal ScheduleGroupData class and grouping methods
- All 438 tests passing

Related to Issue #11
2026-01-17 00:03:10 +08:00
hongjianli 596e4a274d refactor: Phase 1 - Extract TimeSlotGenerator from God Class
- Create TimeSlot model class in schedule/model/
- Create TimeSlotGenerator component in schedule/generator/
- Modify MartialScheduleArrangeServiceImpl to use TimeSlotGenerator
- Remove internal TimeSlot class (now standalone)
- Add 11 unit tests for TimeSlotGenerator
- All 438 tests passing

Related to Issue #11
2026-01-16 23:51:55 +08:00
hongjianliandfactory-droid[bot] 776e9e289d Add comprehensive test suite (427 tests)
- Google Standard: MartialScoreServiceImplTest, MartialResultServiceImplTest, MartialSchedulePlanServiceImplTest
- Apple Standard: MartialScoreServiceAppleTest, MartialResultServiceAppleTest
- Alibaba Standard: MartialScoreServiceAliTest, MartialResultServiceAliTest
- OpenAI Standard: MartialScoreServiceOpenAITest, MartialResultServiceOpenAITest (Property-Based, Fuzzing, Invariant, Regression, Contract tests)
- Add TEST_PLAN.md documentation
- Update pom.xml with maven-surefire-plugin 3.2.5

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-16 19:17:17 +08:00
hongjianliandfactory-droid[bot] 4ec6ac68ca feat: docker build with maven cache and docker profile
- Add Dockerfile for in-container maven build (offline mode)
- Add application-docker.yml for docker environment
- Add logback-docker.xml for docker logging
- Update docker-compose.yml: use strong passwords, docker profile
- Add full database backup before rebuild
- Add .m2-repo to gitignore

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-16 17:12:26 +08:00
hongjianliandfactory-droid[bot] 8c8161adb3 fix: use strong password for MySQL in docker-compose
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-16 16:23:46 +08:00
hongjianliandfactory-droid[bot] 81e2cbc33b chore: update database backups and add V6 migration
- Clean old database backup files
- Add fresh backups (2026-01-16):
  - martial_full_20260116.sql (34 martial tables)
  - blade_full_20260116.sql (38 blade tables)
  - other_tables_full_20260116.sql (16 mt_* + flyway tables)
- Add V6 migration: add project_id to martial_deduction_item

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-16 16:15:53 +08:00
hongjianliandfactory-droid[bot] 03074c381b fix: 集体项目展开后显示队员列表
- 添加 MartialTeamMapper 和 MartialTeam 依赖
- 修改查询逻辑:通过 team_name 关联 martial_team 表
- 正确查询 martial_team_member 获取队员信息

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-16 13:46:36 +08:00
hongjianliandfactory-droid[bot] b95c038971 fix: export preview missing athleteName and timeSlot data
- JOIN martial_athlete table to get player names
- Calculate timeSlot from time_slot_index (0=08:30, 1=13:30, 2=18:30)
- Use COALESCE to fallback to athlete table when participant name is null

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-16 12:44:05 +08:00
hongjianli af513ce83a Revert "添加estimatedDuration计算逻辑和调试日志"
This reverts commit 4debc07111ecd57cc8282f08618c734467cd8860.
2026-01-16 11:53:56 +08:00
hongjianliandfactory-droid[bot] 33819a362d 添加estimatedDuration计算逻辑和调试日志
在generateInitialScheduleResult方法中添加estimatedDuration计算

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-16 11:53:56 +08:00
hongjianliandfactory-droid[bot] 32bde3ae53 fix: 调度页面状态列从后端获取真实状态值
- 在CompetitionGroupDTO中添加status字段(0-未开始,1-进行中,2-已完成)
- 在MartialScheduleServiceImpl中添加calculateGroupStatus方法计算分组状态
- 状态根据参赛人员签到情况自动计算

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-01-16 11:53:56 +08:00
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] 8f588d1214 chore: add database backup with test data (30 athletes + 5 teams)
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] 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] 15837dff9d docs: 更新建表语句
1. martial_schedule_detail添加time_slot_index字段
2. martial_schedule_participant添加check_in_status、schedule_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] 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
hongjianli 6db9a1e51d fix(schedule): 保存草稿时设置time_period默认值 2025-12-30 12:06:31 +08:00
hongjianli 0539152dbb fix(schedule): 保存草稿时设置默认日期,避免schedule_date为空导致插入失败 2025-12-30 11:53:34 +08:00
hongjianli c7058b8b07 feat(schedule): 无编排数据时自动从项目和选手表生成初始分组
- 修改 getScheduleResult 方法,当没有编排数据时调用 generateInitialScheduleResult
- 新增 generateInitialScheduleResult 方法,从项目和选手表生成初始分组
- CompetitionGroupDTO 添加 projectId 字段
- ParticipantDTO 添加 teamName 字段
- 用户进入编排页面可直接看到选手数据,无需先执行自动编排
2025-12-30 11:10:01 +08:00
hongjianli 16b55adf81 feat(schedule): 添加赛程配置API,支持动态时间段配置
- 添加 GET /martial/schedule/config API 暴露 ScheduleConfig
- 返回 morningStartTime, afternoonStartTime 等配置
- 更新 docker-compose.yml 使用 Dockerfile.quick
2025-12-30 10:51:04 +08:00
hongjianli 0b5fc9fb71 feat: improve schedule auto-arrange functionality
- Add ScheduleConfig for configurable schedule parameters
- Add updateParticipantCheckInStatus API for exception status persistence
- Use configurable thresholds for group splitting and capacity warning
- Add @Slf4j to MartialScheduleServiceImpl
2025-12-29 15:07:52 +08:00
hongjianli 86e4580e5d feat: add multi-stage Dockerfile for full build with martial-tool
- Add Dockerfile.fullbuild: multi-stage build that compiles martial-tool
- Rename Dockerfile to Dockerfile.quick for quick builds (pre-built jar)
- Update docker-compose.yml to use parent directory context
- Update README with new deployment instructions
2025-12-29 14:34:54 +08:00
hongjianli 47d0b70a9c docs: 更新README,简化内容并更新域名配置 2025-12-29 14:17:09 +08:00
hongjianli 105e457f7c docs: README添加数据库迁移文档链接 2025-12-29 14:11:21 +08:00
hongjianli d583bdc5c8 feat: 集成Flyway数据库迁移工具
- 添加Flyway依赖到pom.xml
- 配置application.yml启用Flyway
- 创建迁移脚本目录db/migration
- 添加V1基线脚本和V2项目字段迁移脚本
- 添加DATABASE_MIGRATION.md使用文档
2025-12-29 14:07:27 +08:00
hongjianli 07845f3a4f fix: 同步martial_project表结构,添加event_type和报名时间字段 2025-12-29 13:53:23 +08:00
hongjianli ec2382b447 feat: 添加项目报名开始时间和结束时间字段 2025-12-29 12:04:36 +08:00
hongjianliandfactory-droid[bot] bcba649b02 裁判邀请列表添加负责场地字段
- MartialJudgeInviteVO: 添加venueName字段
- MartialJudgeInviteMapper.xml: 关联查询场地名称

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-12-29 10:32:28 +08:00
hongjianli a19baf3907 feat: 添加项目类型(eventType)字段支持
- 在MartialProject实体类中添加eventType字段
- 在MartialProjectController中添加eventType查询支持
- 项目类型: 1-套路, 2-散打, 3-器械, 4-对练
2025-12-28 19:02:44 +08:00
hongjianliandfactory-droid[bot] 301bb7a227 feat: 项目列表支持模糊查询
- 项目名称支持模糊查询
- 分组类别支持模糊查询
- 赛事ID和参赛类型精确匹配
- 添加排序(按sort_order升序,create_time降序)

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-12-28 17:20:10 +08:00
hongjianliandfactory-droid[bot] fdd346b27f fix: default venue_id to first venue when null or invalid
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-12-28 16:20:11 +08:00
hongjianliandfactory-droid[bot] 1d5ac896dd feat: 添加已确认成绩列表API
- 新增 /mini/general/confirmed 接口
- MartialResultServiceImpl 添加 getConfirmedGeneralList 方法
- 支持总裁页面同时显示待确认和已确认成绩

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-12-28 16:09:41 +08:00
hongjianliandfactory-droid[bot] aab66f79fe feat: 添加三级裁判评分系统(裁判员→主裁判→总裁)
- 新增总裁(裁判长)角色支持,referee_type=3
- MartialResult实体添加主裁判/总裁确认字段和score_status状态
- MartialJudgeInvite实体添加角色常量和判断方法
- MartialMiniController添加三级确认API和登录角色判断
- MartialResultServiceImpl实现三级确认业务逻辑
- MartialScoreServiceImpl主裁判确认时同步martial_result表

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-12-28 15:49:11 +08:00
hongjianli 491c8db26c chore: 添加 minio_data 到 gitignore 2025-12-28 13:44:56 +08:00
hongjianliandClaude Opus 4.5 4a2071ddda refactor: 裁判角色名称修改 - 裁判长→主裁判, 普通裁判→裁判员
- 修改所有Java文件中的注释和Schema描述
- 更新MartialScoreServiceImpl中的评分修改记录名称

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 11:37:11 +08:00
hongjianliandClaude Opus 4.5 559e97b672 feat(mini): 裁判未指定项目时自动获取比赛所有项目
- login和refreshToken接口:如果invite.projects为空,自动获取该比赛的所有项目
- 新增getAllProjectsByCompetition方法查询比赛所有项目
- 支持裁判负责整个场地所有项目的需求

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 11:11:29 +08:00
hongjianliandClaude Opus 4.5 35a5369e81 feat: 批量导入裁判时根据refereeType自动设置角色
- batchGenerateInviteCode方法查询裁判的refereeType
- refereeType=1 自动设置为chief_judge(裁判长)
- 其他情况设置为judge(普通裁判)

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 16:04:46 +08:00
hongjianliandClaude Opus 4.5 dca5e5050f fix: 修复批量导入裁判时venueId和projects参数丢失问题
- BatchGenerateInviteDTO添加venueId和projects字段
- batchGenerateInviteCode方法传递venueId和projects给generateDto
- MartialMiniController添加competitionId参数过滤选手
- 新增RegistrationSubmitDTO

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 15:44:29 +08:00
hongjianli 67908a4dd0 Merge branch 'main' of git.waypeak.work:martial/martial-master 2025-12-26 10:32:03 +08:00
hongjianli 0c9322c510 fix bugs 2025-12-26 10:31:41 +08:00
hongjianliandClaude Opus 4.5 7c1b9de6b4 fix: 修复登录和评分查询的场地ID问题
1. 登录API使用martial_venue表替代mt_venue表查询场地信息
2. 评分查询时过滤无效的venueId(null或<=0)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 20:28:33 +08:00
hongjianli 284ebd2e73 fix: 修复裁判评分列表数据不一致问题
- MartialMiniController: getAthletes方法添加venueId过滤
- MiniScoreModifyDTO: 添加venueId字段
- MartialScoreServiceImpl: modifyScoreByAdmin方法设置venueId

问题原因:
1. 后端查询评分记录时缺少场地过滤
2. 裁判长修改评分时未设置venue_id
导致不同场地的裁判看到混乱的数据
2025-12-25 10:55:19 +08:00
hongjianliandClaude Opus 4.5 e7b8a1c59d fix: optimize schedule query and add scheduleDate field
- Add scheduleDate field to ScheduleGroupDetailVO
- Fix schedule date format in mapper XML
- Optimize schedule service implementation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 17:01:54 +08:00