diff --git a/backend-java/src/main/java/com/competition/common/config/ReviewTablesSchemaRepair.java b/backend-java/src/main/java/com/competition/common/config/ReviewTablesSchemaRepair.java deleted file mode 100644 index a307a62..0000000 --- a/backend-java/src/main/java/com/competition/common/config/ReviewTablesSchemaRepair.java +++ /dev/null @@ -1,157 +0,0 @@ -package com.competition.common.config; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Component; - -/** - * 评审模块表结构自动修复: - * 启动时检测评审相关表是否存在,若不存在则自动创建。 - * 兜底策略,确保 Flyway 未执行时系统仍可正常工作。 - */ -@Slf4j -@Component -@RequiredArgsConstructor -public class ReviewTablesSchemaRepair implements ApplicationRunner { - - private final JdbcTemplate jdbcTemplate; - - @Override - public void run(ApplicationArguments args) { - createIfNotExists("t_biz_contest_judge", """ - CREATE TABLE IF NOT EXISTS t_biz_contest_judge ( - id BIGINT NOT NULL AUTO_INCREMENT, - contest_id BIGINT NOT NULL COMMENT '赛事ID', - judge_id BIGINT NOT NULL COMMENT '评委用户ID', - specialty VARCHAR(100) DEFAULT NULL COMMENT '专业领域', - weight DECIMAL(3,2) DEFAULT 1.00 COMMENT '评委权重', - description VARCHAR(500) DEFAULT NULL COMMENT '评委描述', - create_by VARCHAR(64) DEFAULT NULL, - update_by VARCHAR(64) DEFAULT NULL, - deleted TINYINT NOT NULL DEFAULT 0, - creator INT DEFAULT NULL, - modifier INT DEFAULT NULL, - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - valid_state TINYINT NOT NULL DEFAULT 1, - PRIMARY KEY (id), - INDEX idx_contest_id (contest_id), - INDEX idx_judge_id (judge_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='赛事评委表' - """); - - createIfNotExists("t_biz_contest_review_rule", """ - CREATE TABLE IF NOT EXISTS t_biz_contest_review_rule ( - id BIGINT NOT NULL AUTO_INCREMENT, - tenant_id BIGINT DEFAULT NULL COMMENT '租户ID', - rule_name VARCHAR(200) NOT NULL COMMENT '规则名称', - rule_description VARCHAR(500) DEFAULT NULL COMMENT '规则描述', - judge_count INT NOT NULL DEFAULT 3 COMMENT '评委数量', - dimensions JSON DEFAULT NULL COMMENT '评分维度', - calculation_rule VARCHAR(50) NOT NULL DEFAULT 'average' COMMENT '计算规则', - create_by VARCHAR(64) DEFAULT NULL, - update_by VARCHAR(64) DEFAULT NULL, - deleted TINYINT NOT NULL DEFAULT 0, - creator INT DEFAULT NULL, - modifier INT DEFAULT NULL, - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - valid_state TINYINT NOT NULL DEFAULT 1, - PRIMARY KEY (id), - INDEX idx_tenant_id (tenant_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='评审规则表' - """); - - createIfNotExists("t_biz_contest_work_judge_assignment", """ - CREATE TABLE IF NOT EXISTS t_biz_contest_work_judge_assignment ( - id BIGINT NOT NULL AUTO_INCREMENT, - contest_id BIGINT NOT NULL COMMENT '赛事ID', - work_id BIGINT NOT NULL COMMENT '作品ID', - judge_id BIGINT NOT NULL COMMENT '评委用户ID', - assignment_time DATETIME DEFAULT NULL COMMENT '分配时间', - status VARCHAR(20) NOT NULL DEFAULT 'assigned' COMMENT '状态', - creator INT DEFAULT NULL, - modifier INT DEFAULT NULL, - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (id), - INDEX idx_contest_work (contest_id, work_id), - INDEX idx_judge_status (judge_id, status), - UNIQUE INDEX uk_contest_work_judge (contest_id, work_id, judge_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='作品评委分配表' - """); - - createIfNotExists("t_biz_contest_work_score", """ - CREATE TABLE IF NOT EXISTS t_biz_contest_work_score ( - id BIGINT NOT NULL AUTO_INCREMENT, - tenant_id BIGINT DEFAULT NULL COMMENT '租户ID', - contest_id BIGINT NOT NULL COMMENT '赛事ID', - work_id BIGINT NOT NULL COMMENT '作品ID', - assignment_id BIGINT DEFAULT NULL COMMENT '分配记录ID', - judge_id BIGINT NOT NULL COMMENT '评委用户ID', - judge_name VARCHAR(100) DEFAULT NULL COMMENT '评委姓名', - dimension_scores JSON DEFAULT NULL COMMENT '维度评分', - total_score DECIMAL(10,2) DEFAULT NULL COMMENT '总分', - comments TEXT DEFAULT NULL COMMENT '评语', - score_time DATETIME DEFAULT NULL COMMENT '评分时间', - create_by VARCHAR(64) DEFAULT NULL, - update_by VARCHAR(64) DEFAULT NULL, - deleted TINYINT NOT NULL DEFAULT 0, - creator INT DEFAULT NULL, - modifier INT DEFAULT NULL, - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - valid_state TINYINT NOT NULL DEFAULT 1, - PRIMARY KEY (id), - INDEX idx_work_id (work_id), - INDEX idx_contest_id (contest_id), - INDEX idx_judge_id (judge_id), - INDEX idx_assignment_id (assignment_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='作品评分表' - """); - - createIfNotExists("t_biz_preset_comment", """ - CREATE TABLE IF NOT EXISTS t_biz_preset_comment ( - id BIGINT NOT NULL AUTO_INCREMENT, - contest_id BIGINT DEFAULT NULL COMMENT '赛事ID', - judge_id BIGINT DEFAULT NULL COMMENT '评委ID', - content VARCHAR(1000) NOT NULL COMMENT '评语文本', - category VARCHAR(50) DEFAULT NULL COMMENT '评语分类', - score DECIMAL(10,2) DEFAULT NULL COMMENT '关联分数', - sort_order INT DEFAULT 0 COMMENT '排序', - use_count INT NOT NULL DEFAULT 0 COMMENT '使用次数', - create_by VARCHAR(64) DEFAULT NULL, - update_by VARCHAR(64) DEFAULT NULL, - deleted TINYINT NOT NULL DEFAULT 0, - creator INT DEFAULT NULL, - modifier INT DEFAULT NULL, - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - valid_state TINYINT NOT NULL DEFAULT 1, - PRIMARY KEY (id), - INDEX idx_contest_id (contest_id), - INDEX idx_judge_id (judge_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预设评语表' - """); - } - - private void createIfNotExists(String tableName, String createSql) { - try { - Integer cnt = jdbcTemplate.queryForObject( - "SELECT COUNT(*) FROM information_schema.tables " + - "WHERE table_schema = DATABASE() AND table_name = '" + tableName + "'", - Integer.class); - - if (cnt == null || cnt == 0) { - log.warn("表 `{}` 不存在,自动创建...", tableName); - jdbcTemplate.execute(createSql); - log.info("表 `{}` 创建成功", tableName); - } - } catch (Exception e) { - log.warn("表 `{}` 创建失败:{}", tableName, e.getMessage()); - } - } -} diff --git a/backend-java/src/main/resources/db/migration/V3__create_review_tables.sql b/backend-java/src/main/resources/db/migration/V3__create_review_tables.sql deleted file mode 100644 index 9e4cbd1..0000000 --- a/backend-java/src/main/resources/db/migration/V3__create_review_tables.sql +++ /dev/null @@ -1,127 +0,0 @@ --- 评审模块建表脚本 --- 执行时间:2026-04-07 - --- ============================================================ --- 1. 评委表 --- ============================================================ -CREATE TABLE IF NOT EXISTS t_biz_contest_judge ( - id BIGINT NOT NULL AUTO_INCREMENT, - contest_id BIGINT NOT NULL COMMENT '赛事ID', - judge_id BIGINT NOT NULL COMMENT '评委用户ID', - specialty VARCHAR(100) DEFAULT NULL COMMENT '专业领域', - weight DECIMAL(3,2) DEFAULT 1.00 COMMENT '评委权重 0-1', - description VARCHAR(500) DEFAULT NULL COMMENT '评委描述', - -- BaseEntity 审计字段 - create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人账号', - update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人账号', - deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除', - creator INT DEFAULT NULL COMMENT '创建人ID', - modifier INT DEFAULT NULL COMMENT '修改人ID', - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - valid_state TINYINT NOT NULL DEFAULT 1 COMMENT '有效状态:1-有效,2-失效', - PRIMARY KEY (id), - INDEX idx_contest_id (contest_id), - INDEX idx_judge_id (judge_id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='赛事评委表'; - --- ============================================================ --- 2. 评审规则表 --- ============================================================ -CREATE TABLE IF NOT EXISTS t_biz_contest_review_rule ( - id BIGINT NOT NULL AUTO_INCREMENT, - tenant_id BIGINT DEFAULT NULL COMMENT '租户ID', - rule_name VARCHAR(200) NOT NULL COMMENT '规则名称', - rule_description VARCHAR(500) DEFAULT NULL COMMENT '规则描述', - judge_count INT NOT NULL DEFAULT 3 COMMENT '评委数量', - dimensions JSON DEFAULT NULL COMMENT '评分维度 JSON [{name,percentage,description}]', - calculation_rule VARCHAR(50) NOT NULL DEFAULT 'average' COMMENT '计算规则:average/remove_max_min/remove_min/max/weighted', - -- BaseEntity 审计字段 - create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人账号', - update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人账号', - deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除', - creator INT DEFAULT NULL COMMENT '创建人ID', - modifier INT DEFAULT NULL COMMENT '修改人ID', - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - valid_state TINYINT NOT NULL DEFAULT 1 COMMENT '有效状态:1-有效,2-失效', - PRIMARY KEY (id), - INDEX idx_tenant_id (tenant_id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='评审规则表'; - --- ============================================================ --- 3. 作品评委分配表 --- ============================================================ -CREATE TABLE IF NOT EXISTS t_biz_contest_work_judge_assignment ( - id BIGINT NOT NULL AUTO_INCREMENT, - contest_id BIGINT NOT NULL COMMENT '赛事ID', - work_id BIGINT NOT NULL COMMENT '作品ID', - judge_id BIGINT NOT NULL COMMENT '评委用户ID', - assignment_time DATETIME DEFAULT NULL COMMENT '分配时间', - status VARCHAR(20) NOT NULL DEFAULT 'assigned' COMMENT '状态:assigned/reviewing/completed', - creator INT DEFAULT NULL COMMENT '创建人ID', - modifier INT DEFAULT NULL COMMENT '修改人ID', - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - PRIMARY KEY (id), - INDEX idx_contest_work (contest_id, work_id), - INDEX idx_judge_status (judge_id, status), - UNIQUE INDEX uk_contest_work_judge (contest_id, work_id, judge_id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='作品评委分配表'; - --- ============================================================ --- 4. 作品评分表 --- ============================================================ -CREATE TABLE IF NOT EXISTS t_biz_contest_work_score ( - id BIGINT NOT NULL AUTO_INCREMENT, - tenant_id BIGINT DEFAULT NULL COMMENT '租户ID', - contest_id BIGINT NOT NULL COMMENT '赛事ID', - work_id BIGINT NOT NULL COMMENT '作品ID', - assignment_id BIGINT DEFAULT NULL COMMENT '分配记录ID', - judge_id BIGINT NOT NULL COMMENT '评委用户ID', - judge_name VARCHAR(100) DEFAULT NULL COMMENT '评委姓名', - dimension_scores JSON DEFAULT NULL COMMENT '维度评分 JSON [{dimension,score}]', - total_score DECIMAL(10,2) DEFAULT NULL COMMENT '总分', - comments TEXT DEFAULT NULL COMMENT '评语', - score_time DATETIME DEFAULT NULL COMMENT '评分时间', - -- BaseEntity 审计字段 - create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人账号', - update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人账号', - deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除', - creator INT DEFAULT NULL COMMENT '创建人ID', - modifier INT DEFAULT NULL COMMENT '修改人ID', - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - valid_state TINYINT NOT NULL DEFAULT 1 COMMENT '有效状态:1-有效,2-失效', - PRIMARY KEY (id), - INDEX idx_work_id (work_id), - INDEX idx_contest_id (contest_id), - INDEX idx_judge_id (judge_id), - INDEX idx_assignment_id (assignment_id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='作品评分表'; - --- ============================================================ --- 5. 预设评语表 --- ============================================================ -CREATE TABLE IF NOT EXISTS t_biz_preset_comment ( - id BIGINT NOT NULL AUTO_INCREMENT, - contest_id BIGINT DEFAULT NULL COMMENT '赛事ID(null 表示全局)', - judge_id BIGINT DEFAULT NULL COMMENT '评委ID(null 表示通用)', - content VARCHAR(1000) NOT NULL COMMENT '评语文本', - category VARCHAR(50) DEFAULT NULL COMMENT '评语分类', - score DECIMAL(10,2) DEFAULT NULL COMMENT '关联分数', - sort_order INT DEFAULT 0 COMMENT '排序', - use_count INT NOT NULL DEFAULT 0 COMMENT '使用次数', - -- BaseEntity 审计字段 - create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人账号', - update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人账号', - deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除', - creator INT DEFAULT NULL COMMENT '创建人ID', - modifier INT DEFAULT NULL COMMENT '修改人ID', - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - valid_state TINYINT NOT NULL DEFAULT 1 COMMENT '有效状态:1-有效,2-失效', - PRIMARY KEY (id), - INDEX idx_contest_id (contest_id), - INDEX idx_judge_id (judge_id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预设评语表';