Files
2026-05-07 13:44:48 +08:00

116 lines
3.7 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 西溪3号楼批量入库脚本(排除3个缺失学生)
-- 说明:
-- 1) 请先执行 xixi3_dorm_precheck.sql 中的数据装载部分(tmp_assign_input_raw + tmp_assign_norm)
-- 2) 本脚本会排除:倪俊麟、胡俊𤋮、马腾子乐
-- 3) 本脚本会写正式表:xg_dorm_bed_student / xg_dorm_bed / xg_student_msg
START TRANSACTION;
DROP TEMPORARY TABLE IF EXISTS tmp_assign_import_ready;
CREATE TEMPORARY TABLE tmp_assign_import_ready AS
SELECT
t.room_code,
t.bed_name,
t.student_name,
t.class_name,
c.id AS class_id,
c.college_id,
c.major_id,
s.id AS student_id,
bld.id AS building_id,
bld.area_id,
bld.campus_id,
rm.id AS room_id,
bed.id AS bed_id,
t.source_line,
t.raw_text
FROM tmp_assign_norm t
LEFT JOIN xg_class_msg c
ON c.deleted = 0
AND c.class_name COLLATE utf8mb4_general_ci = t.class_name COLLATE utf8mb4_general_ci
LEFT JOIN xg_student_msg s
ON s.deleted = 0
AND s.name COLLATE utf8mb4_general_ci = t.student_name COLLATE utf8mb4_general_ci
AND s.class_name COLLATE utf8mb4_general_ci = t.class_name COLLATE utf8mb4_general_ci
LEFT JOIN xg_dorm_building bld
ON bld.deleted = '0'
AND bld.building_name = '西溪3号楼'
LEFT JOIN xg_dorm_room rm
ON rm.deleted = '0'
AND rm.building_id = bld.id
AND rm.room_code COLLATE utf8mb4_general_ci = t.room_code COLLATE utf8mb4_general_ci
LEFT JOIN xg_dorm_bed bed
ON bed.deleted = '0'
AND bed.room_id = rm.id
AND bed.bed_name COLLATE utf8mb4_general_ci = t.bed_name COLLATE utf8mb4_general_ci
WHERE t.student_name IS NOT NULL
AND t.class_name IS NOT NULL
AND t.student_name NOT IN ('倪俊麟', '胡俊𤋮', '马腾子乐');
DROP TEMPORARY TABLE IF EXISTS tmp_assign_import_final;
CREATE TEMPORARY TABLE tmp_assign_import_final AS
SELECT r.*
FROM tmp_assign_import_ready r
LEFT JOIN xg_dorm_bed_student bs_bed
ON bs_bed.deleted = '0' AND bs_bed.status = '0' AND bs_bed.bed_id = r.bed_id
LEFT JOIN xg_dorm_bed_student bs_student
ON bs_student.deleted = '0' AND bs_student.status = '0' AND bs_student.student_id = r.student_id
WHERE r.class_id IS NOT NULL
AND r.student_id IS NOT NULL
AND r.building_id IS NOT NULL
AND r.room_id IS NOT NULL
AND r.bed_id IS NOT NULL
AND bs_bed.id IS NULL
AND bs_student.id IS NULL;
SET @next_rel_id := (SELECT COALESCE(MAX(id), 0) FROM xg_dorm_bed_student);
INSERT INTO xg_dorm_bed_student (
id, college_id, major_id, class_id, student_id, bed_id, room_id, building_id, area_id, campus_id,
status, assign_time, checkout_time, deleted, tenant_id, create_by, create_dept, create_time, update_by, update_time, remark
)
SELECT
(@next_rel_id := @next_rel_id + 1) AS id,
college_id,
major_id,
class_id,
student_id,
bed_id,
room_id,
building_id,
area_id,
campus_id,
'0' AS status,
NOW() AS assign_time,
NULL AS checkout_time,
'0' AS deleted,
0 AS tenant_id,
NULL AS create_by,
NULL AS create_dept,
NOW() AS create_time,
NULL AS update_by,
NOW() AS update_time,
CONCAT('西溪3号楼批量导入,source_line=', source_line) AS remark
FROM tmp_assign_import_final;
UPDATE xg_dorm_bed bed
JOIN tmp_assign_import_final i ON i.bed_id = bed.id
SET bed.bed_status = '1',
bed.update_time = NOW()
WHERE bed.deleted = '0';
UPDATE xg_student_msg s
JOIN tmp_assign_import_final i ON i.student_id = s.id
SET s.is_boarder = 1,
s.dormitory_building = CAST(i.building_id AS CHAR),
s.dormitory_room = CAST(i.room_id AS CHAR),
s.ext_field1 = CAST(i.bed_id AS CHAR),
s.update_time = NOW()
WHERE s.deleted = 0;
SELECT
(SELECT COUNT(*) FROM tmp_assign_import_ready) AS ready_cnt,
(SELECT COUNT(*) FROM tmp_assign_import_final) AS imported_cnt;
COMMIT;