xixi3_dorm_import_exclude3.sql 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. -- 西溪3号楼批量入库脚本(排除3个缺失学生)
  2. -- 说明:
  3. -- 1) 请先执行 xixi3_dorm_precheck.sql 中的数据装载部分(tmp_assign_input_raw + tmp_assign_norm)
  4. -- 2) 本脚本会排除:倪俊麟、胡俊𤋮、马腾子乐
  5. -- 3) 本脚本会写正式表:xg_dorm_bed_student / xg_dorm_bed / xg_student_msg
  6. START TRANSACTION;
  7. DROP TEMPORARY TABLE IF EXISTS tmp_assign_import_ready;
  8. CREATE TEMPORARY TABLE tmp_assign_import_ready AS
  9. SELECT
  10. t.room_code,
  11. t.bed_name,
  12. t.student_name,
  13. t.class_name,
  14. c.id AS class_id,
  15. c.college_id,
  16. c.major_id,
  17. s.id AS student_id,
  18. bld.id AS building_id,
  19. bld.area_id,
  20. bld.campus_id,
  21. rm.id AS room_id,
  22. bed.id AS bed_id,
  23. t.source_line,
  24. t.raw_text
  25. FROM tmp_assign_norm t
  26. LEFT JOIN xg_class_msg c
  27. ON c.deleted = 0
  28. AND c.class_name COLLATE utf8mb4_general_ci = t.class_name COLLATE utf8mb4_general_ci
  29. LEFT JOIN xg_student_msg s
  30. ON s.deleted = 0
  31. AND s.name COLLATE utf8mb4_general_ci = t.student_name COLLATE utf8mb4_general_ci
  32. AND s.class_name COLLATE utf8mb4_general_ci = t.class_name COLLATE utf8mb4_general_ci
  33. LEFT JOIN xg_dorm_building bld
  34. ON bld.deleted = '0'
  35. AND bld.building_name = '西溪3号楼'
  36. LEFT JOIN xg_dorm_room rm
  37. ON rm.deleted = '0'
  38. AND rm.building_id = bld.id
  39. AND rm.room_code COLLATE utf8mb4_general_ci = t.room_code COLLATE utf8mb4_general_ci
  40. LEFT JOIN xg_dorm_bed bed
  41. ON bed.deleted = '0'
  42. AND bed.room_id = rm.id
  43. AND bed.bed_name COLLATE utf8mb4_general_ci = t.bed_name COLLATE utf8mb4_general_ci
  44. WHERE t.student_name IS NOT NULL
  45. AND t.class_name IS NOT NULL
  46. AND t.student_name NOT IN ('倪俊麟', '胡俊𤋮', '马腾子乐');
  47. DROP TEMPORARY TABLE IF EXISTS tmp_assign_import_final;
  48. CREATE TEMPORARY TABLE tmp_assign_import_final AS
  49. SELECT r.*
  50. FROM tmp_assign_import_ready r
  51. LEFT JOIN xg_dorm_bed_student bs_bed
  52. ON bs_bed.deleted = '0' AND bs_bed.status = '0' AND bs_bed.bed_id = r.bed_id
  53. LEFT JOIN xg_dorm_bed_student bs_student
  54. ON bs_student.deleted = '0' AND bs_student.status = '0' AND bs_student.student_id = r.student_id
  55. WHERE r.class_id IS NOT NULL
  56. AND r.student_id IS NOT NULL
  57. AND r.building_id IS NOT NULL
  58. AND r.room_id IS NOT NULL
  59. AND r.bed_id IS NOT NULL
  60. AND bs_bed.id IS NULL
  61. AND bs_student.id IS NULL;
  62. SET @next_rel_id := (SELECT COALESCE(MAX(id), 0) FROM xg_dorm_bed_student);
  63. INSERT INTO xg_dorm_bed_student (
  64. id, college_id, major_id, class_id, student_id, bed_id, room_id, building_id, area_id, campus_id,
  65. status, assign_time, checkout_time, deleted, tenant_id, create_by, create_dept, create_time, update_by, update_time, remark
  66. )
  67. SELECT
  68. (@next_rel_id := @next_rel_id + 1) AS id,
  69. college_id,
  70. major_id,
  71. class_id,
  72. student_id,
  73. bed_id,
  74. room_id,
  75. building_id,
  76. area_id,
  77. campus_id,
  78. '0' AS status,
  79. NOW() AS assign_time,
  80. NULL AS checkout_time,
  81. '0' AS deleted,
  82. 0 AS tenant_id,
  83. NULL AS create_by,
  84. NULL AS create_dept,
  85. NOW() AS create_time,
  86. NULL AS update_by,
  87. NOW() AS update_time,
  88. CONCAT('西溪3号楼批量导入,source_line=', source_line) AS remark
  89. FROM tmp_assign_import_final;
  90. UPDATE xg_dorm_bed bed
  91. JOIN tmp_assign_import_final i ON i.bed_id = bed.id
  92. SET bed.bed_status = '1',
  93. bed.update_time = NOW()
  94. WHERE bed.deleted = '0';
  95. UPDATE xg_student_msg s
  96. JOIN tmp_assign_import_final i ON i.student_id = s.id
  97. SET s.is_boarder = 1,
  98. s.dormitory_building = CAST(i.building_id AS CHAR),
  99. s.dormitory_room = CAST(i.room_id AS CHAR),
  100. s.ext_field1 = CAST(i.bed_id AS CHAR),
  101. s.update_time = NOW()
  102. WHERE s.deleted = 0;
  103. SELECT
  104. (SELECT COUNT(*) FROM tmp_assign_import_ready) AS ready_cnt,
  105. (SELECT COUNT(*) FROM tmp_assign_import_final) AS imported_cnt;
  106. COMMIT;