wuzhen update
This commit is contained in:
1 parent
bab7b53074
commit
a2222f63cb
284 files changed
+48629
-3473
No files matched your search
@@ -0,0 +1,28 @@
|
||||
-- =====================================================
|
||||
-- 奖学金类型表 - 添加缺失字段
|
||||
-- 创建时间: 2025-08-04
|
||||
-- 说明: 添加申请条件、评定标准、备注三个字段
|
||||
-- =====================================================
|
||||
|
||||
-- 添加申请条件字段
|
||||
ALTER TABLE jcbt_scholarship_type
|
||||
ADD COLUMN IF NOT EXISTS application_conditions TEXT COMMENT '申请条件'
|
||||
AFTER application_guide;
|
||||
|
||||
-- 添加评定标准字段
|
||||
ALTER TABLE jcbt_scholarship_type
|
||||
ADD COLUMN IF NOT EXISTS evaluation_criteria TEXT COMMENT '评定标准'
|
||||
AFTER application_conditions;
|
||||
|
||||
-- 添加备注字段
|
||||
ALTER TABLE jcbt_scholarship_type
|
||||
ADD COLUMN IF NOT EXISTS remark VARCHAR(500) COMMENT '备注'
|
||||
AFTER evaluation_criteria;
|
||||
|
||||
-- 验证字段添加
|
||||
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_scholarship_type'
|
||||
AND COLUMN_NAME IN ('application_conditions', 'evaluation_criteria', 'remark')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
@@ -0,0 +1,134 @@
|
||||
-- ========================================
|
||||
-- 奖学金名额分配删除问题诊断脚本
|
||||
-- 创建时间: 2025-01-28
|
||||
-- 说明: 用于排查无法删除的名额分配记录
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 1. 查看所有名额分配记录的状态
|
||||
SELECT
|
||||
id,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
allocation_level,
|
||||
target_dept_id,
|
||||
total_quota,
|
||||
used_quota,
|
||||
reserved_quota,
|
||||
available_quota,
|
||||
is_adjustable,
|
||||
is_locked,
|
||||
status,
|
||||
deleted,
|
||||
create_time,
|
||||
update_time
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 0
|
||||
ORDER BY create_time DESC;
|
||||
|
||||
-- 2. 查找可能有问题的记录(已使用名额大于0或已锁定)
|
||||
SELECT
|
||||
'已使用名额大于0' as issue_type,
|
||||
id,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
total_quota,
|
||||
used_quota,
|
||||
reserved_quota,
|
||||
available_quota,
|
||||
is_locked,
|
||||
status
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 0 AND used_quota > 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'已被锁定' as issue_type,
|
||||
id,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
total_quota,
|
||||
used_quota,
|
||||
reserved_quota,
|
||||
available_quota,
|
||||
is_locked,
|
||||
status
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 0 AND is_locked = 1
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'状态异常' as issue_type,
|
||||
id,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
total_quota,
|
||||
used_quota,
|
||||
reserved_quota,
|
||||
available_quota,
|
||||
is_locked,
|
||||
status
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 0 AND status != 'ACTIVE';
|
||||
|
||||
-- 3. 检查是否存在外键约束或关联数据
|
||||
-- 检查是否有申请记录引用了这些名额
|
||||
SELECT
|
||||
q.id as quota_id,
|
||||
q.batch_id,
|
||||
q.scholarship_type_id,
|
||||
q.used_quota,
|
||||
q.is_locked,
|
||||
COUNT(DISTINCT a.id) as application_count
|
||||
FROM jcbt_scholarship_quota q
|
||||
LEFT JOIN jcbt_scholarship_application a ON a.batch_id = q.batch_id
|
||||
AND a.scholarship_type_id = q.scholarship_type_id
|
||||
WHERE q.deleted = 0
|
||||
GROUP BY q.id, q.batch_id, q.scholarship_type_id, q.used_quota, q.is_locked
|
||||
HAVING application_count > 0 OR q.used_quota > 0 OR q.is_locked = 1;
|
||||
|
||||
-- 4. 检查是否有下级名额分配
|
||||
SELECT
|
||||
parent.id as parent_quota_id,
|
||||
parent.allocation_level as parent_level,
|
||||
parent.used_quota as parent_used_quota,
|
||||
parent.is_locked as parent_is_locked,
|
||||
COUNT(child.id) as child_count
|
||||
FROM jcbt_scholarship_quota parent
|
||||
LEFT JOIN jcbt_scholarship_quota child ON child.parent_quota_id = parent.id AND child.deleted = 0
|
||||
WHERE parent.deleted = 0
|
||||
GROUP BY parent.id, parent.allocation_level, parent.used_quota, parent.is_locked
|
||||
HAVING child_count > 0;
|
||||
|
||||
-- 5. 详细查看有问题的记录(根据实际情况调整ID)
|
||||
-- 请替换下面的ID为实际无法删除的记录ID
|
||||
-- SELECT * FROM jcbt_scholarship_quota WHERE id = 替换为实际ID;
|
||||
|
||||
-- 6. 查看相关批次信息
|
||||
SELECT
|
||||
b.id as batch_id,
|
||||
b.batch_name,
|
||||
b.batch_code,
|
||||
b.status as batch_status,
|
||||
b.start_time,
|
||||
b.end_time,
|
||||
COUNT(q.id) as quota_count
|
||||
FROM jcbt_scholarship_batch b
|
||||
LEFT JOIN jcbt_scholarship_quota q ON q.batch_id = b.id AND q.deleted = 0
|
||||
WHERE b.deleted = 0
|
||||
GROUP BY b.id, b.batch_name, b.batch_code, b.status, b.start_time, b.end_time;
|
||||
|
||||
-- 7. 查看奖学金类型信息
|
||||
SELECT
|
||||
st.id as type_id,
|
||||
st.type_name,
|
||||
st.type_code,
|
||||
st.status as type_status,
|
||||
COUNT(q.id) as quota_count
|
||||
FROM jcbt_scholarship_type st
|
||||
LEFT JOIN jcbt_scholarship_quota q ON q.scholarship_type_id = st.id AND q.deleted = 0
|
||||
WHERE st.deleted = 0
|
||||
GROUP BY st.id, st.type_name, st.type_code, st.status;
|
||||
@@ -0,0 +1,249 @@
|
||||
-- ===================================================================
|
||||
-- 奖学金名额显示问题诊断脚本
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 目的: 检查班级名额分配和奖学金类型的数据完整性
|
||||
-- ===================================================================
|
||||
|
||||
-- 1. 检查当前班主任和班级信息
|
||||
SELECT
|
||||
'=== 1. 班主任和班级信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
u.user_id,
|
||||
u.user_name,
|
||||
u.nick_name,
|
||||
c.class_id,
|
||||
c.class_name,
|
||||
c.grade_level,
|
||||
c.dept_id,
|
||||
d.dept_name
|
||||
FROM sys_user u
|
||||
LEFT JOIN jcbt_class c ON u.user_id = c.head_teacher_id
|
||||
LEFT JOIN sys_dept d ON c.dept_id = d.dept_id
|
||||
WHERE u.user_type = '03' -- 班主任
|
||||
AND c.class_id IS NOT NULL
|
||||
ORDER BY c.class_id;
|
||||
|
||||
-- 2. 检查奖学金批次信息
|
||||
SELECT
|
||||
'=== 2. 奖学金批次信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
batch_id,
|
||||
batch_name,
|
||||
batch_status,
|
||||
start_date,
|
||||
end_date,
|
||||
create_time
|
||||
FROM jcbt_scholarship_batch
|
||||
WHERE batch_status = '1' -- 启用状态
|
||||
ORDER BY create_time DESC;
|
||||
|
||||
-- 3. 检查奖学金类型信息
|
||||
SELECT
|
||||
'=== 3. 奖学金类型信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
st.type_level,
|
||||
st.type_status,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
LEFT JOIN jcbt_batch_type bt ON st.type_id = bt.type_id
|
||||
LEFT JOIN jcbt_scholarship_batch b ON bt.batch_id = b.batch_id
|
||||
WHERE st.type_status = '1' -- 启用状态
|
||||
ORDER BY st.type_level, st.type_name;
|
||||
|
||||
-- 4. 检查班级名额分配情况
|
||||
SELECT
|
||||
'=== 4. 班级名额分配情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
qa.allocation_id,
|
||||
qa.batch_id,
|
||||
b.batch_name,
|
||||
qa.type_id,
|
||||
st.type_name,
|
||||
qa.class_id,
|
||||
c.class_name,
|
||||
qa.allocated_quota,
|
||||
qa.allocation_basis,
|
||||
qa.create_time
|
||||
FROM jcbt_quota_allocation qa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON qa.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON qa.type_id = st.type_id
|
||||
LEFT JOIN jcbt_class c ON qa.class_id = c.class_id
|
||||
ORDER BY qa.batch_id, qa.class_id, qa.type_id;
|
||||
|
||||
-- 5. 检查已使用名额情况
|
||||
SELECT
|
||||
'=== 5. 已使用名额情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
sa.batch_id,
|
||||
b.batch_name,
|
||||
sa.scholarship_type_id,
|
||||
st.type_name,
|
||||
sa.applicant_class_id,
|
||||
c.class_name,
|
||||
COUNT(*) as used_quota,
|
||||
GROUP_CONCAT(sa.application_status) as status_list
|
||||
FROM jcbt_scholarship_application sa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON sa.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON sa.scholarship_type_id = st.type_id
|
||||
LEFT JOIN jcbt_class c ON sa.applicant_class_id = c.class_id
|
||||
WHERE sa.application_status IN ('submitted', 'approved') -- 有效申请
|
||||
GROUP BY sa.batch_id, sa.scholarship_type_id, sa.applicant_class_id
|
||||
ORDER BY sa.batch_id, sa.applicant_class_id, sa.scholarship_type_id;
|
||||
|
||||
-- 6. 检查名额使用情况汇总
|
||||
SELECT
|
||||
'=== 6. 名额使用情况汇总 ===' as info;
|
||||
|
||||
SELECT
|
||||
qa.batch_id,
|
||||
b.batch_name,
|
||||
qa.class_id,
|
||||
c.class_name,
|
||||
qa.type_id,
|
||||
st.type_name,
|
||||
qa.allocated_quota,
|
||||
COALESCE(used.used_count, 0) as used_quota,
|
||||
(qa.allocated_quota - COALESCE(used.used_count, 0)) as available_quota,
|
||||
CASE
|
||||
WHEN qa.allocated_quota = 0 THEN 'unlimited'
|
||||
WHEN (qa.allocated_quota - COALESCE(used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_quota_allocation qa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON qa.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON qa.type_id = st.type_id
|
||||
LEFT JOIN jcbt_class c ON qa.class_id = c.class_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) used ON qa.batch_id = used.batch_id
|
||||
AND qa.type_id = used.scholarship_type_id
|
||||
AND qa.class_id = used.applicant_class_id
|
||||
ORDER BY qa.batch_id, qa.class_id, qa.type_id;
|
||||
|
||||
-- 7. 检查特定班级的详细情况(以班级ID=1为例)
|
||||
SELECT
|
||||
'=== 7. 特定班级详细情况检查 (class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
'班级基本信息:' as section,
|
||||
c.class_id,
|
||||
c.class_name,
|
||||
c.grade_level,
|
||||
u.user_name as head_teacher_name,
|
||||
u.nick_name as head_teacher_nick
|
||||
FROM jcbt_class c
|
||||
LEFT JOIN sys_user u ON c.head_teacher_id = u.user_id
|
||||
WHERE c.class_id = 1;
|
||||
|
||||
SELECT
|
||||
'该班级的名额分配:' as section,
|
||||
qa.type_id,
|
||||
st.type_name,
|
||||
qa.allocated_quota,
|
||||
qa.allocation_basis
|
||||
FROM jcbt_quota_allocation qa
|
||||
LEFT JOIN jcbt_scholarship_type st ON qa.type_id = st.type_id
|
||||
WHERE qa.class_id = 1
|
||||
ORDER BY qa.type_id;
|
||||
|
||||
-- 8. 检查数据完整性问题
|
||||
SELECT
|
||||
'=== 8. 数据完整性问题检查 ===' as info;
|
||||
|
||||
-- 检查缺少名额分配的奖学金类型
|
||||
SELECT
|
||||
'缺少名额分配的奖学金类型:' as issue_type,
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_batch_type bt ON st.type_id = bt.type_id
|
||||
INNER JOIN jcbt_scholarship_batch b ON bt.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_quota_allocation qa ON st.type_id = qa.type_id AND bt.batch_id = qa.batch_id
|
||||
WHERE st.type_status = '1'
|
||||
AND b.batch_status = '1'
|
||||
AND qa.allocation_id IS NULL;
|
||||
|
||||
-- 检查有名额分配但奖学金类型不存在的情况
|
||||
SELECT
|
||||
'名额分配指向不存在的奖学金类型:' as issue_type,
|
||||
qa.allocation_id,
|
||||
qa.type_id,
|
||||
qa.batch_id,
|
||||
qa.class_id
|
||||
FROM jcbt_quota_allocation qa
|
||||
LEFT JOIN jcbt_scholarship_type st ON qa.type_id = st.type_id
|
||||
WHERE st.type_id IS NULL;
|
||||
|
||||
-- 9. 模拟API查询结果
|
||||
SELECT
|
||||
'=== 9. 模拟API查询结果 (batch_id=1, class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
st.type_level,
|
||||
st.type_description,
|
||||
CASE
|
||||
WHEN qa.allocated_quota IS NULL THEN 0
|
||||
ELSE qa.allocated_quota
|
||||
END as total_quota,
|
||||
COALESCE(used.used_count, 0) as used_quota,
|
||||
CASE
|
||||
WHEN qa.allocated_quota IS NULL THEN 0
|
||||
WHEN qa.allocated_quota = 0 THEN 999999
|
||||
ELSE (qa.allocated_quota - COALESCE(used.used_count, 0))
|
||||
END as available_quota,
|
||||
CASE
|
||||
WHEN qa.allocated_quota IS NULL THEN FALSE
|
||||
WHEN qa.allocated_quota = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END as has_quota,
|
||||
CASE
|
||||
WHEN qa.allocated_quota IS NULL THEN 'unlimited'
|
||||
WHEN qa.allocated_quota = 0 THEN 'unlimited'
|
||||
WHEN (qa.allocated_quota - COALESCE(used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_batch_type bt ON st.type_id = bt.type_id
|
||||
LEFT JOIN jcbt_quota_allocation qa ON st.type_id = qa.type_id
|
||||
AND bt.batch_id = qa.batch_id
|
||||
AND qa.class_id = 1
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE batch_id = 1
|
||||
AND applicant_class_id = 1
|
||||
AND application_status IN ('submitted', 'approved')
|
||||
GROUP BY scholarship_type_id, applicant_class_id
|
||||
) used ON st.type_id = used.scholarship_type_id
|
||||
WHERE bt.batch_id = 1
|
||||
AND st.type_status = '1'
|
||||
ORDER BY
|
||||
CASE quota_status
|
||||
WHEN 'available' THEN 1
|
||||
WHEN 'unlimited' THEN 2
|
||||
WHEN 'full' THEN 3
|
||||
END,
|
||||
st.type_level,
|
||||
st.type_name;
|
||||
@@ -0,0 +1,245 @@
|
||||
-- ===================================================================
|
||||
-- 奖学金名额显示问题诊断脚本 (修正版)
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 目的: 检查班级名额分配和奖学金类型的数据完整性
|
||||
-- ===================================================================
|
||||
|
||||
-- 1. 检查当前班主任和班级信息
|
||||
SELECT
|
||||
'=== 1. 班主任和班级信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
u.user_id,
|
||||
u.user_name,
|
||||
u.nick_name,
|
||||
c.class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
c.dept_id
|
||||
FROM sys_user u
|
||||
LEFT JOIN xg_class_info c ON u.user_id = c.head_teacher_id
|
||||
WHERE u.user_type = '03' -- 班主任
|
||||
AND c.class_id IS NOT NULL
|
||||
ORDER BY c.class_id;
|
||||
|
||||
-- 2. 检查奖学金批次信息
|
||||
SELECT
|
||||
'=== 2. 奖学金批次信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
batch_id,
|
||||
batch_name,
|
||||
batch_status,
|
||||
start_date,
|
||||
end_date,
|
||||
create_time
|
||||
FROM jcbt_scholarship_batch
|
||||
WHERE batch_status = '1' -- 启用状态
|
||||
ORDER BY create_time DESC;
|
||||
|
||||
-- 3. 检查奖学金类型信息
|
||||
SELECT
|
||||
'=== 3. 奖学金类型信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
st.type_level,
|
||||
st.type_status,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
LEFT JOIN jcbt_scholarship_batch_type bt ON st.type_id = bt.type_id
|
||||
LEFT JOIN jcbt_scholarship_batch b ON bt.batch_id = b.batch_id
|
||||
WHERE st.type_status = '1' -- 启用状态
|
||||
ORDER BY st.type_level, st.type_name;
|
||||
|
||||
-- 4. 检查班级名额分配情况
|
||||
SELECT
|
||||
'=== 4. 班级名额分配情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.quota_id,
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.type_id,
|
||||
st.type_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.allocated_quota,
|
||||
cq.create_time
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.type_id = st.type_id
|
||||
LEFT JOIN xg_class_info c ON cq.class_id = c.class_id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.type_id;
|
||||
|
||||
-- 5. 检查已使用名额情况
|
||||
SELECT
|
||||
'=== 5. 已使用名额情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
sa.batch_id,
|
||||
b.batch_name,
|
||||
sa.scholarship_type_id,
|
||||
st.type_name,
|
||||
sa.applicant_class_id,
|
||||
c.class_name,
|
||||
COUNT(*) as used_quota,
|
||||
GROUP_CONCAT(sa.application_status) as status_list
|
||||
FROM jcbt_scholarship_application sa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON sa.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON sa.scholarship_type_id = st.type_id
|
||||
LEFT JOIN xg_class_info c ON sa.applicant_class_id = c.class_id
|
||||
WHERE sa.application_status IN ('submitted', 'approved') -- 有效申请
|
||||
GROUP BY sa.batch_id, sa.scholarship_type_id, sa.applicant_class_id
|
||||
ORDER BY sa.batch_id, sa.applicant_class_id, sa.scholarship_type_id;
|
||||
|
||||
-- 6. 检查名额使用情况汇总
|
||||
SELECT
|
||||
'=== 6. 名额使用情况汇总 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.type_id,
|
||||
st.type_name,
|
||||
cq.allocated_quota,
|
||||
COALESCE(used.used_count, 0) as used_quota,
|
||||
(cq.allocated_quota - COALESCE(used.used_count, 0)) as available_quota,
|
||||
CASE
|
||||
WHEN cq.allocated_quota = 0 THEN 'unlimited'
|
||||
WHEN (cq.allocated_quota - COALESCE(used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.type_id = st.type_id
|
||||
LEFT JOIN xg_class_info c ON cq.class_id = c.class_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) used ON cq.batch_id = used.batch_id
|
||||
AND cq.type_id = used.scholarship_type_id
|
||||
AND cq.class_id = used.applicant_class_id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.type_id;
|
||||
|
||||
-- 7. 检查特定班级的详细情况(以班级ID=1为例)
|
||||
SELECT
|
||||
'=== 7. 特定班级详细情况检查 (class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
'班级基本信息:' as section,
|
||||
c.class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
u.user_name as head_teacher_name,
|
||||
u.nick_name as head_teacher_nick
|
||||
FROM xg_class_info c
|
||||
LEFT JOIN sys_user u ON c.head_teacher_id = u.user_id
|
||||
WHERE c.class_id = 1;
|
||||
|
||||
SELECT
|
||||
'该班级的名额分配:' as section,
|
||||
cq.type_id,
|
||||
st.type_name,
|
||||
cq.allocated_quota
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.type_id = st.type_id
|
||||
WHERE cq.class_id = 1
|
||||
ORDER BY cq.type_id;
|
||||
|
||||
-- 8. 检查数据完整性问题
|
||||
SELECT
|
||||
'=== 8. 数据完整性问题检查 ===' as info;
|
||||
|
||||
-- 检查缺少名额分配的奖学金类型
|
||||
SELECT
|
||||
'缺少名额分配的奖学金类型:' as issue_type,
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.type_id = bt.type_id
|
||||
INNER JOIN jcbt_scholarship_batch b ON bt.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.type_id = cq.type_id AND bt.batch_id = cq.batch_id
|
||||
WHERE st.type_status = '1'
|
||||
AND b.batch_status = '1'
|
||||
AND cq.quota_id IS NULL;
|
||||
|
||||
-- 检查有名额分配但奖学金类型不存在的情况
|
||||
SELECT
|
||||
'名额分配指向不存在的奖学金类型:' as issue_type,
|
||||
cq.quota_id,
|
||||
cq.type_id,
|
||||
cq.batch_id,
|
||||
cq.class_id
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.type_id = st.type_id
|
||||
WHERE st.type_id IS NULL;
|
||||
|
||||
-- 9. 模拟API查询结果
|
||||
SELECT
|
||||
'=== 9. 模拟API查询结果 (batch_id=1, class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
st.type_level,
|
||||
st.type_description,
|
||||
CASE
|
||||
WHEN cq.allocated_quota IS NULL THEN 0
|
||||
ELSE cq.allocated_quota
|
||||
END as total_quota,
|
||||
COALESCE(used.used_count, 0) as used_quota,
|
||||
CASE
|
||||
WHEN cq.allocated_quota IS NULL THEN 0
|
||||
WHEN cq.allocated_quota = 0 THEN 999999
|
||||
ELSE (cq.allocated_quota - COALESCE(used.used_count, 0))
|
||||
END as available_quota,
|
||||
CASE
|
||||
WHEN cq.allocated_quota IS NULL THEN FALSE
|
||||
WHEN cq.allocated_quota = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END as has_quota,
|
||||
CASE
|
||||
WHEN cq.allocated_quota IS NULL THEN 'unlimited'
|
||||
WHEN cq.allocated_quota = 0 THEN 'unlimited'
|
||||
WHEN (cq.allocated_quota - COALESCE(used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.type_id = bt.type_id
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.type_id = cq.type_id
|
||||
AND bt.batch_id = cq.batch_id
|
||||
AND cq.class_id = 1
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE batch_id = 1
|
||||
AND applicant_class_id = 1
|
||||
AND application_status IN ('submitted', 'approved')
|
||||
GROUP BY scholarship_type_id, applicant_class_id
|
||||
) used ON st.type_id = used.scholarship_type_id
|
||||
WHERE bt.batch_id = 1
|
||||
AND st.type_status = '1'
|
||||
ORDER BY
|
||||
CASE quota_status
|
||||
WHEN 'available' THEN 1
|
||||
WHEN 'unlimited' THEN 2
|
||||
WHEN 'full' THEN 3
|
||||
END,
|
||||
st.type_level,
|
||||
st.type_name;
|
||||
@@ -0,0 +1,353 @@
|
||||
-- ===================================================================
|
||||
-- 奖学金名额显示问题诊断脚本 (完全修正版)
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 目的: 检查班级名额分配和奖学金类型的数据完整性
|
||||
-- 表名和字段名完全修正
|
||||
-- ===================================================================
|
||||
|
||||
-- 1. 检查当前班主任和班级信息
|
||||
SELECT
|
||||
'=== 1. 班主任和班级信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
u.user_id,
|
||||
u.user_name,
|
||||
u.nick_name,
|
||||
c.id as class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
c.college_id,
|
||||
c.major_id
|
||||
FROM sys_user u
|
||||
LEFT JOIN xg_class_msg c ON u.user_id = c.class_teacher_id
|
||||
WHERE u.user_type = '03' -- 班主任
|
||||
AND c.id IS NOT NULL
|
||||
ORDER BY c.id;
|
||||
|
||||
-- 2. 检查奖学金批次信息
|
||||
SELECT
|
||||
'=== 2. 奖学金批次信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
id as batch_id,
|
||||
batch_name,
|
||||
status as batch_status,
|
||||
start_time,
|
||||
end_time,
|
||||
create_time
|
||||
FROM jcbt_scholarship_batch
|
||||
WHERE status = 'ACTIVE' -- 启用状态
|
||||
ORDER BY create_time DESC;
|
||||
|
||||
-- 3. 检查奖学金类型信息
|
||||
SELECT
|
||||
'=== 3. 奖学金类型信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
st.id as type_id,
|
||||
st.type_name,
|
||||
st.level_type,
|
||||
st.status as type_status,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
LEFT JOIN jcbt_scholarship_batch_type bt ON st.id = bt.scholarship_type_id
|
||||
LEFT JOIN jcbt_scholarship_batch b ON bt.batch_id = b.id
|
||||
WHERE st.status = 1 -- 启用状态
|
||||
ORDER BY st.level_type, st.type_name;
|
||||
|
||||
-- 4. 检查班级名额分配情况
|
||||
SELECT
|
||||
'=== 4. 班级名额分配情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.id as quota_id,
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota,
|
||||
cq.available_quota,
|
||||
cq.allocation_method,
|
||||
cq.status,
|
||||
cq.create_time
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.id
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.scholarship_type_id;
|
||||
|
||||
-- 5. 检查已使用名额情况
|
||||
SELECT
|
||||
'=== 5. 已使用名额情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
sa.batch_id,
|
||||
b.batch_name,
|
||||
sa.scholarship_type_id,
|
||||
st.type_name,
|
||||
sa.applicant_class_id,
|
||||
c.class_name,
|
||||
COUNT(*) as actual_used_quota,
|
||||
GROUP_CONCAT(sa.application_status) as status_list
|
||||
FROM jcbt_scholarship_application sa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON sa.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON sa.scholarship_type_id = st.id
|
||||
LEFT JOIN xg_class_msg c ON sa.applicant_class_id = c.id
|
||||
WHERE sa.application_status IN ('submitted', 'approved') -- 有效申请
|
||||
GROUP BY sa.batch_id, sa.scholarship_type_id, sa.applicant_class_id
|
||||
ORDER BY sa.batch_id, sa.applicant_class_id, sa.scholarship_type_id;
|
||||
|
||||
-- 6. 检查名额使用情况汇总与一致性
|
||||
SELECT
|
||||
'=== 6. 名额使用情况汇总与一致性检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota as recorded_used_quota,
|
||||
COALESCE(actual_used.used_count, 0) as actual_used_quota,
|
||||
cq.available_quota as recorded_available_quota,
|
||||
(cq.total_quota - COALESCE(actual_used.used_count, 0)) as calculated_available_quota,
|
||||
CASE
|
||||
WHEN cq.used_quota != COALESCE(actual_used.used_count, 0) THEN 'INCONSISTENT'
|
||||
WHEN cq.available_quota != (cq.total_quota - COALESCE(actual_used.used_count, 0)) THEN 'INCONSISTENT'
|
||||
ELSE 'CONSISTENT'
|
||||
END as consistency_status,
|
||||
CASE
|
||||
WHEN cq.total_quota = 0 THEN 'unlimited'
|
||||
WHEN (cq.total_quota - COALESCE(actual_used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.id
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) actual_used ON cq.batch_id = actual_used.batch_id
|
||||
AND cq.scholarship_type_id = actual_used.scholarship_type_id
|
||||
AND cq.class_id = actual_used.applicant_class_id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.scholarship_type_id;
|
||||
|
||||
-- 7. 检查特定班级的详细情况(以班级ID=1为例)
|
||||
SELECT
|
||||
'=== 7. 特定班级详细情况检查 (class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
'班级基本信息:' as section,
|
||||
c.id as class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
c.class_teacher_id,
|
||||
u.user_name as class_teacher_name,
|
||||
u.nick_name as class_teacher_nick
|
||||
FROM xg_class_msg c
|
||||
LEFT JOIN sys_user u ON c.class_teacher_id = u.user_id
|
||||
WHERE c.id = 1;
|
||||
|
||||
SELECT
|
||||
'该班级的名额分配:' as section,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota,
|
||||
cq.available_quota,
|
||||
cq.allocation_method,
|
||||
cq.status
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.id
|
||||
WHERE cq.class_id = 1
|
||||
ORDER BY cq.scholarship_type_id;
|
||||
|
||||
-- 8. 检查数据完整性问题
|
||||
SELECT
|
||||
'=== 8. 数据完整性问题检查 ===' as info;
|
||||
|
||||
-- 检查缺少名额分配的奖学金类型
|
||||
SELECT
|
||||
'缺少名额分配的奖学金类型:' as issue_type,
|
||||
st.id as type_id,
|
||||
st.type_name,
|
||||
bt.batch_id,
|
||||
b.batch_name,
|
||||
COUNT(DISTINCT c.id) as total_classes_without_quota
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.id = bt.scholarship_type_id
|
||||
INNER JOIN jcbt_scholarship_batch b ON bt.batch_id = b.id
|
||||
CROSS JOIN xg_class_msg c
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.id = cq.scholarship_type_id
|
||||
AND bt.batch_id = cq.batch_id
|
||||
AND c.id = cq.class_id
|
||||
WHERE st.status = 1
|
||||
AND b.status = 'ACTIVE'
|
||||
AND c.class_status = '1'
|
||||
AND cq.id IS NULL
|
||||
GROUP BY st.id, st.type_name, bt.batch_id, b.batch_name;
|
||||
|
||||
-- 检查有名额分配但奖学金类型不存在的情况
|
||||
SELECT
|
||||
'名额分配指向不存在的奖学金类型:' as issue_type,
|
||||
cq.id as quota_id,
|
||||
cq.scholarship_type_id,
|
||||
cq.batch_id,
|
||||
cq.class_id
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.id
|
||||
WHERE st.id IS NULL;
|
||||
|
||||
-- 检查名额分配指向不存在的班级
|
||||
SELECT
|
||||
'名额分配指向不存在的班级:' as issue_type,
|
||||
cq.id as quota_id,
|
||||
cq.class_id,
|
||||
cq.class_name as recorded_class_name
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
WHERE c.id IS NULL;
|
||||
|
||||
-- 9. 模拟API查询结果
|
||||
SELECT
|
||||
'=== 9. 模拟API查询结果 (batch_id=1, class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
st.id as type_id,
|
||||
st.type_name,
|
||||
st.level_type,
|
||||
st.description,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN 0
|
||||
ELSE cq.total_quota
|
||||
END as total_quota,
|
||||
CASE
|
||||
WHEN cq.used_quota IS NULL THEN 0
|
||||
ELSE cq.used_quota
|
||||
END as used_quota,
|
||||
CASE
|
||||
WHEN cq.available_quota IS NULL THEN 0
|
||||
WHEN cq.total_quota = 0 THEN 999999
|
||||
ELSE cq.available_quota
|
||||
END as available_quota,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN FALSE
|
||||
WHEN cq.total_quota = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END as has_quota,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN 'no_allocation'
|
||||
WHEN cq.total_quota = 0 THEN 'unlimited'
|
||||
WHEN cq.available_quota > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status,
|
||||
cq.allocation_method,
|
||||
cq.status as allocation_status
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.id = bt.scholarship_type_id
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.id = cq.scholarship_type_id
|
||||
AND bt.batch_id = cq.batch_id
|
||||
AND cq.class_id = 1
|
||||
WHERE bt.batch_id = 1
|
||||
AND st.status = 1
|
||||
ORDER BY
|
||||
CASE quota_status
|
||||
WHEN 'available' THEN 1
|
||||
WHEN 'unlimited' THEN 2
|
||||
WHEN 'full' THEN 3
|
||||
WHEN 'no_allocation' THEN 4
|
||||
END,
|
||||
st.level_type,
|
||||
st.type_name;
|
||||
|
||||
-- 10. 额外检查:验证数据同步问题
|
||||
SELECT
|
||||
'=== 10. 数据同步问题检查 ===' as info;
|
||||
|
||||
-- 检查used_quota和available_quota字段是否需要更新
|
||||
SELECT
|
||||
'need_quota_update' as check_type,
|
||||
cq.id,
|
||||
cq.batch_id,
|
||||
cq.class_id,
|
||||
cq.scholarship_type_id,
|
||||
cq.total_quota,
|
||||
cq.used_quota as recorded_used,
|
||||
COALESCE(actual.actual_used, 0) as actual_used,
|
||||
cq.available_quota as recorded_available,
|
||||
(cq.total_quota - COALESCE(actual.actual_used, 0)) as calculated_available
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as actual_used
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) actual ON cq.batch_id = actual.batch_id
|
||||
AND cq.scholarship_type_id = actual.scholarship_type_id
|
||||
AND cq.class_id = actual.applicant_class_id
|
||||
WHERE cq.used_quota != COALESCE(actual.actual_used, 0)
|
||||
OR cq.available_quota != (cq.total_quota - COALESCE(actual.actual_used, 0));
|
||||
|
||||
-- 11. 快速检查当前数据状态
|
||||
SELECT
|
||||
'=== 11. 快速数据状态检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
'总批次数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_batch;
|
||||
|
||||
SELECT
|
||||
'启用批次数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_batch
|
||||
WHERE status = 'ACTIVE';
|
||||
|
||||
SELECT
|
||||
'总奖学金类型数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_type;
|
||||
|
||||
SELECT
|
||||
'启用奖学金类型数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE status = 1;
|
||||
|
||||
SELECT
|
||||
'总班级数' as item,
|
||||
COUNT(*) as count
|
||||
FROM xg_class_msg;
|
||||
|
||||
SELECT
|
||||
'启用班级数' as item,
|
||||
COUNT(*) as count
|
||||
FROM xg_class_msg
|
||||
WHERE class_status = '1';
|
||||
|
||||
SELECT
|
||||
'总名额分配记录数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_class_quota;
|
||||
|
||||
SELECT
|
||||
'总申请记录数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_application;
|
||||
@@ -0,0 +1,306 @@
|
||||
-- ===================================================================
|
||||
-- 奖学金名额显示问题诊断脚本 (最终修正版)
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 目的: 检查班级名额分配和奖学金类型的数据完整性
|
||||
-- 表名修正: xg_class_msg, jcbt_scholarship_class_quota
|
||||
-- ===================================================================
|
||||
|
||||
-- 1. 检查当前班主任和班级信息
|
||||
SELECT
|
||||
'=== 1. 班主任和班级信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
u.user_id,
|
||||
u.user_name,
|
||||
u.nick_name,
|
||||
c.id as class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
c.college_id,
|
||||
c.major_id
|
||||
FROM sys_user u
|
||||
LEFT JOIN xg_class_msg c ON u.user_id = c.class_teacher_id
|
||||
WHERE u.user_type = '03' -- 班主任
|
||||
AND c.id IS NOT NULL
|
||||
ORDER BY c.id;
|
||||
|
||||
-- 2. 检查奖学金批次信息
|
||||
SELECT
|
||||
'=== 2. 奖学金批次信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
id as batch_id,
|
||||
batch_name,
|
||||
status as batch_status,
|
||||
start_time,
|
||||
end_time,
|
||||
create_time
|
||||
FROM jcbt_scholarship_batch
|
||||
WHERE status = 'ACTIVE' -- 启用状态
|
||||
ORDER BY create_time DESC;
|
||||
|
||||
-- 3. 检查奖学金类型信息
|
||||
SELECT
|
||||
'=== 3. 奖学金类型信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
st.id as type_id,
|
||||
st.type_name,
|
||||
st.level_type,
|
||||
st.status as type_status,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
LEFT JOIN jcbt_scholarship_batch_type bt ON st.id = bt.scholarship_type_id
|
||||
LEFT JOIN jcbt_scholarship_batch b ON bt.batch_id = b.id
|
||||
WHERE st.status = 1 -- 启用状态
|
||||
ORDER BY st.level_type, st.type_name;
|
||||
|
||||
-- 4. 检查班级名额分配情况
|
||||
SELECT
|
||||
'=== 4. 班级名额分配情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.id as quota_id,
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota,
|
||||
cq.available_quota,
|
||||
cq.allocation_method,
|
||||
cq.status,
|
||||
cq.create_time
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.id
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.scholarship_type_id;
|
||||
|
||||
-- 5. 检查已使用名额情况
|
||||
SELECT
|
||||
'=== 5. 已使用名额情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
sa.batch_id,
|
||||
b.batch_name,
|
||||
sa.scholarship_type_id,
|
||||
st.type_name,
|
||||
sa.applicant_class_id,
|
||||
c.class_name,
|
||||
COUNT(*) as actual_used_quota,
|
||||
GROUP_CONCAT(sa.application_status) as status_list
|
||||
FROM jcbt_scholarship_application sa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON sa.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON sa.scholarship_type_id = st.type_id
|
||||
LEFT JOIN xg_class_msg c ON sa.applicant_class_id = c.id
|
||||
WHERE sa.application_status IN ('submitted', 'approved') -- 有效申请
|
||||
GROUP BY sa.batch_id, sa.scholarship_type_id, sa.applicant_class_id
|
||||
ORDER BY sa.batch_id, sa.applicant_class_id, sa.scholarship_type_id;
|
||||
|
||||
-- 6. 检查名额使用情况汇总与一致性
|
||||
SELECT
|
||||
'=== 6. 名额使用情况汇总与一致性检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota as recorded_used_quota,
|
||||
COALESCE(actual_used.used_count, 0) as actual_used_quota,
|
||||
cq.available_quota as recorded_available_quota,
|
||||
(cq.total_quota - COALESCE(actual_used.used_count, 0)) as calculated_available_quota,
|
||||
CASE
|
||||
WHEN cq.used_quota != COALESCE(actual_used.used_count, 0) THEN 'INCONSISTENT'
|
||||
WHEN cq.available_quota != (cq.total_quota - COALESCE(actual_used.used_count, 0)) THEN 'INCONSISTENT'
|
||||
ELSE 'CONSISTENT'
|
||||
END as consistency_status,
|
||||
CASE
|
||||
WHEN cq.total_quota = 0 THEN 'unlimited'
|
||||
WHEN (cq.total_quota - COALESCE(actual_used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.type_id
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) actual_used ON cq.batch_id = actual_used.batch_id
|
||||
AND cq.scholarship_type_id = actual_used.scholarship_type_id
|
||||
AND cq.class_id = actual_used.applicant_class_id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.scholarship_type_id;
|
||||
|
||||
-- 7. 检查特定班级的详细情况(以班级ID=1为例)
|
||||
SELECT
|
||||
'=== 7. 特定班级详细情况检查 (class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
'班级基本信息:' as section,
|
||||
c.id as class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
c.class_teacher_id,
|
||||
u.user_name as class_teacher_name,
|
||||
u.nick_name as class_teacher_nick
|
||||
FROM xg_class_msg c
|
||||
LEFT JOIN sys_user u ON c.class_teacher_id = u.user_id
|
||||
WHERE c.id = 1;
|
||||
|
||||
SELECT
|
||||
'该班级的名额分配:' as section,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota,
|
||||
cq.available_quota,
|
||||
cq.allocation_method,
|
||||
cq.status
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.type_id
|
||||
WHERE cq.class_id = 1
|
||||
ORDER BY cq.scholarship_type_id;
|
||||
|
||||
-- 8. 检查数据完整性问题
|
||||
SELECT
|
||||
'=== 8. 数据完整性问题检查 ===' as info;
|
||||
|
||||
-- 检查缺少名额分配的奖学金类型
|
||||
SELECT
|
||||
'缺少名额分配的奖学金类型:' as issue_type,
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
bt.batch_id,
|
||||
b.batch_name,
|
||||
COUNT(DISTINCT c.id) as total_classes_without_quota
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.type_id = bt.type_id
|
||||
INNER JOIN jcbt_scholarship_batch b ON bt.batch_id = b.batch_id
|
||||
CROSS JOIN xg_class_msg c
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.type_id = cq.scholarship_type_id
|
||||
AND bt.batch_id = cq.batch_id
|
||||
AND c.id = cq.class_id
|
||||
WHERE st.type_status = '1'
|
||||
AND b.batch_status = '1'
|
||||
AND c.class_status = '1'
|
||||
AND cq.id IS NULL
|
||||
GROUP BY st.type_id, st.type_name, bt.batch_id, b.batch_name;
|
||||
|
||||
-- 检查有名额分配但奖学金类型不存在的情况
|
||||
SELECT
|
||||
'名额分配指向不存在的奖学金类型:' as issue_type,
|
||||
cq.id as quota_id,
|
||||
cq.scholarship_type_id,
|
||||
cq.batch_id,
|
||||
cq.class_id
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.type_id
|
||||
WHERE st.type_id IS NULL;
|
||||
|
||||
-- 检查名额分配指向不存在的班级
|
||||
SELECT
|
||||
'名额分配指向不存在的班级:' as issue_type,
|
||||
cq.id as quota_id,
|
||||
cq.class_id,
|
||||
cq.class_name as recorded_class_name
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
WHERE c.id IS NULL;
|
||||
|
||||
-- 9. 模拟API查询结果
|
||||
SELECT
|
||||
'=== 9. 模拟API查询结果 (batch_id=1, class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
st.type_level,
|
||||
st.type_description,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN 0
|
||||
ELSE cq.total_quota
|
||||
END as total_quota,
|
||||
CASE
|
||||
WHEN cq.used_quota IS NULL THEN 0
|
||||
ELSE cq.used_quota
|
||||
END as used_quota,
|
||||
CASE
|
||||
WHEN cq.available_quota IS NULL THEN 0
|
||||
WHEN cq.total_quota = 0 THEN 999999
|
||||
ELSE cq.available_quota
|
||||
END as available_quota,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN FALSE
|
||||
WHEN cq.total_quota = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END as has_quota,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN 'no_allocation'
|
||||
WHEN cq.total_quota = 0 THEN 'unlimited'
|
||||
WHEN cq.available_quota > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status,
|
||||
cq.allocation_method,
|
||||
cq.status as allocation_status
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.type_id = bt.type_id
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.type_id = cq.scholarship_type_id
|
||||
AND bt.batch_id = cq.batch_id
|
||||
AND cq.class_id = 1
|
||||
WHERE bt.batch_id = 1
|
||||
AND st.type_status = '1'
|
||||
ORDER BY
|
||||
CASE quota_status
|
||||
WHEN 'available' THEN 1
|
||||
WHEN 'unlimited' THEN 2
|
||||
WHEN 'full' THEN 3
|
||||
WHEN 'no_allocation' THEN 4
|
||||
END,
|
||||
st.type_level,
|
||||
st.type_name;
|
||||
|
||||
-- 10. 额外检查:验证数据同步问题
|
||||
SELECT
|
||||
'=== 10. 数据同步问题检查 ===' as info;
|
||||
|
||||
-- 检查used_quota和available_quota字段是否需要更新
|
||||
SELECT
|
||||
'need_quota_update' as check_type,
|
||||
cq.id,
|
||||
cq.batch_id,
|
||||
cq.class_id,
|
||||
cq.scholarship_type_id,
|
||||
cq.total_quota,
|
||||
cq.used_quota as recorded_used,
|
||||
COALESCE(actual.actual_used, 0) as actual_used,
|
||||
cq.available_quota as recorded_available,
|
||||
(cq.total_quota - COALESCE(actual.actual_used, 0)) as calculated_available
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as actual_used
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) actual ON cq.batch_id = actual.batch_id
|
||||
AND cq.scholarship_type_id = actual.scholarship_type_id
|
||||
AND cq.class_id = actual.applicant_class_id
|
||||
WHERE cq.used_quota != COALESCE(actual.actual_used, 0)
|
||||
OR cq.available_quota != (cq.total_quota - COALESCE(actual.actual_used, 0));
|
||||
@@ -0,0 +1,56 @@
|
||||
-- =====================================================
|
||||
-- 奖学金管理模块 - 兼得类型字段修复脚本
|
||||
-- 版本: v1.0
|
||||
-- 创建时间: 2025-08-04
|
||||
-- 说明: 为jcbt_scholarship_type表添加缺失的compatibility_type字段
|
||||
-- =====================================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 为奖学金类型表添加兼得类型字段
|
||||
-- =====================================================
|
||||
|
||||
-- 检查字段是否存在,如果不存在则添加
|
||||
ALTER TABLE `jcbt_scholarship_type`
|
||||
ADD COLUMN IF NOT EXISTS `compatibility_type` VARCHAR(20) DEFAULT 'COMPATIBLE' COMMENT '兼得类型:EXCLUSIVE-完全互斥,COMPATIBLE-完全兼容,PRIORITY-优先级关系,CUSTOM-自定义配置'
|
||||
AFTER `application_guide`;
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 添加兼得类型字段索引
|
||||
-- =====================================================
|
||||
|
||||
-- 为新字段添加索引以提高查询性能
|
||||
ALTER TABLE `jcbt_scholarship_type`
|
||||
ADD INDEX IF NOT EXISTS `idx_compatibility_type` (`compatibility_type`) COMMENT '兼得类型索引';
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 更新现有数据(可选)
|
||||
-- =====================================================
|
||||
|
||||
-- 将现有数据的兼得类型设置为默认值(兼容)
|
||||
-- 如果需要不同的默认值,可以修改这里的UPDATE语句
|
||||
UPDATE `jcbt_scholarship_type`
|
||||
SET `compatibility_type` = 'COMPATIBLE'
|
||||
WHERE `compatibility_type` IS NULL AND `deleted` = 0;
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 验证字段添加结果
|
||||
-- =====================================================
|
||||
|
||||
-- 查询表结构确认字段已添加
|
||||
-- DESCRIBE `jcbt_scholarship_type`;
|
||||
|
||||
-- 查询数据确认字段值正确
|
||||
-- SELECT id, type_name, compatibility_type FROM `jcbt_scholarship_type` WHERE deleted = 0 LIMIT 5;
|
||||
|
||||
-- =====================================================
|
||||
-- 脚本执行完成
|
||||
-- =====================================================
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- 执行完成提示
|
||||
SELECT '兼得类型字段修复完成!' AS status;
|
||||
@@ -0,0 +1,101 @@
|
||||
-- ========================================
|
||||
-- 修复奖学金名额分配唯一约束问题
|
||||
-- 创建时间: 2025-01-28
|
||||
-- 问题描述: 唯一约束包含deleted字段导致逻辑删除时出现约束冲突
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 1. 查看当前的唯一约束问题数据
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
target_dept_id,
|
||||
deleted,
|
||||
COUNT(*) as count_records,
|
||||
GROUP_CONCAT(id) as record_ids,
|
||||
GROUP_CONCAT(status) as statuses
|
||||
FROM jcbt_scholarship_quota
|
||||
GROUP BY batch_id, scholarship_type_id, target_dept_id, deleted
|
||||
HAVING COUNT(*) > 1
|
||||
ORDER BY batch_id, scholarship_type_id, target_dept_id;
|
||||
|
||||
-- 2. 查看可能存在冲突的记录(同一组合下有删除和未删除的记录)
|
||||
SELECT
|
||||
q1.id as active_id,
|
||||
q1.batch_id,
|
||||
q1.scholarship_type_id,
|
||||
q1.target_dept_id,
|
||||
q1.deleted as active_deleted,
|
||||
q1.status as active_status,
|
||||
q2.id as deleted_id,
|
||||
q2.deleted as deleted_deleted,
|
||||
q2.status as deleted_status
|
||||
FROM jcbt_scholarship_quota q1
|
||||
INNER JOIN jcbt_scholarship_quota q2 ON
|
||||
q1.batch_id = q2.batch_id
|
||||
AND q1.scholarship_type_id = q2.scholarship_type_id
|
||||
AND q1.target_dept_id = q2.target_dept_id
|
||||
AND q1.deleted = 0
|
||||
AND q2.deleted = 1
|
||||
ORDER BY q1.batch_id, q1.scholarship_type_id, q1.target_dept_id;
|
||||
|
||||
-- 3. 删除旧的唯一约束(包含deleted字段的约束)
|
||||
ALTER TABLE jcbt_scholarship_quota DROP INDEX uk_batch_type_dept;
|
||||
|
||||
-- 4. 先清理可能的重复数据,然后重新添加不包含deleted字段的唯一约束
|
||||
-- 这样可以避免删除时的约束冲突,同时保证业务数据的唯一性
|
||||
|
||||
-- 清理重复的已删除记录(保留最新的一条)
|
||||
DELETE q1 FROM jcbt_scholarship_quota q1
|
||||
INNER JOIN jcbt_scholarship_quota q2
|
||||
WHERE q1.batch_id = q2.batch_id
|
||||
AND q1.scholarship_type_id = q2.scholarship_type_id
|
||||
AND q1.target_dept_id = q2.target_dept_id
|
||||
AND q1.deleted = 1
|
||||
AND q2.deleted = 1
|
||||
AND q1.id < q2.id;
|
||||
|
||||
-- 如果仍然存在同一业务组合的active和deleted记录,物理删除deleted记录
|
||||
DELETE FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 1
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM jcbt_scholarship_quota q2
|
||||
WHERE q2.batch_id = jcbt_scholarship_quota.batch_id
|
||||
AND q2.scholarship_type_id = jcbt_scholarship_quota.scholarship_type_id
|
||||
AND q2.target_dept_id = jcbt_scholarship_quota.target_dept_id
|
||||
AND q2.deleted = 0
|
||||
);
|
||||
|
||||
-- 重新添加不包含deleted字段的唯一约束
|
||||
ALTER TABLE jcbt_scholarship_quota
|
||||
ADD CONSTRAINT uk_batch_type_dept_business
|
||||
UNIQUE (batch_id, scholarship_type_id, target_dept_id);
|
||||
|
||||
-- 5. 验证修复结果
|
||||
SELECT
|
||||
'修复后检查' as check_type,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
target_dept_id,
|
||||
COUNT(*) as count_records,
|
||||
GROUP_CONCAT(CONCAT('id:', id, ',deleted:', deleted)) as record_details
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 0
|
||||
GROUP BY batch_id, scholarship_type_id, target_dept_id
|
||||
HAVING COUNT(*) > 1
|
||||
UNION ALL
|
||||
SELECT
|
||||
'已删除记录检查' as check_type,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
target_dept_id,
|
||||
COUNT(*) as count_records,
|
||||
GROUP_CONCAT(CONCAT('id:', id, ',deleted:', deleted)) as record_details
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 1
|
||||
GROUP BY batch_id, scholarship_type_id, target_dept_id
|
||||
HAVING COUNT(*) > 1;
|
||||
|
||||
-- 6. 显示当前表的约束信息
|
||||
SHOW INDEX FROM jcbt_scholarship_quota WHERE Key_name LIKE '%batch%' OR Key_name LIKE '%type%' OR Key_name LIKE '%dept%';
|
||||
@@ -0,0 +1,71 @@
|
||||
-- =====================================================
|
||||
-- 奖学金名额分配 - 简单测试数据插入脚本
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 说明: 插入基础测试数据
|
||||
-- =====================================================
|
||||
|
||||
-- 设置数据库
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 插入奖学金批次数据
|
||||
-- =====================================================
|
||||
INSERT IGNORE INTO jcbt_scholarship_batch (
|
||||
id, batch_code, batch_name, academic_year, semester, batch_type,
|
||||
start_time, end_time, apply_start_time, apply_end_time,
|
||||
review_start_time, review_end_time, status, description,
|
||||
create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
(1890000000000000001, 'BATCH_2024_1', '2024学年第一学期奖学金评定', '2024-2025', 1, 'REGULAR',
|
||||
'2024-09-01 00:00:00', '2024-12-31 23:59:59', '2024-10-01 00:00:00', '2024-10-31 23:59:59',
|
||||
'2024-11-01 00:00:00', '2024-11-30 23:59:59', 'ACTIVE', '2024学年第一学期常规奖学金评定批次',
|
||||
1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 插入奖学金类型数据
|
||||
-- =====================================================
|
||||
INSERT IGNORE INTO jcbt_scholarship_type (
|
||||
id, type_code, type_name, type_category, level_type, award_amount,
|
||||
description, application_guide, application_conditions, evaluation_criteria,
|
||||
compatibility_type, sort_order, status, is_system,
|
||||
create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
(1890000000000000101, 'GJZXJ', '国家奖学金', 'NATIONAL', 'FIRST_CLASS', 8000.00,
|
||||
'国家奖学金是为了激励普通本科高校、高等职业学校和高等专科学校学生勤奋学习、努力进取。',
|
||||
'学生本人提出申请,按学校规定程序推荐上报。', '品学兼优,学习成绩排名在评选范围内位于前10%',
|
||||
'学习成绩、综合测评、道德品质等综合评定', 'EXCLUSIVE', 1, 1, 1,
|
||||
1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 插入名额分配数据
|
||||
-- =====================================================
|
||||
INSERT IGNORE INTO jcbt_scholarship_quota (
|
||||
id, batch_id, scholarship_type_id, allocation_level, target_dept_id, parent_quota_id,
|
||||
total_quota, used_quota, reserved_quota, available_quota,
|
||||
allocation_rule, allocation_basis, allocation_method, is_adjustable, is_locked, status,
|
||||
remark, create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
(1890000000000000201, 1890000000000000001, 1890000000000000101, 'UNIVERSITY', NULL, NULL,
|
||||
50, 0, 5, 45, '{"type":"university","rule":"total_allocation"}', '根据学校总体规模和历年获奖情况分配',
|
||||
'MANUAL', 1, 0, 'ACTIVE', '全校国家奖学金总名额', 1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 验证数据
|
||||
-- =====================================================
|
||||
SELECT '插入结果验证' as message;
|
||||
SELECT COUNT(*) as batch_count FROM jcbt_scholarship_batch WHERE deleted = 0;
|
||||
SELECT COUNT(*) as type_count FROM jcbt_scholarship_type WHERE deleted = 0;
|
||||
SELECT COUNT(*) as quota_count FROM jcbt_scholarship_quota WHERE deleted = 0;
|
||||
|
||||
-- 验证关联查询
|
||||
SELECT
|
||||
q.id,
|
||||
b.batch_name,
|
||||
st.type_name as scholarship_type_name,
|
||||
q.allocation_level,
|
||||
q.total_quota,
|
||||
q.status
|
||||
FROM jcbt_scholarship_quota q
|
||||
LEFT JOIN jcbt_scholarship_batch b ON q.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON q.scholarship_type_id = st.id
|
||||
WHERE q.deleted = 0;
|
||||
@@ -0,0 +1,119 @@
|
||||
-- ========================================
|
||||
-- 贫困生认定申请管理模块 - 菜单权限配置
|
||||
-- 创建时间: 2025-01-26
|
||||
-- 说明: 配置贫困生认定申请管理功能的菜单和权限
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 设置变量
|
||||
SET @parent_menu_id = 2015; -- 奖惩补贴管理父菜单ID
|
||||
SET @menu_order = 4; -- 菜单排序(在奖学金申请管理之后)
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 删除已存在的菜单(开发环境重新创建)
|
||||
-- =====================================================
|
||||
DELETE FROM sys_menu WHERE menu_name = '助学金申请管理' AND parent_id = @parent_menu_id;
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 创建助学金申请管理菜单
|
||||
-- =====================================================
|
||||
INSERT INTO sys_menu (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 ('助学金申请管理', @parent_menu_id, @menu_order, 'povertyApplication', 'jcbt/poverty/Application/index', '', 1, 0, 'C', '0', '0', 'jcbt:povertyApplication:list', 'money', 1, NOW(), 1, NOW(), '贫困生认定申请管理菜单');
|
||||
|
||||
-- 获取刚插入的菜单ID
|
||||
SET @poverty_menu_id = LAST_INSERT_ID();
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 创建基础管理功能按钮权限(6个)
|
||||
-- =====================================================
|
||||
|
||||
-- 3.1 查询权限
|
||||
INSERT INTO sys_menu (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 ('申请查询', @poverty_menu_id, 1, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:query', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.2 新增权限
|
||||
INSERT INTO sys_menu (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 ('申请新增', @poverty_menu_id, 2, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:add', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.3 修改权限
|
||||
INSERT INTO sys_menu (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 ('申请修改', @poverty_menu_id, 3, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:edit', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.4 删除权限
|
||||
INSERT INTO sys_menu (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 ('申请删除', @poverty_menu_id, 4, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:remove', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.5 详情权限
|
||||
INSERT INTO sys_menu (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 ('申请详情', @poverty_menu_id, 5, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:detail', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.6 导出权限
|
||||
INSERT INTO sys_menu (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 ('申请导出', @poverty_menu_id, 6, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:export', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 创建业务功能权限(4个)
|
||||
-- =====================================================
|
||||
|
||||
-- 4.1 我的申请权限
|
||||
INSERT INTO sys_menu (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 ('我的申请', @poverty_menu_id, 7, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:myList', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.2 待审核申请权限
|
||||
INSERT INTO sys_menu (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 ('待审核申请', @poverty_menu_id, 8, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:pendingList', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.3 申请资格检查权限
|
||||
INSERT INTO sys_menu (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 ('资格检查', @poverty_menu_id, 9, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:check', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.4 申请审核权限
|
||||
INSERT INTO sys_menu (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 ('申请审核', @poverty_menu_id, 10, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:approve', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 创建辅助功能权限(6个)
|
||||
-- =====================================================
|
||||
|
||||
-- 5.1 提交申请权限
|
||||
INSERT INTO sys_menu (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 ('提交申请', @poverty_menu_id, 11, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:submit', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.2 撤回申请权限
|
||||
INSERT INTO sys_menu (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 ('撤回申请', @poverty_menu_id, 12, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:cancel', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.3 驳回申请权限
|
||||
INSERT INTO sys_menu (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 ('驳回申请', @poverty_menu_id, 13, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:reject', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.4 草稿保存权限
|
||||
INSERT INTO sys_menu (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 ('保存草稿', @poverty_menu_id, 14, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:draft', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.5 重复检查权限
|
||||
INSERT INTO sys_menu (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 ('重复检查', @poverty_menu_id, 15, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:duplicate', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.6 申请统计权限 ⚠️ 这是关键的统计权限
|
||||
INSERT INTO sys_menu (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 ('申请统计', @poverty_menu_id, 16, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:statistics', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 分配权限给超级管理员角色
|
||||
-- =====================================================
|
||||
|
||||
-- 获取超级管理员角色ID (通常是1)
|
||||
SET @admin_role_id = 1;
|
||||
|
||||
-- 分配所有权限给超级管理员
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT @admin_role_id, menu_id FROM sys_menu WHERE parent_id = @poverty_menu_id OR menu_id = @poverty_menu_id;
|
||||
|
||||
-- =====================================================
|
||||
-- 7. 输出确认信息
|
||||
-- =====================================================
|
||||
SELECT '贫困生认定申请管理菜单权限配置完成!' as message;
|
||||
SELECT CONCAT('主菜单ID: ', @poverty_menu_id) as menu_info;
|
||||
SELECT COUNT(*) as total_permissions FROM sys_menu WHERE parent_id = @poverty_menu_id OR menu_id = @poverty_menu_id;
|
||||
@@ -0,0 +1,311 @@
|
||||
-- ============================================================================
|
||||
-- 贫困生认定申请管理 - 数据库表创建脚本
|
||||
-- 创建时间: 2024-12-19
|
||||
-- 描述: 创建贫困生认定申请相关的数据库表、菜单权限和测试数据
|
||||
-- ============================================================================
|
||||
|
||||
-- ============================================================================
|
||||
-- 1. 创建贫困生认定申请表
|
||||
-- ============================================================================
|
||||
CREATE TABLE IF NOT EXISTS `jcbt_poverty_application` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`application_no` varchar(50) DEFAULT NULL COMMENT '申请编号',
|
||||
`academic_year` varchar(20) DEFAULT NULL COMMENT '学年',
|
||||
`term` int(11) DEFAULT NULL COMMENT '学期',
|
||||
`student_id` bigint(20) DEFAULT NULL COMMENT '学生ID',
|
||||
`student_no` varchar(50) DEFAULT NULL COMMENT '学号',
|
||||
`student_name` varchar(100) DEFAULT NULL COMMENT '学生姓名',
|
||||
`gender` varchar(10) DEFAULT NULL COMMENT '性别',
|
||||
`college_id` bigint(20) DEFAULT NULL COMMENT '学院ID',
|
||||
`college_name` varchar(100) DEFAULT NULL COMMENT '学院名称',
|
||||
`major_id` bigint(20) DEFAULT NULL COMMENT '专业ID',
|
||||
`major_name` varchar(100) DEFAULT NULL COMMENT '专业名称',
|
||||
`class_id` bigint(20) DEFAULT NULL COMMENT '班级ID',
|
||||
`class_name` varchar(100) DEFAULT NULL COMMENT '班级名称',
|
||||
`recognition_group` varchar(50) DEFAULT NULL COMMENT '认定群体(特殊群体/其他群体)',
|
||||
`recognition_type_id` bigint(20) DEFAULT NULL COMMENT '认定类型ID',
|
||||
`recognition_type_code` varchar(50) DEFAULT NULL COMMENT '认定类型编码',
|
||||
`recognition_type_name` varchar(100) DEFAULT NULL COMMENT '认定类型名称',
|
||||
`assistance_type_ids` varchar(500) DEFAULT NULL COMMENT '申请自助类型ID数组(多选)',
|
||||
`assistance_type_names` varchar(500) DEFAULT NULL COMMENT '申请自助类型名称(多个用逗号分隔)',
|
||||
`family_economy_summary` text COMMENT '家庭经济情况摘要',
|
||||
`attach_application_form_url` varchar(500) DEFAULT NULL COMMENT '申请表附件URL',
|
||||
`attach_application_form_id` bigint(20) DEFAULT NULL COMMENT '申请表附件ID',
|
||||
`attach_survey_form_url` varchar(500) DEFAULT NULL COMMENT '调查表附件URL',
|
||||
`attach_survey_form_id` bigint(20) DEFAULT NULL COMMENT '调查表附件ID',
|
||||
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '申请状态(DRAFT-草稿,SUBMITTED-已提交,REVIEWING-审核中,APPROVED-已通过,REJECTED-已拒绝,WITHDRAWN-已撤回)',
|
||||
`submitter_id` bigint(20) DEFAULT NULL COMMENT '提交人ID',
|
||||
`submitter_name` varchar(100) DEFAULT NULL COMMENT '提交人姓名',
|
||||
`submit_time` datetime DEFAULT NULL COMMENT '提交时间',
|
||||
`auditor_id` bigint(20) DEFAULT NULL COMMENT '审核人ID',
|
||||
`auditor_name` varchar(100) DEFAULT NULL COMMENT '审核人姓名',
|
||||
`audit_time` datetime DEFAULT NULL COMMENT '审核时间',
|
||||
`audit_opinion` text COMMENT '审核意见',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`deleted` bigint(20) DEFAULT '0' COMMENT '逻辑删除标记(0-正常,非0-已删除)',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_student_no` (`student_no`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_academic_year` (`academic_year`),
|
||||
KEY `idx_college_id` (`college_id`),
|
||||
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='贫困生认定申请表';
|
||||
|
||||
-- ============================================================================
|
||||
-- 2. 插入菜单权限配置
|
||||
-- ============================================================================
|
||||
|
||||
-- 2.1 插入主菜单(贫困生认定申请管理)
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043650013946881',
|
||||
'贫困生认定申请管理',
|
||||
'1851080776692494337',
|
||||
'4',
|
||||
'jcbt:poverty:application:list',
|
||||
'poverty/Application/index',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'C',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:list',
|
||||
'education',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 2.2 插入按钮权限
|
||||
-- 查询按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043651013946881',
|
||||
'贫困生认定申请查询',
|
||||
'1954043650013946881',
|
||||
'1',
|
||||
'jcbt:poverty:application:query',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:query',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 新增按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043652013946881',
|
||||
'贫困生认定申请新增',
|
||||
'1954043650013946881',
|
||||
'2',
|
||||
'jcbt:poverty:application:add',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:add',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 修改按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043653013946881',
|
||||
'贫困生认定申请修改',
|
||||
'1954043650013946881',
|
||||
'3',
|
||||
'jcbt:poverty:application:edit',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:edit',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 删除按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043654013946881',
|
||||
'贫困生认定申请删除',
|
||||
'1954043650013946881',
|
||||
'4',
|
||||
'jcbt:poverty:application:remove',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:remove',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 导出按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043655013946881',
|
||||
'贫困生认定申请导出',
|
||||
'1954043650013946881',
|
||||
'5',
|
||||
'jcbt:poverty:application:export',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:export',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 审核按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043656013946881',
|
||||
'贫困生认定申请审核',
|
||||
'1954043650013946881',
|
||||
'6',
|
||||
'jcbt:poverty:application:audit',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:audit',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- ============================================================================
|
||||
-- 3. 插入字典数据
|
||||
-- ============================================================================
|
||||
|
||||
-- 3.1 申请状态字典
|
||||
INSERT INTO sys_dict_type VALUES(
|
||||
(SELECT IFNULL(MAX(dict_id), 0) + 1 FROM sys_dict_type t),
|
||||
'贫困生申请状态',
|
||||
'jcbt_poverty_application_status',
|
||||
'0',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
'贫困生认定申请状态选项'
|
||||
);
|
||||
|
||||
-- 获取刚插入的字典类型ID
|
||||
SET @dict_type_id = (SELECT dict_id FROM sys_dict_type WHERE dict_type = 'jcbt_poverty_application_status');
|
||||
|
||||
-- 插入状态字典数据
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 1, 1, '草稿', 'DRAFT', 'jcbt_poverty_application_status', '', 'info', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请草稿状态');
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 2, 2, '已提交', 'SUBMITTED', 'jcbt_poverty_application_status', '', 'primary', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请已提交状态');
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 3, 3, '审核中', 'REVIEWING', 'jcbt_poverty_application_status', '', 'warning', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请审核中状态');
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 4, 4, '已通过', 'APPROVED', 'jcbt_poverty_application_status', '', 'success', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请已通过状态');
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 5, 5, '已拒绝', 'REJECTED', 'jcbt_poverty_application_status', '', 'danger', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请已拒绝状态');
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 6, 6, '已撤回', 'WITHDRAWN', 'jcbt_poverty_application_status', '', 'info', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请已撤回状态');
|
||||
|
||||
-- ============================================================================
|
||||
-- 4. 插入测试数据
|
||||
-- ============================================================================
|
||||
|
||||
INSERT INTO `jcbt_poverty_application` VALUES
|
||||
(1954048400013946881, 'PK2024001', '2024-2025', 1, 1001, '202401001', '张三', '男', 101, '计算机学院', 10101, '计算机科学与技术', 1010101, '计软2401班', '其他群体', 1, 'TYPE001', '一般困难', '1,2', '学费减免,生活补助', '家庭经济困难,父母务农收入微薄', '', NULL, '', NULL, 'SUBMITTED', 1001, '张三', '2024-12-01 10:00:00', NULL, NULL, NULL, NULL, '因家庭经济困难申请贫困生认定', 0, '000000', 103, '2024-12-01 09:30:00', 103, '2024-12-01 10:00:00'),
|
||||
(1954048401013946881, 'PK2024002', '2024-2025', 1, 1002, '202401002', '李四', '女', 102, '外国语学院', 10201, '英语', 1020101, '英语2401班', '特殊群体', 2, 'TYPE002', '特别困难', '1,3', '学费减免,勤工助学', '单亲家庭,母亲重病', '', NULL, '', NULL, 'REVIEWING', 1002, '李四', '2024-12-02 14:00:00', 201, '王老师', NULL, NULL, '单亲家庭申请特别困难认定', 0, '000000', 103, '2024-12-02 13:30:00', 201, '2024-12-02 14:00:00'),
|
||||
(1954048402013946881, 'PK2024003', '2024-2025', 1, 1003, '202401003', '王五', '男', 101, '计算机学院', 10102, '软件工程', 1010201, '软工2401班', '其他群体', 1, 'TYPE001', '一般困难', '2', '生活补助', '家庭收入较低', '', NULL, '', NULL, 'APPROVED', 1003, '王五', '2024-11-28 16:00:00', 201, '王老师', '2024-11-30 10:00:00', '符合认定条件,予以通过', '已通过认定审核', 0, '000000', 103, '2024-11-28 15:30:00', 201, '2024-11-30 10:00:00'),
|
||||
(1954048403013946881, 'PK2024004', '2024-2025', 1, 1004, '202401004', '赵六', '女', 103, '经济管理学院', 10301, '会计学', 1030101, '会计2401班', '其他群体', 1, 'TYPE001', '一般困难', '1,2,3', '学费减免,生活补助,勤工助学', '家庭经济确实困难', '', NULL, '', NULL, 'DRAFT', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '正在准备申请材料', 0, '000000', 103, '2024-12-05 11:00:00', 103, '2024-12-05 11:00:00'),
|
||||
(1954048404013946881, 'PK2024005', '2024-2025', 1, 1005, '202401005', '钱七', '男', 104, '机械工程学院', 10401, '机械设计制造及其自动化', 1040101, '机械2401班', '特殊群体', 2, 'TYPE002', '特别困难', '1,2', '学费减免,生活补助', '建档立卡贫困户', '', NULL, '', NULL, 'REJECTED', 1005, '钱七', '2024-11-25 09:00:00', 202, '李老师', '2024-11-27 15:00:00', '材料不够完整,请补充相关证明', '需要补充材料后重新申请', 0, '000000', 103, '2024-11-25 08:30:00', 202, '2024-11-27 15:00:00');
|
||||
|
||||
-- ============================================================================
|
||||
-- 5. 创建索引优化
|
||||
-- ============================================================================
|
||||
|
||||
-- 优化查询性能的复合索引
|
||||
CREATE INDEX idx_student_status_time ON jcbt_poverty_application(student_id, status, create_time);
|
||||
CREATE INDEX idx_college_year_status ON jcbt_poverty_application(college_id, academic_year, status);
|
||||
CREATE INDEX idx_auditor_time ON jcbt_poverty_application(auditor_id, audit_time);
|
||||
|
||||
-- ============================================================================
|
||||
-- 6. 数据统计视图(可选)
|
||||
-- ============================================================================
|
||||
|
||||
-- 创建状态统计视图
|
||||
CREATE OR REPLACE VIEW v_poverty_application_statistics AS
|
||||
SELECT
|
||||
status,
|
||||
COUNT(*) as count,
|
||||
academic_year,
|
||||
college_name
|
||||
FROM jcbt_poverty_application
|
||||
WHERE deleted = 0
|
||||
GROUP BY status, academic_year, college_name;
|
||||
|
||||
-- ============================================================================
|
||||
-- 脚本执行完成
|
||||
-- ============================================================================
|
||||
-- 执行完成后请检查:
|
||||
-- 1. 表结构是否创建成功: SHOW CREATE TABLE jcbt_poverty_application;
|
||||
-- 2. 菜单权限是否正确: SELECT * FROM sys_menu WHERE menu_name LIKE '%贫困生%';
|
||||
-- 3. 测试数据是否插入: SELECT COUNT(*) FROM jcbt_poverty_application;
|
||||
-- ============================================================================
|
||||
@@ -0,0 +1,141 @@
|
||||
-- ========================================
|
||||
-- 奖学金申请管理模块 - 菜单权限配置
|
||||
-- 创建时间: 2025-01-26
|
||||
-- 说明: 配置奖学金申请管理功能的菜单和权限
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 设置变量
|
||||
SET @parent_menu_id = 2015; -- 奖惩补贴管理父菜单ID
|
||||
SET @menu_order = 3; -- 菜单排序
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 删除已存在的菜单(开发环境重新创建)
|
||||
-- =====================================================
|
||||
DELETE FROM sys_menu WHERE menu_name = '申请管理' AND parent_id = @parent_menu_id;
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 创建申请管理菜单
|
||||
-- =====================================================
|
||||
INSERT INTO sys_menu (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 ('申请管理', @parent_menu_id, @menu_order, 'application', 'jcbt/scholarship/application/index', '', 1, 0, 'C', '0', '0', 'jcbt:scholarshipApplication:list', 'form', 1, NOW(), 1, NOW(), '奖学金申请管理菜单');
|
||||
|
||||
-- 获取刚插入的菜单ID
|
||||
SET @application_menu_id = LAST_INSERT_ID();
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 创建申请管理功能按钮权限
|
||||
-- =====================================================
|
||||
|
||||
-- 3.1 查询权限
|
||||
INSERT INTO sys_menu (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 ('申请查询', @application_menu_id, 1, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:query', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.2 新增权限
|
||||
INSERT INTO sys_menu (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 ('申请新增', @application_menu_id, 2, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:add', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.3 修改权限
|
||||
INSERT INTO sys_menu (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 ('申请修改', @application_menu_id, 3, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:edit', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.4 删除权限
|
||||
INSERT INTO sys_menu (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 ('申请删除', @application_menu_id, 4, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:remove', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.5 导出权限
|
||||
INSERT INTO sys_menu (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 ('申请导出', @application_menu_id, 5, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:export', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.6 导入权限
|
||||
INSERT INTO sys_menu (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 ('申请导入', @application_menu_id, 6, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:import', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 创建业务功能权限
|
||||
-- =====================================================
|
||||
|
||||
-- 4.1 我的申请权限
|
||||
INSERT INTO sys_menu (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 ('我的申请', @application_menu_id, 7, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:my', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.2 待审核申请权限
|
||||
INSERT INTO sys_menu (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 ('待审核申请', @application_menu_id, 8, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:pending', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.3 申请资格检查权限
|
||||
INSERT INTO sys_menu (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 ('资格检查', @application_menu_id, 9, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:check', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.4 批量审核权限
|
||||
INSERT INTO sys_menu (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 ('批量审核', @application_menu_id, 10, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:approve', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.5 提交申请权限
|
||||
INSERT INTO sys_menu (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 ('提交申请', @application_menu_id, 11, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:submit', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.6 撤回申请权限
|
||||
INSERT INTO sys_menu (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 ('撤回申请', @application_menu_id, 12, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:withdraw', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.7 批量申请权限
|
||||
INSERT INTO sys_menu (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 ('批量申请', @application_menu_id, 13, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:batch', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.8 统计权限
|
||||
INSERT INTO sys_menu (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 ('申请统计', @application_menu_id, 14, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:statistics', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 创建扩展功能权限
|
||||
-- =====================================================
|
||||
|
||||
-- 5.1 名额查询权限
|
||||
INSERT INTO sys_menu (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 ('名额查询', @application_menu_id, 15, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:quota', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.2 可申请奖学金查询权限
|
||||
INSERT INTO sys_menu (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 ('可申请奖学金', @application_menu_id, 16, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:available', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.3 班级信息查询权限
|
||||
INSERT INTO sys_menu (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 ('班级信息查询', @application_menu_id, 17, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:classInfo', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.4 学生信息查询权限
|
||||
INSERT INTO sys_menu (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 ('学生信息查询', @application_menu_id, 18, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:students', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.5 奖学金类型查询权限
|
||||
INSERT INTO sys_menu (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 ('奖学金类型查询', @application_menu_id, 19, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:scholarshipTypes', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 为管理员角色分配权限
|
||||
-- =====================================================
|
||||
|
||||
-- 获取管理员角色ID (role_key = 'admin')
|
||||
SET @admin_role_id = (SELECT role_id FROM sys_role WHERE role_key = 'admin' LIMIT 1);
|
||||
|
||||
-- 为管理员分配奖学金申请管理菜单权限
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT @admin_role_id, menu_id
|
||||
FROM sys_menu
|
||||
WHERE (menu_id = @application_menu_id OR parent_id = @application_menu_id)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_menu rm
|
||||
WHERE rm.role_id = @admin_role_id AND rm.menu_id = sys_menu.menu_id
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 7. 检查结果
|
||||
-- =====================================================
|
||||
SELECT '奖学金申请管理菜单权限配置完成!' as message;
|
||||
|
||||
-- 查看创建的菜单
|
||||
SELECT menu_id, menu_name, parent_id, perms, menu_type
|
||||
FROM sys_menu
|
||||
WHERE menu_id = @application_menu_id OR parent_id = @application_menu_id
|
||||
ORDER BY parent_id, order_num;
|
||||
@@ -0,0 +1,42 @@
|
||||
-- =====================================================
|
||||
-- 奖学金管理模块 - 完整数据库表结构
|
||||
-- 版本: v1.0
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 说明: 包含奖学金类型表的完整结构定义
|
||||
-- =====================================================
|
||||
|
||||
-- 奖学金类型表
|
||||
CREATE TABLE IF NOT EXISTS jcbt_scholarship_type (
|
||||
id BIGINT(20) PRIMARY KEY COMMENT '主键ID',
|
||||
type_name VARCHAR(100) NOT NULL COMMENT '奖学金类型名称',
|
||||
type_code VARCHAR(50) UNIQUE NOT NULL COMMENT '类型代码',
|
||||
description TEXT COMMENT '详细描述',
|
||||
amount DECIMAL(10,2) DEFAULT 0.00 COMMENT '金额',
|
||||
create_dept BIGINT(20) COMMENT '创建部门',
|
||||
create_by BIGINT(20) COMMENT '创建者',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_by BIGINT(20) COMMENT '更新者',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
tenant_id BIGINT(20) NOT NULL COMMENT '租户ID',
|
||||
deleted TINYINT(1) DEFAULT 0 COMMENT '删除标记',
|
||||
is_system TINYINT(1) DEFAULT 0 COMMENT '是否系统内置',
|
||||
status TINYINT(1) DEFAULT 1 COMMENT '状态',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序',
|
||||
KEY idx_status (status) COMMENT '状态索引',
|
||||
KEY idx_create_time (create_time) COMMENT '创建时间索引',
|
||||
KEY idx_tenant_deleted (tenant_id, deleted) COMMENT '租户删除索引'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='奖学金类型表';
|
||||
|
||||
-- 如果表已存在,添加create_dept字段(兼容性处理)
|
||||
ALTER TABLE jcbt_scholarship_type
|
||||
ADD COLUMN IF NOT EXISTS create_dept BIGINT(20) COMMENT '创建部门'
|
||||
AFTER is_system;
|
||||
|
||||
-- =====================================================
|
||||
-- 奖学金兼得关系表修复
|
||||
-- =====================================================
|
||||
|
||||
-- 为jcbt_scholarship_compatibility表添加create_dept字段
|
||||
ALTER TABLE jcbt_scholarship_compatibility
|
||||
ADD COLUMN IF NOT EXISTS create_dept BIGINT(20) COMMENT '创建部门'
|
||||
AFTER description;
|
||||
@@ -0,0 +1,98 @@
|
||||
-- ========================================
|
||||
-- 奖学金名额分配模块 - 数据库建表脚本
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 模块: ruoyi-jcbt
|
||||
-- 说明: 按批次进行名额分配管理
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 删除已存在的表(开发环境)
|
||||
DROP TABLE IF EXISTS `jcbt_scholarship_quota_adjustment`;
|
||||
DROP TABLE IF EXISTS `jcbt_scholarship_quota`;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 名额分配主表
|
||||
-- =====================================================
|
||||
CREATE TABLE `jcbt_scholarship_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',
|
||||
`allocation_level` VARCHAR(20) NOT NULL COMMENT '分配级别:UNIVERSITY-全校,COLLEGE-学院,MAJOR-专业,CLASS-班级',
|
||||
`target_dept_id` BIGINT(20) DEFAULT NULL COMMENT '目标部门ID(学院/专业/班级)',
|
||||
`parent_quota_id` BIGINT(20) DEFAULT NULL COMMENT '上级名额ID(层级分配)',
|
||||
`total_quota` INT NOT NULL DEFAULT 0 COMMENT '总名额',
|
||||
`used_quota` INT NOT NULL DEFAULT 0 COMMENT '已使用名额',
|
||||
`reserved_quota` INT NOT NULL DEFAULT 0 COMMENT '预留名额',
|
||||
`available_quota` INT NOT NULL DEFAULT 0 COMMENT '可用名额',
|
||||
`allocation_rule` TEXT DEFAULT NULL COMMENT '分配规则(JSON格式)',
|
||||
`allocation_basis` VARCHAR(500) DEFAULT NULL COMMENT '分配依据说明',
|
||||
`allocation_method` VARCHAR(20) DEFAULT 'MANUAL' COMMENT '分配方式:MANUAL-手动分配,AUTO-自动分配,PROPORTIONAL-按比例分配',
|
||||
`is_adjustable` TINYINT(1) DEFAULT 1 COMMENT '是否可调整:0-否,1-是',
|
||||
`is_locked` TINYINT(1) DEFAULT 0 COMMENT '是否锁定:0-否,1-是',
|
||||
`status` VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE-生效,INACTIVE-失效,PENDING-待审核',
|
||||
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` BIGINT(20) NOT NULL 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_dept` (`batch_id`, `scholarship_type_id`, `target_dept_id`, `deleted`),
|
||||
INDEX `idx_batch_level` (`batch_id`, `allocation_level`),
|
||||
INDEX `idx_dept_quota` (`target_dept_id`, `total_quota`),
|
||||
INDEX `idx_parent_quota` (`parent_quota_id`),
|
||||
INDEX `idx_tenant_status` (`tenant_id`, `status`, `deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='奖学金名额分配表';
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 名额调整记录表
|
||||
-- =====================================================
|
||||
CREATE TABLE `jcbt_scholarship_quota_adjustment` (
|
||||
`id` BIGINT(20) NOT NULL COMMENT '主键ID',
|
||||
`quota_id` BIGINT(20) NOT NULL COMMENT '名额分配ID',
|
||||
`adjustment_type` VARCHAR(20) NOT NULL COMMENT '调整类型:INCREASE-增加,DECREASE-减少,TRANSFER-转移',
|
||||
`from_quota_id` BIGINT(20) DEFAULT NULL COMMENT '源名额ID(转移时使用)',
|
||||
`to_quota_id` BIGINT(20) DEFAULT NULL COMMENT '目标名额ID(转移时使用)',
|
||||
`adjustment_amount` INT NOT NULL COMMENT '调整数量',
|
||||
`before_total` INT NOT NULL COMMENT '调整前总名额',
|
||||
`after_total` INT NOT NULL COMMENT '调整后总名额',
|
||||
`adjustment_reason` VARCHAR(500) NOT NULL COMMENT '调整原因',
|
||||
`approval_status` VARCHAR(20) DEFAULT 'PENDING' COMMENT '审批状态:PENDING-待审批,APPROVED-已通过,REJECTED-已拒绝',
|
||||
`approval_user_id` BIGINT(20) DEFAULT NULL COMMENT '审批人ID',
|
||||
`approval_time` DATETIME DEFAULT NULL COMMENT '审批时间',
|
||||
`approval_remark` VARCHAR(500) DEFAULT NULL COMMENT '审批备注',
|
||||
`tenant_id` BIGINT(20) NOT NULL 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_quota_id` (`quota_id`),
|
||||
INDEX `idx_adjustment_type` (`adjustment_type`, `approval_status`),
|
||||
INDEX `idx_from_to_quota` (`from_quota_id`, `to_quota_id`),
|
||||
INDEX `idx_tenant` (`tenant_id`, `deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='名额调整记录表';
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 添加外键约束(可选,根据实际情况)
|
||||
-- =====================================================
|
||||
-- ALTER TABLE `jcbt_scholarship_quota`
|
||||
-- ADD CONSTRAINT `fk_quota_batch` FOREIGN KEY (`batch_id`) REFERENCES `jcbt_scholarship_batch` (`id`);
|
||||
|
||||
-- ALTER TABLE `jcbt_scholarship_quota`
|
||||
-- ADD CONSTRAINT `fk_quota_type` FOREIGN KEY (`scholarship_type_id`) REFERENCES `jcbt_scholarship_type` (`id`);
|
||||
|
||||
-- ALTER TABLE `jcbt_scholarship_quota_adjustment`
|
||||
-- ADD CONSTRAINT `fk_adjustment_quota` FOREIGN KEY (`quota_id`) REFERENCES `jcbt_scholarship_quota` (`id`);
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 验证表创建
|
||||
-- =====================================================
|
||||
SHOW TABLES LIKE 'jcbt_scholarship_quota%';
|
||||
DESCRIBE jcbt_scholarship_quota;
|
||||
DESCRIBE jcbt_scholarship_quota_adjustment;
|
||||
@@ -0,0 +1,134 @@
|
||||
-- ========================================
|
||||
-- 奖学金名额分配模块 - 菜单权限配置
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 说明: 配置名额分配功能的菜单和权限
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 设置变量
|
||||
SET @parent_menu_id = 2015; -- 奖惩补贴管理父菜单ID
|
||||
SET @menu_order = 4; -- 菜单排序
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 删除已存在的菜单(开发环境重新创建)
|
||||
-- =====================================================
|
||||
DELETE FROM sys_menu WHERE menu_name = '名额分配管理' AND parent_id = @parent_menu_id;
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 创建名额分配管理菜单
|
||||
-- =====================================================
|
||||
INSERT INTO sys_menu (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 ('名额分配管理', @parent_menu_id, @menu_order, 'scholarshipQuota', 'jcbt/scholarshipQuota/index', '', 1, 0, 'C', '0', '0', 'jcbt:scholarshipQuota:list', 'tree-table', 1, NOW(), 1, NOW(), '奖学金名额分配管理菜单');
|
||||
|
||||
-- 获取刚插入的菜单ID
|
||||
SET @quota_menu_id = LAST_INSERT_ID();
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 创建名额分配功能按钮权限
|
||||
-- =====================================================
|
||||
|
||||
-- 3.1 查询权限
|
||||
INSERT INTO sys_menu (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 ('名额分配查询', @quota_menu_id, 1, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:query', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.2 新增权限
|
||||
INSERT INTO sys_menu (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 ('名额分配新增', @quota_menu_id, 2, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:add', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.3 修改权限
|
||||
INSERT INTO sys_menu (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 ('名额分配修改', @quota_menu_id, 3, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:edit', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.4 删除权限
|
||||
INSERT INTO sys_menu (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 ('名额分配删除', @quota_menu_id, 4, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:remove', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.5 导出权限
|
||||
INSERT INTO sys_menu (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 ('名额分配导出', @quota_menu_id, 5, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:export', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.6 批量分配权限
|
||||
INSERT INTO sys_menu (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 ('批量分配名额', @quota_menu_id, 6, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:batchAllocate', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.7 名额调整权限
|
||||
INSERT INTO sys_menu (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 ('名额调整', @quota_menu_id, 7, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:adjust', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.8 名额锁定权限
|
||||
INSERT INTO sys_menu (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 ('名额锁定', @quota_menu_id, 8, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:lock', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.9 自动分配权限
|
||||
INSERT INTO sys_menu (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 ('自动分配名额', @quota_menu_id, 9, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:autoAllocate', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.10 复制分配权限
|
||||
INSERT INTO sys_menu (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 ('复制名额分配', @quota_menu_id, 10, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:copy', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 为管理员角色分配权限
|
||||
-- =====================================================
|
||||
|
||||
-- 4.1 获取管理员角色ID
|
||||
SET @admin_role_id = (SELECT role_id FROM sys_role WHERE role_key = 'admin' LIMIT 1);
|
||||
|
||||
-- 4.2 为管理员角色分配名额分配菜单权限
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT @admin_role_id, menu_id
|
||||
FROM sys_menu
|
||||
WHERE (menu_id = @quota_menu_id OR parent_id = @quota_menu_id)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_menu rm
|
||||
WHERE rm.role_id = @admin_role_id AND rm.menu_id = sys_menu.menu_id
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 创建字典数据
|
||||
-- =====================================================
|
||||
|
||||
-- 5.1 分配级别字典
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配级别', 'jcbt_quota_allocation_level', '0', 1, NOW(), 1, NOW(), '奖学金名额分配级别字典类型')
|
||||
ON DUPLICATE KEY UPDATE dict_name = VALUES(dict_name);
|
||||
|
||||
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, '全校', 'UNIVERSITY', 'jcbt_quota_allocation_level', '', 'primary', 'Y', '0', 1, NOW(), 1, NOW(), '全校级别分配'),
|
||||
(2, '学院', 'COLLEGE', 'jcbt_quota_allocation_level', '', 'success', 'N', '0', 1, NOW(), 1, NOW(), '学院级别分配'),
|
||||
(3, '专业', 'MAJOR', 'jcbt_quota_allocation_level', '', 'info', 'N', '0', 1, NOW(), 1, NOW(), '专业级别分配'),
|
||||
(4, '班级', 'CLASS', 'jcbt_quota_allocation_level', '', 'warning', 'N', '0', 1, NOW(), 1, NOW(), '班级级别分配')
|
||||
ON DUPLICATE KEY UPDATE dict_label = VALUES(dict_label);
|
||||
|
||||
-- 5.2 分配方式字典
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配方式', 'jcbt_quota_allocation_method', '0', 1, NOW(), 1, NOW(), '奖学金名额分配方式字典类型')
|
||||
ON DUPLICATE KEY UPDATE dict_name = VALUES(dict_name);
|
||||
|
||||
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, '手动分配', 'MANUAL', 'jcbt_quota_allocation_method', '', 'primary', 'Y', '0', 1, NOW(), 1, NOW(), '手动分配名额'),
|
||||
(2, '自动分配', 'AUTO', 'jcbt_quota_allocation_method', '', 'success', 'N', '0', 1, NOW(), 1, NOW(), '自动分配名额'),
|
||||
(3, '按比例分配', 'PROPORTIONAL', 'jcbt_quota_allocation_method', '', 'info', 'N', '0', 1, NOW(), 1, NOW(), '按比例分配名额')
|
||||
ON DUPLICATE KEY UPDATE dict_label = VALUES(dict_label);
|
||||
|
||||
-- 5.3 分配状态字典
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配状态', 'jcbt_quota_status', '0', 1, NOW(), 1, NOW(), '奖学金名额分配状态字典类型')
|
||||
ON DUPLICATE KEY UPDATE dict_name = VALUES(dict_name);
|
||||
|
||||
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, '生效', 'ACTIVE', 'jcbt_quota_status', '', 'success', 'Y', '0', 1, NOW(), 1, NOW(), '名额分配生效'),
|
||||
(2, '失效', 'INACTIVE', 'jcbt_quota_status', '', 'danger', 'N', '0', 1, NOW(), 1, NOW(), '名额分配失效'),
|
||||
(3, '待审核', 'PENDING', 'jcbt_quota_status', '', 'warning', 'N', '0', 1, NOW(), 1, NOW(), '名额分配待审核')
|
||||
ON DUPLICATE KEY UPDATE dict_label = VALUES(dict_label);
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 验证创建结果
|
||||
-- =====================================================
|
||||
SELECT '名额分配管理菜单创建完成!' as message;
|
||||
SELECT menu_id, menu_name, parent_id, perms FROM sys_menu WHERE menu_name LIKE '%名额分配%' ORDER BY parent_id, order_num;
|
||||
SELECT dict_type, COUNT(*) as count FROM sys_dict_data WHERE dict_type LIKE 'jcbt_quota_%' GROUP BY dict_type;
|
||||
@@ -0,0 +1,224 @@
|
||||
-- ====================================================================
|
||||
-- 奖学金管理模块 - 测试数据脚本
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 说明: 包含奖学金类型、班级、申请记录的测试数据
|
||||
-- ====================================================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 清理现有测试数据
|
||||
-- =====================================================
|
||||
DELETE FROM jcbt_scholarship_application WHERE student_name LIKE '测试学生%';
|
||||
DELETE FROM jcbt_scholarship_type WHERE type_name LIKE '测试%';
|
||||
DELETE FROM xg_class_msg WHERE class_name LIKE '测试%';
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 插入奖学金类型测试数据
|
||||
-- =====================================================
|
||||
INSERT INTO jcbt_scholarship_type (
|
||||
id, type_code, type_name, type_category, level_type, award_amount,
|
||||
description, application_guide, application_conditions, evaluation_criteria,
|
||||
compatibility_type, sort_order, status, is_system, tenant_id, deleted,
|
||||
create_by, create_time, update_by, update_time
|
||||
) VALUES
|
||||
(
|
||||
1863768901234567001,
|
||||
'ACADEMIC_EXCELLENCE',
|
||||
'优秀学生奖学金',
|
||||
'ACADEMIC',
|
||||
'FIRST_CLASS',
|
||||
3000.00,
|
||||
'奖励品学兼优的学生',
|
||||
'申请时需要提交成绩单和获奖证书',
|
||||
'学期平均分85分以上,无挂科记录',
|
||||
'按成绩排名评定',
|
||||
'COMPATIBLE',
|
||||
1, 1, 0, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234567002,
|
||||
'POVERTY_ASSISTANCE',
|
||||
'贫困助学金',
|
||||
'ASSISTANCE',
|
||||
'GENERAL',
|
||||
2000.00,
|
||||
'资助家庭经济困难学生',
|
||||
'申请时需要提交家庭经济证明',
|
||||
'家庭经济困难,成绩及格以上',
|
||||
'按经济困难程度评定',
|
||||
'COMPATIBLE',
|
||||
2, 1, 0, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234567003,
|
||||
'INNOVATION_PRIZE',
|
||||
'创新创业奖学金',
|
||||
'INNOVATION',
|
||||
'SPECIAL',
|
||||
5000.00,
|
||||
'奖励在创新创业方面表现突出的学生',
|
||||
'申请时需要提交创新项目材料',
|
||||
'有创新成果或创业经历',
|
||||
'按创新项目质量评定',
|
||||
'EXCLUSIVE',
|
||||
3, 1, 0, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 插入班级测试数据
|
||||
-- =====================================================
|
||||
INSERT INTO xg_class_msg (
|
||||
id, college_id, college_name, major_id, major_name,
|
||||
class_code, class_name, class_type, grade, enrollment_year, graduation_year,
|
||||
class_teacher_id, class_teacher_name, class_status,
|
||||
planned_capacity, current_student_count, tenant_id, deleted,
|
||||
create_by, create_time, update_by, update_time
|
||||
) VALUES
|
||||
(
|
||||
1863768901234568001,
|
||||
100, '计算机学院', 101, '软件工程',
|
||||
'CS2021001', '测试班级2021级软件工程1班', '1', '2021', 2021, 2025,
|
||||
1001, '张老师', '1',
|
||||
30, 28, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234568002,
|
||||
100, '计算机学院', 101, '软件工程',
|
||||
'CS2021002', '测试班级2021级软件工程2班', '1', '2021', 2021, 2025,
|
||||
1002, '李老师', '1',
|
||||
30, 26, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234568003,
|
||||
200, '机械学院', 201, '机械设计制造及其自动化',
|
||||
'ME2021001', '测试班级2021级机械1班', '1', '2021', 2021, 2025,
|
||||
2001, '王老师', '1',
|
||||
25, 24, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 插入申请记录测试数据
|
||||
-- =====================================================
|
||||
INSERT INTO jcbt_scholarship_application (
|
||||
id, application_no, batch_id, scholarship_type_id,
|
||||
student_no, student_name, student_id, dept_id, major_id, class_id,
|
||||
application_type, current_status, apply_reason, self_evaluation,
|
||||
calculated_score, final_score, ranking_in_dept, ranking_in_major,
|
||||
submit_time, tenant_id, deleted,
|
||||
create_by, create_time, update_by, update_time
|
||||
) VALUES
|
||||
(
|
||||
1863768901234569001,
|
||||
'APPLY20250127001',
|
||||
1863768901234560001, -- 假设批次ID
|
||||
1863768901234567001, -- 优秀学生奖学金
|
||||
'2021001001', '测试学生张三', 1863768901234570001,
|
||||
100, 101, 1863768901234568001, -- 计算机学院,软件工程,测试班级1
|
||||
'STUDENT', 'SUBMITTED', '学习成绩优异,积极参与社会实践',
|
||||
'我在本学期各科成绩均在90分以上,积极参与班级和学院活动,希望能够获得奖学金鼓励。',
|
||||
92.5, 93.0, 2, 1,
|
||||
NOW(), '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234569002,
|
||||
'APPLY20250127002',
|
||||
1863768901234560001, -- 假设批次ID
|
||||
1863768901234567002, -- 贫困助学金
|
||||
'2021001002', '测试学生李四', 1863768901234570002,
|
||||
100, 101, 1863768901234568001, -- 计算机学院,软件工程,测试班级1
|
||||
'STUDENT', 'SUBMITTED', '家庭经济困难,需要资助',
|
||||
'家庭经济困难,父母务农收入微薄,希望通过助学金减轻经济负担,专心学习。',
|
||||
78.5, 80.0, 15, 8,
|
||||
NOW(), '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234569003,
|
||||
'APPLY20250127003',
|
||||
1863768901234560001, -- 假设批次ID
|
||||
1863768901234567003, -- 创新创业奖学金
|
||||
'2021002001', '测试学生王五', 1863768901234570003,
|
||||
100, 101, 1863768901234568002, -- 计算机学院,软件工程,测试班级2
|
||||
'RECOMMEND', 'REVIEWING', '在创新创业方面表现突出',
|
||||
'参与开发了校园APP项目,获得大学生创新创业大赛二等奖,具有很强的创新能力。',
|
||||
88.0, 89.5, 5, 3,
|
||||
NOW(), '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234569004,
|
||||
'APPLY20250127004',
|
||||
1863768901234560001, -- 假设批次ID
|
||||
1863768901234567001, -- 优秀学生奖学金
|
||||
'2021003001', '测试学生赵六', 1863768901234570004,
|
||||
200, 201, 1863768901234568003, -- 机械学院,机械设计,测试班级3
|
||||
'STUDENT', 'APPROVED', '学习成绩优秀,综合素质高',
|
||||
'各科成绩均名列前茅,担任班长职务,热心为同学服务,积极参与各项活动。',
|
||||
95.0, 95.5, 1, 1,
|
||||
DATE_SUB(NOW(), INTERVAL 2 DAY), '000000', 0,
|
||||
1, DATE_SUB(NOW(), INTERVAL 2 DAY), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234569005,
|
||||
'APPLY20250127005',
|
||||
1863768901234560001, -- 假设批次ID
|
||||
1863768901234567002, -- 贫困助学金
|
||||
'2021003002', '测试学生孙七', 1863768901234570005,
|
||||
200, 201, 1863768901234568003, -- 机械学院,机械设计,测试班级3
|
||||
'STUDENT', 'REJECTED', '经济困难但成绩有待提高',
|
||||
'虽然家庭经济困难,但我会努力学习,提高成绩,争取下次申请成功。',
|
||||
65.0, 68.0, 20, 12,
|
||||
DATE_SUB(NOW(), INTERVAL 3 DAY), '000000', 0,
|
||||
1, DATE_SUB(NOW(), INTERVAL 3 DAY), 1, NOW()
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 插入奖学金批次测试数据(如果需要)
|
||||
-- =====================================================
|
||||
INSERT IGNORE INTO jcbt_scholarship_batch (
|
||||
id, batch_name, batch_code, academic_year, semester,
|
||||
start_date, end_date, status, description,
|
||||
tenant_id, deleted, create_by, create_time, update_by, update_time
|
||||
) VALUES (
|
||||
1863768901234560001,
|
||||
'2024-2025学年第一学期奖学金申请',
|
||||
'BATCH202401',
|
||||
'2024-2025', '1',
|
||||
'2024-09-01', '2024-09-30', 'ACTIVE', '2024-2025学年第一学期奖学金申请批次',
|
||||
'000000', 0, 1, NOW(), 1, NOW()
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 验证数据插入
|
||||
-- =====================================================
|
||||
SELECT '=== 奖学金类型数据 ===' AS info;
|
||||
SELECT id, type_code, type_name, award_amount FROM jcbt_scholarship_type WHERE type_name LIKE '测试%' OR type_name LIKE '%奖学金' OR type_name LIKE '%助学金' LIMIT 5;
|
||||
|
||||
SELECT '=== 班级数据 ===' AS info;
|
||||
SELECT id, class_code, class_name, college_name, major_name FROM xg_class_msg WHERE class_name LIKE '测试%' LIMIT 5;
|
||||
|
||||
SELECT '=== 申请记录数据 ===' AS info;
|
||||
SELECT id, application_no, student_name, current_status FROM jcbt_scholarship_application WHERE student_name LIKE '测试学生%' LIMIT 5;
|
||||
|
||||
SELECT '=== 关联查询测试 ===' AS info;
|
||||
SELECT
|
||||
a.application_no,
|
||||
a.student_name,
|
||||
st.type_name as scholarship_type_name,
|
||||
c.class_name,
|
||||
a.current_status
|
||||
FROM jcbt_scholarship_application a
|
||||
LEFT JOIN jcbt_scholarship_type st ON a.scholarship_type_id = st.id
|
||||
LEFT JOIN xg_class_msg c ON a.class_id = c.id
|
||||
WHERE a.student_name LIKE '测试学生%'
|
||||
LIMIT 10;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,105 @@
|
||||
-- =====================================================
|
||||
-- 奖学金类型表字段修复验证脚本
|
||||
-- 创建时间: 2025-08-04
|
||||
-- 说明: 验证申请条件、评定标准、备注字段是否正确添加和工作
|
||||
-- =====================================================
|
||||
|
||||
-- 1. 验证字段是否存在
|
||||
SELECT
|
||||
COLUMN_NAME as '字段名',
|
||||
DATA_TYPE as '数据类型',
|
||||
CHARACTER_MAXIMUM_LENGTH as '最大长度',
|
||||
IS_NULLABLE as '是否可空',
|
||||
COLUMN_DEFAULT as '默认值',
|
||||
COLUMN_COMMENT as '字段注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_scholarship_type'
|
||||
AND COLUMN_NAME IN ('application_conditions', 'evaluation_criteria', 'remark')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- 2. 查看表结构(包含新增字段的完整表结构)
|
||||
DESCRIBE jcbt_scholarship_type;
|
||||
|
||||
-- 3. 测试插入数据(包含新增字段)
|
||||
INSERT INTO jcbt_scholarship_type (
|
||||
id, type_code, type_name, type_category, level_type, award_amount,
|
||||
description, application_guide, application_conditions, evaluation_criteria, remark,
|
||||
sort_order, status, is_system, compatibility_type,
|
||||
create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES (
|
||||
1001, 'TEST_001', '测试奖学金', 'ACADEMIC', 'FIRST_CLASS', 5000.00,
|
||||
'这是一个测试奖学金描述',
|
||||
'请按照以下步骤申请:\n1. 填写申请表\n2. 提交相关材料',
|
||||
'申请条件:\n1. 学习成绩优秀,GPA≥3.5\n2. 无违纪记录\n3. 积极参与社会实践',
|
||||
'评定标准:\n1. 学习成绩占60%\n2. 综合素质占30%\n3. 社会实践占10%',
|
||||
'备注:本奖学金每学期评选一次,优秀学生可连续获得',
|
||||
1, 1, 0, 'COMPATIBLE',
|
||||
1, NOW(), 1, NOW(), '000000', 0
|
||||
);
|
||||
|
||||
-- 4. 验证数据插入是否成功
|
||||
SELECT
|
||||
id, type_code, type_name,
|
||||
LEFT(application_conditions, 50) as '申请条件_前50字符',
|
||||
LEFT(evaluation_criteria, 50) as '评定标准_前50字符',
|
||||
LEFT(remark, 50) as '备注_前50字符'
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE type_code = 'TEST_001';
|
||||
|
||||
-- 5. 测试更新操作
|
||||
UPDATE jcbt_scholarship_type
|
||||
SET
|
||||
application_conditions = '更新后的申请条件:\n1. GPA≥3.8\n2. 英语四级以上\n3. 无挂科记录',
|
||||
evaluation_criteria = '更新后的评定标准:\n1. 学习成绩70%\n2. 英语水平20%\n3. 综合表现10%',
|
||||
remark = '更新后的备注:此奖学金面向大二及以上学生',
|
||||
update_time = NOW()
|
||||
WHERE type_code = 'TEST_001';
|
||||
|
||||
-- 6. 验证更新是否成功
|
||||
SELECT
|
||||
id, type_code, type_name,
|
||||
application_conditions as '申请条件',
|
||||
evaluation_criteria as '评定标准',
|
||||
remark as '备注',
|
||||
update_time as '更新时间'
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE type_code = 'TEST_001';
|
||||
|
||||
-- 7. 查询所有奖学金类型的这三个字段(查看现有数据)
|
||||
SELECT
|
||||
id, type_code, type_name,
|
||||
CASE
|
||||
WHEN application_conditions IS NULL THEN '空值'
|
||||
WHEN application_conditions = '' THEN '空字符串'
|
||||
ELSE CONCAT('有值-', LEFT(application_conditions, 20), '...')
|
||||
END as '申请条件状态',
|
||||
CASE
|
||||
WHEN evaluation_criteria IS NULL THEN '空值'
|
||||
WHEN evaluation_criteria = '' THEN '空字符串'
|
||||
ELSE CONCAT('有值-', LEFT(evaluation_criteria, 20), '...')
|
||||
END as '评定标准状态',
|
||||
CASE
|
||||
WHEN remark IS NULL THEN '空值'
|
||||
WHEN remark = '' THEN '空字符串'
|
||||
ELSE CONCAT('有值-', LEFT(remark, 20), '...')
|
||||
END as '备注状态'
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE deleted = 0
|
||||
ORDER BY sort_order, create_time DESC;
|
||||
|
||||
-- 8. 清理测试数据
|
||||
DELETE FROM jcbt_scholarship_type WHERE type_code = 'TEST_001';
|
||||
|
||||
-- 9. 验证清理结果
|
||||
SELECT COUNT(*) as '清理后剩余测试数据数量'
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE type_code = 'TEST_001';
|
||||
|
||||
-- =====================================================
|
||||
-- 测试完成提示
|
||||
-- =====================================================
|
||||
SELECT
|
||||
'字段修复验证完成' as '状态',
|
||||
'如果以上查询都正常执行,说明字段修复成功' as '说明',
|
||||
'现在可以重启后端服务测试详情页面显示' as '下一步';
|
||||
@@ -0,0 +1,131 @@
|
||||
-- =====================================================
|
||||
-- 奖学金名额分配 - 基础数据检查和测试数据插入
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 说明: 检查和创建测试用的基础数据
|
||||
-- =====================================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 检查现有数据
|
||||
-- =====================================================
|
||||
|
||||
-- 检查奖学金批次数据
|
||||
SELECT 'jcbt_scholarship_batch' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_batch WHERE deleted = 0;
|
||||
|
||||
-- 检查奖学金类型数据
|
||||
SELECT 'jcbt_scholarship_type' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_type WHERE deleted = 0;
|
||||
|
||||
-- 检查名额分配数据
|
||||
SELECT 'jcbt_scholarship_quota' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_quota WHERE deleted = 0;
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 插入测试批次数据(如果不存在)
|
||||
-- =====================================================
|
||||
|
||||
INSERT IGNORE INTO jcbt_scholarship_batch (
|
||||
id, batch_code, batch_name, academic_year, semester, batch_type,
|
||||
start_time, end_time, apply_start_time, apply_end_time,
|
||||
review_start_time, review_end_time, status, description,
|
||||
create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
(1890000000000000001, 'BATCH_2024_1', '2024学年第一学期奖学金评定', '2024-2025', 1, 'REGULAR',
|
||||
'2024-09-01 00:00:00', '2024-12-31 23:59:59', '2024-10-01 00:00:00', '2024-10-31 23:59:59',
|
||||
'2024-11-01 00:00:00', '2024-11-30 23:59:59', 'ACTIVE', '2024学年第一学期常规奖学金评定批次',
|
||||
1, NOW(), 1, NOW(), 1, 0),
|
||||
(1890000000000000002, 'BATCH_2024_2', '2024学年第二学期奖学金评定', '2024-2025', 2, 'REGULAR',
|
||||
'2025-02-01 00:00:00', '2025-06-30 23:59:59', '2025-03-01 00:00:00', '2025-03-31 23:59:59',
|
||||
'2025-04-01 00:00:00', '2025-04-30 23:59:59', 'DRAFT', '2024学年第二学期常规奖学金评定批次',
|
||||
1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 插入测试奖学金类型数据(如果不存在)
|
||||
-- =====================================================
|
||||
|
||||
INSERT IGNORE INTO jcbt_scholarship_type (
|
||||
id, type_code, type_name, type_category, level_type, award_amount,
|
||||
description, application_guide, application_conditions, evaluation_criteria,
|
||||
compatibility_type, sort_order, status, is_system,
|
||||
create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
(1890000000000000101, 'GJZXJ', '国家奖学金', 'NATIONAL', 'FIRST_CLASS', 8000.00,
|
||||
'国家奖学金是为了激励普通本科高校、高等职业学校和高等专科学校学生勤奋学习、努力进取,在德、智、体、美等方面全面发展,由中央政府出资设立的奖励特别优秀学生的奖学金。',
|
||||
'学生本人提出申请,按学校规定程序推荐上报。', '品学兼优,学习成绩排名在评选范围内位于前10%',
|
||||
'学习成绩、综合测评、道德品质等综合评定', 'EXCLUSIVE', 1, 1, 1,
|
||||
1, NOW(), 1, NOW(), 1, 0),
|
||||
(1890000000000000102, 'GJLZJ', '国家励志奖学金', 'NATIONAL', 'SECOND_CLASS', 5000.00,
|
||||
'国家励志奖学金是为了激励普通本科高校、高等职业学校和高等专科学校的家庭经济困难学生勤奋学习、努力进取,在德、智、体、美等方面全面发展,由中央和地方政府共同出资设立的,奖励资助品学兼优的家庭经济困难学生的奖学金。',
|
||||
'学生本人提出申请,按学校规定程序推荐上报。', '家庭经济困难且品学兼优,学习成绩排名在评选范围内位于前25%',
|
||||
'学习成绩、综合测评、家庭经济状况等综合评定', 'EXCLUSIVE', 2, 1, 1,
|
||||
1, NOW(), 1, NOW(), 1, 0),
|
||||
(1890000000000000103, 'XXZXJ1', '校级奖学金一等奖', 'SCHOOL', 'FIRST_CLASS', 3000.00,
|
||||
'学校设立的奖学金,奖励学习成绩优秀、综合素质突出的学生。',
|
||||
'学生本人提出申请,班级推荐,学院审核。', '学习成绩排名在专业前5%,综合测评排名在专业前10%',
|
||||
'学习成绩、综合测评、特长发展等', 'COMPATIBLE', 3, 1, 0,
|
||||
1, NOW(), 1, NOW(), 1, 0),
|
||||
(1890000000000000104, 'XXZXJ2', '校级奖学金二等奖', 'SCHOOL', 'SECOND_CLASS', 2000.00,
|
||||
'学校设立的奖学金,奖励学习成绩良好、综合素质较好的学生。',
|
||||
'学生本人提出申请,班级推荐,学院审核。', '学习成绩排名在专业前15%,综合测评排名在专业前20%',
|
||||
'学习成绩、综合测评、特长发展等', 'COMPATIBLE', 4, 1, 0,
|
||||
1, NOW(), 1, NOW(), 1, 0),
|
||||
(1890000000000000105, 'SZZXJ', '社会专项奖学金', 'ENTERPRISE', 'SPECIAL', 1500.00,
|
||||
'由社会企业、校友或其他组织设立的专项奖学金。',
|
||||
'学生本人提出申请,按专项奖学金具体要求推荐。', '符合专项奖学金设立的特定条件和要求',
|
||||
'按照专项奖学金的评定标准执行', 'CUSTOM', 5, 1, 0,
|
||||
1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 插入测试名额分配数据(如果不存在)
|
||||
-- =====================================================
|
||||
|
||||
INSERT IGNORE INTO jcbt_scholarship_quota (
|
||||
id, batch_id, scholarship_type_id, allocation_level, target_dept_id, parent_quota_id,
|
||||
total_quota, used_quota, reserved_quota, available_quota,
|
||||
allocation_rule, allocation_basis, allocation_method, is_adjustable, is_locked, status,
|
||||
remark, create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
-- 国家奖学金 - 全校级分配
|
||||
(1890000000000000201, 1890000000000000001, 1890000000000000101, 'UNIVERSITY', NULL, NULL,
|
||||
50, 0, 5, 45, '{"type":"university","rule":"total_allocation"}', '根据学校总体规模和历年获奖情况分配',
|
||||
'MANUAL', 1, 0, 'ACTIVE', '全校国家奖学金总名额', 1, NOW(), 1, NOW(), 1, 0),
|
||||
|
||||
-- 国家励志奖学金 - 全校级分配
|
||||
(1890000000000000202, 1890000000000000001, 1890000000000000102, 'UNIVERSITY', NULL, NULL,
|
||||
200, 0, 20, 180, '{"type":"university","rule":"total_allocation"}', '根据学校困难学生比例和名额分配',
|
||||
'MANUAL', 1, 0, 'ACTIVE', '全校国家励志奖学金总名额', 1, NOW(), 1, NOW(), 1, 0),
|
||||
|
||||
-- 校级奖学金一等奖 - 全校级分配
|
||||
(1890000000000000203, 1890000000000000001, 1890000000000000103, 'UNIVERSITY', NULL, NULL,
|
||||
100, 0, 10, 90, '{"type":"university","rule":"total_allocation"}', '根据学校各学院学生人数比例分配',
|
||||
'MANUAL', 1, 0, 'ACTIVE', '全校校级一等奖学金总名额', 1, NOW(), 1, NOW(), 1, 0),
|
||||
|
||||
-- 校级奖学金二等奖 - 全校级分配
|
||||
(1890000000000000204, 1890000000000000001, 1890000000000000104, 'UNIVERSITY', NULL, NULL,
|
||||
300, 0, 30, 270, '{"type":"university","rule":"total_allocation"}', '根据学校各学院学生人数比例分配',
|
||||
'MANUAL', 1, 0, 'ACTIVE', '全校校级二等奖学金总名额', 1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 验证插入结果
|
||||
-- =====================================================
|
||||
|
||||
-- 再次检查数据插入结果
|
||||
SELECT '插入后-jcbt_scholarship_batch' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_batch WHERE deleted = 0;
|
||||
SELECT '插入后-jcbt_scholarship_type' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_type WHERE deleted = 0;
|
||||
SELECT '插入后-jcbt_scholarship_quota' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_quota WHERE deleted = 0;
|
||||
|
||||
-- 查看详细数据
|
||||
SELECT
|
||||
q.id,
|
||||
b.batch_name,
|
||||
st.type_name as scholarship_type_name,
|
||||
q.allocation_level,
|
||||
q.total_quota,
|
||||
q.available_quota,
|
||||
q.status
|
||||
FROM jcbt_scholarship_quota q
|
||||
LEFT JOIN jcbt_scholarship_batch b ON q.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON q.scholarship_type_id = st.id
|
||||
WHERE q.deleted = 0
|
||||
ORDER BY q.id;
|
||||
|
||||
-- =====================================================
|
||||
Reference in new issue
Block a user