feat: 实现成绩计算引擎、比赛日流程和导出打印功能
All checks were successful
continuous-integration/drone/push Build is passing

本次提交完成了武术比赛系统的核心功能模块,包括:

## 1. 成绩计算引擎 (Tasks 1.1-1.8) 
- 实现多裁判评分平均分计算(去最高/最低分)
- 支持难度系数应用
- 自动排名算法(支持并列)
- 奖牌自动分配(金银铜)
- 成绩复核机制
- 成绩发布/撤销审批流程

## 2. 比赛日流程功能 (Tasks 2.1-2.6) 
- 运动员签到/检录系统
- 评分有效性验证(范围检查0-10分)
- 异常分数警告机制(偏差>2.0)
- 异常情况记录和处理
- 检录长角色权限管理
- 比赛状态流转管理

## 3. 导出打印功能 (Tasks 3.1-3.4) 
- 成绩单Excel导出(EasyExcel)
- 运动员名单Excel导出
- 赛程表Excel导出
- 证书生成(HTML模板+数据接口)

## 4. 单元测试 
- MartialResultServiceTest: 10个测试用例
- MartialScoreServiceTest: 10个测试用例
- MartialAthleteServiceTest: 14个测试用例
- 测试通过率: 100% (34/34)

## 技术实现
- 使用BigDecimal进行精度计算(保留3位小数)
- EasyExcel实现Excel导出
- HTML证书模板(支持浏览器打印为PDF)
- JUnit 5 + Mockito单元测试框架

## 新增文件
- 3个新控制器:MartialExportController, MartialExceptionEventController, MartialJudgeProjectController
- 3个Excel VO类:ResultExportExcel, AthleteExportExcel, ScheduleExportExcel
- CertificateVO证书数据对象
- 证书HTML模板
- 3个测试类(676行测试代码)
- 任务文档(docs/tasks/)
- 数据库迁移脚本

## 项目进度
已完成: 64% (18/28 任务)
-  成绩计算引擎: 100%
-  比赛日流程: 100%
-  导出打印功能: 80%

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
n72595987@gmail.com
2025-11-30 17:11:12 +08:00
parent e35168d81e
commit 21c133f9c9
41 changed files with 5102 additions and 2 deletions

View File

@@ -0,0 +1,13 @@
-- 为成绩计算引擎添加难度系数字段
-- 日期: 2025-11-30
-- 功能: 支持成绩计算时应用难度系数
-- 添加难度系数字段到 martial_project 表
ALTER TABLE martial_project
ADD COLUMN difficulty_coefficient DECIMAL(5,2) DEFAULT 1.00 COMMENT '难度系数(默认1.00)';
-- 更新说明:
-- 1. 该字段用于成绩计算引擎中的 Task 1.3 (应用难度系数)
-- 2. 默认值为 1.00,表示不调整分数
-- 3. 可设置为 > 1.00 (加分) 或 < 1.00 (减分)
-- 4. 精度为小数点后2位支持 0.01 - 999.99 范围

View File

@@ -0,0 +1,30 @@
-- 创建异常事件表
-- 日期: 2025-11-30
-- 功能: 记录比赛日异常情况
CREATE TABLE IF NOT EXISTS martial_exception_event (
id BIGINT PRIMARY KEY COMMENT 'ID',
tenant_id VARCHAR(12) DEFAULT '000000' COMMENT '租户ID',
competition_id BIGINT NOT NULL COMMENT '赛事ID',
schedule_id BIGINT COMMENT '赛程ID',
athlete_id BIGINT COMMENT '运动员ID',
event_type INT NOT NULL COMMENT '事件类型 1-器械故障 2-受伤 3-评分争议 4-其他',
event_description VARCHAR(500) COMMENT '事件描述',
handler_name VARCHAR(50) COMMENT '处理人',
handle_result VARCHAR(500) COMMENT '处理结果',
handle_time DATETIME COMMENT '处理时间',
status INT DEFAULT 0 COMMENT '状态 0-待处理 1-已处理',
create_user BIGINT COMMENT '创建人',
create_dept BIGINT COMMENT '创建部门',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_user BIGINT COMMENT '更新人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
is_deleted INT DEFAULT 0 COMMENT '是否已删除 0-未删除 1-已删除'
) COMMENT '异常事件表';
-- 创建索引
CREATE INDEX idx_competition_id ON martial_exception_event(competition_id);
CREATE INDEX idx_schedule_id ON martial_exception_event(schedule_id);
CREATE INDEX idx_athlete_id ON martial_exception_event(athlete_id);
CREATE INDEX idx_status ON martial_exception_event(status);
CREATE INDEX idx_event_type ON martial_exception_event(event_type);

View File

@@ -0,0 +1,25 @@
-- 创建裁判-项目关联表
-- 日期: 2025-11-30
-- 功能: 管理裁判对项目的评分权限
CREATE TABLE IF NOT EXISTS martial_judge_project (
id BIGINT PRIMARY KEY COMMENT 'ID',
tenant_id VARCHAR(12) DEFAULT '000000' COMMENT '租户ID',
competition_id BIGINT NOT NULL COMMENT '赛事ID',
judge_id BIGINT NOT NULL COMMENT '裁判ID',
project_id BIGINT NOT NULL COMMENT '项目ID',
assign_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '分配时间',
status INT DEFAULT 1 COMMENT '状态 0-禁用 1-启用',
create_user BIGINT COMMENT '创建人',
create_dept BIGINT COMMENT '创建部门',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_user BIGINT COMMENT '更新人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
is_deleted INT DEFAULT 0 COMMENT '是否已删除 0-未删除 1-已删除',
UNIQUE KEY uk_judge_project (competition_id, judge_id, project_id, is_deleted)
) COMMENT '裁判项目关联表';
-- 创建索引
CREATE INDEX idx_judge_id ON martial_judge_project(judge_id);
CREATE INDEX idx_project_id ON martial_judge_project(project_id);
CREATE INDEX idx_competition_id ON martial_judge_project(competition_id);