”学生考核更新.txt

This commit is contained in:
weizhong committed 2025-08-18 12:03:44 +08:00
1 parent a2a0f54e84
commit 7c8cc72095
109 files changed
+21193 -18

No files matched your search

@@ -0,0 +1,332 @@
-- =====================================================
-- 学生考核管理系统违纪处分体系升级脚本
-- 版本: V2.0.0
-- 创建时间: 2025-01-27
-- 描述: 基于标准化违纪处分等级,升级考核计划管理和指标体系
-- =====================================================
-- 1. 修改考核计划表,新增配置字段
-- =====================================================
ALTER TABLE xskh_assessment_plan ADD COLUMN base_score DECIMAL(5,2) DEFAULT 100.00 COMMENT '基础分数';
ALTER TABLE xskh_assessment_plan ADD COLUMN pass_score DECIMAL(5,2) DEFAULT 60.00 COMMENT '及格分数';
ALTER TABLE xskh_assessment_plan ADD COLUMN excellent_score DECIMAL(5,2) DEFAULT 85.00 COMMENT '优秀分数';
ALTER TABLE xskh_assessment_plan ADD COLUMN auto_deduct_enabled CHAR(1) DEFAULT '1' COMMENT '是否启用自动扣分(0否1是)';
ALTER TABLE xskh_assessment_plan ADD COLUMN bonus_enabled CHAR(1) DEFAULT '1' COMMENT '是否启用加分项(0否1是)';
ALTER TABLE xskh_assessment_plan ADD COLUMN discipline_weight DECIMAL(3,2) DEFAULT 1.00 COMMENT '违纪扣分权重';
ALTER TABLE xskh_assessment_plan ADD COLUMN bonus_weight DECIMAL(3,2) DEFAULT 1.00 COMMENT '加分项权重';
-- 2. 修改处分类型表,新增扣分范围字段
-- =====================================================
ALTER TABLE xskh_punishment_type ADD COLUMN score_deduction_min DECIMAL(5,2) DEFAULT 0.00 COMMENT '最小扣分';
ALTER TABLE xskh_punishment_type ADD COLUMN score_deduction_max DECIMAL(5,2) DEFAULT 0.00 COMMENT '最大扣分';
ALTER TABLE xskh_punishment_type ADD COLUMN archive_years INT DEFAULT 1 COMMENT '记入档案年限';
ALTER TABLE xskh_punishment_type ADD COLUMN auto_match_enabled CHAR(1) DEFAULT '1' COMMENT '是否启用自动匹配(0否1是)';
-- 3. 创建违纪扣分计算表
-- =====================================================
CREATE TABLE xskh_discipline_score_calculation (
id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
plan_id BIGINT(20) NOT NULL COMMENT '考核计划ID',
student_id BIGINT(20) NOT NULL COMMENT '学生ID',
student_no VARCHAR(50) NOT NULL COMMENT '学号',
student_name VARCHAR(100) NOT NULL COMMENT '学生姓名',
total_deduction DECIMAL(5,2) DEFAULT 0.00 COMMENT '总扣分',
warning_count INT DEFAULT 0 COMMENT '警告次数',
serious_warning_count INT DEFAULT 0 COMMENT '严重警告次数',
demerit_count INT DEFAULT 0 COMMENT '记过次数',
probation_count INT DEFAULT 0 COMMENT '留校察看次数',
expulsion_count INT DEFAULT 0 COMMENT '开除学籍次数',
calculation_rules TEXT COMMENT '计算规则JSON',
last_update_time DATETIME COMMENT '最后更新时间',
create_by BIGINT(20) COMMENT '创建者',
create_time DATETIME COMMENT '创建时间',
update_by BIGINT(20) COMMENT '更新者',
update_time DATETIME COMMENT '更新时间',
deleted TINYINT(1) DEFAULT 0 COMMENT '删除标志',
tenant_id BIGINT(20) COMMENT '租户ID',
PRIMARY KEY (id),
INDEX idx_plan_student (plan_id, student_id),
INDEX idx_student_no (student_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='违纪扣分计算表';
-- 4. 创建违纪计分规则表
-- =====================================================
CREATE TABLE xskh_discipline_score_rule (
id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
rule_name VARCHAR(100) NOT NULL COMMENT '规则名称',
rule_code VARCHAR(50) NOT NULL COMMENT '规则编码',
rule_type CHAR(1) DEFAULT '1' COMMENT '规则类型(1累积2重复3时间衰减)',
punishment_level CHAR(1) COMMENT '处分等级(1警告2严重警告3记过4留校察看5开除)',
min_score DECIMAL(5,2) DEFAULT 0.00 COMMENT '最小扣分',
max_score DECIMAL(5,2) DEFAULT 0.00 COMMENT '最大扣分',
weight_factor DECIMAL(3,2) DEFAULT 1.00 COMMENT '权重系数',
rule_config TEXT COMMENT '规则配置JSON',
status CHAR(1) DEFAULT '1' COMMENT '状态(0停用1启用)',
create_by BIGINT(20) COMMENT '创建者',
create_time DATETIME COMMENT '创建时间',
update_by BIGINT(20) COMMENT '更新者',
update_time DATETIME COMMENT '更新时间',
deleted TINYINT(1) DEFAULT 0 COMMENT '删除标志',
tenant_id BIGINT(20) COMMENT '租户ID',
PRIMARY KEY (id),
UNIQUE KEY uk_rule_code (rule_code),
INDEX idx_rule_type (rule_type),
INDEX idx_punishment_level (punishment_level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='违纪计分规则表';
-- 5. 清空并重新插入标准化处分类型数据
-- =====================================================
DELETE FROM xskh_punishment_type WHERE deleted = 0;
INSERT INTO xskh_punishment_type (
type_code, type_name, type_desc, level, score_deduction_min, score_deduction_max,
archive_years, valid_days, can_appeal, appeal_days, auto_match_enabled, status,
create_by, create_time, update_by, update_time, deleted, tenant_id
) VALUES
('WARNING', '警告', '累计旷课6-10课时;宿舍使用违规电器(首次);课堂辱骂教师或扰乱秩序;抄袭作业/实验报告(首次)',
'1', 3.0, 5.0, 1, 365, '1', 15, '1', '1', 1, NOW(), 1, NOW(), 0, 1),
('SERIOUS_WARNING', '严重警告', '考试作弊(未遂);伪造请假条/证明文件;网络传播不实信息(未造成重大影响);打架斗殴(未致伤)',
'2', 6.0, 8.0, 2, 730, '1', 15, '1', '1', 1, NOW(), 1, NOW(), 0, 1),
('DEMERIT', '记过', '考试作弊(已实施);恶意破坏教学/实验设备(损失<500元);组织赌博或饮酒滋事;夜不归宿累计≥5次',
'3', 9.0, 12.0, 3, 1095, '1', 15, '1', '1', 1, NOW(), 1, NOW(), 0, 1),
('PROBATION', '留校察看', '重复考试作弊或团伙作弊;打架斗殴致轻伤;传播违法信息(如反动、淫秽内容);盗窃公私财物(金额<1000元)',
'4', 13.0, 20.0, 99, 9999, '1', 30, '1', '1', 1, NOW(), 1, NOW(), 0, 1),
('EXPULSION', '开除学籍', '违反刑法或治安管理法被追究刑事责任;学术造假(如代写论文、买卖论文);群体斗殴造成重伤或恶劣影响;吸毒、贩毒等严重违法行为',
'5', 100.0, 100.0, 99, 9999, '0', 0, '1', '1', 1, NOW(), 1, NOW(), 0, 1);
-- 6. 清空并重新插入标准化违纪类型数据
-- =====================================================
DELETE FROM xskh_discipline_type WHERE deleted = 0;
INSERT INTO xskh_discipline_type (
type_code, type_name, type_desc, parent_id, severity, score_deduction, status,
create_by, create_time, update_by, update_time, deleted, tenant_id
) VALUES
-- 警告级别违纪
('ABSENCE_6_10', '累计旷课6-10课时', '无故不参加规定的教学活动,累计6-10课时', 0, '2', 4.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('ILLEGAL_APPLIANCE_FIRST', '宿舍使用违规电器(首次)', '在宿舍使用大功率电器等违规用电设备', 0, '2', 3.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('CLASSROOM_MISCONDUCT', '课堂辱骂教师或扰乱秩序', '在课堂上辱骂教师或严重扰乱课堂秩序', 0, '2', 5.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('PLAGIARISM_FIRST', '抄袭作业/实验报告(首次)', '抄袭他人作业或实验报告,首次发现', 0, '2', 4.0, '1', 1, NOW(), 1, NOW(), 0, 1),
-- 严重警告级别违纪
('EXAM_CHEAT_ATTEMPT', '考试作弊(未遂)', '考试过程中企图作弊但未得逞', 0, '3', 7.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('FORGE_DOCUMENT', '伪造请假条/证明文件', '伪造各类请假条或证明文件', 0, '3', 6.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('SPREAD_FALSE_INFO', '网络传播不实信息', '在网络上传播不实信息,未造成重大影响', 0, '3', 8.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('FIGHT_NO_INJURY', '打架斗殴(未致伤)', '参与打架斗殴但未造成人员受伤', 0, '3', 7.0, '1', 1, NOW(), 1, NOW(), 0, 1),
-- 记过级别违纪
('EXAM_CHEAT_SUCCESS', '考试作弊(已实施)', '考试过程中实际进行作弊行为', 0, '4', 10.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('DAMAGE_EQUIPMENT', '恶意破坏教学/实验设备', '故意破坏教学或实验设备,损失500元以下', 0, '4', 12.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('GAMBLING_DRINKING', '组织赌博或饮酒滋事', '组织或参与赌博活动,或因饮酒引发事端', 0, '4', 9.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('NIGHT_OUT_5TIMES', '夜不归宿累计≥5次', '夜不归宿累计达到或超过5次', 0, '4', 11.0, '1', 1, NOW(), 1, NOW(), 0, 1),
-- 留校察看级别违纪
('REPEAT_EXAM_CHEAT', '重复考试作弊或团伙作弊', '多次考试作弊或组织团伙作弊', 0, '5', 15.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('FIGHT_INJURY', '打架斗殴致轻伤', '参与打架斗殴并造成他人轻伤', 0, '5', 18.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('SPREAD_ILLEGAL_INFO', '传播违法信息', '传播反动、淫秽等违法信息内容', 0, '5', 20.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('THEFT_UNDER_1000', '盗窃公私财物', '盗窃公私财物,金额1000元以下', 0, '5', 16.0, '1', 1, NOW(), 1, NOW(), 0, 1),
-- 开除学籍级别违纪
('CRIMINAL_OFFENSE', '违反刑法被追究刑事责任', '违反刑法或治安管理法被追究刑事责任', 0, '6', 100.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('ACADEMIC_FRAUD', '学术造假', '代写论文、买卖论文等学术造假行为', 0, '6', 100.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('SERIOUS_FIGHT', '群体斗殴造成重伤', '参与群体斗殴并造成重伤或恶劣影响', 0, '6', 100.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('DRUG_OFFENSE', '吸毒、贩毒等严重违法行为', '吸毒、贩毒等严重违法犯罪行为', 0, '6', 100.0, '1', 1, NOW(), 1, NOW(), 0, 1);
-- 7. 插入违纪计分规则基础数据
-- =====================================================
INSERT INTO xskh_discipline_score_rule (
rule_name, rule_code, rule_type, punishment_level, min_score, max_score, weight_factor,
rule_config, status, create_by, create_time, update_by, update_time, deleted, tenant_id
) VALUES
('警告处分计分规则', 'WARNING_SCORE', '1', '1', 3.0, 5.0, 1.0,
'{"description":"警告处分扣分规则","archiveYears":1,"appealAllowed":true}', '1', 1, NOW(), 1, NOW(), 0, 1),
('严重警告处分计分规则', 'SERIOUS_WARNING_SCORE', '1', '2', 6.0, 8.0, 1.0,
'{"description":"严重警告处分扣分规则","archiveYears":2,"appealAllowed":true}', '1', 1, NOW(), 1, NOW(), 0, 1),
('记过处分计分规则', 'DEMERIT_SCORE', '1', '3', 9.0, 12.0, 1.0,
'{"description":"记过处分扣分规则","archiveYears":3,"appealAllowed":true}', '1', 1, NOW(), 1, NOW(), 0, 1),
('留校察看处分计分规则', 'PROBATION_SCORE', '1', '4', 13.0, 20.0, 1.0,
'{"description":"留校察看处分扣分规则","archiveYears":99,"appealAllowed":true}', '1', 1, NOW(), 1, NOW(), 0, 1),
('开除学籍处分计分规则', 'EXPULSION_SCORE', '1', '5', 100.0, 100.0, 1.0,
'{"description":"开除学籍处分扣分规则","archiveYears":99,"appealAllowed":false}', '1', 1, NOW(), 1, NOW(), 0, 1),
('重复违纪加重规则', 'REPEAT_OFFENSE', '2', NULL, 0.0, 0.0, 1.5,
'{"description":"同类违纪重复加重50%","sameTypeFactor":1.5,"crossTypeFactor":1.2}', '1', 1, NOW(), 1, NOW(), 0, 1),
('时间衰减规则', 'TIME_DECAY', '3', NULL, 0.0, 0.0, 0.9,
'{"description":"违纪记录时间衰减规则","decayPeriod":365,"decayRate":0.1,"enabled":true}', '1', 1, NOW(), 1, NOW(), 0, 1);
-- 8. 插入德智体美劳五育指标体系基础数据
-- =====================================================
-- 清空现有指标数据
DELETE FROM xskh_assessment_indicator WHERE deleted = 0;
INSERT INTO xskh_assessment_indicator (
indicator_code, indicator_name, indicator_desc, indicator_type, weight, max_score, min_score,
status, create_by, create_time, update_by, update_time, deleted, tenant_id
) VALUES
-- 德育指标 (20%)
('MORAL_IDEOLOGY', '思想品德', '政治立场、道德品质评价', '1', 8.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('MORAL_BEHAVIOR', '行为规范', '遵纪守法、文明礼貌评价', '1', 7.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('MORAL_DISCIPLINE', '违纪记录', '违纪处分扣分项', '1', -15.0, 0.0, -100.0, '1', 1, NOW(), 1, NOW(), 0, 1),
-- 智育指标 (40%)
('INTELLECTUAL_GRADE', '学业成绩', '课程成绩、GPA评价', '2', 30.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('INTELLECTUAL_ATTITUDE', '学习态度', '出勤率、课堂表现评价', '2', 5.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('INTELLECTUAL_INNOVATION', '创新能力', '科研项目、学科竞赛评价', '2', 5.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
-- 体育指标 (15%)
('PHYSICAL_TEST', '体测成绩', '国家体质健康测试成绩', '3', 10.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('PHYSICAL_ACTIVITY', '体育活动', '体育比赛、运动会参与', '3', 3.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('PHYSICAL_HEALTH', '健康状况', '身体健康、心理健康状况', '3', 2.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
-- 美育指标 (10%)
('AESTHETIC_LITERACY', '艺术素养', '艺术课程、文艺活动参与', '4', 5.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('AESTHETIC_ABILITY', '审美能力', '美学认知、创作能力评价', '4', 3.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('AESTHETIC_CULTURE', '文化传承', '传统文化、非遗传承参与', '4', 2.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
-- 劳育指标 (15%)
('LABOR_PRACTICE', '劳动实践', '劳动课程、实践活动参与', '5', 8.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('LABOR_SERVICE', '社会服务', '志愿服务、社会实践活动', '5', 4.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1),
('LABOR_SKILL', '生活技能', '生活自理、劳动技能评价', '5', 3.0, 100.0, 0.0, '1', 1, NOW(), 1, NOW(), 0, 1);
-- 9. 更新考核方案,关联德智体美劳指标体系
-- =====================================================
-- 假设已有考核方案ID为1,更新为五育指标体系
INSERT INTO xskh_scheme_indicator (scheme_id, indicator_id, weight, status, create_by, create_time, update_by, update_time, deleted, tenant_id)
SELECT 1, id, weight, '1', 1, NOW(), 1, NOW(), 0, 1
FROM xskh_assessment_indicator
WHERE deleted = 0;
-- 10. 创建违纪类型与处分类型关联视图
-- =====================================================
CREATE OR REPLACE VIEW v_discipline_punishment_mapping AS
SELECT
dt.id as discipline_type_id,
dt.type_code as discipline_code,
dt.type_name as discipline_name,
dt.severity,
pt.id as punishment_type_id,
pt.type_code as punishment_code,
pt.type_name as punishment_name,
pt.level as punishment_level,
pt.score_deduction_min,
pt.score_deduction_max,
pt.archive_years,
CASE
WHEN dt.severity = '2' THEN 1 -- 轻微 -> 警告
WHEN dt.severity = '3' THEN 2 -- 一般 -> 严重警告
WHEN dt.severity = '4' THEN 3 -- 严重 -> 记过
WHEN dt.severity = '5' THEN 4 -- 特别严重 -> 留校察看
WHEN dt.severity = '6' THEN 5 -- 极严重 -> 开除学籍
ELSE 1
END as auto_match_level
FROM xskh_discipline_type dt
CROSS JOIN xskh_punishment_type pt
WHERE dt.deleted = 0 AND pt.deleted = 0
AND CASE
WHEN dt.severity = '2' THEN pt.level = '1'
WHEN dt.severity = '3' THEN pt.level = '2'
WHEN dt.severity = '4' THEN pt.level = '3'
WHEN dt.severity = '5' THEN pt.level = '4'
WHEN dt.severity = '6' THEN pt.level = '5'
ELSE FALSE
END;
-- 11. 创建学生考核综合统计视图
-- =====================================================
CREATE OR REPLACE VIEW v_student_assessment_summary AS
SELECT
ap.id as plan_id,
ap.plan_name,
ar.student_id,
ar.student_no,
ar.student_name,
ar.total_score,
COALESCE(dsc.total_deduction, 0) as discipline_deduction,
COALESCE(ba.total_bonus, 0) as bonus_addition,
(ar.total_score - COALESCE(dsc.total_deduction, 0) + COALESCE(ba.total_bonus, 0)) as final_score,
CASE
WHEN (ar.total_score - COALESCE(dsc.total_deduction, 0) + COALESCE(ba.total_bonus, 0)) >= ap.excellent_score THEN '优秀'
WHEN (ar.total_score - COALESCE(dsc.total_deduction, 0) + COALESCE(ba.total_bonus, 0)) >= ap.pass_score THEN '合格'
ELSE '不合格'
END as grade_level,
ar.create_time as assessment_time
FROM xskh_assessment_plan ap
LEFT JOIN xskh_assessment_record ar ON ap.id = ar.plan_id AND ar.deleted = 0
LEFT JOIN xskh_discipline_score_calculation dsc ON ap.id = dsc.plan_id AND ar.student_id = dsc.student_id AND dsc.deleted = 0
LEFT JOIN (
SELECT plan_id, student_id, SUM(approve_score) as total_bonus
FROM xskh_bonus_application
WHERE deleted = 0 AND status = '2'
GROUP BY plan_id, student_id
) ba ON ap.id = ba.plan_id AND ar.student_id = ba.student_id
WHERE ap.deleted = 0;
-- 12. 插入系统字典数据
-- =====================================================
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) VALUES
('考核方案类型', 'xskh_scheme_type', '0', 1, NOW(), '学生考核方案类型'),
('考核指标类型', 'xskh_indicator_type', '0', 1, NOW(), '学生考核指标类型'),
('违纪严重程度', 'xskh_discipline_severity', '0', 1, NOW(), '违纪行为严重程度'),
('处分等级', 'xskh_punishment_level', '0', 1, NOW(), '学生处分等级'),
('附加分类型', 'xskh_bonus_type', '0', 1, NOW(), '学生附加分类型');
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) VALUES
-- 考核方案类型
(1, '本科生方案', '1', 'xskh_scheme_type', '', 'primary', 'Y', '0', 1, NOW(), '本科生考核方案'),
(2, '研究生方案', '2', 'xskh_scheme_type', '', 'success', 'N', '0', 1, NOW(), '研究生考核方案'),
(3, '专科生方案', '3', 'xskh_scheme_type', '', 'info', 'N', '0', 1, NOW(), '专科生考核方案'),
-- 考核指标类型
(1, '德育指标', '1', 'xskh_indicator_type', '', 'danger', 'N', '0', 1, NOW(), '德育素质指标'),
(2, '智育指标', '2', 'xskh_indicator_type', '', 'primary', 'Y', '0', 1, NOW(), '智育素质指标'),
(3, '体育指标', '3', 'xskh_indicator_type', '', 'success', 'N', '0', 1, NOW(), '体育素质指标'),
(4, '美育指标', '4', 'xskh_indicator_type', '', 'warning', 'N', '0', 1, NOW(), '美育素质指标'),
(5, '劳育指标', '5', 'xskh_indicator_type', '', 'info', 'N', '0', 1, NOW(), '劳育素质指标'),
-- 违纪严重程度
(1, '轻微', '2', 'xskh_discipline_severity', '', 'info', 'N', '0', 1, NOW(), '轻微违纪'),
(2, '一般', '3', 'xskh_discipline_severity', '', 'warning', 'Y', '0', 1, NOW(), '一般违纪'),
(3, '严重', '4', 'xskh_discipline_severity', '', 'danger', 'N', '0', 1, NOW(), '严重违纪'),
(4, '特别严重', '5', 'xskh_discipline_severity', '', 'danger', 'N', '0', 1, NOW(), '特别严重违纪'),
(5, '极严重', '6', 'xskh_discipline_severity', '', 'danger', 'N', '0', 1, NOW(), '极严重违纪'),
-- 处分等级
(1, '警告', '1', 'xskh_punishment_level', '', 'warning', 'N', '0', 1, NOW(), '警告处分'),
(2, '严重警告', '2', 'xskh_punishment_level', '', 'warning', 'N', '0', 1, NOW(), '严重警告处分'),
(3, '记过', '3', 'xskh_punishment_level', '', 'danger', 'Y', '0', 1, NOW(), '记过处分'),
(4, '留校察看', '4', 'xskh_punishment_level', '', 'danger', 'N', '0', 1, NOW(), '留校察看处分'),
(5, '开除学籍', '5', 'xskh_punishment_level', '', 'danger', 'N', '0', 1, NOW(), '开除学籍处分'),
-- 附加分类型
(1, '学科竞赛', '1', 'xskh_bonus_type', '', 'primary', 'Y', '0', 1, NOW(), '学科竞赛获奖'),
(2, '科研成果', '2', 'xskh_bonus_type', '', 'success', 'N', '0', 1, NOW(), '科研项目成果'),
(3, '社会实践', '3', 'xskh_bonus_type', '', 'info', 'N', '0', 1, NOW(), '社会实践活动'),
(4, '志愿服务', '4', 'xskh_bonus_type', '', 'warning', 'N', '0', 1, NOW(), '志愿服务活动'),
(5, '文体活动', '5', 'xskh_bonus_type', '', 'success', 'N', '0', 1, NOW(), '文体竞赛活动'),
(6, '其他', '6', 'xskh_bonus_type', '', 'info', 'N', '0', 1, NOW(), '其他加分项');
-- =====================================================
-- 升级脚本执行完成
-- =====================================================
-- 执行说明:
-- 1. 本脚本已经包含完整的违纪处分标准化体系
-- 2. 新增了考核计划配置字段,支持灵活的评分标准设置
-- 3. 创建了违纪扣分计算表和规则表,支持自动化扣分计算
-- 4. 插入了德智体美劳五育指标体系的基础数据
-- 5. 创建了相关视图,便于数据查询和统计分析
-- 6. 添加了系统字典数据,支持前端下拉选择
--
-- 注意事项:
-- 1. 执行前请备份现有数据
-- 2. 建议在测试环境先验证脚本的正确性
-- 3. 生产环境执行时请在业务低峰期进行
-- =====================================================
+218
View File
@@ -0,0 +1,218 @@
# 考核计划管理评分标准配置 - 数据库升级执行说明
## 📋 概述信息
| 项目 | 信息 |
|------|------|
| **升级脚本** | `考核计划管理评分标准配置数据库升级.sql` |
| **版本** | V1.1.0 |
| **创建时间** | 2025-01-27 |
| **影响范围** | 仅学生考核管理模块,不影响其他模块 |
| **执行时间** | 预计1-2分钟 |
---
## 🚨 执行前检查
### ✅ **必须满足的条件**
1. **数据库备份**:执行前请务必备份数据库
2. **权限确认**:确保有ALTER TABLE和INSERT权限
3. **表存在性**:确认`xskh_assessment_plan`表已存在
4. **ID冲突检查**:确认菜单ID 9820-9823未被使用
### 🔍 **冲突检查SQL**
```sql
-- 检查表是否存在
SELECT COUNT(*) FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name = 'xskh_assessment_plan';
-- 检查菜单ID是否冲突
SELECT menu_id, menu_name FROM sys_menu WHERE menu_id BETWEEN 9820 AND 9823;
-- 检查字段是否已存在
SELECT COLUMN_NAME FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = 'xskh_assessment_plan'
AND column_name IN ('base_score', 'pass_score', 'excellent_score');
```
---
## 🚀 执行步骤
### **步骤1:数据库备份**
```bash
# 备份整个数据库(推荐)
mysqldump -u用户名 -p数据库名 > backup_$(date +%Y%m%d_%H%M%S).sql
# 或仅备份相关表
mysqldump -u用户名 -p数据库名 xskh_assessment_plan sys_menu sys_role_menu > backup_xskh_$(date +%Y%m%d_%H%M%S).sql
```
### **步骤2:执行升级脚本**
```bash
# 方式1:命令行执行
mysql -u用户名 -p数据库名 < backend/sql/考核计划管理评分标准配置数据库升级.sql
# 方式2:MySQL客户端执行
mysql> source /path/to/考核计划管理评分标准配置数据库升级.sql;
```
### **步骤3:验证执行结果**
脚本执行后会自动运行验证查询,检查:
- ✅ 新增字段是否正确创建
- ✅ 权限配置是否正确插入
- ✅ 角色权限关联是否正确
---
## 📊 升级内容详情
### **1. 表结构修改**
**表名**: `xskh_assessment_plan`
| 字段名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `base_score` | DECIMAL(5,2) | 100.00 | 基础分数(80-120分) |
| `pass_score` | DECIMAL(5,2) | 60.00 | 及格分数(50-70分) |
| `excellent_score` | DECIMAL(5,2) | 85.00 | 优秀分数(80-95分) |
| `auto_deduct_enabled` | CHAR(1) | '1' | 是否启用自动扣分 |
| `bonus_enabled` | CHAR(1) | '1' | 是否启用加分项 |
| `discipline_weight` | DECIMAL(3,2) | 1.00 | 违纪扣分权重(0.5-1.5倍) |
| `bonus_weight` | DECIMAL(3,2) | 1.00 | 加分项权重(0.5-1.5倍) |
### **2. 权限配置**
**菜单权限**: ID范围 9820-9823
| ID | 权限名称 | 权限标识 | 说明 |
|----|----------|----------|------|
| 9820 | 评分标准配置 | `xskh:assessmentPlan:scoreConfig` | 单个计划配置权限 |
| 9821 | 批量配置评分标准 | `xskh:assessmentPlan:batchScoreConfig` | 批量配置权限 |
| 9822 | 重置评分标准 | `xskh:assessmentPlan:resetScore` | 重置配置权限 |
| 9823 | 获取评分配置选项 | `xskh:assessmentPlan:scoreOptions` | 获取选项权限 |
### **3. 索引优化**
- **索引名**: `idx_assessment_plan_score_config`
- **字段**: `base_score`, `pass_score`, `excellent_score`
- **用途**: 优化评分配置查询性能
---
## ✅ 验证方法
### **执行成功标志**
脚本执行后应看到以下输出:
```
+---------------------------------------------------+
| message |
+---------------------------------------------------+
| 考核计划管理评分标准配置数据库升级完成! |
+---------------------------------------------------+
+----------------------------+
| fields_added |
+----------------------------+
| 新增字段:7个评分配置字段 |
+----------------------------+
+-------------------------------------------+
| permissions_added |
+-------------------------------------------+
| 新增权限:4个功能权限(ID: 9820-9823) |
+-------------------------------------------+
+-------------------------+
| tables_affected |
+-------------------------+
| 影响表:xskh_assessment_plan |
+-------------------------+
```
### **手动验证SQL**
```sql
-- 1. 验证字段创建
DESCRIBE xskh_assessment_plan;
-- 2. 验证权限配置
SELECT menu_id, menu_name, perms FROM sys_menu WHERE menu_id BETWEEN 9820 AND 9823;
-- 3. 验证角色权限
SELECT rm.role_id, rm.menu_id, m.menu_name
FROM sys_role_menu rm
JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE rm.menu_id BETWEEN 9820 AND 9823;
-- 4. 验证索引创建
SHOW INDEX FROM xskh_assessment_plan WHERE Key_name = 'idx_assessment_plan_score_config';
```
---
## 🔄 回滚方案
### **紧急回滚**
如果升级出现问题,可执行回滚:
```sql
-- 删除新增权限
DELETE FROM sys_role_menu WHERE menu_id BETWEEN 9820 AND 9823;
DELETE FROM sys_menu WHERE menu_id BETWEEN 9820 AND 9823;
-- 删除新增字段(注意:会丢失数据)
ALTER TABLE `xskh_assessment_plan`
DROP COLUMN `base_score`,
DROP COLUMN `pass_score`,
DROP COLUMN `excellent_score`,
DROP COLUMN `auto_deduct_enabled`,
DROP COLUMN `bonus_enabled`,
DROP COLUMN `discipline_weight`,
DROP COLUMN `bonus_weight`;
-- 删除索引
DROP INDEX `idx_assessment_plan_score_config` ON `xskh_assessment_plan`;
```
### **数据恢复**
```bash
# 从备份恢复
mysql -u用户名 -p数据库名 < backup_文件名.sql
```
---
## ⚠️ 注意事项
### **安全提醒**
1. **生产环境**:务必在测试环境先验证
2. **业务影响**:升级期间可能短暂影响考核计划功能
3. **数据完整性**:升级前检查现有数据完整性
4. **权限冲突**:确保菜单ID 9820-9823未被其他模块使用
### **兼容性说明**
- ✅ **向前兼容**:新增字段有默认值,不影响现有功能
- ✅ **数据保护**:现有数据不会丢失或修改
- ✅ **权限安全**:仅新增权限,不修改现有权限
- ✅ **模块隔离**:仅影响学生考核管理模块
---
## 📞 执行后确认
### **功能验证清单**
- [ ] 考核计划列表正常显示
- [ ] 新增评分标准列显示正确
- [ ] 评分配置按钮可见(有权限用户)
- [ ] 评分配置对话框正常打开
- [ ] 批量配置功能正常工作
- [ ] 重置默认值功能正常
- [ ] 权限控制生效
### **性能检查**
- [ ] 表查询性能正常
- [ ] 新增索引生效
- [ ] 页面加载速度正常
---
**📝 执行状态**: 待执行
**🎯 执行目标**: 为考核计划管理添加评分标准配置功能
**⚠️ 重要提醒**: 执行前务必备份数据库!
@@ -0,0 +1,155 @@
-- ==========================================
-- 考核计划管理评分标准配置数据库升级脚本
-- 版本:V1.1.0
-- 创建时间:2025-01-27
-- 功能:为考核计划管理添加评分标准配置功能
-- 影响范围:仅学生考核管理模块,不影响其他模块
-- ==========================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ==========================================
-- 1. 考核计划表结构升级
-- ==========================================
-- 为 xskh_assessment_plan 表添加评分标准配置字段
ALTER TABLE `xskh_assessment_plan`
ADD COLUMN `base_score` DECIMAL(5,2) DEFAULT 100.00 COMMENT '基础分数' AFTER `end_time`,
ADD COLUMN `pass_score` DECIMAL(5,2) DEFAULT 60.00 COMMENT '及格分数' AFTER `base_score`,
ADD COLUMN `excellent_score` DECIMAL(5,2) DEFAULT 85.00 COMMENT '优秀分数' AFTER `pass_score`,
ADD COLUMN `auto_deduct_enabled` CHAR(1) DEFAULT '1' COMMENT '是否启用自动扣分:0-否,1-是' AFTER `excellent_score`,
ADD COLUMN `bonus_enabled` CHAR(1) DEFAULT '1' COMMENT '是否启用加分项:0-否,1-是' AFTER `auto_deduct_enabled`,
ADD COLUMN `discipline_weight` DECIMAL(3,2) DEFAULT 1.00 COMMENT '违纪扣分权重' AFTER `bonus_enabled`,
ADD COLUMN `bonus_weight` DECIMAL(3,2) DEFAULT 1.00 COMMENT '加分项权重' AFTER `discipline_weight`;
-- 添加字段注释
ALTER TABLE `xskh_assessment_plan`
MODIFY COLUMN `base_score` DECIMAL(5,2) DEFAULT 100.00 COMMENT '基础分数(80-120分)',
MODIFY COLUMN `pass_score` DECIMAL(5,2) DEFAULT 60.00 COMMENT '及格分数(50-70分)',
MODIFY COLUMN `excellent_score` DECIMAL(5,2) DEFAULT 85.00 COMMENT '优秀分数(80-95分)',
MODIFY COLUMN `auto_deduct_enabled` CHAR(1) DEFAULT '1' COMMENT '是否启用自动扣分:0-否,1-是',
MODIFY COLUMN `bonus_enabled` CHAR(1) DEFAULT '1' COMMENT '是否启用加分项:0-否,1-是',
MODIFY COLUMN `discipline_weight` DECIMAL(3,2) DEFAULT 1.00 COMMENT '违纪扣分权重(0.5-1.5倍)',
MODIFY COLUMN `bonus_weight` DECIMAL(3,2) DEFAULT 1.00 COMMENT '加分项权重(0.5-1.5倍)';
-- 添加索引优化查询性能
CREATE INDEX `idx_assessment_plan_score_config` ON `xskh_assessment_plan` (`base_score`, `pass_score`, `excellent_score`);
-- ==========================================
-- 2. 权限配置
-- ==========================================
-- 🚨 注意:使用ID 9820-9823,避免与现有权限冲突
-- 现有考核计划管理权限范围:9800-9819
-- 新增评分标准配置权限范围:9820-9823
-- 2.1 删除可能存在的旧权限(安全清理)
DELETE FROM sys_menu WHERE menu_id BETWEEN 9820 AND 9823;
DELETE FROM sys_role_menu WHERE menu_id BETWEEN 9820 AND 9823;
-- 2.2 新增评分标准配置权限
INSERT INTO sys_menu VALUES
(9820, '评分标准配置', 9800, 20, '', '', '', 1, 0, 'F', '0', '0', 'xskh:assessmentPlan:scoreConfig', '#', 1, NOW(), '', NULL, '考核计划评分标准配置权限'),
(9821, '批量配置评分标准', 9800, 21, '', '', '', 1, 0, 'F', '0', '0', 'xskh:assessmentPlan:batchScoreConfig', '#', 1, NOW(), '', NULL, '批量配置评分标准权限'),
(9822, '重置评分标准', 9800, 22, '', '', '', 1, 0, 'F', '0', '0', 'xskh:assessmentPlan:resetScore', '#', 1, NOW(), '', NULL, '重置评分标准权限'),
(9823, '获取评分配置选项', 9800, 23, '', '', '', 1, 0, 'F', '0', '0', 'xskh:assessmentPlan:scoreOptions', '#', 1, NOW(), '', NULL, '获取评分配置选项权限');
-- 2.3 为超级管理员角色分配权限
INSERT INTO sys_role_menu (role_id, menu_id) VALUES
(1, 9820), -- 评分标准配置
(1, 9821), -- 批量配置评分标准
(1, 9822), -- 重置评分标准
(1, 9823); -- 获取评分配置选项
-- ==========================================
-- 3. 数据初始化(可选)
-- ==========================================
-- 3.1 为现有考核计划设置默认评分标准
UPDATE `xskh_assessment_plan`
SET
`base_score` = 100.00,
`pass_score` = 60.00,
`excellent_score` = 85.00,
`auto_deduct_enabled` = '1',
`bonus_enabled` = '1',
`discipline_weight` = 1.00,
`bonus_weight` = 1.00,
`update_time` = NOW()
WHERE
`base_score` IS NULL
OR `pass_score` IS NULL
OR `excellent_score` IS NULL;
-- ==========================================
-- 4. 验证脚本执行结果
-- ==========================================
-- 4.1 验证表结构修改
SELECT
COLUMN_NAME,
DATA_TYPE,
COLUMN_DEFAULT,
COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'xskh_assessment_plan'
AND COLUMN_NAME IN ('base_score', 'pass_score', 'excellent_score', 'auto_deduct_enabled', 'bonus_enabled', 'discipline_weight', 'bonus_weight')
ORDER BY ORDINAL_POSITION;
-- 4.2 验证权限配置
SELECT
menu_id,
menu_name,
perms,
remark
FROM sys_menu
WHERE menu_id BETWEEN 9820 AND 9823
ORDER BY menu_id;
-- 4.3 验证角色权限关联
SELECT
r.role_name,
m.menu_name,
m.perms
FROM sys_role r
INNER JOIN sys_role_menu rm ON r.role_id = rm.role_id
INNER JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE rm.menu_id BETWEEN 9820 AND 9823
ORDER BY r.role_id, m.menu_id;
-- ==========================================
-- 5. 回滚脚本(紧急情况使用)
-- ==========================================
/*
-- 如需回滚,请执行以下脚本:
-- 删除新增权限
DELETE FROM sys_role_menu WHERE menu_id BETWEEN 9820 AND 9823;
DELETE FROM sys_menu WHERE menu_id BETWEEN 9820 AND 9823;
-- 删除新增字段(注意:会丢失数据)
ALTER TABLE `xskh_assessment_plan`
DROP COLUMN `base_score`,
DROP COLUMN `pass_score`,
DROP COLUMN `excellent_score`,
DROP COLUMN `auto_deduct_enabled`,
DROP COLUMN `bonus_enabled`,
DROP COLUMN `discipline_weight`,
DROP COLUMN `bonus_weight`;
-- 删除索引
DROP INDEX `idx_assessment_plan_score_config` ON `xskh_assessment_plan`;
*/
SET FOREIGN_KEY_CHECKS = 1;
-- ==========================================
-- 执行完成提示
-- ==========================================
SELECT '考核计划管理评分标准配置数据库升级完成!' AS message,
'新增字段:7个评分配置字段' AS fields_added,
'新增权限:4个功能权限(ID: 9820-9823)' AS permissions_added,
'影响表:xskh_assessment_plan' AS tables_affected;
@@ -0,0 +1,50 @@
-- ==========================================
-- 考核计划管理 - 评分标准配置权限
-- 创建时间:2025-01-27
-- 说明:为考核计划管理添加评分标准配置相关权限
-- 菜单ID范围:9816-9819 (在考核计划管理9800-9815基础上扩展)
-- ==========================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ===========================================
-- 考核计划管理 - 评分标准配置按钮权限
-- ===========================================
-- 评分标准配置权限
INSERT IGNORE INTO `sys_menu`
(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES
(9816, '评分标准配置', 9800, 16, '', '', '', 1, 0, 'F', '0', '0', 'xskh:assessmentPlan:scoreConfig', '#', 1, NOW(), '', NULL, '考核计划评分标准配置权限'),
(9817, '批量配置评分标准', 9800, 17, '', '', '', 1, 0, 'F', '0', '0', 'xskh:assessmentPlan:batchScoreConfig', '#', 1, NOW(), '', NULL, '批量配置评分标准权限'),
(9818, '重置评分标准', 9800, 18, '', '', '', 1, 0, 'F', '0', '0', 'xskh:assessmentPlan:resetScore', '#', 1, NOW(), '', NULL, '重置评分标准权限'),
(9819, '预览评分配置', 9800, 19, '', '', '', 1, 0, 'F', '0', '0', 'xskh:assessmentPlan:previewScore', '#', 1, NOW(), '', NULL, '预览评分配置权限');
-- ===========================================
-- 为超级管理员分配新权限
-- ===========================================
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(1, 9816),
(1, 9817),
(1, 9818),
(1, 9819);
-- ===========================================
-- 验证权限配置
-- ===========================================
-- 查询新增的权限
SELECT menu_id, menu_name, perms, remark
FROM sys_menu
WHERE menu_id BETWEEN 9816 AND 9819
ORDER BY menu_id;
-- 查询权限分配情况
SELECT rm.role_id, r.role_name, m.menu_name, m.perms
FROM sys_role_menu rm
LEFT JOIN sys_role r ON rm.role_id = r.role_id
LEFT JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE rm.menu_id BETWEEN 9816 AND 9819
ORDER BY rm.role_id, rm.menu_id;
SET FOREIGN_KEY_CHECKS = 1;