debug_quota_delete_issue.sql 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. -- ========================================
  2. -- 奖学金名额分配删除问题诊断脚本
  3. -- 创建时间: 2025-01-28
  4. -- 说明: 用于排查无法删除的名额分配记录
  5. -- ========================================
  6. USE hzdyjs_xg;
  7. -- 1. 查看所有名额分配记录的状态
  8. SELECT
  9. id,
  10. batch_id,
  11. scholarship_type_id,
  12. allocation_level,
  13. target_dept_id,
  14. total_quota,
  15. used_quota,
  16. reserved_quota,
  17. available_quota,
  18. is_adjustable,
  19. is_locked,
  20. status,
  21. deleted,
  22. create_time,
  23. update_time
  24. FROM jcbt_scholarship_quota
  25. WHERE deleted = 0
  26. ORDER BY create_time DESC;
  27. -- 2. 查找可能有问题的记录(已使用名额大于0或已锁定)
  28. SELECT
  29. '已使用名额大于0' as issue_type,
  30. id,
  31. batch_id,
  32. scholarship_type_id,
  33. total_quota,
  34. used_quota,
  35. reserved_quota,
  36. available_quota,
  37. is_locked,
  38. status
  39. FROM jcbt_scholarship_quota
  40. WHERE deleted = 0 AND used_quota > 0
  41. UNION ALL
  42. SELECT
  43. '已被锁定' as issue_type,
  44. id,
  45. batch_id,
  46. scholarship_type_id,
  47. total_quota,
  48. used_quota,
  49. reserved_quota,
  50. available_quota,
  51. is_locked,
  52. status
  53. FROM jcbt_scholarship_quota
  54. WHERE deleted = 0 AND is_locked = 1
  55. UNION ALL
  56. SELECT
  57. '状态异常' as issue_type,
  58. id,
  59. batch_id,
  60. scholarship_type_id,
  61. total_quota,
  62. used_quota,
  63. reserved_quota,
  64. available_quota,
  65. is_locked,
  66. status
  67. FROM jcbt_scholarship_quota
  68. WHERE deleted = 0 AND status != 'ACTIVE';
  69. -- 3. 检查是否存在外键约束或关联数据
  70. -- 检查是否有申请记录引用了这些名额
  71. SELECT
  72. q.id as quota_id,
  73. q.batch_id,
  74. q.scholarship_type_id,
  75. q.used_quota,
  76. q.is_locked,
  77. COUNT(DISTINCT a.id) as application_count
  78. FROM jcbt_scholarship_quota q
  79. LEFT JOIN jcbt_scholarship_application a ON a.batch_id = q.batch_id
  80. AND a.scholarship_type_id = q.scholarship_type_id
  81. WHERE q.deleted = 0
  82. GROUP BY q.id, q.batch_id, q.scholarship_type_id, q.used_quota, q.is_locked
  83. HAVING application_count > 0 OR q.used_quota > 0 OR q.is_locked = 1;
  84. -- 4. 检查是否有下级名额分配
  85. SELECT
  86. parent.id as parent_quota_id,
  87. parent.allocation_level as parent_level,
  88. parent.used_quota as parent_used_quota,
  89. parent.is_locked as parent_is_locked,
  90. COUNT(child.id) as child_count
  91. FROM jcbt_scholarship_quota parent
  92. LEFT JOIN jcbt_scholarship_quota child ON child.parent_quota_id = parent.id AND child.deleted = 0
  93. WHERE parent.deleted = 0
  94. GROUP BY parent.id, parent.allocation_level, parent.used_quota, parent.is_locked
  95. HAVING child_count > 0;
  96. -- 5. 详细查看有问题的记录(根据实际情况调整ID)
  97. -- 请替换下面的ID为实际无法删除的记录ID
  98. -- SELECT * FROM jcbt_scholarship_quota WHERE id = 替换为实际ID;
  99. -- 6. 查看相关批次信息
  100. SELECT
  101. b.id as batch_id,
  102. b.batch_name,
  103. b.batch_code,
  104. b.status as batch_status,
  105. b.start_time,
  106. b.end_time,
  107. COUNT(q.id) as quota_count
  108. FROM jcbt_scholarship_batch b
  109. LEFT JOIN jcbt_scholarship_quota q ON q.batch_id = b.id AND q.deleted = 0
  110. WHERE b.deleted = 0
  111. GROUP BY b.id, b.batch_name, b.batch_code, b.status, b.start_time, b.end_time;
  112. -- 7. 查看奖学金类型信息
  113. SELECT
  114. st.id as type_id,
  115. st.type_name,
  116. st.type_code,
  117. st.status as type_status,
  118. COUNT(q.id) as quota_count
  119. FROM jcbt_scholarship_type st
  120. LEFT JOIN jcbt_scholarship_quota q ON q.scholarship_type_id = st.id AND q.deleted = 0
  121. WHERE st.deleted = 0
  122. GROUP BY st.id, st.type_name, st.type_code, st.status;