xixi6_dorm_import.sql 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. -- 西溪6号楼批量入库脚本(可独立执行)
  2. -- 说明:脚本内已包含源数据临时表构建(含班级口径:电商231/烹饪221 保持原名)
  3. -- 会写正式表:xg_dorm_bed_student / xg_dorm_bed / xg_student_msg
  4. -- 西溪6号楼住宿预检查脚本(根据 学校学生住宿情况@西溪6号楼.md 自动生成)
  5. -- 说明: 本脚本仅做预检查,不会对正式表进行增删改
  6. DROP TEMPORARY TABLE IF EXISTS tmp_assign_input_raw;
  7. CREATE TEMPORARY TABLE tmp_assign_input_raw (
  8. room_code VARCHAR(20) NOT NULL,
  9. bed_name VARCHAR(20) NOT NULL,
  10. student_name VARCHAR(50) NULL,
  11. class_name_raw VARCHAR(100) NULL,
  12. remark VARCHAR(200) NULL,
  13. source_line INT NULL,
  14. raw_text VARCHAR(255) NULL
  15. );
  16. INSERT INTO tmp_assign_input_raw(room_code, bed_name, student_name, class_name_raw, remark, source_line, raw_text)
  17. VALUES
  18. ('6302', '1上', '徐湘琴', '药剂211', NULL, 32, '1上 徐湘琴 药剂211'),
  19. ('6302', '1下', '王瑜洁', '药剂211', NULL, 33, '1下 王瑜洁 药剂211'),
  20. ('6302', '2上', '周慧颖', '药剂211', NULL, 34, '2上 周慧颖 药剂211'),
  21. ('6302', '2下', '鲁子奕', '药剂211', NULL, 35, '2下 鲁子奕 药剂211'),
  22. ('6303', '1上', NULL, NULL, NULL, 39, '1上'),
  23. ('6303', '1下', '王佳慧', '药剂211', NULL, 40, '1下 王佳慧 药剂211'),
  24. ('6303', '2上', '张雅婷', '药剂211', NULL, 41, '2上 张雅婷 药剂211'),
  25. ('6303', '2下', '章征浣', '药剂211', NULL, 42, '2下 章征浣 药剂211'),
  26. ('6304', '1上', '吕杭', '药剂211', NULL, 46, '1上 吕杭 药剂211'),
  27. ('6304', '1下', '沈晓冉', '药剂211', NULL, 47, '1下 沈晓冉 药剂211'),
  28. ('6304', '2上', '应雪燕', '药剂211', NULL, 48, '2上 应雪燕 药剂211'),
  29. ('6304', '2下', NULL, NULL, NULL, 49, '2下'),
  30. ('6305', '1上', '邱夕颜', '药剂232', NULL, 53, '1上 邱夕颜 药剂232'),
  31. ('6305', '1下', '郑飞杨', '药剂211', NULL, 54, '1下 郑飞杨 药剂211'),
  32. ('6305', '2上', '涂舒涵', '药剂211', NULL, 55, '2上 涂舒涵 药剂211'),
  33. ('6305', '2下', '张欣雅', '中药232', NULL, 56, '2下 张欣雅 中药232'),
  34. ('6306', '1上', '来思琴', '药剂211', NULL, 60, '1上 来思琴 药剂211'),
  35. ('6306', '1下', '祝丽倩', '药剂211', NULL, 61, '1下 祝丽倩 药剂211'),
  36. ('6306', '2上', '吴思辰', '药剂211', NULL, 62, '2上 吴思辰 药剂211'),
  37. ('6306', '2下', '姚冰荧', '药剂211', NULL, 63, '2下 姚冰荧 药剂211'),
  38. ('6307', '1上', '刘欢', '药剂211', NULL, 67, '1上 刘欢 药剂211'),
  39. ('6307', '1下', '代舒琴', '药剂211', NULL, 68, '1下 代舒琴 药剂211'),
  40. ('6307', '2上', '冉庆铃', '药剂211', NULL, 69, '2上 冉庆铃 药剂211'),
  41. ('6307', '2下', '金舒琪', '药剂211', NULL, 70, '2下 金舒琪 药剂211'),
  42. ('6309', '1上', '傅瑜菲', '药剂211', '升学', 74, '1上 傅瑜菲 药剂211 升学'),
  43. ('6309', '1下', '何苗苗', '机器人231', NULL, 75, '1下 何苗苗 机器人231'),
  44. ('6309', '2上', '何静', '机器人231', NULL, 76, '2上 何静 机器人231'),
  45. ('6309', '2下', '袁笑笑', '机器人231', NULL, 77, '2下 袁笑笑 机器人231'),
  46. ('6401', '1上', '四郎志玛', '烹饪221', NULL, 81, '1上 四郎志玛 烹饪221'),
  47. ('6401', '1下', '仁青拉姆', '烹饪221', NULL, 82, '1下 仁青拉姆 烹饪221'),
  48. ('6401', '2上', '多吉志玛', '烹饪221', NULL, 83, '2上 多吉志玛 烹饪221'),
  49. ('6401', '2下', NULL, NULL, NULL, 84, '2下'),
  50. ('6402', '1上', '倪诗余', '电商231', NULL, 88, '1上 倪诗余 电商231'),
  51. ('6402', '1下', '颜雨焓', '电商231', NULL, 89, '1下 颜雨焓 电商231'),
  52. ('6402', '2上', '龚艾雯', '电商231', NULL, 90, '2上 龚艾雯 电商231'),
  53. ('6402', '2下', '占佳琪', '电商231', NULL, 91, '2下 占佳琪 电商231'),
  54. ('6403', '1上', '任果果', '电商231', NULL, 95, '1上 任果果 电商231'),
  55. ('6403', '1下', '赖桦蓉', '电商231', NULL, 96, '1下 赖桦蓉 电商231'),
  56. ('6403', '2上', '顾晶晶', '电商231', NULL, 97, '2上 顾晶晶 电商231'),
  57. ('6403', '2下', '裘园园', '电商231', NULL, 98, '2下 裘园园 电商231'),
  58. ('6404', '1上', '张未茜', '电商231', NULL, 102, '1上 张未茜 电商231'),
  59. ('6404', '1下', '周美德', '电商231', NULL, 103, '1下 周美德 电商231'),
  60. ('6404', '2上', '孙喜悦', '电商231', NULL, 104, '2上 孙喜悦 电商231'),
  61. ('6404', '2下', '姜萌怡', '电商231', NULL, 105, '2下 姜萌怡 电商231'),
  62. ('6405', '1上', '张善媛', '电商231', NULL, 109, '1上 张善媛 电商231'),
  63. ('6405', '1下', '秦诗怡', '电商231', NULL, 110, '1下 秦诗怡 电商231'),
  64. ('6405', '2上', '沈张瑶', '电商231', NULL, 111, '2上 沈张瑶 电商231'),
  65. ('6405', '2下', '李玲', '电商231', NULL, 112, '2下 李玲 电商231'),
  66. ('6406', '1上', '项子婷', '电商231', NULL, 116, '1上 项子婷 电商231'),
  67. ('6406', '1下', '李静姝', '电商231', NULL, 117, '1下 李静姝 电商231'),
  68. ('6406', '2上', NULL, NULL, NULL, 118, '2上'),
  69. ('6406', '2下', '吴晓燕', '电商231', NULL, 119, '2下 吴晓燕 电商231'),
  70. ('6407', '1上', '邱夕颜', '药剂232', NULL, 123, '1上 邱夕颜 药剂232'),
  71. ('6407', '1下', '张欣雅', '中药232', NULL, 124, '1下 张欣雅 中药232'),
  72. ('6407', '2上', '郑佳妮', '中药251', NULL, 125, '2上 郑佳妮 中药251'),
  73. ('6407', '2下', '张雅琴', '西餐运营232', NULL, 126, '2下 张雅琴 西餐运营232')
  74. ;
  75. DROP TEMPORARY TABLE IF EXISTS tmp_assign_norm;
  76. CREATE TEMPORARY TABLE tmp_assign_norm AS
  77. SELECT
  78. TRIM(room_code) AS room_code,
  79. TRIM(bed_name) AS bed_name,
  80. NULLIF(TRIM(student_name), '') AS student_name,
  81. CASE NULLIF(TRIM(SUBSTRING_INDEX(COALESCE(class_name_raw, ''), ' ', 1)), '')
  82. WHEN '数媒251' THEN '数字媒体251'
  83. WHEN '电商251' THEN '电子商务251'
  84. WHEN '电商252' THEN '电子商务252'
  85. WHEN '西餐运营211' THEN '西餐211'
  86. ELSE NULLIF(TRIM(SUBSTRING_INDEX(COALESCE(class_name_raw, ''), ' ', 1)), '')
  87. END AS class_name,
  88. NULLIF(TRIM(class_name_raw), '') AS class_name_raw,
  89. NULLIF(TRIM(remark), '') AS remark,
  90. source_line,
  91. raw_text
  92. FROM tmp_assign_input_raw;
  93. START TRANSACTION;
  94. DROP TEMPORARY TABLE IF EXISTS tmp_assign_import_ready;
  95. CREATE TEMPORARY TABLE tmp_assign_import_ready AS
  96. SELECT
  97. t.room_code,
  98. t.bed_name,
  99. t.student_name,
  100. t.class_name,
  101. c.id AS class_id,
  102. c.college_id,
  103. c.major_id,
  104. s.id AS student_id,
  105. bld.id AS building_id,
  106. bld.area_id,
  107. bld.campus_id,
  108. rm.id AS room_id,
  109. bed.id AS bed_id,
  110. t.source_line,
  111. t.raw_text
  112. FROM tmp_assign_norm t
  113. LEFT JOIN xg_class_msg c
  114. ON c.deleted = 0
  115. AND c.class_name COLLATE utf8mb4_general_ci = t.class_name COLLATE utf8mb4_general_ci
  116. LEFT JOIN xg_student_msg s
  117. ON s.deleted = 0
  118. AND s.name COLLATE utf8mb4_general_ci = t.student_name COLLATE utf8mb4_general_ci
  119. AND s.class_name COLLATE utf8mb4_general_ci = t.class_name COLLATE utf8mb4_general_ci
  120. LEFT JOIN xg_dorm_building bld
  121. ON bld.deleted = '0'
  122. AND bld.building_name = '西溪6号楼'
  123. LEFT JOIN xg_dorm_room rm
  124. ON rm.deleted = '0'
  125. AND rm.building_id = bld.id
  126. AND rm.room_code COLLATE utf8mb4_general_ci = t.room_code COLLATE utf8mb4_general_ci
  127. LEFT JOIN xg_dorm_bed bed
  128. ON bed.deleted = '0'
  129. AND bed.room_id = rm.id
  130. AND bed.bed_name COLLATE utf8mb4_general_ci = t.bed_name COLLATE utf8mb4_general_ci
  131. WHERE t.student_name IS NOT NULL
  132. AND t.class_name IS NOT NULL;
  133. DROP TEMPORARY TABLE IF EXISTS tmp_assign_import_final;
  134. CREATE TEMPORARY TABLE tmp_assign_import_final AS
  135. SELECT r.*
  136. FROM tmp_assign_import_ready r
  137. LEFT JOIN xg_dorm_bed_student bs_bed
  138. ON bs_bed.deleted = '0' AND bs_bed.status = '0' AND bs_bed.bed_id = r.bed_id
  139. LEFT JOIN xg_dorm_bed_student bs_student
  140. ON bs_student.deleted = '0' AND bs_student.status = '0' AND bs_student.student_id = r.student_id
  141. WHERE r.class_id IS NOT NULL
  142. AND r.student_id IS NOT NULL
  143. AND r.building_id IS NOT NULL
  144. AND r.room_id IS NOT NULL
  145. AND r.bed_id IS NOT NULL
  146. AND bs_bed.id IS NULL
  147. AND bs_student.id IS NULL;
  148. SET @next_rel_id := (SELECT COALESCE(MAX(id), 0) FROM xg_dorm_bed_student);
  149. INSERT INTO xg_dorm_bed_student (
  150. id, college_id, major_id, class_id, student_id, bed_id, room_id, building_id, area_id, campus_id,
  151. status, assign_time, checkout_time, deleted, tenant_id, create_by, create_dept, create_time, update_by, update_time, remark
  152. )
  153. SELECT
  154. (@next_rel_id := @next_rel_id + 1) AS id,
  155. college_id,
  156. major_id,
  157. class_id,
  158. student_id,
  159. bed_id,
  160. room_id,
  161. building_id,
  162. area_id,
  163. campus_id,
  164. '0' AS status,
  165. NOW() AS assign_time,
  166. NULL AS checkout_time,
  167. '0' AS deleted,
  168. 0 AS tenant_id,
  169. NULL AS create_by,
  170. NULL AS create_dept,
  171. NOW() AS create_time,
  172. NULL AS update_by,
  173. NOW() AS update_time,
  174. CONCAT('西溪6号楼批量导入,source_line=', source_line) AS remark
  175. FROM tmp_assign_import_final;
  176. UPDATE xg_dorm_bed bed
  177. JOIN tmp_assign_import_final i ON i.bed_id = bed.id
  178. SET bed.bed_status = '1',
  179. bed.update_time = NOW()
  180. WHERE bed.deleted = '0';
  181. UPDATE xg_student_msg s
  182. JOIN tmp_assign_import_final i ON i.student_id = s.id
  183. SET s.is_boarder = 1,
  184. s.dormitory_building = CAST(i.building_id AS CHAR),
  185. s.dormitory_room = CAST(i.room_id AS CHAR),
  186. s.ext_field1 = CAST(i.bed_id AS CHAR),
  187. s.update_time = NOW()
  188. WHERE s.deleted = 0;
  189. SELECT
  190. (SELECT COUNT(*) FROM tmp_assign_import_ready) AS ready_cnt,
  191. (SELECT COUNT(*) FROM tmp_assign_import_final) AS imported_cnt;
  192. COMMIT;