revert: 撤销评审表相关两次提交,需按设计文档规范重新实现

Reverts:
- eb40939 fix: 添加评审表自动创建兜底机制
- 015f871 feat: 创建评审模块数据库表

原因:数据库变更应使用Flyway迁移脚本规范实现,需对齐设计文档
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
zhonghua 2026-04-07 14:42:58 +08:00
parent eb409398f3
commit 2b83c9c78a
2 changed files with 0 additions and 284 deletions

View File

@ -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());
}
}
}

View File

@ -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 '赛事IDnull 表示全局)',
judge_id BIGINT DEFAULT NULL COMMENT '评委IDnull 表示通用)',
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='预设评语表';