StudentMapper.xml 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <!--
  4. 这个文件是自动生成的。
  5. 不要修改此文件。所有改动将在下次重新自动生成时丢失。
  6. -->
  7. <mapper namespace="com.ym.mec.biz.dal.dao.StudentDao">
  8. <resultMap type="com.ym.mec.biz.dal.entity.Student" id="Student">
  9. <result column="user_id_" property="userId"/>
  10. <result column="subject_id_list_" property="subjectIdList"/>
  11. <result column="service_tag_" property="serviceTag"/>
  12. <result column="operating_tag_" property="operatingTag"/>
  13. <result column="operating_temp_tag_" property="operatingTempTag"/>
  14. <result column="teacher_id_" property="teacherId"/>
  15. <result column="teacher_name_" property="teacherName"/>
  16. <result column="is_new_user_" property="isNewUser"/>
  17. <result column="create_time_" property="createTime"/>
  18. <result column="update_time_" property="updateTime"/>
  19. <result column="care_package_" property="carePackage"/>
  20. <result column="come_on_package_" property="comeOnPackage"/>
  21. </resultMap>
  22. <!-- 根据主键查询一条记录 -->
  23. <select id="get" resultMap="Student">
  24. SELECT *
  25. FROM student
  26. WHERE user_id_ = #{id}
  27. </select>
  28. <select id="getLocked" resultMap="Student">
  29. SELECT *
  30. FROM student
  31. WHERE user_id_ = #{id} for update
  32. </select>
  33. <!-- 全查询 -->
  34. <select id="findAll" resultMap="Student">
  35. SELECT *
  36. FROM student
  37. </select>
  38. <select id="lockUser" resultType="int" useCache="false" flushCache="true">
  39. SELECT id_
  40. FROM sys_user
  41. WHERE id_ = #{userId} FOR
  42. UPDATE
  43. </select>
  44. <select id="lockUserReturnInfo" resultMap="com.ym.mec.biz.dal.dao.TeacherDao.SysUser">
  45. SELECT *
  46. FROM sys_user
  47. WHERE id_ = #{userId} FOR UPDATE
  48. </select>
  49. <!-- 向数据库增加一条记录 -->
  50. <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.Student" useGeneratedKeys="true" keyColumn="id"
  51. keyProperty="id">
  52. INSERT INTO student (user_id_,subject_id_list_,
  53. <if test="serviceTag != null">
  54. service_tag_,
  55. </if>
  56. <if test="operatingTag != null">
  57. operating_tag_,
  58. </if>
  59. teacher_id_,care_package_,come_on_package_,create_time_,update_time_,service_tag_update_time_)
  60. VALUES
  61. (#{userId},#{subjectIdList},
  62. <if test="serviceTag != null">
  63. #{serviceTag},
  64. </if>
  65. <if test="operatingTag != null">
  66. #{operatingTag},
  67. </if>
  68. #{teacherId},#{carePackage},#{comeOnPackage},NOW(),NOW(),NOW())
  69. </insert>
  70. <update id="update" parameterType="com.ym.mec.biz.dal.entity.Student">
  71. UPDATE student
  72. <set>
  73. <if test="subjectIdList != null">
  74. subject_id_list_ = #{subjectIdList},
  75. </if>
  76. <if test="serviceTag != null">
  77. service_tag_update_time_=IF(service_tag_ = #{serviceTag}, service_tag_update_time_, NOW()),
  78. service_tag_ = #{serviceTag},
  79. </if>
  80. <if test="operatingTag != null">
  81. operating_tag_ = #{operatingTag},
  82. </if>
  83. <if test="operatingTempTag != null">
  84. operating_temp_tag_ = #{operatingTempTag},
  85. </if>
  86. <if test="teacherId != null">
  87. teacher_id_=#{teacherId},
  88. </if>
  89. <if test="isNewUser != null">
  90. is_new_user_=#{isNewUser},
  91. </if>
  92. <if test="carePackage != null">
  93. care_package_=#{carePackage},
  94. </if>
  95. <if test="comeOnPackage != null">
  96. come_on_package_=#{comeOnPackage},
  97. </if>
  98. update_time_ = NOW()
  99. </set>
  100. WHERE user_id_ = #{userId}
  101. </update>
  102. <!-- 分页查询 -->
  103. <select id="queryPage" resultMap="Student" parameterType="map">
  104. SELECT * FROM student
  105. <include refid="global.limit"/>
  106. </select>
  107. <!-- 查询当前表的总记录数 -->
  108. <select id="queryCount" resultType="int">
  109. SELECT COUNT(*)
  110. FROM student
  111. </select>
  112. <select id="findStudents" resultMap="com.ym.mec.biz.dal.dao.TeacherDao.SysUser">
  113. SELECT id_, username_, phone_,avatar_ FROM sys_user
  114. <include refid="studentQueryCondition"/>
  115. ORDER BY id_
  116. <include refid="global.limit"/>
  117. </select>
  118. <select id="countStudents" resultType="int">
  119. SELECT COUNT(id_) FROM sys_user
  120. <include refid="studentQueryCondition"/>
  121. </select>
  122. <sql id="studentQueryCondition">
  123. <where>
  124. <if test="organIdList!=null">
  125. organ_id_ IN
  126. <foreach collection="organIdList" item="organId" open="(" close=")" separator=",">
  127. #{organId}
  128. </foreach>
  129. </if>
  130. <if test="search!=null">
  131. AND (username_ LIKE CONCAT('%', #{search}, '%') OR phone_ LIKE CONCAT('%', #{search}, '%'))
  132. </if>
  133. AND FIND_IN_SET("STUDENT", user_type_)
  134. </where>
  135. </sql>
  136. <select id="queryByOperatingTempTag" resultMap="Student">
  137. SELECT *
  138. FROM student
  139. WHERE operating_temp_tag_ = #{operatingTempTag}
  140. </select>
  141. <update id="batchUpdate" parameterType="java.util.List">
  142. <foreach collection="studentList" item="item" index="index" open="" close="" separator=";">
  143. UPDATE student
  144. <set>
  145. <if test="item.subjectIdList != null">
  146. subject_id_list_ = #{item.subjectIdList},
  147. </if>
  148. <if test="item.serviceTag != null">
  149. service_tag_ = #{item.serviceTag},
  150. </if>
  151. <if test="item.operatingTag != null">
  152. operating_tag_ = #{item.operatingTag},
  153. </if>
  154. <if test="item.operatingTempTag != null">
  155. operating_temp_tag_ = #{item.operatingTempTag},
  156. </if>
  157. <if test="item.teacherId != null">
  158. teacher_id_=#{item.teacherId},
  159. </if>
  160. <if test="item.updateTime != null">
  161. update_time_ = #{item.updateTime},
  162. </if>
  163. <if test="item.carePackage != null">
  164. care_package_=#{item.carePackage},
  165. </if>
  166. <if test="item.comeOnPackage != null">
  167. come_on_package_=#{item.comeOnPackage},
  168. </if>
  169. update_time_ = NOW()
  170. </set>
  171. WHERE user_id_ = #{item.userId}
  172. </foreach>
  173. </update>
  174. <update id="updateStudentServiceOrOperatingTag">
  175. UPDATE student
  176. <set>
  177. <if test="serviceTag != null">
  178. service_tag_ = #{serviceTag},
  179. </if>
  180. <if test="operatingTag != null">
  181. operating_tag_ = #{operatingTag},
  182. </if>
  183. update_time_ = NOW()
  184. </set>
  185. WHERE
  186. <if test="studentId!=null">
  187. user_id_ = #{studentId}
  188. </if>
  189. <if test="studentIds!=null and studentIds.size()>0">
  190. user_id_ IN
  191. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  192. #{studentId}
  193. </foreach>
  194. </if>
  195. </update>
  196. <update id="updateStudentServiceTag">
  197. UPDATE student
  198. <set>
  199. <if test="serviceTag != null">
  200. service_tag_update_time_ = IF(service_tag_=#{serviceTag}, service_tag_update_time_, NOW()),
  201. service_tag_ = #{serviceTag},
  202. </if>
  203. update_time_ = NOW()
  204. </set>
  205. WHERE
  206. service_tag_=0
  207. <if test="studentId!=null">
  208. AND user_id_ = #{studentId}
  209. </if>
  210. <if test="studentIds!=null and studentIds.size()>0">
  211. AND user_id_ IN
  212. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  213. #{studentId}
  214. </foreach>
  215. </if>
  216. </update>
  217. <update id="batchUpdateAdviser">
  218. UPDATE student s SET s.teacher_id_ = #{teacherId},s.update_time_ = NOW() WHERE FIND_IN_SET(s.user_id_,#{studentIds})
  219. </update>
  220. <update id="updateServiceTag">
  221. UPDATE student SET service_tag_ = #{serviceTag},update_time_ = NOW() WHERE user_id_ IN
  222. <foreach collection="studentIds" item="item" open="(" separator="," close=")">
  223. #{item}
  224. </foreach>
  225. </update>
  226. <resultMap id="student4operating" type="com.ym.mec.biz.dal.dto.Student4operating">
  227. <result column="organ_name_" property="organName"/>
  228. <result column="organ_id_" property="organId"/>
  229. <result column="student_name_" property="studentName"/>
  230. <result column="student_id_" property="studentId"/>
  231. <result column="teacher_id_" property="teacherId"/>
  232. <result column="teacher_name_" property="teacherName"/>
  233. <result column="operating_tag_" property="operatingTag"/>
  234. <result column="vip_times_" property="vipTimes"/>
  235. <result column="free_practice_times_" property="freePracticeTimes"/>
  236. <result column="buy_practice_times_" property="buyPracticeTimes"/>
  237. <result column="music_netWork_times_" property="musicNetWorkTimes"/>
  238. <result column="student_num_" property="studentNum"/>
  239. </resultMap>
  240. <select id="getOperatingStudents" resultMap="student4operating">
  241. SELECT su.organ_id_,
  242. o.name_ organ_name_,
  243. su.username_ student_name_,
  244. s.user_id_ student_id_,
  245. tsu.id_ teacher_id_,
  246. tsu.real_name_ teacher_name_,
  247. s.operating_tag_,
  248. a.vip_times_,
  249. a.buy_practice_times_,
  250. a.music_netWork_times_,
  251. p.free_practice_times_
  252. FROM student s
  253. LEFT JOIN sys_user su ON s.user_id_ = su.id_
  254. LEFT JOIN sys_user tsu ON tsu.id_ = s.teacher_id_
  255. LEFT JOIN organization o ON o.id_ = su.organ_id_
  256. LEFT JOIN (
  257. SELECT cssp.user_id_,
  258. SUM(case when (cs.group_type_ = 'VIP' AND cs.teach_mode_='ONLINE') then 1 ELSE 0 END) vip_times_,
  259. SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_,
  260. SUM(case when (cs.type_='MUSIC_NETWORK' OR cs.type_='HIGH_ONLINE') then 1 ELSE 0 END) music_netWork_times_
  261. FROM course_schedule_student_payment cssp
  262. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  263. LEFT JOIN practice_group pg ON pg.`id_` = cs.`music_group_id_` AND cs.`group_type_` = 'PRACTICE'
  264. WHERE cs.status_ IN ('NOT_START','UNDERWAY') AND (cs.is_lock_ IS NULL OR cs.is_lock_=0) AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
  265. GROUP BY cssp.user_id_
  266. ) a on a.user_id_ = s.user_id_
  267. LEFT JOIN (
  268. SELECT student_id_, count(id_) free_practice_times_
  269. FROM practice_group
  270. WHERE type_='FREE' AND group_status_ IN ('NORMAL', 'FINISH')
  271. GROUP BY student_id_
  272. ) p ON p.student_id_ = s.user_id_
  273. <include refid="student4OperatingQueryCondition"/>
  274. ORDER BY s.user_id_
  275. <include refid="global.limit"/>
  276. </select>
  277. <select id="countOperatingStudents" resultType="int">
  278. SELECT COUNT(s.user_id_) FROM student s
  279. LEFT JOIN sys_user su ON s.user_id_ = su.id_
  280. LEFT JOIN sys_user tsu ON tsu.id_ = s.teacher_id_
  281. LEFT JOIN (
  282. SELECT cssp.user_id_,
  283. SUM(case when (cs.group_type_ = 'VIP' AND cs.teach_mode_='ONLINE') then 1 ELSE 0 END) vip_times_,
  284. SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_,
  285. SUM(case when (cs.type_='MUSIC_NETWORK' OR cs.type_='HIGH_ONLINE') then 1 ELSE 0 END) music_netWork_times_
  286. FROM course_schedule_student_payment cssp
  287. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  288. LEFT JOIN practice_group pg ON pg.`id_` = cs.`music_group_id_` AND cs.`group_type_` = 'PRACTICE'
  289. WHERE cs.status_ IN ('NOT_START','UNDERWAY') AND (cs.is_lock_ IS NULL OR cs.is_lock_=0) AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
  290. GROUP BY cssp.user_id_
  291. ) a on a.user_id_ = s.user_id_
  292. LEFT JOIN (
  293. SELECT student_id_, count(id_) free_practice_times_
  294. FROM practice_group
  295. WHERE type_='FREE' AND group_status_ IN ('NORMAL', 'FINISH')
  296. GROUP BY student_id_
  297. ) p ON p.student_id_ = s.user_id_
  298. <include refid="student4OperatingQueryCondition"/>
  299. </select>
  300. <sql id="student4OperatingQueryCondition">
  301. <where>
  302. su.user_type_ LIKE '%STUDENT%'
  303. <if test="search != null and search != ''">
  304. AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.id_
  305. LIKE CONCAT('%',#{search},'%'))
  306. </if>
  307. <if test="organId != null and organId != ''">
  308. AND FIND_IN_SET(su.organ_id_,#{organId})
  309. </if>
  310. <if test="teacherId!=null">
  311. AND s.teacher_id_ = #{teacherId}
  312. </if>
  313. <if test="operatingTag !=null">
  314. AND s.operating_tag_ = #{operatingTag}
  315. </if>
  316. <if test='hasVip != null and hasVip=="1"'>
  317. AND a.vip_times_ >=1
  318. </if>
  319. <if test='hasVip != null and hasVip=="0"'>
  320. AND (a.vip_times_ =0 OR a.vip_times_ IS NULL)
  321. </if>
  322. <if test='hasFreePractice != null and hasFreePractice=="1"'>
  323. AND p.free_practice_times_ >=1
  324. </if>
  325. <if test='hasFreePractice != null and hasFreePractice=="0"'>
  326. AND (p.free_practice_times_ =0 OR p.free_practice_times_ IS NULL)
  327. </if>
  328. <if test='hasBuyPractice != null and hasBuyPractice=="1"'>
  329. AND a.buy_practice_times_ >=1
  330. </if>
  331. <if test='hasBuyPractice != null and hasBuyPractice=="0"'>
  332. AND (a.buy_practice_times_ =0 OR a.buy_practice_times_ IS NULL)
  333. </if>
  334. <if test='hasMusicNetWork != null and hasMusicNetWork=="1"'>
  335. AND a.music_netWork_times_ >=1
  336. </if>
  337. <if test='hasMusicNetWork != null and hasMusicNetWork=="0"'>
  338. AND (a.music_netWork_times_ =0 OR a.music_netWork_times_ IS NULL)
  339. </if>
  340. </where>
  341. </sql>
  342. <select id="getTeacherOperatingStudentsNum" resultType="java.util.Map">
  343. select teacher_id_ 'key', count(*) 'value'
  344. FROM student
  345. WHERE FIND_IN_SET(teacher_id_, #{teacherIds})
  346. AND operating_tag_ = 1
  347. GROUP BY teacher_id_
  348. </select>
  349. <select id="getBuyNums" resultType="java.util.Map">
  350. SELECT s.teacher_id_ 'key', COUNT(DISTINCT cssp.user_id_) 'value'
  351. FROM course_schedule_student_payment cssp
  352. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.teach_mode_ = 'ONLINE'
  353. LEFT JOIN student s ON s.user_id_ = cssp.user_id_
  354. <if test="groupType != null and groupType==@com.ym.mec.biz.dal.enums.GroupType@PRACTICE">
  355. LEFT JOIN practice_group pg ON cssp.music_group_id_ = pg.id_ AND cssp.group_type_ = 'PRACTICE'
  356. </if>
  357. WHERE s.teacher_id_ = #{teacherId}
  358. AND cs.status_ IN ('NOT_START', 'UNDERWAY')
  359. AND (cs.is_lock_ IS NULL OR cs.is_lock_ = 0)
  360. <if test="groupType != null">
  361. AND cs.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
  362. </if>
  363. <if test="groupType != null and groupType==@com.ym.mec.biz.dal.enums.GroupType@PRACTICE">
  364. AND pg.group_status_ IN ('NORMAL', 'FINISH')
  365. AND pg.buy_months_ >= 1
  366. </if>
  367. GROUP BY s.teacher_id_
  368. </select>
  369. <select id="getPracticeAndVipNums" resultType="java.util.Map">
  370. SELECT s.teacher_id_ 'key', COUNT(DISTINCT pg.student_id_) 'value'
  371. FROM practice_group pg
  372. LEFT JOIN student s on s.user_id_ = pg.student_id_
  373. LEFT JOIN course_schedule_student_payment vcssp
  374. ON vcssp.user_id_ = pg.student_id_ AND vcssp.group_type_ = 'VIP'
  375. LEFT JOIN course_schedule_student_payment pcssp
  376. ON pcssp.user_id_ = pg.student_id_ AND pcssp.group_type_ = 'PRACTICE'
  377. LEFT JOIN course_schedule vcs ON vcs.id_ = vcssp.course_schedule_id_ AND vcs.teach_mode_ = 'ONLINE'
  378. LEFT JOIN course_schedule pcs ON pcs.id_ = pcssp.course_schedule_id_
  379. WHERE FIND_IN_SET(s.teacher_id_, #{teacherIds})
  380. AND pg.group_status_ IN ('NORMAL', 'FINISH')
  381. AND vcs.status_ IN ('NOT_START', 'UNDERWAY')
  382. AND pcs.status_ IN ('NOT_START', 'UNDERWAY')
  383. AND (vcs.is_lock_ IS NULL OR vcs.is_lock_ = 0)
  384. AND (pcs.is_lock_ IS NULL OR pcs.is_lock_ = 0)
  385. AND pg.buy_months_ >= 1
  386. GROUP BY s.teacher_id_
  387. </select>
  388. <select id="getServiceStudents" resultMap="Student">
  389. SELECT su.id_ user_id_,s.teacher_id_ FROM sys_user su
  390. LEFT JOIN student s ON s.user_id_=su.id_
  391. WHERE s.service_tag_=1 AND FIND_IN_SET('STUDENT', su.user_type_)
  392. </select>
  393. <resultMap id="StudentServeDto" type="com.ym.mec.biz.dal.dto.StudentServeDto" extends="Student">
  394. <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  395. <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  396. <result property="courseStartTime" column="course_start_time_"/>
  397. </resultMap>
  398. <select id="getBeServiceStudents" resultMap="StudentServeDto">
  399. SELECT
  400. s.user_id_,
  401. s.teacher_id_,
  402. cs.group_type_,
  403. cs.teach_mode_,
  404. IF(CONCAT( cs.class_date_, ' ', cs.end_class_time_ )&lt;#{courseExpireDate} AND (sa.status_ != 'NORMAL' OR sa.status_ IS NULL), NULL, cs.class_date_) course_start_time_
  405. FROM
  406. student s
  407. LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = s.user_id_
  408. LEFT JOIN student_attendance sa ON cssp.course_schedule_id_=sa.course_schedule_id_ AND sa.user_id_=cssp.user_id_
  409. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  410. AND cs.group_type_ IN ('VIP', 'PRACTICE')
  411. AND CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) > #{monday}
  412. WHERE
  413. s.service_tag_ = 1
  414. </select>
  415. <select id="getBeServiceStudentsInfoWithStudents" resultMap="StudentServeDto">
  416. SELECT
  417. s.user_id_,
  418. s.teacher_id_,
  419. cs.group_type_,
  420. cs.teach_mode_,
  421. IF(CONCAT( cs.class_date_, ' ', cs.end_class_time_ )&lt;#{courseExpireDate} AND (sa.status_ != 'NORMAL' OR sa.status_ IS NULL), NULL, cs.class_date_) course_start_time_
  422. FROM
  423. student s
  424. LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = s.user_id_
  425. LEFT JOIN student_attendance sa ON cssp.course_schedule_id_=sa.course_schedule_id_ AND sa.user_id_=cssp.user_id_
  426. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  427. AND cs.group_type_ IN ('VIP', 'PRACTICE')
  428. AND CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) > #{monday}
  429. WHERE
  430. s.service_tag_ = 1 AND s.user_id_ IN
  431. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  432. #{studentId}
  433. </foreach>
  434. </select>
  435. <select id="getBeServiceStudentsInfoWithStudentsForHistory" resultMap="StudentServeDto">
  436. SELECT
  437. s.student_id_ user_id_,
  438. s.teacher_id_,
  439. cs.group_type_,
  440. cs.teach_mode_,
  441. IF(CONCAT( cs.class_date_, ' ', cs.end_class_time_ )&lt;#{courseExpireDate} AND (sa.status_ != 'NORMAL' OR sa.status_ IS NULL), NULL, cs.class_date_) course_start_time_
  442. FROM
  443. student_extracurricular_exercises_situation_ s
  444. LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = s.student_id_
  445. LEFT JOIN student_attendance sa ON cssp.course_schedule_id_=sa.course_schedule_id_ AND sa.user_id_=cssp.user_id_
  446. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  447. AND cs.group_type_ IN ('VIP', 'PRACTICE')
  448. AND CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) > #{monday}
  449. WHERE
  450. s.monday_ = #{monday} AND s.student_id_ IN
  451. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  452. #{studentId}
  453. </foreach>
  454. </select>
  455. <select id="getServeStudentIds" resultType="int">
  456. SELECT user_id_
  457. FROM student stu
  458. LEFT JOIN sys_user su ON stu.user_id_=su.id_
  459. WHERE service_tag_=1 AND su.del_flag_=0
  460. </select>
  461. <select id="getServeStudentCourseStartTimes" resultType="com.ym.mec.biz.dal.dto.StudentServeCourseDto">
  462. SELECT
  463. cssp.user_id_ studentId,
  464. stu.service_tag_update_time_ serviceTagUpdateTime,
  465. CONCAT(cs.class_date_, ' ', cs.start_class_time_) courseStartTime
  466. FROM course_schedule_student_payment cssp
  467. LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_
  468. LEFT JOIN student stu ON cssp.user_id_ = stu.user_id_
  469. WHERE stu.service_tag_=1 AND class_date_&gt;=#{monday}
  470. </select>
  471. <resultMap id="StudentServeCourseDto" type="com.ym.mec.biz.dal.dto.StudentServeCourseDto">
  472. <result column="student_id_" property="studentId"/>
  473. <result column="lead_teacher_id_" property="leadTeacherId"/>
  474. <result column="course_schedule_id_" property="courseScheduleId"/>
  475. <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  476. <result column="music_group_id_" property="musicGroupId"/>
  477. <result column="class_group_id_" property="classGroupId"/>
  478. <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  479. <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  480. <result column="actual_teacher_id_" property="actualTeacherId"/>
  481. <result column="course_start_time_" property="courseStartTime"/>
  482. <result column="teach_mode_" property="teachMode"/>
  483. </resultMap>
  484. <select id="getStudentFutureCourseInfo" resultMap="StudentServeCourseDto">
  485. SELECT
  486. cssp.user_id_ student_id_,
  487. stu.teacher_id_ lead_teacher_id_,
  488. cs.id_ course_schedule_id_,
  489. cs.group_type_,
  490. cs.music_group_id_,
  491. cs.class_group_id_,
  492. cs.status_,
  493. CASE cs.type_ WHEN 'TRAINING_SINGLE' THEN 'SINGLE' WHEN 'TRAINING_MIX' THEN 'MIX' ELSE cs.type_ END type_,
  494. cs.actual_teacher_id_,
  495. CONCAT(cs.class_date_, ' ', cs.start_class_time_) course_start_time_,
  496. cs.teach_mode_
  497. FROM course_schedule_student_payment cssp
  498. LEFT JOIN course_schedule cs ON cssp.course_schedule_id_=cs.id_
  499. LEFT JOIN student stu ON cssp.user_id_ = stu.user_id_
  500. WHERE stu.service_tag_=1
  501. AND (stu.service_tag_update_time_ IS NULL OR stu.service_tag_update_time_&lt;#{nextMonday})
  502. AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
  503. AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
  504. AND cs.class_date_&gt;=#{monday}
  505. AND cs.type_ IN ('SINGLE', 'TRAINING_SINGLE', 'VIP', 'MIX', 'TRAINING_MIX', 'PRACTICE')
  506. AND cssp.create_time_&lt;#{nextMonday}
  507. <if test="studentIds!=null and studentIds.size()>0">
  508. AND cssp.user_id_ IN
  509. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  510. #{studentId}
  511. </foreach>
  512. </if>
  513. ORDER BY cssp.user_id_,course_start_time_
  514. </select>
  515. <select id="getNoCourseBeServeStudentInfo" resultMap="StudentServeCourseDto">
  516. SELECT
  517. sr.user_id_ student_id_,
  518. stu.teacher_id_ lead_teacher_id_,
  519. 'MUSIC' group_type_,
  520. sr.music_group_id_
  521. FROM
  522. student_registration sr
  523. LEFT JOIN student stu ON sr.user_id_ = stu.user_id_
  524. LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
  525. WHERE
  526. mg.del_flag_ = 0
  527. AND mg.organ_id_ IS NOT NULL
  528. AND mg.status_ = 'PROGRESS'
  529. AND sr.music_group_status_ = 'NORMAL'
  530. <if test="noCourseStudentIds!=null and noCourseStudentIds.size()>0">
  531. AND sr.user_id_ IN
  532. <foreach collection="noCourseStudentIds" item="noCourseStudentId" open="(" close=")" separator=",">
  533. #{noCourseStudentId}
  534. </foreach>
  535. </if>
  536. </select>
  537. <select id="getStudentNames" resultType="string">
  538. SELECT username_ FROM sys_user WHERE id_ IN
  539. <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
  540. #{studentId}
  541. </foreach>
  542. </select>
  543. <select id="getStudentsWithOrgan" resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
  544. SELECT
  545. su.id_ userId,su.username_ userName, su.avatar_ avatar, su.phone_ phone
  546. FROM
  547. sys_user su
  548. WHERE
  549. 1=1
  550. AND su.del_flag_=0 AND su.lock_flag_=0
  551. AND FIND_IN_SET('STUDENT',su.user_type_)
  552. <if test="organIds!=null">
  553. AND su.organ_id_ IN
  554. <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
  555. #{organId}
  556. </foreach>
  557. </if>
  558. <if test="search != null">
  559. AND (su.username_ LIKE CONCAT('%', #{search}, '%') OR su.phone_ LIKE CONCAT('%', #{search}, '%'))
  560. </if>
  561. ORDER BY su.id_
  562. <include refid="global.limit"/>
  563. </select>
  564. <select id="countStudentsWithOrgan" resultType="int">
  565. SELECT
  566. COUNT(su.id_)
  567. FROM
  568. sys_user su
  569. WHERE
  570. 1=1
  571. AND su.del_flag_=0 AND su.lock_flag_=0
  572. AND FIND_IN_SET('STUDENT',su.user_type_)
  573. <if test="organIds!=null">
  574. AND su.organ_id_ IN
  575. <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
  576. #{organId}
  577. </foreach>
  578. </if>
  579. <if test="search != null">
  580. AND (su.username_ LIKE CONCAT('%', #{search}, '%') OR su.phone_ LIKE CONCAT('%', #{search}, '%'))
  581. </if>
  582. </select>
  583. <select id="getStudentTeacher" resultMap="Student">
  584. SELECT s.user_id_,t.real_name_ teacher_name_ FROM student s
  585. LEFT JOIN sys_user t ON t.id_ = s.teacher_id_
  586. WHERE s.user_id_ IN
  587. <foreach collection="studentIds" item="id" open="(" close=")" separator=",">
  588. #{id}
  589. </foreach>
  590. </select>
  591. <select id="findByStudentIds" resultMap="Student">
  592. SELECT * FROM student WHERE user_id_ IN
  593. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  594. #{studentId}
  595. </foreach>
  596. </select>
  597. <select id="queryCloseServiceTagIds" resultType="java.lang.Integer">
  598. SELECT s.user_id_ FROM student s
  599. LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = s.user_id_
  600. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  601. LEFT JOIN student_registration sr ON sr.user_id_ = s.user_id_
  602. LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
  603. WHERE s.service_tag_ = 1
  604. GROUP BY s.user_id_ HAVING COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) = 0
  605. AND COUNT(CASE WHEN sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS' THEN 1 ELSE NULL END) = 0;
  606. </select>
  607. <select id="getStudentSubjects" resultMap="com.ym.mec.biz.dal.dao.SubjectDao.Subject">
  608. SELECT
  609. DISTINCT sub.*
  610. FROM
  611. student stu
  612. LEFT JOIN `subject` sub ON FIND_IN_SET( sub.id_, stu.subject_id_list_ )
  613. WHERE
  614. stu.user_id_ IN
  615. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  616. #{studentId}
  617. </foreach>
  618. AND sub.id_ IS NOT NULL
  619. ORDER BY sub.id_ DESC
  620. </select>
  621. <select id="queryByIds" resultMap="Student">
  622. SELECT * FROM student
  623. WHERE user_id_ IN
  624. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  625. #{studentId}
  626. </foreach>
  627. ORDER BY user_id_
  628. <include refid="global.limit"></include>
  629. </select>
  630. <select id="countByIds" resultType="int">
  631. SELECT count(user_id_) FROM student
  632. WHERE user_id_ IN
  633. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  634. #{studentId}
  635. </foreach>
  636. </select>
  637. </mapper>