wuzhen update

This commit is contained in:
wuzhen committed 2025-08-10 00:24:31 +08:00
1 parent bab7b53074
commit a2222f63cb
284 files changed
+48629 -3473

No files matched your search

@@ -0,0 +1,75 @@
-- ===============================================
-- 奖学金申请管理模块 v2.0 数据字典配置脚本
-- ===============================================
USE hzdyjs_xg;
-- =====================================================
-- 数据字典配置 (使用正确的ID值)
-- =====================================================
-- 1. 申请人类型字典
INSERT INTO sys_dict_type (dict_id, dict_name, dict_type, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark)
VALUES (2000000000000000015, '申请人类型', 'applicant_type', '000000', NULL, 1, NOW(), 1, NOW(), '奖学金申请人类型')
ON DUPLICATE KEY UPDATE update_time = NOW();
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
(3000000000000000014, 1, '学生申请', 'STUDENT', 'applicant_type', '', 'primary', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '学生自主申请'),
(3000000000000000015, 2, '教师代申请', 'TEACHER', 'applicant_type', '', 'success', 'Y', '000000', NULL, 1, NOW(), 1, NOW(), '班主任代学生申请')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 2. 申请类型字典更新 (检查是否已存在)
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
(3000000000000000016, 1, '教师推荐', 'TEACHER_RECOMMEND', 'application_type', '', 'success', 'Y', '000000', NULL, 1, NOW(), 1, NOW(), '班主任推荐申请'),
(3000000000000000017, 2, '自动评定', 'AUTO', 'application_type', '', 'info', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '系统自动评定'),
(3000000000000000018, 3, '直接指定', 'DIRECT', 'application_type', '', 'warning', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '管理员直接指定')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 3. 名额类型字典
INSERT INTO sys_dict_type (dict_id, dict_name, dict_type, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark)
VALUES (2000000000000000016, '名额类型', 'quota_type', '000000', NULL, 1, NOW(), 1, NOW(), '奖学金名额分配类型')
ON DUPLICATE KEY UPDATE update_time = NOW();
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
(3000000000000000019, 1, '班级名额', 'CLASS', 'quota_type', '', 'primary', 'Y', '000000', NULL, 1, NOW(), 1, NOW(), '班级级别名额'),
(3000000000000000020, 2, '学院名额', 'DEPT', 'quota_type', '', 'success', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '学院级别名额'),
(3000000000000000021, 3, '全校名额', 'UNIVERSITY', 'quota_type', '', 'info', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '全校级别名额')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 4. 操作类型字典
INSERT INTO sys_dict_type (dict_id, dict_name, dict_type, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark)
VALUES (2000000000000000017, '名额操作类型', 'quota_operation_type', '000000', NULL, 1, NOW(), 1, NOW(), '名额使用操作类型')
ON DUPLICATE KEY UPDATE update_time = NOW();
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
(3000000000000000022, 1, '使用名额', 'USE', 'quota_operation_type', '', 'success', 'Y', '000000', NULL, 1, NOW(), 1, NOW(), '申请时使用名额'),
(3000000000000000023, 2, '释放名额', 'RELEASE', 'quota_operation_type', '', 'warning', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '撤回申请时释放名额')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 5. 上传者类型字典
INSERT INTO sys_dict_type (dict_id, dict_name, dict_type, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark)
VALUES (2000000000000000018, '材料上传者类型', 'uploader_type', '000000', NULL, 1, NOW(), 1, NOW(), '申请材料上传者类型')
ON DUPLICATE KEY UPDATE update_time = NOW();
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
(3000000000000000024, 1, '学生上传', 'STUDENT', 'uploader_type', '', 'primary', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '学生自行上传'),
(3000000000000000025, 2, '教师上传', 'TEACHER', 'uploader_type', '', 'success', 'Y', '000000', NULL, 1, NOW(), 1, NOW(), '班主任代为上传')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- =====================================================
-- 验证数据字典配置
-- =====================================================
SELECT '=== 新增数据字典类型 ===' as info;
SELECT dict_id, dict_name, dict_type
FROM sys_dict_type
WHERE dict_type IN ('applicant_type', 'quota_type', 'quota_operation_type', 'uploader_type');
SELECT '=== 新增数据字典数据 ===' as info;
SELECT dt.dict_name, dd.dict_label, dd.dict_value, dd.dict_type
FROM sys_dict_type dt
JOIN sys_dict_data dd ON dt.dict_type = dd.dict_type
WHERE dt.dict_type IN ('applicant_type', 'quota_type', 'quota_operation_type', 'uploader_type')
ORDER BY dt.dict_type, dd.dict_sort;
SELECT '=== 数据字典配置完成 ===' as info;
@@ -0,0 +1,64 @@
-- ===============================================
-- 奖学金申请列表数据修复脚本
-- 修复时间:2025-01-26
-- 修复内容:将错误的申请类型值从 'RECOMMEND' 修复为 'TEACHER_RECOMMEND'
-- ===============================================
USE hzdyjs_xg;
-- =====================================================
-- 1. 查看当前错误数据
-- =====================================================
SELECT '=== 修复前数据检查 ===' as info;
SELECT
COUNT(*) as total_count,
application_type,
current_status
FROM jcbt_scholarship_application
WHERE application_type = 'RECOMMEND'
GROUP BY application_type, current_status;
-- =====================================================
-- 2. 修复申请类型数据
-- =====================================================
SELECT '=== 开始修复申请类型数据 ===' as info;
UPDATE jcbt_scholarship_application
SET
application_type = 'TEACHER_RECOMMEND',
update_time = NOW(),
update_by = 1
WHERE application_type = 'RECOMMEND';
-- 显示修复结果
SELECT ROW_COUNT() as '修复记录数';
-- =====================================================
-- 3. 验证修复结果
-- =====================================================
SELECT '=== 修复后数据验证 ===' as info;
-- 验证不应该再有 'RECOMMEND' 类型的数据
SELECT
COUNT(*) as should_be_zero
FROM jcbt_scholarship_application
WHERE application_type = 'RECOMMEND';
-- 验证 'TEACHER_RECOMMEND' 类型的数据
SELECT
COUNT(*) as teacher_recommend_count,
current_status
FROM jcbt_scholarship_application
WHERE application_type = 'TEACHER_RECOMMEND'
GROUP BY current_status;
-- 显示所有申请类型的分布情况
SELECT
application_type,
COUNT(*) as count,
current_status
FROM jcbt_scholarship_application
GROUP BY application_type, current_status
ORDER BY application_type, current_status;
SELECT '=== 数据修复完成 ===' as info;
@@ -0,0 +1,70 @@
-- 奖学金申请数据检查脚本
-- 创建时间: 2025-01-26 23:45:00
-- 用途: 检查前台无法显示申请数据的原因
-- 1. 检查表中总数据量
SELECT '总申请记录数:' as description, COUNT(*) as count FROM jcbt_scholarship_application;
-- 2. 检查deleted字段的分布
SELECT '按删除状态分布:' as description, deleted, COUNT(*) as count
FROM jcbt_scholarship_application
GROUP BY deleted;
-- 3. 检查申请类型分布
SELECT '按申请类型分布:' as description, application_type, COUNT(*) as count
FROM jcbt_scholarship_application
GROUP BY application_type;
-- 4. 检查申请状态分布
SELECT '按申请状态分布:' as description, current_status, COUNT(*) as count
FROM jcbt_scholarship_application
GROUP BY current_status;
-- 5. 检查tenant_id分布(多租户)
SELECT '按租户ID分布:' as description, tenant_id, COUNT(*) as count
FROM jcbt_scholarship_application
GROUP BY tenant_id;
-- 6. 检查最近的申请记录(前10条)
SELECT '最近申请记录:' as description,
id, student_name, application_type, current_status, deleted, tenant_id, create_time
FROM jcbt_scholarship_application
WHERE deleted = 0
ORDER BY create_time DESC
LIMIT 10;
-- 7. 检查是否有RECOMMEND类型的记录(应该被修复为TEACHER_RECOMMEND)
SELECT '未修复的RECOMMEND记录:' as description, COUNT(*) as count
FROM jcbt_scholarship_application
WHERE application_type = 'RECOMMEND';
-- 8. 检查符合前台查询条件的记录(未删除+正确的申请类型)
SELECT '符合前台查询条件的记录:' as description, COUNT(*) as count
FROM jcbt_scholarship_application
WHERE deleted = 0
AND application_type IN ('TEACHER_RECOMMEND', 'STUDENT', 'AUTO', 'DIRECT');
-- 9. 详细查看符合条件的记录
SELECT
id,
student_name,
application_type,
current_status,
tenant_id,
deleted,
create_time,
update_time
FROM jcbt_scholarship_application
WHERE deleted = 0
AND application_type IN ('TEACHER_RECOMMEND', 'STUDENT', 'AUTO', 'DIRECT')
ORDER BY create_time DESC
LIMIT 5;
-- 10. 检查字段是否存在NULL值
SELECT
'字段NULL值检查:' as description,
SUM(CASE WHEN student_name IS NULL THEN 1 ELSE 0 END) as null_student_name,
SUM(CASE WHEN application_type IS NULL THEN 1 ELSE 0 END) as null_application_type,
SUM(CASE WHEN current_status IS NULL THEN 1 ELSE 0 END) as null_current_status,
SUM(CASE WHEN tenant_id IS NULL THEN 1 ELSE 0 END) as null_tenant_id
FROM jcbt_scholarship_application;
@@ -0,0 +1,423 @@
-- ===============================================
-- 奖学金申请管理模块 v2.0 数据库升级脚本 (修复版)
-- 基于班主任代申请模式的数据结构调整
-- ===============================================
USE hzdyjs_xg;
-- =====================================================
-- 1. 申请记录表结构调整
-- =====================================================
-- 1.1 添加申请人相关字段 (检查字段是否存在)
SET @column_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_application'
AND COLUMN_NAME = 'applicant_type'
);
SET @sql = IF(@column_exists = 0,
'ALTER TABLE jcbt_scholarship_application ADD COLUMN `applicant_type` VARCHAR(20) DEFAULT "TEACHER" COMMENT "申请人类型:STUDENT-学生申请,TEACHER-教师代申请"',
'SELECT "applicant_type column already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @column_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_application'
AND COLUMN_NAME = 'applicant_id'
);
SET @sql = IF(@column_exists = 0,
'ALTER TABLE jcbt_scholarship_application ADD COLUMN `applicant_id` BIGINT(20) DEFAULT NULL COMMENT "申请人ID(班主任ID)"',
'SELECT "applicant_id column already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @column_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_application'
AND COLUMN_NAME = 'applicant_name'
);
SET @sql = IF(@column_exists = 0,
'ALTER TABLE jcbt_scholarship_application ADD COLUMN `applicant_name` VARCHAR(100) DEFAULT NULL COMMENT "申请人姓名(班主任姓名)"',
'SELECT "applicant_name column already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 1.2 修改申请类型枚举值注释
ALTER TABLE jcbt_scholarship_application
MODIFY COLUMN `application_type` VARCHAR(20) NOT NULL
COMMENT '申请类型:TEACHER_RECOMMEND-教师推荐,AUTO-自动评定,DIRECT-直接指定';
-- 1.3 添加班级和申请人相关索引 (检查索引是否存在)
SET @index_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_application'
AND INDEX_NAME = 'idx_class_batch'
);
SET @sql = IF(@index_exists = 0,
'CREATE INDEX idx_class_batch ON jcbt_scholarship_application(class_id, batch_id)',
'SELECT "idx_class_batch index already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_application'
AND INDEX_NAME = 'idx_applicant_batch'
);
SET @sql = IF(@index_exists = 0,
'CREATE INDEX idx_applicant_batch ON jcbt_scholarship_application(applicant_id, batch_id)',
'SELECT "idx_applicant_batch index already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_application'
AND INDEX_NAME = 'idx_applicant_type'
);
SET @sql = IF(@index_exists = 0,
'CREATE INDEX idx_applicant_type ON jcbt_scholarship_application(applicant_type, applicant_id)',
'SELECT "idx_applicant_type index already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- =====================================================
-- 2. 班级名额分配表
-- =====================================================
-- 2.1 创建班级名额分配表
DROP TABLE IF EXISTS `jcbt_scholarship_class_quota`;
CREATE TABLE jcbt_scholarship_class_quota (
id BIGINT(20) NOT NULL COMMENT '主键ID',
batch_id BIGINT(20) NOT NULL COMMENT '批次ID',
scholarship_type_id BIGINT(20) NOT NULL COMMENT '奖学金类型ID',
dept_id BIGINT(20) NOT NULL COMMENT '学院ID',
class_id BIGINT(20) NOT NULL COMMENT '班级ID',
class_name VARCHAR(100) NOT NULL COMMENT '班级名称',
total_quota INT DEFAULT 0 COMMENT '总名额',
used_quota INT DEFAULT 0 COMMENT '已用名额',
reserved_quota INT DEFAULT 0 COMMENT '预留名额',
available_quota INT DEFAULT 0 COMMENT '可用名额',
allocation_method VARCHAR(20) DEFAULT 'MANUAL' COMMENT '分配方式:MANUAL-手动分配,AUTO-自动分配',
is_locked TINYINT(1) DEFAULT 0 COMMENT '是否锁定:0-否,1-是',
status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE-有效,INACTIVE-无效',
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
tenant_id VARCHAR(20) DEFAULT '000000' COMMENT '租户ID',
create_dept BIGINT(20) DEFAULT NULL COMMENT '创建部门',
create_by BIGINT(20) DEFAULT NULL COMMENT '创建者',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by BIGINT(20) DEFAULT NULL COMMENT '更新者',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT(1) DEFAULT 0 COMMENT '删除标记:0-正常,1-删除',
PRIMARY KEY (id),
UNIQUE KEY uk_batch_type_class (batch_id, scholarship_type_id, class_id, deleted),
INDEX idx_dept_class (dept_id, class_id),
INDEX idx_batch_dept (batch_id, dept_id),
INDEX idx_quota_status (total_quota, status),
INDEX idx_tenant (tenant_id, deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='班级名额分配表';
-- =====================================================
-- 3. 申请材料表结构调整
-- =====================================================
-- 3.1 添加上传者信息字段 (检查字段是否存在)
SET @column_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_attachment'
AND COLUMN_NAME = 'uploader_type'
);
SET @sql = IF(@column_exists = 0,
'ALTER TABLE jcbt_scholarship_attachment ADD COLUMN `uploader_type` VARCHAR(20) DEFAULT "TEACHER" COMMENT "上传者类型:STUDENT-学生,TEACHER-教师"',
'SELECT "uploader_type column already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @column_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_attachment'
AND COLUMN_NAME = 'uploader_id'
);
SET @sql = IF(@column_exists = 0,
'ALTER TABLE jcbt_scholarship_attachment ADD COLUMN `uploader_id` BIGINT(20) DEFAULT NULL COMMENT "上传者ID"',
'SELECT "uploader_id column already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @column_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_attachment'
AND COLUMN_NAME = 'uploader_name'
);
SET @sql = IF(@column_exists = 0,
'ALTER TABLE jcbt_scholarship_attachment ADD COLUMN `uploader_name` VARCHAR(100) DEFAULT NULL COMMENT "上传者姓名"',
'SELECT "uploader_name column already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 3.2 修改必需字段逻辑(新需求中材料非必填)
SET @column_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_attachment'
AND COLUMN_NAME = 'is_required'
);
SET @sql = IF(@column_exists > 0,
'ALTER TABLE jcbt_scholarship_attachment MODIFY COLUMN `is_required` TINYINT(1) DEFAULT 0 COMMENT "是否必需:0-否,1-是(新需求中材料非必填)"',
'SELECT "is_required column does not exist" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 3.3 添加上传者相关索引
SET @index_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_attachment'
AND INDEX_NAME = 'idx_uploader'
);
SET @sql = IF(@index_exists = 0,
'CREATE INDEX idx_uploader ON jcbt_scholarship_attachment(uploader_type, uploader_id)',
'SELECT "idx_uploader index already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- =====================================================
-- 4. 名额使用记录表
-- =====================================================
-- 4.1 创建名额使用记录表
DROP TABLE IF EXISTS `jcbt_scholarship_quota_usage`;
CREATE TABLE jcbt_scholarship_quota_usage (
id BIGINT(20) NOT NULL COMMENT '主键ID',
batch_id BIGINT(20) NOT NULL COMMENT '批次ID',
scholarship_type_id BIGINT(20) NOT NULL COMMENT '奖学金类型ID',
quota_type VARCHAR(20) NOT NULL COMMENT '名额类型:CLASS-班级名额,DEPT-学院名额',
target_id BIGINT(20) NOT NULL COMMENT '目标ID(班级ID或学院ID)',
application_id BIGINT(20) NOT NULL COMMENT '申请ID',
student_id BIGINT(20) NOT NULL COMMENT '学生ID',
operation_type VARCHAR(20) NOT NULL COMMENT '操作类型:USE-使用,RELEASE-释放',
operation_time DATETIME NOT NULL COMMENT '操作时间',
operator_id BIGINT(20) NOT NULL COMMENT '操作人ID',
operator_name VARCHAR(100) NOT NULL COMMENT '操作人姓名',
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
tenant_id VARCHAR(20) DEFAULT '000000' COMMENT '租户ID',
create_dept BIGINT(20) DEFAULT NULL COMMENT '创建部门',
create_by BIGINT(20) DEFAULT NULL COMMENT '创建者',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by BIGINT(20) DEFAULT NULL COMMENT '更新者',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT(1) DEFAULT 0 COMMENT '删除标记:0-正常,1-删除',
PRIMARY KEY (id),
INDEX idx_batch_type_target (batch_id, scholarship_type_id, target_id),
INDEX idx_application_student (application_id, student_id),
INDEX idx_operation_time (operation_type, operation_time),
INDEX idx_operator_time (operator_id, operation_time),
INDEX idx_tenant (tenant_id, deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='名额使用记录表';
-- =====================================================
-- 5. 批次表增加申请时间字段(如果不存在)
-- =====================================================
-- 5.1 检查并添加申请开始时间字段
SET @column_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_batch'
AND COLUMN_NAME = 'application_start_time'
);
SET @sql = IF(@column_exists = 0,
'ALTER TABLE jcbt_scholarship_batch ADD COLUMN application_start_time DATETIME DEFAULT NULL COMMENT "申请开始时间"',
'SELECT "application_start_time column already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 5.2 检查并添加申请结束时间字段
SET @column_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_batch'
AND COLUMN_NAME = 'application_end_time'
);
SET @sql = IF(@column_exists = 0,
'ALTER TABLE jcbt_scholarship_batch ADD COLUMN application_end_time DATETIME DEFAULT NULL COMMENT "申请结束时间"',
'SELECT "application_end_time column already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- =====================================================
-- 6. 数据字典配置 (修复版)
-- =====================================================
-- 6.1 申请人类型字典
INSERT INTO sys_dict_type (dict_name, dict_type, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark)
VALUES ('申请人类型', 'applicant_type', '000000', NULL, 1, NOW(), 1, NOW(), '奖学金申请人类型')
ON DUPLICATE KEY UPDATE update_time = NOW();
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
(1, '学生申请', 'STUDENT', 'applicant_type', '', 'primary', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '学生自主申请'),
(2, '教师代申请', 'TEACHER', 'applicant_type', '', 'success', 'Y', '000000', NULL, 1, NOW(), 1, NOW(), '班主任代学生申请')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 6.2 申请类型字典更新
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
(1, '教师推荐', 'TEACHER_RECOMMEND', 'application_type', '', 'success', 'Y', '000000', NULL, 1, NOW(), 1, NOW(), '班主任推荐申请'),
(2, '自动评定', 'AUTO', 'application_type', '', 'info', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '系统自动评定'),
(3, '直接指定', 'DIRECT', 'application_type', '', 'warning', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '管理员直接指定')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 6.3 名额类型字典
INSERT INTO sys_dict_type (dict_name, dict_type, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark)
VALUES ('名额类型', 'quota_type', '000000', NULL, 1, NOW(), 1, NOW(), '奖学金名额分配类型')
ON DUPLICATE KEY UPDATE update_time = NOW();
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
(1, '班级名额', 'CLASS', 'quota_type', '', 'primary', 'Y', '000000', NULL, 1, NOW(), 1, NOW(), '班级级别名额'),
(2, '学院名额', 'DEPT', 'quota_type', '', 'success', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '学院级别名额'),
(3, '全校名额', 'UNIVERSITY', 'quota_type', '', 'info', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '全校级别名额')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 6.4 操作类型字典
INSERT INTO sys_dict_type (dict_name, dict_type, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark)
VALUES ('名额操作类型', 'quota_operation_type', '000000', NULL, 1, NOW(), 1, NOW(), '名额使用操作类型')
ON DUPLICATE KEY UPDATE update_time = NOW();
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
(1, '使用名额', 'USE', 'quota_operation_type', '', 'success', 'Y', '000000', NULL, 1, NOW(), 1, NOW(), '申请时使用名额'),
(2, '释放名额', 'RELEASE', 'quota_operation_type', '', 'warning', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '撤回申请时释放名额')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 6.5 上传者类型字典
INSERT INTO sys_dict_type (dict_name, dict_type, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark)
VALUES ('材料上传者类型', 'uploader_type', '000000', NULL, 1, NOW(), 1, NOW(), '申请材料上传者类型')
ON DUPLICATE KEY UPDATE update_time = NOW();
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, tenant_id, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
(1, '学生上传', 'STUDENT', 'uploader_type', '', 'primary', 'N', '000000', NULL, 1, NOW(), 1, NOW(), '学生自行上传'),
(2, '教师上传', 'TEACHER', 'uploader_type', '', 'success', 'Y', '000000', NULL, 1, NOW(), 1, NOW(), '班主任代为上传')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- =====================================================
-- 7. 创建测试数据
-- =====================================================
-- 7.1 班级名额分配测试数据
INSERT INTO jcbt_scholarship_class_quota (
id, batch_id, scholarship_type_id, dept_id, class_id, class_name,
total_quota, used_quota, reserved_quota, available_quota,
allocation_method, is_locked, status, remark,
tenant_id, create_dept, create_by, create_time, update_by, update_time, deleted
) VALUES
-- 计算机学院班级名额分配
(2001, 1, 1, 103, 1001, '计算机2021-1班', 2, 0, 0, 2, 'MANUAL', 0, 'ACTIVE', '计算机学院国家奖学金班级分配', '000000', NULL, 1, NOW(), 1, NOW(), 0),
(2002, 1, 1, 103, 1002, '计算机2021-2班', 1, 0, 0, 1, 'MANUAL', 0, 'ACTIVE', '计算机学院国家奖学金班级分配', '000000', NULL, 1, NOW(), 1, NOW(), 0),
(2003, 1, 2, 103, 1001, '计算机2021-1班', 3, 0, 1, 2, 'MANUAL', 0, 'ACTIVE', '计算机学院励志奖学金班级分配', '000000', NULL, 1, NOW(), 1, NOW(), 0),
(2004, 1, 2, 103, 1002, '计算机2021-2班', 2, 0, 0, 2, 'MANUAL', 0, 'ACTIVE', '计算机学院励志奖学金班级分配', '000000', NULL, 1, NOW(), 1, NOW(), 0),
-- 经济管理学院班级名额分配
(2005, 1, 1, 104, 1003, '经管2021-1班', 3, 0, 1, 2, 'MANUAL', 0, 'ACTIVE', '经济管理学院国家奖学金班级分配', '000000', NULL, 1, NOW(), 1, NOW(), 0),
(2006, 1, 1, 104, 1004, '经管2021-2班', 2, 0, 0, 2, 'MANUAL', 0, 'ACTIVE', '经济管理学院国家奖学金班级分配', '000000', NULL, 1, NOW(), 1, NOW(), 0),
(2007, 1, 2, 104, 1003, '经管2021-1班', 4, 0, 1, 3, 'MANUAL', 0, 'ACTIVE', '经济管理学院励志奖学金班级分配', '000000', NULL, 1, NOW(), 1, NOW(), 0),
(2008, 1, 2, 104, 1004, '经管2021-2班', 3, 0, 1, 2, 'MANUAL', 0, 'ACTIVE', '经济管理学院励志奖学金班级分配', '000000', NULL, 1, NOW(), 1, NOW(), 0);
-- 7.2 更新批次申请时间
UPDATE jcbt_scholarship_batch SET
application_start_time = '2024-03-01 00:00:00',
application_end_time = '2024-03-31 23:59:59'
WHERE id = 1;
-- =====================================================
-- 8. 验证脚本执行结果
-- =====================================================
SELECT '=== 申请记录表结构检查 ===' as info;
DESCRIBE jcbt_scholarship_application;
SELECT '=== 班级名额分配表数据 ===' as info;
SELECT id, batch_id, scholarship_type_id, class_name, total_quota, used_quota, available_quota, status
FROM jcbt_scholarship_class_quota WHERE deleted = 0;
SELECT '=== 材料表结构检查 ===' as info;
DESCRIBE jcbt_scholarship_attachment;
SELECT '=== 名额使用记录表结构 ===' as info;
DESCRIBE jcbt_scholarship_quota_usage;
SELECT '=== 数据字典检查 ===' as info;
SELECT dt.dict_name, dd.dict_label, dd.dict_value, dd.dict_type
FROM sys_dict_type dt
JOIN sys_dict_data dd ON dt.dict_type = dd.dict_type
WHERE dt.dict_type IN ('applicant_type', 'quota_type', 'quota_operation_type', 'uploader_type')
ORDER BY dt.dict_type, dd.dict_sort;
-- =====================================================
-- 9. 升级完成标记
-- =====================================================
SELECT '=== 数据库升级完成 ===' as info;
SELECT 'v2.0升级成功,支持班主任代申请模式' as message;
SELECT NOW() as upgrade_time;
@@ -0,0 +1,273 @@
-- ===============================================
-- 奖学金申请管理模块 v2.0 数据库升级脚本
-- 基于班主任代申请模式的数据结构调整
-- ===============================================
USE hzdyjs_xg;
-- =====================================================
-- 1. 申请记录表结构调整
-- =====================================================
-- 1.1 添加申请人相关字段
ALTER TABLE jcbt_scholarship_application
ADD COLUMN `applicant_type` VARCHAR(20) DEFAULT 'TEACHER' COMMENT '申请人类型:STUDENT-学生申请,TEACHER-教师代申请';
ALTER TABLE jcbt_scholarship_application
ADD COLUMN `applicant_id` BIGINT(20) DEFAULT NULL COMMENT '申请人ID(班主任ID)';
ALTER TABLE jcbt_scholarship_application
ADD COLUMN `applicant_name` VARCHAR(100) DEFAULT NULL COMMENT '申请人姓名(班主任姓名)';
-- 1.2 修改申请类型枚举值
ALTER TABLE jcbt_scholarship_application
MODIFY COLUMN `application_type` VARCHAR(20) NOT NULL
COMMENT '申请类型:TEACHER_RECOMMEND-教师推荐,AUTO-自动评定,DIRECT-直接指定';
-- 1.3 添加班级和申请人相关索引
CREATE INDEX idx_class_batch ON jcbt_scholarship_application(class_id, batch_id);
CREATE INDEX idx_applicant_batch ON jcbt_scholarship_application(applicant_id, batch_id);
CREATE INDEX idx_applicant_type ON jcbt_scholarship_application(applicant_type, applicant_id);
-- =====================================================
-- 2. 班级名额分配表
-- =====================================================
-- 2.1 创建班级名额分配表
DROP TABLE IF EXISTS `jcbt_scholarship_class_quota`;
CREATE TABLE jcbt_scholarship_class_quota (
id BIGINT(20) NOT NULL COMMENT '主键ID',
batch_id BIGINT(20) NOT NULL COMMENT '批次ID',
scholarship_type_id BIGINT(20) NOT NULL COMMENT '奖学金类型ID',
dept_id BIGINT(20) NOT NULL COMMENT '学院ID',
class_id BIGINT(20) NOT NULL COMMENT '班级ID',
class_name VARCHAR(100) NOT NULL COMMENT '班级名称',
total_quota INT DEFAULT 0 COMMENT '总名额',
used_quota INT DEFAULT 0 COMMENT '已用名额',
reserved_quota INT DEFAULT 0 COMMENT '预留名额',
available_quota INT DEFAULT 0 COMMENT '可用名额',
allocation_method VARCHAR(20) DEFAULT 'MANUAL' COMMENT '分配方式:MANUAL-手动分配,AUTO-自动分配',
is_locked TINYINT(1) DEFAULT 0 COMMENT '是否锁定:0-否,1-是',
status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE-有效,INACTIVE-无效',
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
tenant_id BIGINT(20) NOT NULL COMMENT '租户ID',
create_by BIGINT(20) DEFAULT NULL COMMENT '创建者',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by BIGINT(20) DEFAULT NULL COMMENT '更新者',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT(1) DEFAULT 0 COMMENT '删除标记:0-正常,1-删除',
PRIMARY KEY (id),
UNIQUE KEY uk_batch_type_class (batch_id, scholarship_type_id, class_id, deleted),
INDEX idx_dept_class (dept_id, class_id),
INDEX idx_batch_dept (batch_id, dept_id),
INDEX idx_quota_status (total_quota, status),
INDEX idx_tenant (tenant_id, deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='班级名额分配表';
-- =====================================================
-- 3. 申请材料表结构调整
-- =====================================================
-- 3.1 添加上传者信息字段
ALTER TABLE jcbt_scholarship_attachment
ADD COLUMN `uploader_type` VARCHAR(20) DEFAULT 'TEACHER' COMMENT '上传者类型:STUDENT-学生,TEACHER-教师';
ALTER TABLE jcbt_scholarship_attachment
ADD COLUMN `uploader_id` BIGINT(20) DEFAULT NULL COMMENT '上传者ID';
ALTER TABLE jcbt_scholarship_attachment
ADD COLUMN `uploader_name` VARCHAR(100) DEFAULT NULL COMMENT '上传者姓名';
-- 3.2 修改必需字段逻辑(新需求中材料非必填)
ALTER TABLE jcbt_scholarship_attachment
MODIFY COLUMN `is_required` TINYINT(1) DEFAULT 0 COMMENT '是否必需:0-否,1-是(新需求中材料非必填)';
-- 3.3 添加上传者相关索引
CREATE INDEX idx_uploader ON jcbt_scholarship_attachment(uploader_type, uploader_id);
CREATE INDEX idx_uploader_time ON jcbt_scholarship_attachment(uploader_id, upload_time);
-- =====================================================
-- 4. 名额使用记录表
-- =====================================================
-- 4.1 创建名额使用记录表
DROP TABLE IF EXISTS `jcbt_scholarship_quota_usage`;
CREATE TABLE jcbt_scholarship_quota_usage (
id BIGINT(20) NOT NULL COMMENT '主键ID',
batch_id BIGINT(20) NOT NULL COMMENT '批次ID',
scholarship_type_id BIGINT(20) NOT NULL COMMENT '奖学金类型ID',
quota_type VARCHAR(20) NOT NULL COMMENT '名额类型:CLASS-班级名额,DEPT-学院名额',
target_id BIGINT(20) NOT NULL COMMENT '目标ID(班级ID或学院ID)',
application_id BIGINT(20) NOT NULL COMMENT '申请ID',
student_id BIGINT(20) NOT NULL COMMENT '学生ID',
operation_type VARCHAR(20) NOT NULL COMMENT '操作类型:USE-使用,RELEASE-释放',
operation_time DATETIME NOT NULL COMMENT '操作时间',
operator_id BIGINT(20) NOT NULL COMMENT '操作人ID',
operator_name VARCHAR(100) NOT NULL COMMENT '操作人姓名',
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
tenant_id BIGINT(20) NOT NULL COMMENT '租户ID',
create_by BIGINT(20) DEFAULT NULL COMMENT '创建者',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by BIGINT(20) DEFAULT NULL COMMENT '更新者',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT(1) DEFAULT 0 COMMENT '删除标记:0-正常,1-删除',
PRIMARY KEY (id),
INDEX idx_batch_type_target (batch_id, scholarship_type_id, target_id),
INDEX idx_application_student (application_id, student_id),
INDEX idx_operation_time (operation_type, operation_time),
INDEX idx_operator_time (operator_id, operation_time),
INDEX idx_tenant (tenant_id, deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='名额使用记录表';
-- =====================================================
-- 5. 批次表增加申请时间字段(如果不存在)
-- =====================================================
-- 5.1 检查并添加申请开始时间字段
SET @column_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_batch'
AND COLUMN_NAME = 'application_start_time'
);
SET @sql = IF(@column_exists = 0,
'ALTER TABLE jcbt_scholarship_batch ADD COLUMN application_start_time DATETIME DEFAULT NULL COMMENT "申请开始时间"',
'SELECT "application_start_time column already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 5.2 检查并添加申请结束时间字段
SET @column_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
AND TABLE_NAME = 'jcbt_scholarship_batch'
AND COLUMN_NAME = 'application_end_time'
);
SET @sql = IF(@column_exists = 0,
'ALTER TABLE jcbt_scholarship_batch ADD COLUMN application_end_time DATETIME DEFAULT NULL COMMENT "申请结束时间"',
'SELECT "application_end_time column already exists" as info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- =====================================================
-- 6. 数据字典配置
-- =====================================================
-- 6.1 申请人类型字典
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES ('申请人类型', 'applicant_type', '0', 1, NOW(), 1, NOW(), '奖学金申请人类型')
ON DUPLICATE KEY UPDATE update_time = 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, update_by, update_time, remark) VALUES
(1, '学生申请', 'STUDENT', 'applicant_type', '', 'primary', 'N', '0', 1, NOW(), 1, NOW(), '学生自主申请'),
(2, '教师代申请', 'TEACHER', 'applicant_type', '', 'success', 'Y', '0', 1, NOW(), 1, NOW(), '班主任代学生申请')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 6.2 申请类型字典更新
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES
(1, '教师推荐', 'TEACHER_RECOMMEND', 'application_type', '', 'success', 'Y', '0', 1, NOW(), 1, NOW(), '班主任推荐申请'),
(2, '自动评定', 'AUTO', 'application_type', '', 'info', 'N', '0', 1, NOW(), 1, NOW(), '系统自动评定'),
(3, '直接指定', 'DIRECT', 'application_type', '', 'warning', 'N', '0', 1, NOW(), 1, NOW(), '管理员直接指定')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 6.3 名额类型字典
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES ('名额类型', 'quota_type', '0', 1, NOW(), 1, NOW(), '奖学金名额分配类型')
ON DUPLICATE KEY UPDATE update_time = 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, update_by, update_time, remark) VALUES
(1, '班级名额', 'CLASS', 'quota_type', '', 'primary', 'Y', '0', 1, NOW(), 1, NOW(), '班级级别名额'),
(2, '学院名额', 'DEPT', 'quota_type', '', 'success', 'N', '0', 1, NOW(), 1, NOW(), '学院级别名额'),
(3, '全校名额', 'UNIVERSITY', 'quota_type', '', 'info', 'N', '0', 1, NOW(), 1, NOW(), '全校级别名额')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 6.4 操作类型字典
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES ('名额操作类型', 'quota_operation_type', '0', 1, NOW(), 1, NOW(), '名额使用操作类型')
ON DUPLICATE KEY UPDATE update_time = 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, update_by, update_time, remark) VALUES
(1, '使用名额', 'USE', 'quota_operation_type', '', 'success', 'Y', '0', 1, NOW(), 1, NOW(), '申请时使用名额'),
(2, '释放名额', 'RELEASE', 'quota_operation_type', '', 'warning', 'N', '0', 1, NOW(), 1, NOW(), '撤回申请时释放名额')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- 6.5 上传者类型字典
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES ('材料上传者类型', 'uploader_type', '0', 1, NOW(), 1, NOW(), '申请材料上传者类型')
ON DUPLICATE KEY UPDATE update_time = 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, update_by, update_time, remark) VALUES
(1, '学生上传', 'STUDENT', 'uploader_type', '', 'primary', 'N', '0', 1, NOW(), 1, NOW(), '学生自行上传'),
(2, '教师上传', 'TEACHER', 'uploader_type', '', 'success', 'Y', '0', 1, NOW(), 1, NOW(), '班主任代为上传')
ON DUPLICATE KEY UPDATE update_time = NOW();
-- =====================================================
-- 7. 创建测试数据
-- =====================================================
-- 7.1 班级名额分配测试数据
INSERT INTO jcbt_scholarship_class_quota (
id, batch_id, scholarship_type_id, dept_id, class_id, class_name,
total_quota, used_quota, reserved_quota, available_quota,
allocation_method, is_locked, status, remark,
tenant_id, create_by, create_time, update_by, update_time, deleted
) VALUES
-- 计算机学院班级名额分配
(2001, 1, 1, 103, 1001, '计算机2021-1班', 2, 0, 0, 2, 'MANUAL', 0, 'ACTIVE', '计算机学院国家奖学金班级分配', 1, 1, NOW(), 1, NOW(), 0),
(2002, 1, 1, 103, 1002, '计算机2021-2班', 1, 0, 0, 1, 'MANUAL', 0, 'ACTIVE', '计算机学院国家奖学金班级分配', 1, 1, NOW(), 1, NOW(), 0),
(2003, 1, 2, 103, 1001, '计算机2021-1班', 3, 0, 1, 2, 'MANUAL', 0, 'ACTIVE', '计算机学院励志奖学金班级分配', 1, 1, NOW(), 1, NOW(), 0),
(2004, 1, 2, 103, 1002, '计算机2021-2班', 2, 0, 0, 2, 'MANUAL', 0, 'ACTIVE', '计算机学院励志奖学金班级分配', 1, 1, NOW(), 1, NOW(), 0),
-- 经济管理学院班级名额分配
(2005, 1, 1, 104, 1003, '经管2021-1班', 3, 0, 1, 2, 'MANUAL', 0, 'ACTIVE', '经济管理学院国家奖学金班级分配', 1, 1, NOW(), 1, NOW(), 0),
(2006, 1, 1, 104, 1004, '经管2021-2班', 2, 0, 0, 2, 'MANUAL', 0, 'ACTIVE', '经济管理学院国家奖学金班级分配', 1, 1, NOW(), 1, NOW(), 0),
(2007, 1, 2, 104, 1003, '经管2021-1班', 4, 0, 1, 3, 'MANUAL', 0, 'ACTIVE', '经济管理学院励志奖学金班级分配', 1, 1, NOW(), 1, NOW(), 0),
(2008, 1, 2, 104, 1004, '经管2021-2班', 3, 0, 1, 2, 'MANUAL', 0, 'ACTIVE', '经济管理学院励志奖学金班级分配', 1, 1, NOW(), 1, NOW(), 0);
-- 7.2 更新批次申请时间
UPDATE jcbt_scholarship_batch SET
application_start_time = '2024-03-01 00:00:00',
application_end_time = '2024-03-31 23:59:59'
WHERE id = 1;
-- =====================================================
-- 8. 验证脚本执行结果
-- =====================================================
SELECT '=== 申请记录表结构检查 ===' as info;
DESCRIBE jcbt_scholarship_application;
SELECT '=== 班级名额分配表数据 ===' as info;
SELECT id, batch_id, scholarship_type_id, class_name, total_quota, used_quota, available_quota, status
FROM jcbt_scholarship_class_quota WHERE deleted = 0;
SELECT '=== 材料表结构检查 ===' as info;
DESCRIBE jcbt_scholarship_attachment;
SELECT '=== 名额使用记录表结构 ===' as info;
DESCRIBE jcbt_scholarship_quota_usage;
SELECT '=== 数据字典检查 ===' as info;
SELECT dt.dict_name, dd.dict_label, dd.dict_value, dd.dict_type
FROM sys_dict_type dt
JOIN sys_dict_data dd ON dt.dict_type = dd.dict_type
WHERE dt.dict_type IN ('applicant_type', 'quota_type', 'quota_operation_type', 'uploader_type')
ORDER BY dt.dict_type, dd.dict_sort;
-- =====================================================
-- 9. 升级完成标记
-- =====================================================
SELECT '=== 数据库升级完成 ===' as info;
SELECT 'v2.0升级成功,支持班主任代申请模式' as message;
SELECT NOW() as upgrade_time;