Files
hzdyjs/backend/sql/debug_quota_delete_issue.sql
T
2025-08-10 00:24:31 +08:00

135 lines
3.4 KiB
SQL

-- ========================================
-- 奖学金名额分配删除问题诊断脚本
-- 创建时间: 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;