xg_reset_accommodation_and_apply_bed.sql 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. -- 用途:
  2. -- 1) 清空所有学生的住宿信息
  3. -- 2) 将学籍状态为“在读(student_status=1)”的学生统一标记为“申请床位(is_boarder=1)”
  4. --
  5. -- 依据代码:
  6. -- - 批量申请床位逻辑:xg_student_msg.is_boarder = 1
  7. -- - 学籍状态在读:xg_student_msg.student_status = '1'
  8. --
  9. -- 执行前建议:
  10. -- - 先在测试环境验证
  11. -- - 如需限制租户,可在每条SQL追加: AND tenant_id = 0
  12. START TRANSACTION;
  13. -- =========================
  14. -- Step 1: 删除/清空住宿信息
  15. -- =========================
  16. -- 1.1 清空学生表中的住宿字段,同时重置是否住校
  17. UPDATE xg_student_msg
  18. SET
  19. dormitory_building = NULL,
  20. dormitory_room = NULL,
  21. ext_field1 = NULL, -- 床位ID
  22. is_boarder = 0,
  23. update_time = NOW()
  24. WHERE deleted = 0;
  25. -- 1.2 逻辑删除床位-学生分配关系(相当于删除住宿分配记录)
  26. UPDATE xg_dorm_bed_student
  27. SET
  28. deleted = '1',
  29. update_time = NOW()
  30. WHERE deleted = '0';
  31. -- 1.3 重置床位状态为空闲
  32. UPDATE xg_dorm_bed
  33. SET
  34. bed_status = '0',
  35. update_time = NOW()
  36. WHERE deleted = '0';
  37. -- =========================
  38. -- Step 2: 在读学生统一申请床位
  39. -- =========================
  40. -- 系统“批量申请床位”对应逻辑:仅更新 is_boarder = 1
  41. UPDATE xg_student_msg
  42. SET
  43. is_boarder = 1,
  44. update_time = NOW()
  45. WHERE deleted = 0
  46. AND student_status = '1';
  47. COMMIT;
  48. -- 可选核对SQL(执行后可单独运行)
  49. -- SELECT COUNT(1) AS boarding_apply_count FROM xg_student_msg WHERE deleted = 0 AND student_status = '1' AND is_boarder = 1;
  50. -- SELECT COUNT(1) AS active_bed_rel_count FROM xg_dorm_bed_student WHERE deleted = '0';
  51. -- SELECT COUNT(1) AS occupied_bed_count FROM xg_dorm_bed WHERE deleted = '0' AND bed_status = '1';