vw_jw_student_export.sql 9.5 KB

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