vw_jw_student_export.sql 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. -- =============================================================================
  2. -- 学生基本信息 → 教务对接宽表视图
  3. -- 说明见:跟教务系统同步学生基础信息/学生基本信息对接说明.md
  4. --
  5. -- 口径摘要:
  6. -- * 身份证件类型:有 id_card 则「居民身份证」,否则 NULL
  7. -- * 所在校区:有有效宿舍分配则取 xg_dorm_campus.campus_name,否则 NULL
  8. -- * 班主任工号:class_teacher_id → sys_user.user_no(空则 user_name)
  9. -- * 学生是否在校:默认「在校」;退学(4)、毕业(5) 为「不在校」
  10. -- * 异动类型:固定 NULL
  11. -- * 毕业时间/毕业学年学期:在籍按 入学年份+学制 推算;已毕业(5)取 BI_YE 异动 effective_date
  12. -- * 学习经历/何年何月/在何地学习/在校照片:固定 NULL
  13. -- * 性别:0→男,1→女
  14. -- * 成员1/2:父亲/母亲及关系、电话
  15. -- * 学生当前状态:输出教务中文名称(见对接说明 §状态映射)
  16. -- =============================================================================
  17. DROP VIEW IF EXISTS `vw_jw_student_export`;
  18. CREATE VIEW `vw_jw_student_export` AS
  19. SELECT
  20. (m.`name` COLLATE utf8mb4_unicode_ci) AS `姓名`,
  21. (m.student_no COLLATE utf8mb4_unicode_ci) AS `学号`,
  22. (m.phone COLLATE utf8mb4_unicode_ci) AS `联系电话`,
  23. (CASE
  24. WHEN NULLIF(TRIM(m.id_card), '') IS NOT NULL
  25. THEN ('居民身份证' COLLATE utf8mb4_unicode_ci)
  26. ELSE (CAST(NULL AS CHAR(32) CHARACTER SET utf8mb4) COLLATE utf8mb4_unicode_ci)
  27. END) AS `身份证件类型`,
  28. (m.id_card COLLATE utf8mb4_unicode_ci) AS `身份证件号`,
  29. (COALESCE(m.class_name, cm.class_name) COLLATE utf8mb4_unicode_ci) AS `班级信息`,
  30. (dorm.campus_name COLLATE utf8mb4_unicode_ci) AS `所在校区`,
  31. (COALESCE(m.grade, cm.grade) COLLATE utf8mb4_unicode_ci) AS `所在年级`,
  32. m.enrollment_year AS `入学年份`,
  33. (COALESCE(m.college_name, cm.college_name) COLLATE utf8mb4_unicode_ci) AS `系部信息`,
  34. (COALESCE(m.major_name, cm.major_name) COLLATE utf8mb4_unicode_ci) AS `专业信息`,
  35. (COALESCE(NULLIF(TRIM(su.user_no), ''), su.user_name) COLLATE utf8mb4_unicode_ci) AS `班主任工号`,
  36. (COALESCE(m.class_teacher_name, cm.class_teacher_name) COLLATE utf8mb4_unicode_ci) AS `班主任姓名`,
  37. (CASE m.student_status
  38. WHEN '1' THEN '在读'
  39. WHEN '2' THEN '休学'
  40. WHEN '3' THEN '复学'
  41. WHEN '4' THEN '退学'
  42. WHEN '5' THEN '毕业'
  43. WHEN '6' THEN '其他'
  44. WHEN '7' THEN '结业'
  45. WHEN '8' THEN '停学'
  46. WHEN '9' THEN '其他'
  47. ELSE COALESCE(m.student_status, '')
  48. END COLLATE utf8mb4_unicode_ci) AS `学生当前状态`,
  49. (CASE
  50. WHEN (m.student_status COLLATE utf8mb4_unicode_ci) IN (
  51. ('4' COLLATE utf8mb4_unicode_ci),
  52. ('5' COLLATE utf8mb4_unicode_ci)
  53. ) THEN ('不在校' COLLATE utf8mb4_unicode_ci)
  54. ELSE ('在校' COLLATE utf8mb4_unicode_ci)
  55. END) AS `学生是否在校`,
  56. (CAST(NULL AS CHAR(32) CHARACTER SET utf8mb4) COLLATE utf8mb4_unicode_ci) AS `异动类型`,
  57. (CASE cm.class_type
  58. WHEN '0' THEN '三年制中级技工'
  59. WHEN '1' THEN '三年制技师'
  60. WHEN '2' THEN '四年制高级工'
  61. WHEN '3' THEN '五年制高级技工'
  62. WHEN '4' THEN '六年制技师'
  63. WHEN '5' THEN '中高职一体'
  64. ELSE cm.class_type
  65. END COLLATE utf8mb4_unicode_ci) AS `培养层次`,
  66. COALESCE(cm.school_system, m.school_system) AS `学制`,
  67. (
  68. CASE
  69. WHEN (m.student_status COLLATE utf8mb4_unicode_ci) = ('5' COLLATE utf8mb4_unicode_ci)
  70. AND grad_sc.effective_date IS NOT NULL
  71. THEN YEAR(grad_sc.effective_date)
  72. WHEN m.enrollment_year IS NOT NULL
  73. AND COALESCE(cm.school_system, m.school_system) IS NOT NULL
  74. THEN m.enrollment_year + COALESCE(cm.school_system, m.school_system)
  75. WHEN cm.graduation_year IS NOT NULL
  76. THEN cm.graduation_year
  77. ELSE NULL
  78. END
  79. ) AS `毕业时间`,
  80. (
  81. CASE
  82. WHEN (
  83. CASE
  84. WHEN (m.student_status COLLATE utf8mb4_unicode_ci) = ('5' COLLATE utf8mb4_unicode_ci)
  85. AND grad_sc.effective_date IS NOT NULL
  86. THEN YEAR(grad_sc.effective_date)
  87. WHEN m.enrollment_year IS NOT NULL
  88. AND COALESCE(cm.school_system, m.school_system) IS NOT NULL
  89. THEN m.enrollment_year + COALESCE(cm.school_system, m.school_system)
  90. WHEN cm.graduation_year IS NOT NULL
  91. THEN cm.graduation_year
  92. ELSE NULL
  93. END
  94. ) IS NOT NULL
  95. THEN CONCAT(
  96. (
  97. CASE
  98. WHEN (m.student_status COLLATE utf8mb4_unicode_ci) = ('5' COLLATE utf8mb4_unicode_ci)
  99. AND grad_sc.effective_date IS NOT NULL
  100. THEN YEAR(grad_sc.effective_date)
  101. WHEN m.enrollment_year IS NOT NULL
  102. AND COALESCE(cm.school_system, m.school_system) IS NOT NULL
  103. THEN m.enrollment_year + COALESCE(cm.school_system, m.school_system)
  104. WHEN cm.graduation_year IS NOT NULL
  105. THEN cm.graduation_year
  106. ELSE NULL
  107. END
  108. ) - 1,
  109. '-',
  110. (
  111. CASE
  112. WHEN (m.student_status COLLATE utf8mb4_unicode_ci) = ('5' COLLATE utf8mb4_unicode_ci)
  113. AND grad_sc.effective_date IS NOT NULL
  114. THEN YEAR(grad_sc.effective_date)
  115. WHEN m.enrollment_year IS NOT NULL
  116. AND COALESCE(cm.school_system, m.school_system) IS NOT NULL
  117. THEN m.enrollment_year + COALESCE(cm.school_system, m.school_system)
  118. WHEN cm.graduation_year IS NOT NULL
  119. THEN cm.graduation_year
  120. ELSE NULL
  121. END
  122. ),
  123. '-2'
  124. )
  125. ELSE NULL
  126. END
  127. ) AS `毕业学年学期`,
  128. (CAST(NULL AS CHAR(500) CHARACTER SET utf8mb4) COLLATE utf8mb4_unicode_ci) AS `学习经历`,
  129. (CAST(NULL AS CHAR(128) CHARACTER SET utf8mb4) COLLATE utf8mb4_unicode_ci) AS `何年何月-何年何月`,
  130. (CAST(NULL AS CHAR(256) CHARACTER SET utf8mb4) COLLATE utf8mb4_unicode_ci) AS `在何地学习`,
  131. (CASE m.gender
  132. WHEN '0' THEN '男'
  133. WHEN '1' THEN '女'
  134. ELSE NULL
  135. END COLLATE utf8mb4_unicode_ci) AS `性别`,
  136. (m.native_place COLLATE utf8mb4_unicode_ci) AS `籍贯地`,
  137. (CAST(NULL AS CHAR(500) CHARACTER SET utf8mb4) COLLATE utf8mb4_unicode_ci) AS `在校照片`,
  138. DATE(m.birth_date) AS `出生日期`,
  139. (COALESCE(NULLIF(TRIM(m.home_address), ''), m.current_address) COLLATE utf8mb4_unicode_ci) AS `家庭现住址`,
  140. (m.father_name COLLATE utf8mb4_unicode_ci) AS `成员1姓名`,
  141. (m.mother_name COLLATE utf8mb4_unicode_ci) AS `成员2姓名`,
  142. (CASE
  143. WHEN NULLIF(TRIM(m.father_name), '') IS NOT NULL
  144. THEN ('父亲' COLLATE utf8mb4_unicode_ci)
  145. ELSE (CAST(NULL AS CHAR(16) CHARACTER SET utf8mb4) COLLATE utf8mb4_unicode_ci)
  146. END) AS `成员1关系`,
  147. (CASE
  148. WHEN NULLIF(TRIM(m.mother_name), '') IS NOT NULL
  149. THEN ('母亲' COLLATE utf8mb4_unicode_ci)
  150. ELSE (CAST(NULL AS CHAR(16) CHARACTER SET utf8mb4) COLLATE utf8mb4_unicode_ci)
  151. END) AS `成员2关系`,
  152. (m.father_phone COLLATE utf8mb4_unicode_ci) AS `成员1联系电话`,
  153. (m.mother_phone COLLATE utf8mb4_unicode_ci) AS `成员2联系电话`,
  154. m.id AS `来源记录id`
  155. FROM xg_student_msg m
  156. LEFT JOIN xg_class_msg cm
  157. ON cm.deleted = 0
  158. AND (cm.tenant_id COLLATE utf8mb4_unicode_ci) = (m.tenant_id COLLATE utf8mb4_unicode_ci)
  159. AND cm.id = CAST(NULLIF(TRIM(m.class_id), '') AS UNSIGNED)
  160. LEFT JOIN sys_user su
  161. ON su.user_id = COALESCE(m.class_teacher_id, cm.class_teacher_id)
  162. AND (su.del_flag COLLATE utf8mb4_unicode_ci) = ('0' COLLATE utf8mb4_unicode_ci)
  163. AND (su.tenant_id COLLATE utf8mb4_unicode_ci) = (m.tenant_id COLLATE utf8mb4_unicode_ci)
  164. LEFT JOIN (
  165. SELECT
  166. dbs.student_id,
  167. MAX(dc.campus_name) AS campus_name
  168. FROM xg_dorm_bed_student dbs
  169. INNER JOIN (
  170. SELECT student_id, MAX(assign_time) AS max_assign
  171. FROM xg_dorm_bed_student
  172. WHERE deleted = '0'
  173. AND (status COLLATE utf8mb4_unicode_ci) = ('0' COLLATE utf8mb4_unicode_ci)
  174. GROUP BY student_id
  175. ) latest
  176. ON latest.student_id = dbs.student_id
  177. AND dbs.assign_time = latest.max_assign
  178. INNER JOIN xg_dorm_campus dc
  179. ON dc.id = dbs.campus_id
  180. AND (dc.deleted COLLATE utf8mb4_unicode_ci) = ('0' COLLATE utf8mb4_unicode_ci)
  181. WHERE dbs.deleted = '0'
  182. AND (dbs.status COLLATE utf8mb4_unicode_ci) = ('0' COLLATE utf8mb4_unicode_ci)
  183. GROUP BY dbs.student_id
  184. ) dorm ON dorm.student_id = m.id
  185. LEFT JOIN (
  186. SELECT
  187. sc.student_id,
  188. MAX(sc.effective_date) AS effective_date
  189. FROM xg_student_status_change sc
  190. WHERE sc.deleted = 0
  191. AND sc.process_status = 1
  192. AND (sc.change_type COLLATE utf8mb4_unicode_ci) = ('BI_YE' COLLATE utf8mb4_unicode_ci)
  193. GROUP BY sc.student_id
  194. ) grad_sc ON grad_sc.student_id = m.id
  195. WHERE m.deleted = 0;
  196. -- -----------------------------------------------------------------------------
  197. -- 授权:用户 jw_cx 仅查询本视图(需使用具备 GRANT 权限的账号执行,如 root)
  198. -- -----------------------------------------------------------------------------
  199. GRANT SELECT ON `hzdyjs_xg`.`vw_jw_student_export` TO 'jw_cx'@'%';
  200. FLUSH PRIVILEGES;