StudentMapper.xml 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890
  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. <result column="current_grade_num_" property="currentGradeNum"/>
  22. <result column="current_class_" property="currentClass"/>
  23. <result column="cooperation_organ_id_" property="cooperationOrganId"/>
  24. <result column="member_rank_setting_id_" property="memberRankSettingId"/>
  25. <result column="membership_start_time_" property="membershipStartTime"/>
  26. <result column="membership_end_time_" property="membershipEndTime"/>
  27. <result column="activity_course_detail_" property="activityCourseDetail"/>
  28. <result column="organ_name_" property="organName"/>
  29. <result column="phone_" property="phone"/>
  30. <result column="username_" property="username"/>
  31. </resultMap>
  32. <!-- 根据主键查询一条记录 -->
  33. <select id="get" resultMap="Student">
  34. SELECT *
  35. FROM student
  36. WHERE user_id_ = #{id}
  37. </select>
  38. <select id="getLocked" resultMap="Student">
  39. SELECT *
  40. FROM student
  41. WHERE user_id_ = #{id} for update
  42. </select>
  43. <!-- 全查询 -->
  44. <select id="findAll" resultMap="Student">
  45. SELECT *
  46. FROM student
  47. </select>
  48. <select id="lockUser" resultType="int" useCache="false" flushCache="true">
  49. SELECT id_
  50. FROM sys_user
  51. WHERE id_ = #{userId} FOR
  52. UPDATE
  53. </select>
  54. <select id="lockUserReturnInfo" resultMap="com.ym.mec.biz.dal.dao.TeacherDao.SysUser">
  55. SELECT *
  56. FROM sys_user
  57. WHERE id_ = #{userId} FOR UPDATE
  58. </select>
  59. <select id="getUser" resultMap="com.ym.mec.biz.dal.dao.TeacherDao.SysUser">
  60. SELECT *
  61. FROM sys_user
  62. WHERE id_ = #{userId}
  63. </select>
  64. <!-- 向数据库增加一条记录 -->
  65. <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.Student" useGeneratedKeys="true" keyColumn="id"
  66. keyProperty="id">
  67. INSERT INTO student (user_id_,subject_id_list_,
  68. <if test="serviceTag != null">
  69. service_tag_,
  70. </if>
  71. <if test="operatingTag != null">
  72. operating_tag_,
  73. </if>
  74. teacher_id_,create_time_,update_time_,service_tag_update_time_,cooperation_organ_id_,
  75. care_package_,come_on_package_,member_rank_setting_id_,membership_start_time_,membership_end_time_)
  76. VALUES
  77. (#{userId},#{subjectIdList},
  78. <if test="serviceTag != null">
  79. #{serviceTag},
  80. </if>
  81. <if test="operatingTag != null">
  82. #{operatingTag},
  83. </if>
  84. #{teacherId},NOW(),NOW(),NOW(),#{cooperationOrganId},
  85. #{carePackage},#{comeOnPackage},#{memberRankSettingId},#{membershipStartTime},#{membershipEndTime})
  86. </insert>
  87. <update id="update" parameterType="com.ym.mec.biz.dal.entity.Student">
  88. UPDATE student
  89. <set>
  90. <if test="subjectIdList != null">
  91. subject_id_list_ = #{subjectIdList},
  92. </if>
  93. <if test="serviceTag != null">
  94. service_tag_update_time_=IF(service_tag_ = #{serviceTag}, service_tag_update_time_, NOW()),
  95. service_tag_ = #{serviceTag},
  96. </if>
  97. <if test="operatingTag != null">
  98. operating_tag_ = #{operatingTag},
  99. </if>
  100. <if test="operatingTempTag != null">
  101. operating_temp_tag_ = #{operatingTempTag},
  102. </if>
  103. <if test="teacherId != null">
  104. teacher_id_=#{teacherId},
  105. </if>
  106. <if test="isNewUser != null">
  107. is_new_user_=#{isNewUser},
  108. </if>
  109. <if test="carePackage != null">
  110. care_package_=#{carePackage},
  111. </if>
  112. <if test="comeOnPackage != null">
  113. come_on_package_=#{comeOnPackage},
  114. </if>
  115. <if test="currentGradeNum != null">
  116. current_grade_num_=#{currentGradeNum},
  117. </if>
  118. <if test="currentClass != null">
  119. current_class_=#{currentClass},
  120. </if>
  121. <if test="memberRankSettingId != null">
  122. member_rank_setting_id_=#{memberRankSettingId},
  123. </if>
  124. <if test="membershipStartTime != null">
  125. membership_start_time_=#{membershipStartTime},
  126. </if>
  127. <if test="membershipEndTime != null">
  128. membership_end_time_=#{membershipEndTime},
  129. </if>
  130. <if test="activityCourseDetail != null">
  131. activity_course_detail_=#{activityCourseDetail},
  132. </if>
  133. cooperation_organ_id_=#{cooperationOrganId},
  134. update_time_ = NOW()
  135. </set>
  136. WHERE user_id_ = #{userId}
  137. </update>
  138. <!-- 分页查询 -->
  139. <select id="queryPage" resultMap="Student" parameterType="map">
  140. SELECT s.*,su.username_,su.phone_,o.name_ organ_name_ FROM student s
  141. LEFT JOIN sys_user su ON su.id_ = s.user_id_
  142. LEFT JOIN organization o ON o.id_ = su.organ_id_
  143. <include refid="queryPageSql"/>
  144. ORDER BY s.activity_course_detail_ DESC
  145. <include refid="global.limit"/>
  146. </select>
  147. <!-- 查询当前表的总记录数 -->
  148. <select id="queryCount" resultType="int">
  149. SELECT COUNT(s.user_id_) FROM student s
  150. LEFT JOIN sys_user su ON su.id_ = s.user_id_
  151. <include refid="queryPageSql"/>
  152. </select>
  153. <sql id="queryPageSql">
  154. <where>
  155. <if test="organId != null and organId != ''">
  156. AND FIND_IN_SET(su.organ_id_,#{organId})
  157. </if>
  158. <if test="search != null and search != ''">
  159. AND (s.user_id_ = #{search} OR su.username_ LIKE CONCAT('%', #{search}, '%') OR su.phone_ LIKE CONCAT('%', #{search}, '%'))
  160. </if>
  161. </where>
  162. </sql>
  163. <select id="findStudents" resultMap="com.ym.mec.biz.dal.dao.TeacherDao.SysUser">
  164. SELECT id_, username_, phone_,avatar_ FROM sys_user
  165. <include refid="studentQueryCondition"/>
  166. ORDER BY id_
  167. <include refid="global.limit"/>
  168. </select>
  169. <select id="countStudents" resultType="int">
  170. SELECT COUNT(id_) FROM sys_user
  171. <include refid="studentQueryCondition"/>
  172. </select>
  173. <sql id="studentQueryCondition">
  174. <where>
  175. <if test="organIdList!=null">
  176. organ_id_ IN
  177. <foreach collection="organIdList" item="organId" open="(" close=")" separator=",">
  178. #{organId}
  179. </foreach>
  180. </if>
  181. <if test="search!=null">
  182. AND (username_ LIKE CONCAT('%', #{search}, '%') OR phone_ LIKE CONCAT('%', #{search}, '%'))
  183. </if>
  184. AND FIND_IN_SET("STUDENT", user_type_)
  185. </where>
  186. </sql>
  187. <select id="queryByOperatingTempTag" resultMap="Student">
  188. SELECT *
  189. FROM student
  190. WHERE operating_temp_tag_ = #{operatingTempTag}
  191. </select>
  192. <update id="batchUpdate" parameterType="java.util.List">
  193. <foreach collection="studentList" item="item" index="index" open="" close="" separator=";">
  194. UPDATE student
  195. <set>
  196. <if test="item.subjectIdList != null">
  197. subject_id_list_ = #{item.subjectIdList},
  198. </if>
  199. <if test="item.currentGradeNum != null">
  200. current_grade_num_=#{item.currentGradeNum},
  201. </if>
  202. <if test="item.serviceTag != null">
  203. service_tag_ = #{item.serviceTag},
  204. </if>
  205. <if test="item.operatingTag != null">
  206. operating_tag_ = #{item.operatingTag},
  207. </if>
  208. <if test="item.operatingTempTag != null">
  209. operating_temp_tag_ = #{item.operatingTempTag},
  210. </if>
  211. <if test="item.teacherId != null">
  212. teacher_id_=#{item.teacherId},
  213. </if>
  214. <if test="item.updateTime != null">
  215. update_time_ = #{item.updateTime},
  216. </if>
  217. <if test="item.carePackage != null">
  218. care_package_=#{item.carePackage},
  219. </if>
  220. <if test="item.comeOnPackage != null">
  221. come_on_package_=#{item.comeOnPackage},
  222. </if>
  223. <if test="item.cooperationOrganId != null">
  224. cooperation_organ_id_=#{item.cooperationOrganId},
  225. </if>
  226. <if test="item.activityCourseDetail != null">
  227. activity_course_detail_=#{item.activityCourseDetail},
  228. </if>
  229. <if test="item.memberRankSettingId != null">
  230. member_rank_setting_id_=#{item.memberRankSettingId},
  231. </if>
  232. <if test="item.membershipStartTime != null">
  233. membership_start_time_=#{item.membershipStartTime},
  234. </if>
  235. <if test="item.membershipEndTime != null">
  236. membership_end_time_=#{item.membershipEndTime},
  237. </if>
  238. update_time_ = NOW()
  239. </set>
  240. WHERE user_id_ = #{item.userId}
  241. </foreach>
  242. </update>
  243. <update id="updateStudentServiceOrOperatingTag">
  244. UPDATE student
  245. <set>
  246. <if test="serviceTag != null">
  247. service_tag_ = #{serviceTag},
  248. </if>
  249. <if test="operatingTag != null">
  250. operating_tag_ = #{operatingTag},
  251. </if>
  252. update_time_ = NOW()
  253. </set>
  254. WHERE
  255. <if test="studentId!=null">
  256. user_id_ = #{studentId}
  257. </if>
  258. <if test="studentIds!=null and studentIds.size()>0">
  259. user_id_ IN
  260. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  261. #{studentId}
  262. </foreach>
  263. </if>
  264. </update>
  265. <update id="updateStudentServiceTag">
  266. UPDATE student
  267. <set>
  268. <if test="serviceTag != null">
  269. service_tag_update_time_ = IF(service_tag_=#{serviceTag}, service_tag_update_time_, NOW()),
  270. service_tag_ = #{serviceTag},
  271. </if>
  272. update_time_ = NOW()
  273. </set>
  274. WHERE
  275. service_tag_=0
  276. <if test="studentId!=null">
  277. AND user_id_ = #{studentId}
  278. </if>
  279. <if test="studentIds!=null and studentIds.size()>0">
  280. AND user_id_ IN
  281. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  282. #{studentId}
  283. </foreach>
  284. </if>
  285. </update>
  286. <update id="batchUpdateAdviser">
  287. UPDATE student s SET s.teacher_id_ = #{teacherId},s.update_time_ = NOW() WHERE FIND_IN_SET(s.user_id_,#{studentIds})
  288. </update>
  289. <update id="updateServiceTag">
  290. UPDATE student SET service_tag_ = #{serviceTag},update_time_ = NOW() WHERE user_id_ IN
  291. <foreach collection="studentIds" item="item" open="(" separator="," close=")">
  292. #{item}
  293. </foreach>
  294. </update>
  295. <resultMap id="student4operating" type="com.ym.mec.biz.dal.dto.Student4operating">
  296. <result column="organ_name_" property="organName"/>
  297. <result column="organ_id_" property="organId"/>
  298. <result column="student_name_" property="studentName"/>
  299. <result column="student_id_" property="studentId"/>
  300. <result column="teacher_id_" property="teacherId"/>
  301. <result column="teacher_name_" property="teacherName"/>
  302. <result column="operating_tag_" property="operatingTag"/>
  303. <result column="vip_times_" property="vipTimes"/>
  304. <result column="free_practice_times_" property="freePracticeTimes"/>
  305. <result column="buy_practice_times_" property="buyPracticeTimes"/>
  306. <result column="music_netWork_times_" property="musicNetWorkTimes"/>
  307. <result column="student_num_" property="studentNum"/>
  308. </resultMap>
  309. <select id="getOperatingStudents" resultMap="student4operating">
  310. SELECT su.organ_id_,
  311. o.name_ organ_name_,
  312. su.username_ student_name_,
  313. s.user_id_ student_id_,
  314. tsu.id_ teacher_id_,
  315. tsu.real_name_ teacher_name_,
  316. s.operating_tag_,
  317. a.vip_times_,
  318. a.buy_practice_times_,
  319. a.music_netWork_times_,
  320. p.free_practice_times_
  321. FROM student s
  322. LEFT JOIN sys_user su ON s.user_id_ = su.id_
  323. LEFT JOIN sys_user tsu ON tsu.id_ = s.teacher_id_
  324. LEFT JOIN organization o ON o.id_ = su.organ_id_
  325. LEFT JOIN (
  326. SELECT cssp.user_id_,
  327. SUM(case when (cs.group_type_ = 'VIP' AND cs.teach_mode_='ONLINE') then 1 ELSE 0 END) vip_times_,
  328. SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_,
  329. SUM(case when (cs.type_='MUSIC_NETWORK' OR cs.type_='HIGH_ONLINE') then 1 ELSE 0 END) music_netWork_times_
  330. FROM course_schedule_student_payment cssp
  331. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  332. LEFT JOIN practice_group pg ON pg.`id_` = cs.`music_group_id_` AND cs.`group_type_` = 'PRACTICE'
  333. 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)
  334. GROUP BY cssp.user_id_
  335. ) a on a.user_id_ = s.user_id_
  336. LEFT JOIN (
  337. SELECT student_id_, count(id_) free_practice_times_
  338. FROM practice_group
  339. WHERE type_='FREE' AND group_status_ IN ('NORMAL', 'FINISH')
  340. GROUP BY student_id_
  341. ) p ON p.student_id_ = s.user_id_
  342. <include refid="student4OperatingQueryCondition"/>
  343. ORDER BY s.user_id_
  344. <include refid="global.limit"/>
  345. </select>
  346. <select id="countOperatingStudents" resultType="int">
  347. SELECT COUNT(s.user_id_) FROM student s
  348. LEFT JOIN sys_user su ON s.user_id_ = su.id_
  349. LEFT JOIN sys_user tsu ON tsu.id_ = s.teacher_id_
  350. LEFT JOIN (
  351. SELECT cssp.user_id_,
  352. SUM(case when (cs.group_type_ = 'VIP' AND cs.teach_mode_='ONLINE') then 1 ELSE 0 END) vip_times_,
  353. SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_,
  354. SUM(case when (cs.type_='MUSIC_NETWORK' OR cs.type_='HIGH_ONLINE') then 1 ELSE 0 END) music_netWork_times_
  355. FROM course_schedule_student_payment cssp
  356. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  357. LEFT JOIN practice_group pg ON pg.`id_` = cs.`music_group_id_` AND cs.`group_type_` = 'PRACTICE'
  358. 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)
  359. GROUP BY cssp.user_id_
  360. ) a on a.user_id_ = s.user_id_
  361. LEFT JOIN (
  362. SELECT student_id_, count(id_) free_practice_times_
  363. FROM practice_group
  364. WHERE type_='FREE' AND group_status_ IN ('NORMAL', 'FINISH')
  365. GROUP BY student_id_
  366. ) p ON p.student_id_ = s.user_id_
  367. <include refid="student4OperatingQueryCondition"/>
  368. </select>
  369. <sql id="student4OperatingQueryCondition">
  370. <where>
  371. su.user_type_ LIKE '%STUDENT%'
  372. <if test="search != null and search != ''">
  373. AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.id_
  374. LIKE CONCAT('%',#{search},'%'))
  375. </if>
  376. <if test="organId != null and organId != ''">
  377. AND FIND_IN_SET(su.organ_id_,#{organId})
  378. </if>
  379. <if test="teacherId!=null">
  380. AND s.teacher_id_ = #{teacherId}
  381. </if>
  382. <if test="operatingTag !=null">
  383. AND s.operating_tag_ = #{operatingTag}
  384. </if>
  385. <if test='hasVip != null and hasVip=="1"'>
  386. AND a.vip_times_ >=1
  387. </if>
  388. <if test='hasVip != null and hasVip=="0"'>
  389. AND (a.vip_times_ =0 OR a.vip_times_ IS NULL)
  390. </if>
  391. <if test='hasFreePractice != null and hasFreePractice=="1"'>
  392. AND p.free_practice_times_ >=1
  393. </if>
  394. <if test='hasFreePractice != null and hasFreePractice=="0"'>
  395. AND (p.free_practice_times_ =0 OR p.free_practice_times_ IS NULL)
  396. </if>
  397. <if test='hasBuyPractice != null and hasBuyPractice=="1"'>
  398. AND a.buy_practice_times_ >=1
  399. </if>
  400. <if test='hasBuyPractice != null and hasBuyPractice=="0"'>
  401. AND (a.buy_practice_times_ =0 OR a.buy_practice_times_ IS NULL)
  402. </if>
  403. <if test='hasMusicNetWork != null and hasMusicNetWork=="1"'>
  404. AND a.music_netWork_times_ >=1
  405. </if>
  406. <if test='hasMusicNetWork != null and hasMusicNetWork=="0"'>
  407. AND (a.music_netWork_times_ =0 OR a.music_netWork_times_ IS NULL)
  408. </if>
  409. </where>
  410. </sql>
  411. <select id="getTeacherOperatingStudentsNum" resultType="java.util.Map">
  412. select teacher_id_ 'key', count(*) 'value'
  413. FROM student
  414. WHERE FIND_IN_SET(teacher_id_, #{teacherIds})
  415. AND operating_tag_ = 1
  416. GROUP BY teacher_id_
  417. </select>
  418. <select id="getBuyNums" resultType="java.util.Map">
  419. SELECT s.teacher_id_ 'key', COUNT(DISTINCT cssp.user_id_) 'value'
  420. FROM course_schedule_student_payment cssp
  421. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.teach_mode_ = 'ONLINE'
  422. LEFT JOIN student s ON s.user_id_ = cssp.user_id_
  423. <if test="groupType != null and groupType==@com.ym.mec.biz.dal.enums.GroupType@PRACTICE">
  424. LEFT JOIN practice_group pg ON cssp.music_group_id_ = pg.id_ AND cssp.group_type_ = 'PRACTICE'
  425. </if>
  426. WHERE s.teacher_id_ = #{teacherId}
  427. AND cs.status_ IN ('NOT_START', 'UNDERWAY')
  428. AND (cs.is_lock_ IS NULL OR cs.is_lock_ = 0)
  429. <if test="groupType != null">
  430. AND cs.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
  431. </if>
  432. <if test="groupType != null and groupType==@com.ym.mec.biz.dal.enums.GroupType@PRACTICE">
  433. AND pg.group_status_ IN ('NORMAL', 'FINISH')
  434. AND pg.buy_months_ >= 1
  435. </if>
  436. GROUP BY s.teacher_id_
  437. </select>
  438. <select id="getPracticeAndVipNums" resultType="java.util.Map">
  439. SELECT s.teacher_id_ 'key', COUNT(DISTINCT pg.student_id_) 'value'
  440. FROM practice_group pg
  441. LEFT JOIN student s on s.user_id_ = pg.student_id_
  442. LEFT JOIN course_schedule_student_payment vcssp
  443. ON vcssp.user_id_ = pg.student_id_ AND vcssp.group_type_ = 'VIP'
  444. LEFT JOIN course_schedule_student_payment pcssp
  445. ON pcssp.user_id_ = pg.student_id_ AND pcssp.group_type_ = 'PRACTICE'
  446. LEFT JOIN course_schedule vcs ON vcs.id_ = vcssp.course_schedule_id_ AND vcs.teach_mode_ = 'ONLINE'
  447. LEFT JOIN course_schedule pcs ON pcs.id_ = pcssp.course_schedule_id_
  448. WHERE FIND_IN_SET(s.teacher_id_, #{teacherIds})
  449. AND pg.group_status_ IN ('NORMAL', 'FINISH')
  450. AND vcs.status_ IN ('NOT_START', 'UNDERWAY')
  451. AND pcs.status_ IN ('NOT_START', 'UNDERWAY')
  452. AND (vcs.is_lock_ IS NULL OR vcs.is_lock_ = 0)
  453. AND (pcs.is_lock_ IS NULL OR pcs.is_lock_ = 0)
  454. AND pg.buy_months_ >= 1
  455. GROUP BY s.teacher_id_
  456. </select>
  457. <select id="getServiceStudents" resultMap="Student">
  458. SELECT su.id_ user_id_,s.teacher_id_ FROM sys_user su
  459. LEFT JOIN student s ON s.user_id_=su.id_
  460. WHERE s.service_tag_=1 AND FIND_IN_SET('STUDENT', su.user_type_)
  461. </select>
  462. <resultMap id="StudentServeDto" type="com.ym.mec.biz.dal.dto.StudentServeDto" extends="Student">
  463. <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  464. <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  465. <result property="courseStartTime" column="course_start_time_"/>
  466. </resultMap>
  467. <select id="getBeServiceStudents" resultMap="StudentServeDto">
  468. SELECT
  469. s.user_id_,
  470. s.teacher_id_,
  471. cs.group_type_,
  472. cs.teach_mode_,
  473. 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_
  474. FROM
  475. student s
  476. LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = s.user_id_
  477. LEFT JOIN student_attendance sa ON cssp.course_schedule_id_=sa.course_schedule_id_ AND sa.user_id_=cssp.user_id_
  478. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  479. AND cs.group_type_ IN ('VIP', 'PRACTICE')
  480. AND CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) > #{monday}
  481. WHERE
  482. s.service_tag_ = 1
  483. </select>
  484. <select id="getBeServiceStudentsInfoWithStudents" resultMap="StudentServeDto">
  485. SELECT
  486. s.user_id_,
  487. s.teacher_id_,
  488. cs.group_type_,
  489. cs.teach_mode_,
  490. 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_
  491. FROM
  492. student s
  493. LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = s.user_id_
  494. LEFT JOIN student_attendance sa ON cssp.course_schedule_id_=sa.course_schedule_id_ AND sa.user_id_=cssp.user_id_
  495. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  496. AND cs.group_type_ IN ('VIP', 'PRACTICE')
  497. AND CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) > #{monday}
  498. WHERE
  499. s.service_tag_ = 1 AND s.user_id_ IN
  500. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  501. #{studentId}
  502. </foreach>
  503. </select>
  504. <select id="getBeServiceStudentsInfoWithStudentsForHistory" resultMap="StudentServeDto">
  505. SELECT
  506. s.student_id_ user_id_,
  507. s.teacher_id_,
  508. cs.group_type_,
  509. cs.teach_mode_,
  510. 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_
  511. FROM
  512. student_extracurricular_exercises_situation_ s
  513. LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = s.student_id_
  514. LEFT JOIN student_attendance sa ON cssp.course_schedule_id_=sa.course_schedule_id_ AND sa.user_id_=cssp.user_id_
  515. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  516. AND cs.group_type_ IN ('VIP', 'PRACTICE')
  517. AND CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) > #{monday}
  518. WHERE
  519. s.monday_ = #{monday} AND s.student_id_ IN
  520. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  521. #{studentId}
  522. </foreach>
  523. </select>
  524. <select id="getServeStudentIds" resultType="int">
  525. SELECT user_id_
  526. FROM student stu
  527. LEFT JOIN sys_user su ON stu.user_id_=su.id_
  528. WHERE service_tag_=1 AND su.del_flag_=0
  529. </select>
  530. <select id="getServeStudentCourseStartTimes" resultType="com.ym.mec.biz.dal.dto.StudentServeCourseDto">
  531. SELECT
  532. cssp.user_id_ studentId,
  533. stu.service_tag_update_time_ serviceTagUpdateTime,
  534. CONCAT(cs.class_date_, ' ', cs.start_class_time_) courseStartTime
  535. FROM course_schedule_student_payment cssp
  536. LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_
  537. LEFT JOIN student stu ON cssp.user_id_ = stu.user_id_
  538. WHERE stu.service_tag_=1 AND class_date_&gt;=#{monday}
  539. </select>
  540. <resultMap id="StudentServeCourseDto" type="com.ym.mec.biz.dal.dto.StudentServeCourseDto">
  541. <result column="student_id_" property="studentId"/>
  542. <result column="lead_teacher_id_" property="leadTeacherId"/>
  543. <result column="course_schedule_id_" property="courseScheduleId"/>
  544. <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  545. <result column="music_group_id_" property="musicGroupId"/>
  546. <result column="class_group_id_" property="classGroupId"/>
  547. <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  548. <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  549. <result column="actual_teacher_id_" property="actualTeacherId"/>
  550. <result column="course_start_time_" property="courseStartTime"/>
  551. <result column="teach_mode_" property="teachMode"/>
  552. </resultMap>
  553. <select id="getStudentFutureCourseInfo" resultMap="StudentServeCourseDto">
  554. SELECT
  555. cssp.user_id_ student_id_,
  556. stu.teacher_id_ lead_teacher_id_,
  557. cs.id_ course_schedule_id_,
  558. cs.group_type_,
  559. cs.music_group_id_,
  560. cs.class_group_id_,
  561. cs.status_,
  562. CASE cs.type_ WHEN 'TRAINING_SINGLE' THEN 'SINGLE' WHEN 'TRAINING_MIX' THEN 'MIX' ELSE cs.type_ END type_,
  563. cs.actual_teacher_id_,
  564. CONCAT(cs.class_date_, ' ', cs.start_class_time_) course_start_time_,
  565. cs.teach_mode_
  566. FROM course_schedule_student_payment cssp
  567. LEFT JOIN course_schedule cs ON cssp.course_schedule_id_=cs.id_
  568. LEFT JOIN student stu ON cssp.user_id_ = stu.user_id_
  569. WHERE stu.service_tag_=1
  570. AND (stu.service_tag_update_time_ IS NULL OR stu.service_tag_update_time_&lt;#{nextMonday})
  571. AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
  572. AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
  573. AND cs.class_date_&gt;=#{monday}
  574. AND cs.type_ IN ('SINGLE', 'TRAINING_SINGLE', 'VIP', 'MIX', 'TRAINING_MIX', 'PRACTICE')
  575. AND cssp.create_time_&lt;#{nextMonday}
  576. <if test="studentIds!=null and studentIds.size()>0">
  577. AND cssp.user_id_ IN
  578. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  579. #{studentId}
  580. </foreach>
  581. </if>
  582. ORDER BY cssp.user_id_,course_start_time_
  583. </select>
  584. <select id="getNoCourseBeServeStudentInfo" resultMap="StudentServeCourseDto">
  585. SELECT
  586. sr.user_id_ student_id_,
  587. stu.teacher_id_ lead_teacher_id_,
  588. 'MUSIC' group_type_,
  589. sr.music_group_id_
  590. FROM
  591. student_registration sr
  592. LEFT JOIN student stu ON sr.user_id_ = stu.user_id_
  593. LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
  594. WHERE
  595. mg.del_flag_ = 0
  596. AND mg.organ_id_ IS NOT NULL
  597. AND mg.status_ = 'PROGRESS'
  598. AND sr.music_group_status_ = 'NORMAL'
  599. <if test="noCourseStudentIds!=null and noCourseStudentIds.size()>0">
  600. AND sr.user_id_ IN
  601. <foreach collection="noCourseStudentIds" item="noCourseStudentId" open="(" close=")" separator=",">
  602. #{noCourseStudentId}
  603. </foreach>
  604. </if>
  605. </select>
  606. <select id="getStudentNames" resultType="string">
  607. SELECT username_ FROM sys_user WHERE id_ IN
  608. <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
  609. #{studentId}
  610. </foreach>
  611. </select>
  612. <select id="getStudentsWithOrgan" resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
  613. SELECT
  614. su.id_ userId,su.username_ userName, su.avatar_ avatar, su.phone_ phone
  615. FROM
  616. sys_user su
  617. WHERE
  618. 1=1
  619. AND su.del_flag_=0 AND su.lock_flag_=0
  620. AND FIND_IN_SET('STUDENT',su.user_type_)
  621. <if test="organIds!=null">
  622. AND su.organ_id_ IN
  623. <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
  624. #{organId}
  625. </foreach>
  626. </if>
  627. <if test="search != null">
  628. AND (su.username_ LIKE CONCAT('%', #{search}, '%') OR su.phone_ LIKE CONCAT('%', #{search}, '%'))
  629. </if>
  630. ORDER BY su.id_
  631. <include refid="global.limit"/>
  632. </select>
  633. <select id="countStudentsWithOrgan" resultType="int">
  634. SELECT
  635. COUNT(su.id_)
  636. FROM
  637. sys_user su
  638. WHERE
  639. 1=1
  640. AND su.del_flag_=0 AND su.lock_flag_=0
  641. AND FIND_IN_SET('STUDENT',su.user_type_)
  642. <if test="organIds!=null">
  643. AND su.organ_id_ IN
  644. <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
  645. #{organId}
  646. </foreach>
  647. </if>
  648. <if test="search != null">
  649. AND (su.username_ LIKE CONCAT('%', #{search}, '%') OR su.phone_ LIKE CONCAT('%', #{search}, '%'))
  650. </if>
  651. </select>
  652. <select id="getStudentTeacher" resultMap="Student">
  653. SELECT s.user_id_,t.real_name_ teacher_name_ FROM student s
  654. LEFT JOIN sys_user t ON t.id_ = s.teacher_id_
  655. WHERE s.user_id_ IN
  656. <foreach collection="studentIds" item="id" open="(" close=")" separator=",">
  657. #{id}
  658. </foreach>
  659. </select>
  660. <select id="findByStudentIds" resultMap="Student">
  661. SELECT * FROM student WHERE user_id_ IN
  662. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  663. #{studentId}
  664. </foreach>
  665. </select>
  666. <select id="lockStudents" resultMap="Student">
  667. SELECT * FROM student WHERE user_id_ IN
  668. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  669. #{studentId}
  670. </foreach>
  671. FOR UPDATE
  672. </select>
  673. <select id="queryCloseServiceTagIds" resultType="java.lang.Integer">
  674. SELECT s.user_id_ FROM student s
  675. LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = s.user_id_
  676. LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
  677. LEFT JOIN student_registration sr ON sr.user_id_ = s.user_id_
  678. LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
  679. WHERE s.service_tag_ = 1
  680. GROUP BY s.user_id_ HAVING COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) = 0
  681. AND COUNT(CASE WHEN sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS' THEN 1 ELSE NULL END) = 0;
  682. </select>
  683. <select id="getStudentSubjects" resultMap="com.ym.mec.biz.dal.dao.SubjectDao.Subject">
  684. SELECT
  685. DISTINCT sub.*
  686. FROM
  687. student stu
  688. LEFT JOIN `subject` sub ON FIND_IN_SET( sub.id_, stu.subject_id_list_ )
  689. WHERE
  690. stu.user_id_ IN
  691. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  692. #{studentId}
  693. </foreach>
  694. AND sub.id_ IS NOT NULL
  695. ORDER BY sub.id_ DESC
  696. </select>
  697. <select id="queryByIds" resultMap="Student">
  698. SELECT * FROM student
  699. WHERE user_id_ IN
  700. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  701. #{studentId}
  702. </foreach>
  703. ORDER BY user_id_
  704. <include refid="global.limit"></include>
  705. </select>
  706. <select id="countByIds" resultType="int">
  707. SELECT count(user_id_) FROM student
  708. WHERE user_id_ IN
  709. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  710. #{studentId}
  711. </foreach>
  712. </select>
  713. <select id="getNoTeacherOrNoSubjectStudent" resultMap="Student">
  714. SELECT * FROM student WHERE teacher_id_ IS NULL OR subject_id_list_ IS NULL OR cooperation_organ_id_ IS NULL;
  715. </select>
  716. <select id="getHasVipCourseStudentIdsFromNewStudents" resultType="int">
  717. SELECT DISTINCT s.user_id_
  718. FROM student s
  719. LEFT JOIN course_schedule_student_payment cssp ON s.user_id_=cssp.user_id_
  720. WHERE s.is_new_user_=1 AND cssp.group_type_='VIP'
  721. </select>
  722. <select id="getMemberNum" resultType="int">
  723. SELECT COUNT(0) FROM student WHERE member_rank_setting_id_ IS NOT NULL AND FIND_IN_SET(user_id_,#{studentIdsStr})
  724. </select>
  725. <select id="queryPushMemberRenew" resultType="java.lang.Integer">
  726. SELECT s.user_id_ FROM student s
  727. LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = s.user_id_ AND cto.status_ IN (1,2)
  728. GROUP BY s.user_id_ HAVING (MAX(cto.id_) IS NULL OR MIN(cto.status_) > 1)
  729. AND DATEDIFF(MAX(cto.end_time_),NOW()) = #{pushMemberRenew}
  730. </select>
  731. <select id="getOrganStudentNum" resultType="int">
  732. SELECT COUNT(stu.user_id_) totalStudentNum,
  733. SUM(CASE WHEN stu.member_rank_setting_id_ IS NULL THEN 0 ELSE 1 END) vipStudentNum,
  734. SUM(CASE WHEN stu.experience_member_rank_setting_id_ IS NULL THEN 0 ELSE 1 END) eVipStudentNum
  735. FROM student stu
  736. LEFT JOIN sys_user su ON stu.user_id_=su.id_
  737. WHERE su.del_flag_=0
  738. <if test="organId!=null">
  739. AND su.organ_id_=#{organId}
  740. </if>
  741. </select>
  742. <select id="getCloudStudyStudentNum" resultType="int">
  743. SELECT
  744. COUNT(DISTINCT smcr.user_id_)
  745. FROM sys_music_compare_record smcr
  746. LEFT JOIN sys_user su ON smcr.user_id_=su.id_
  747. LEFT JOIN student stu ON smcr.user_id_=stu.user_id_
  748. WHERE su.del_flag_=0 AND stu.user_id_ IS NOT NULL AND su.organ_id_=#{organId};
  749. </select>
  750. <select id="getCloudStudyLivelyStudentNum" resultType="int">
  751. SELECT COUNT(user_id_)
  752. FROM (SELECT
  753. smcr.user_id_,
  754. COUNT(DISTINCT(CASE WHEN DATEDIFF(NOW(), smcr.create_time_)&lt;=15 THEN DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') ELSE NULL END)) days
  755. FROM sys_music_compare_record smcr
  756. LEFT JOIN sys_user su ON smcr.user_id_=su.id_
  757. LEFT JOIN student stu ON smcr.user_id_=stu.user_id_
  758. WHERE su.del_flag_=0 AND stu.user_id_ IS NOT NULL AND su.organ_id_=#{organId}
  759. GROUP BY smcr.user_id_) t WHERE t.days>=5
  760. </select>
  761. <sql id="queryCloudStudyStudentDataCondition">
  762. <where>
  763. su.del_flag_=0
  764. <if test="organId!=null">
  765. AND su.organ_id_=#{organId}
  766. </if>
  767. <if test="search!=null and search!=''">
  768. AND (stu.user_id_=#{search} OR su.username_ LIKE CONCAT('%', #{search}, '%'))
  769. </if>
  770. </where>
  771. </sql>
  772. <select id="queryCloudStudyStudentData" resultType="com.ym.mec.biz.dal.dto.EduOrganStudentListDto">
  773. SELECT
  774. stu.user_id_ studentId,
  775. su.username_ studentName,
  776. stu.teacher_id_ teacherId,
  777. tea.real_name_ teacherName,
  778. sub.name_ subjectName,
  779. stu.cloud_study_sequence_days_ cloudStudyRunningDays,
  780. COUNT(DISTINCT smcr.behavior_id_) cloudStudyUseNum,
  781. SUM(CASE WHEN smcr.play_time_ IS NULL THEN 0 ELSE play_time_ END) cloudStudyUseTime,
  782. DATE_FORMAT(stu.membership_end_time_, '%Y-%m-%d') membershipEndTime
  783. FROM student stu
  784. LEFT JOIN sys_user su ON stu.user_id_=su.id_
  785. LEFT JOIN sys_user tea ON stu.teacher_id_=tea.id_
  786. LEFT JOIN `subject` sub ON stu.subject_id_list_ = sub.id_
  787. LEFT JOIN sys_music_compare_record smcr ON stu.user_id_ = smcr.user_id_
  788. <include refid="queryCloudStudyStudentDataCondition" />
  789. GROUP BY stu.user_id_
  790. <trim prefix="ORDER BY " suffixOverrides=",">
  791. <if test="cloudStudyUseTime==null and cloudStudyRunningDays==null">
  792. stu.user_id_,
  793. </if>
  794. <if test="cloudStudyUseTime!=null">
  795. cloudStudyUseTime ${cloudStudyUseTime},
  796. </if>
  797. <if test="cloudStudyRunningDays!=null">
  798. cloudStudyRunningDays ${cloudStudyRunningDays}
  799. </if>
  800. </trim>
  801. <include refid="global.limit"></include>
  802. </select>
  803. <select id="countCloudStudyStudentData" resultType="int">
  804. SELECT
  805. COUNT(stu.user_id_)
  806. FROM student stu
  807. LEFT JOIN sys_user su ON stu.user_id_=su.id_
  808. <include refid="queryCloudStudyStudentDataCondition" />
  809. </select>
  810. <select id="getOrganEVipStudentNum" resultType="int">
  811. SELECT COUNT(DISTINCT stu.user_id_)
  812. FROM student stu
  813. LEFT JOIN cloud_teacher_order cto ON stu.user_id_=cto.student_id_
  814. LEFT JOIN sys_user su ON su.id_=stu.user_id_
  815. WHERE su.del_flag_=0 AND su.organ_id_=#{organId} AND stu.experience_member_rank_setting_id_ IS NOT NULL AND (cto.id_ IS NULL OR cto.status_ NOT IN (1, 2))
  816. </select>
  817. <update id="updateGrade"><![CDATA[
  818. UPDATE student SET current_grade_num_=current_grade_num_+1
  819. WHERE current_grade_num_>=1
  820. AND current_grade_num_<= 11
  821. ]]>
  822. </update>
  823. <update id="updateNewStudentsToOld">
  824. UPDATE student SET is_new_user_=0
  825. WHERE user_id_ IN
  826. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  827. #{userId}
  828. </foreach>
  829. </update>
  830. <update id="cleanStudentMember">
  831. UPDATE student SET member_rank_setting_id_ = NULL,membership_start_time_ = NULL,membership_end_time_ = NULL
  832. WHERE DATEDIFF(NOW(),membership_end_time_) > 0
  833. </update>
  834. <update id="cleanMember">
  835. UPDATE student SET member_rank_setting_id_ = NULL,membership_start_time_ = NULL,membership_end_time_ = NULL
  836. WHERE user_id_ = #{userId}
  837. </update>
  838. <update id="addStudentCloudStudySequenceDays">
  839. UPDATE student SET cloud_study_sequence_days_=cloud_study_sequence_days_+1,cloud_study_use_last_day_=curdate() WHERE user_id_=#{userId} AND (cloud_study_use_last_day_ IS NULL OR cloud_study_use_last_day_=date_sub(curdate(), interval 1 day))
  840. </update>
  841. <update id="updateStudentsCloudStudySequenceDays">
  842. UPDATE student SET cloud_study_sequence_days_=#{days} WHERE user_id_=#{userId}
  843. </update>
  844. <update id="cleanStudentCloudStudySequenceDays">
  845. UPDATE student SET cloud_study_sequence_days_=0,cloud_study_use_last_day_=date_sub(curdate(), interval 1 day) WHERE cloud_study_use_last_day_&lt;date_sub(curdate(), interval 1 day)
  846. </update>
  847. </mapper>