VipGroupMapper.xml 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878
  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.VipGroupDao">
  8. <resultMap type="com.ym.mec.biz.dal.entity.VipGroup" id="VipGroup">
  9. <result column="id_" property="id"/>
  10. <result column="name_" property="name"/>
  11. <result column="user_id_" property="userId"/>
  12. <result column="username_" property="userName"/>
  13. <result column="single_class_minutes_" property="singleClassMinutes"/>
  14. <result column="payment_expire_date_" property="paymentExpireDate"/>
  15. <result column="courses_expire_date_" property="coursesExpireDate"/>
  16. <result column="registration_start_time_" property="registrationStartTime"/>
  17. <result column="create_time_" property="createTime"/>
  18. <result column="update_time_" property="updateTime"/>
  19. <result column="teacher_school_id_" property="teacherSchoolId"/>
  20. <result column="online_classes_num_" property="onlineClassesNum"/>
  21. <result column="offline_classes_num_" property="offlineClassesNum"/>
  22. <result column="audit_status_" property="auditStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  23. <result column="organ_id_list_" property="organIdList"/>
  24. <result column="vip_group_activity_id_" property="vipGroupActivityId"/>
  25. <result column="vip_group_activity_name_" property="vipGroupActivityName"/>
  26. <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  27. <result column="online_classes_unit_price_" property="onlineClassesUnitPrice"/>
  28. <result column="offline_classes_unit_price_" property="offlineClassesUnitPrice"/>
  29. <result column="total_price_" property="totalPrice"/>
  30. <result column="student_num_" property="studentNum"/>
  31. <result column="total_class_times_" property="totalClassTimes"/>
  32. <result column="current_class_times_" property="currentClassTimes"/>
  33. <result column="vip_group_category_id_" property="vipGroupCategoryId"/>
  34. <result column="give_teach_mode_" property="giveTeachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  35. <result column="organ_id_" property="organId"/>
  36. <result column="stop_reason_" property="stopReason"/>
  37. <result column="courses_start_date" property="courseStartDate"/>
  38. <result column="course_schedules_json_" property="courseSchedulesJson"/>
  39. </resultMap>
  40. <resultMap type="com.ym.mec.biz.dal.entity.School" id="School">
  41. <result column="id_" property="id"/>
  42. <result column="user_id_" property="userId"/>
  43. <result column="name_" property="name"/>
  44. <result column="organ_id_" property="organId"/>
  45. <result column="address_" property="address"/>
  46. <result column="contact_phone_" property="contactPhone"/>
  47. <result column="create_time_" property="createTime"/>
  48. <result column="update_time_" property="updateTime"/>
  49. <result column="del_flag_" property="delFlag"/>
  50. <result column="contact_name_" property="contactName"/>
  51. <result column="longitude_latitude_" property="longitudeLatitude"/>
  52. <result column="subsidy_" property="subsidy"/>
  53. <result column="cooperation_organ_id_" property="cooperationOrganId"/>
  54. <result column="remark_" property="remark"/>
  55. </resultMap>
  56. <resultMap id="studentManageVipGroup" type="com.ym.mec.biz.dal.dto.StudentManageVipGroupDto">
  57. <result property="teachMode" column="teach_mode_"/>
  58. <result property="realName" column="real_name_"/>
  59. <result property="studentNum" column="student_num_"/>
  60. <result property="totalClassTimes" column="total_class_times_"/>
  61. <result property="currentClassTimes" column="current_class_times_"/>
  62. <result property="courseDate" column="course_date_"/>
  63. <result property="classGroupName" column="class_group_name_"/>
  64. <result property="courseStatus" column="course_status_"/>
  65. </resultMap>
  66. <resultMap id="vipGroupManageDetailDto" type="com.ym.mec.biz.dal.dto.VipGroupManageDetailDto" extends="VipGroup">
  67. <result property="studentNum" column="student_num_"/>
  68. <result property="subjectIdList" column="subject_id_list_"/>
  69. <result property="categoryName" column="category_name_"/>
  70. <result column="teacher_school_name_" property="teacherSchoolName"/>
  71. <!--<collection property="students" ofType="com.ym.mec.auth.api.entity.SysUser" column="student_id_">-->
  72. <!--<result property="id" column="student_id_"/>-->
  73. <!--<result property="username" column="username_"/>-->
  74. <!--</collection>-->
  75. </resultMap>
  76. <resultMap id="studentVipGroupDetailDto" type="com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto" extends="studentVipGroup">
  77. <result column="total_class_times_" property="totalClassTimes"/>
  78. <result column="address_" property="address"/>
  79. <collection property="courseSchedules" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule" column="cs.id_"/>
  80. </resultMap>
  81. <resultMap type="com.ym.mec.biz.dal.dto.StudentVipGroupShowListDto" id="studentVipGroup">
  82. <result column="id_" property="vipGroupId"/>
  83. <result column="name_" property="vipGroupName"/>
  84. <result column="single_class_minutes_" property="singleClassMinutes"/>
  85. <result column="payment_expire_date_" property="paymentExpireDate"/>
  86. <result column="online_classes_num_" property="onlineClassesNum"/>
  87. <result column="offline_classes_num_" property="offlineClassesNum"/>
  88. <result column="total_price_" property="totalPrice"/>
  89. <result column="expect_student_num_" property="expectStudentNum"/>
  90. <result column="student_num_" property="studentNum"/>
  91. <result column="user_id_" property="teacherId"/>
  92. <result column="teacher_name_" property="teacherName"/>
  93. <result column="introduction_" property="introduction"/>
  94. <result column="avatar_" property="avatar"/>
  95. <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  96. <result column="attribute1_" property="attribute1" />
  97. <result column="category_name_" property="categoryName"/>
  98. <result property="courseStartDate" column="courses_start_date"/>
  99. </resultMap>
  100. <!-- 根据主键查询一条记录 -->
  101. <select id="get" resultMap="VipGroup">
  102. SELECT * FROM vip_group WHERE id_ = #{id}
  103. </select>
  104. <select id="findStudentVipGroups" resultMap="studentManageVipGroup">
  105. SELECT CONCAT(cs.class_date_," ",cs.start_class_time_) course_date_,cs.teach_mode_,
  106. cs.status_ course_status_,cs.name_ class_group_name_
  107. FROM course_schedule_student_payment cssp
  108. LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
  109. WHERE cssp.group_type_ = 'VIP'
  110. <if test="vipGroupId != null">
  111. AND cssp.music_group_id_ = #{vipGroupId}
  112. </if>
  113. <if test="studentId != null">
  114. AND cssp.user_id_ = #{studentId}
  115. </if>
  116. <if test="classGroupName != null">
  117. AND cs.name_ LIKE CONCAT('%',#{classGroupName},'%')
  118. </if>
  119. ORDER BY course_date_
  120. <include refid="global.limit"/>
  121. </select>
  122. <select id="countStudentVipGroups" resultType="java.lang.Integer">
  123. SELECT COUNT(cssp.id_)
  124. FROM course_schedule_student_payment cssp
  125. LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
  126. WHERE cssp.group_type_ = 'VIP'
  127. <if test="vipGroupId != null">
  128. AND cssp.music_group_id_ = #{vipGroupId}
  129. </if>
  130. <if test="studentId != null">
  131. AND cssp.user_id_ = #{studentId}
  132. </if>
  133. <if test="classGroupName != null">
  134. AND cs.name_ LIKE CONCAT('%',#{classGroupName},'%')
  135. </if>
  136. </select>
  137. <!-- 全查询 -->
  138. <select id="findAll" resultMap="VipGroup">
  139. SELECT * FROM vip_group ORDER BY id_
  140. </select>
  141. <sql id="vipGroupQueryCondition">
  142. <where>
  143. 1=1
  144. AND vg.audit_status_='PASS'
  145. <if test="search!=null and search!=''">
  146. AND (vg.name_ LIKE CONCAT('%',#{search},'%') OR vg.id_=#{search})
  147. </if>
  148. <if test="teacherId!=null">
  149. AND vg.user_id_=#{teacherId}
  150. </if>
  151. <if test="activityId!=null">
  152. AND vg.vip_group_activity_id_=#{activityId}
  153. </if>
  154. <if test="organId != null">
  155. AND FIND_IN_SET(vg.organ_id_,#{organId})
  156. </if>
  157. </where>
  158. </sql>
  159. <select id="findAllByOrgan" resultMap="VipGroup">
  160. SELECT
  161. vg.*,
  162. vga.name_ vip_group_activity_name_,
  163. su.username_
  164. FROM
  165. vip_group vg
  166. LEFT JOIN sys_user su ON vg.user_id_=su.id_
  167. LEFT JOIN vip_group_activity vga ON vg.vip_group_activity_id_=vga.id_
  168. <include refid="vipGroupQueryCondition"/>
  169. ORDER BY vg.id_ DESC
  170. <include refid="global.limit"/>
  171. </select>
  172. <select id="countVipGroupByOrgan" resultType="int">
  173. SELECT
  174. count(*)
  175. FROM
  176. vip_group vg
  177. <include refid="vipGroupQueryCondition"/>
  178. </select>
  179. <!-- 向数据库增加一条记录 -->
  180. <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.VipGroup" useGeneratedKeys="true" keyColumn="id"
  181. keyProperty="id">
  182. <!--
  183. <selectKey resultClass="int" keyProperty="id" >
  184. SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
  185. </selectKey>
  186. -->
  187. INSERT INTO vip_group
  188. (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,name_,organ_id_list_,vip_group_activity_id_,status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_,vip_group_category_id_,organ_id_,stop_reason_,audit_status_,courses_start_date,course_schedules_json_)
  189. VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{name},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode},#{vipGroupCategoryId},#{organId},#{stopReason},#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{courseStartDate},#{courseSchedulesJson})
  190. </insert>
  191. <!-- 根据主键查询一条记录 -->
  192. <update id="update" parameterType="com.ym.mec.biz.dal.entity.VipGroup">
  193. UPDATE vip_group
  194. <set>
  195. <if test="paymentExpireDate != null">
  196. payment_expire_date_ = #{paymentExpireDate},
  197. </if>
  198. <if test="userId != null">
  199. user_id_ = #{userId},
  200. </if>
  201. <if test="offlineClassesNum != null">
  202. offline_classes_num_ = #{offlineClassesNum},
  203. </if>
  204. <if test="onlineClassesNum != null">
  205. online_classes_num_ = #{onlineClassesNum},
  206. </if>
  207. <if test="updateTime != null">
  208. update_time_ = NOW(),
  209. </if>
  210. <if test="singleClassMinutes != null">
  211. single_class_minutes_ = #{singleClassMinutes},
  212. </if>
  213. <if test="teacherSchoolId != null">
  214. teacher_school_id_ = #{teacherSchoolId},
  215. </if>
  216. <if test="coursesExpireDate != null">
  217. courses_expire_date_ = #{coursesExpireDate},
  218. </if>
  219. <if test="registrationStartTime != null">
  220. registration_start_time_ = #{registrationStartTime},
  221. </if>
  222. <if test="organIdList!=null">
  223. organ_id_list_=#{organIdList},
  224. </if>
  225. <if test="auditStatus != null">
  226. audit_status_ = #{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  227. </if>
  228. <if test="organIdList != null">
  229. organ_id_list_ = #{organIdList},
  230. </if>
  231. <if test="vipGroupActivityId != null">
  232. vip_group_activity_id_ = #{vipGroupActivityId},
  233. </if>
  234. <if test="status != null">
  235. status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  236. </if>
  237. <if test="onlineClassesUnitPrice != null">
  238. online_classes_unit_price_ = #{onlineClassesUnitPrice},
  239. </if>
  240. <if test="offlineClassesUnitPrice != null">
  241. offline_classes_unit_price_ = #{offlineClassesUnitPrice},
  242. </if>
  243. <if test="totalPrice != null">
  244. total_price_ = #{totalPrice},
  245. </if>
  246. <if test="giveTeachMode!=null">
  247. give_teach_mode_=#{giveTeachMode},
  248. </if>
  249. <if test="organId!=null">
  250. organ_id_=#{organId},
  251. </if>
  252. <if test="stopReason!=null">
  253. stop_reason_=#{stopReason},
  254. </if>
  255. <if test="auditStatus!=null">
  256. audit_status_=#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  257. </if>
  258. <if test="courseSchedulesJson!=null">
  259. course_schedules_json_=#{courseSchedulesJson},
  260. </if>
  261. </set>
  262. WHERE id_ = #{id}
  263. </update>
  264. <!-- 根据主键删除一条记录 -->
  265. <delete id="delete">
  266. DELETE FROM vip_group WHERE id_ = #{id}
  267. </delete>
  268. <!-- 分页查询 -->
  269. <select id="queryPage" resultMap="VipGroup" parameterType="map">
  270. SELECT * FROM vip_group ORDER BY id_
  271. <include refid="global.limit"/>
  272. </select>
  273. <!-- 查询当前表的总记录数 -->
  274. <select id="queryCount" resultType="int">
  275. SELECT COUNT(*) FROM vip_group
  276. </select>
  277. <select id="getLockVipGroup" resultMap="VipGroup">
  278. SELECT * FROM vip_group WHERE id_=#{vipGroupId} FOR UPDATE
  279. </select>
  280. <sql id="studentVipGroupQueryCondition">
  281. <where>
  282. vg.audit_status_='PASS'
  283. AND vg.status_=1
  284. AND vg.courses_expire_date_ &gt;= DATE_FORMAT(NOW(),'%Y%m%d')
  285. AND vg.courses_start_date &gt; NOW()
  286. AND (select count(1) as num from student_payment_order where vg.id_ = music_group_id_ AND user_id_=#{userId} AND status_='SUCCESS') = 0
  287. <if test="subjectId!=null">
  288. AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)
  289. </if>
  290. <if test="categoryId!=null">
  291. AND FIND_IN_SET(vg.vip_group_category_id_,#{categoryId})
  292. </if>
  293. <if test="classType!=null and classType.toString()=='0'.toString()">
  294. AND vg.offline_classes_num_>0
  295. </if>
  296. <if test="classType!=null and classType.toString()=='1'.toString()">
  297. AND vg.online_classes_num_>0
  298. </if>
  299. <if test="search!=null">
  300. AND vg.name_ like concat('%',#{search},'%')
  301. </if>
  302. </where>
  303. </sql>
  304. <select id="findVipGroups" resultMap="studentVipGroup">
  305. SELECT
  306. vg.id_,
  307. vg.name_,
  308. vg.single_class_minutes_,
  309. vg.payment_expire_date_,
  310. vg.courses_expire_date_,
  311. vg.courses_start_date,
  312. vg.online_classes_num_,
  313. vg.offline_classes_num_,
  314. vg.total_price_,
  315. cg.expect_student_num_,
  316. cg.student_num_,
  317. su.username_ teacher_name_,
  318. su.avatar_,
  319. t.introduction_,
  320. vga.type_,
  321. IF(vga.type_='GIVE_CLASS',vga.attribute2_,vga.attribute1_) attribute1_,
  322. vgc.name_ category_name_
  323. FROM
  324. vip_group vg
  325. LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_ = 'VIP'
  326. LEFT JOIN teacher t ON vg.user_id_=t.id_
  327. LEFT JOIN sys_user su ON vg.user_id_=su.id_
  328. LEFT JOIN vip_group_activity vga ON vg.vip_group_activity_id_=vga.id_
  329. LEFT JOIN vip_group_category vgc ON vg.vip_group_category_id_=vgc.id_
  330. <include refid="studentVipGroupQueryCondition"/>
  331. ORDER BY vg.id_ DESC
  332. <include refid="global.limit"/>
  333. </select>
  334. <select id="countVipGorups" resultType="int">
  335. SELECT
  336. count(*)
  337. FROM
  338. vip_group vg
  339. LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_ = 'VIP'
  340. <include refid="studentVipGroupQueryCondition"/>
  341. </select>
  342. <select id="getVipGroupBaseInfo" resultMap="vipGroupManageDetailDto">
  343. SELECT
  344. vg.*,
  345. vga.name_ vip_group_activity_name_,
  346. su.username_,
  347. cg.student_num_,
  348. cg.subject_id_list_,
  349. cg.total_class_times_,
  350. cg.current_class_times_,
  351. vgc.name_ category_name_,
  352. s.name_ teacher_school_name_
  353. FROM
  354. vip_group vg
  355. LEFT JOIN sys_user su ON vg.user_id_=su.id_
  356. LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_ = 'VIP'
  357. LEFT JOIN vip_group_activity vga ON vg.vip_group_activity_id_=vga.id_
  358. LEFT JOIN vip_group_category vgc ON vg.vip_group_category_id_=vgc.id_
  359. LEFT JOIN school s ON vg.teacher_school_id_=s.id_
  360. WHERE vg.id_=#{vipGroupId}
  361. </select>
  362. <sql id="vipGroupAttendanceQueryCondition">
  363. <where>
  364. <if test="vipGroupId!=null">
  365. and vg.id_=#{vipGroupId}
  366. </if>
  367. <if test="startTime != null">
  368. and CONCAT(cs.class_date_,' ',cs.end_class_time_) &gt; #{startTime}
  369. </if>
  370. <if test="endTime != null">
  371. and CONCAT(cs.class_date_,' ',cs.end_class_time_) &lt; #{endTime}
  372. </if>
  373. <if test="status != null">
  374. and cs.status_ = #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
  375. </if>
  376. <if test="complaintStatus != null">
  377. and cs.complaint_status_ = #{complaintStatus}
  378. </if>
  379. </where>
  380. </sql>
  381. <select id="findVipGroupAttendances" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
  382. SELECT
  383. cs.*
  384. FROM
  385. vip_group vg
  386. LEFT JOIN teacher_attendance ta ON vg.id_=ta.music_group_id_ AND ta.group_type_ = 'VIP'
  387. LEFT JOIN course_schedule cs ON ta.course_schedule_id_=cs.id_
  388. <include refid="vipGroupAttendanceQueryCondition"/>
  389. ORDER BY ta.id_
  390. <include refid="global.limit"/>
  391. </select>
  392. <select id="countVipGroupAttendance" resultType="int">
  393. SELECT
  394. count(*)
  395. FROM
  396. vip_group vg
  397. LEFT JOIN teacher_attendance ta ON vg.id_=ta.music_group_id_ AND ta.group_type_ = 'VIP'
  398. LEFT JOIN course_schedule cs ON ta.course_schedule_id_=cs.id_
  399. <include refid="vipGroupAttendanceQueryCondition"/>
  400. ORDER BY ta.id_
  401. </select>
  402. <select id="getVipGroupDetail" resultMap="studentVipGroupDetailDto">
  403. SELECT
  404. vg.*,
  405. cg.total_class_times_,
  406. cg.expect_student_num_,
  407. cg.student_num_,
  408. su.username_ teacher_name_,
  409. su.avatar_,
  410. t.introduction_,
  411. s.name_ address_,
  412. cs.id_ course_id_,
  413. cs.class_group_id_,
  414. cs.status_,
  415. cs.subsidy_,
  416. cs.class_date_,
  417. CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
  418. CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
  419. cs.teacher_id_,
  420. cs.actual_teacher_id_,
  421. cs.create_time_,
  422. cs.update_time_,
  423. cs.teach_mode_,
  424. cs.type_,
  425. cs.name_
  426. FROM
  427. vip_group vg
  428. LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_ = 'VIP'
  429. LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
  430. LEFT JOIN school s ON vg.teacher_school_id_=s.id_
  431. LEFT JOIN teacher t ON vg.user_id_=t.id_
  432. LEFT JOIN sys_user su ON vg.user_id_=su.id_
  433. WHERE vg.id_=#{vipGroupId}
  434. ORDER BY start_class_time_
  435. </select>
  436. <select id="countSurplusClassTimes" resultType="java.util.Map">
  437. SELECT
  438. cs.teach_mode_ as 'key',
  439. COUNT(cs.id_) as 'value'
  440. FROM
  441. course_schedule cs
  442. WHERE cs.status_="NOT_START" AND cs.type_ = 'VIP' AND cs.music_group_id_=#{vipGroupId} AND cs.group_type_='VIP'
  443. GROUP BY cs.teach_mode_
  444. </select>
  445. <resultMap id="vipGroupStudentDto" type="com.ym.mec.biz.dal.dto.VipGroupStudentDto">
  446. <result column="id_" property="id"/>
  447. <result column="username_" property="userName"/>
  448. <result column="phone_" property="phone"/>
  449. <result column="total_class_times_" property="totalClassTimes"/>
  450. <result column="current_class_times_" property="currentClassTimes"/>
  451. <result column="course_balance_" property="courseSalary"/>
  452. <result column="create_time_" property="applyDate"/>
  453. <result column="update_time_" property="refundDate"/>
  454. <result column="student_status_" property="studentStatus"/>
  455. </resultMap>
  456. <select id="findVipGroupStudents" resultMap="vipGroupStudentDto">
  457. SELECT
  458. su.id_,
  459. su.username_,
  460. su.phone_,
  461. cg.total_class_times_,
  462. cg.current_class_times_,
  463. suaa.course_balance_,
  464. cgsm.create_time_,
  465. cgsm.update_time_,
  466. CASE cgsm.status_ WHEN 'QUIT' THEN 1 ELSE 0 END student_status_
  467. FROM
  468. class_group cg
  469. LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
  470. LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
  471. LEFT JOIN sys_user_cash_account suaa ON cgsm.user_id_=suaa.user_id_
  472. WHERE cg.music_group_id_=#{vipGroupId}
  473. AND cg.group_type_='VIP'
  474. AND cgsm.user_id_ IS NOT NULL
  475. ORDER BY su.id_
  476. <include refid="global.limit"/>
  477. </select>
  478. <select id="findHaveCourseBalanceStudents" resultMap="vipGroupStudentDto">
  479. SELECT
  480. su.id_,
  481. su.username_,
  482. su.phone_,
  483. suca.course_balance_
  484. FROM
  485. sys_user_cash_account suca
  486. LEFT JOIN sys_user su ON suca.user_id_=su.id_
  487. WHERE
  488. suca.course_balance_ >0
  489. <if test="search!=null and search!=''">
  490. AND (su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
  491. </if>
  492. <include refid="global.limit"/>
  493. </select>
  494. <select id="countHaveCourseBalanceStudentNum" resultType="int">
  495. SELECT
  496. COUNT(1)
  497. FROM
  498. sys_user_cash_account suca
  499. LEFT JOIN sys_user su ON suca.user_id_=su.id_
  500. WHERE
  501. suca.course_balance_ >0
  502. <if test="search!=null and search!=''">
  503. AND (su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
  504. </if>
  505. </select>
  506. <select id="countVipGroupStudents" resultType="int">
  507. SELECT
  508. count(*)
  509. FROM
  510. class_group cg
  511. LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
  512. WHERE cg.music_group_id_=#{vipGroupId} AND cg.group_type_='VIP'
  513. </select>
  514. <resultMap id="teachingRecord" type="com.ym.mec.biz.dal.dto.VipGroupCourseSchduleRecordDto">
  515. <result column="id_" property="id"/>
  516. <result column="start_class_time_" property="startClassTime"/>
  517. <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  518. <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  519. <result column="give_teach_mode_" property="giveTeachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  520. <result column="is_salary_" property="isSalary" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  521. <result column="student_num_" property="attendanceNum"/>
  522. <result column="school_name_" property="schoolName"/>
  523. <result column="schoole_id_" property="schooleId"/>
  524. </resultMap>
  525. <sql id="teachingRecordQueryCondition">
  526. <where>
  527. cs.music_group_id_=#{vipGroupId} AND cs.group_type_='VIP'
  528. <if test="startTime!=null and endTime!=null">
  529. AND (cs.class_date_ BETWEEN #{startTime} AND #{endTime})
  530. </if>
  531. <if test="teachMode!=null and teachMode!=''">
  532. AND cs.teach_mode_=#{teachMode}
  533. </if>
  534. <if test="status!=null and status!=''">
  535. AND cs.status_=#{status}
  536. </if>
  537. </where>
  538. </sql>
  539. <select id="findTeachingRecord" resultMap="teachingRecord">
  540. SELECT
  541. cs.id_,
  542. CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
  543. cs.status_,
  544. cs.teach_mode_,
  545. cs.student_num_,s.name_ school_name_,
  546. csts.actual_salary_ IS NOT NULL is_salary_,
  547. cs.schoole_id_
  548. FROM
  549. course_schedule cs
  550. LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
  551. left join school s on cs.schoole_id_ = s.id_
  552. <include refid="teachingRecordQueryCondition"/>
  553. ORDER BY start_class_time_
  554. <include refid="global.limit"/>
  555. </select>
  556. <select id="countTeachingRecord" resultType="int">
  557. SELECT
  558. COUNT(*)
  559. FROM
  560. course_schedule cs
  561. <include refid="teachingRecordQueryCondition"/>
  562. </select>
  563. <select id="getClassTimes" resultType="com.ym.mec.biz.dal.dto.TeachingRecordBaseInfo">
  564. SELECT
  565. cg.total_class_times_ totalClassTimes,
  566. cg.current_class_times_ currentClassTimes
  567. FROM
  568. class_group cg
  569. WHERE cg.music_group_id_=#{vipGroupId}
  570. </select>
  571. <select id="countIsSalaryNum" resultType="int">
  572. SELECT
  573. COUNT(*)
  574. FROM
  575. course_schedule cs
  576. LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
  577. WHERE cs.music_group_id_=#{vipGroupId}
  578. AND cs.group_type_='VIP'
  579. AND csts.settlement_time_ IS NOT NULL
  580. </select>
  581. <select id="countComplaintsNum" resultType="java.lang.Integer">
  582. SELECT
  583. COUNT(*)
  584. FROM
  585. course_schedule cs
  586. LEFT JOIN course_schedule_complaints csc ON cs.id_=csc.course_schedule_id_
  587. WHERE cs.music_group_id_=#{vipGroupId}
  588. AND cs.group_type_='VIP'
  589. AND csc.course_schedule_id_ IS NOT NULL
  590. AND csc.score_&lt;=2
  591. </select>
  592. <select id="getVipGroupSalaryInfo" resultType="com.ym.mec.biz.dal.dto.VipGroupSalaryBaseInfo">
  593. SELECT
  594. SUM(csts.expect_salary_) expectTotalSalary,
  595. SUM(csts.actual_salary_) totalSalary
  596. FROM
  597. vip_group vg
  598. LEFT JOIN course_schedule cs ON vg.id_=cs.music_group_id_ AND cs.group_type_ = 'VIP'
  599. LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
  600. WHERE vg.id_=#{vipGroupId} AND cs.id_ IS NOT NULL
  601. </select>
  602. <select id="countVipGroupDeductionNum" resultType="int">
  603. SELECT
  604. COUNT(csts.id_)
  605. FROM
  606. vip_group vg
  607. LEFT JOIN course_schedule cs ON vg.id_=cs.music_group_id_ AND cs.group_type_='VIP'
  608. LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
  609. WHERE vg.id_=#{vipGroupId} AND cs.id_!=NULL AND csts.settlement_time_!=NULL AND csts.actual_salary_&lt;csts.expect_salary_
  610. </select>
  611. <select id="countSurplusCourseFee" resultType="map">
  612. SELECT
  613. cssp.user_id_ as 'key',
  614. SUM(cssp.expect_price_) as 'value'
  615. FROM
  616. vip_group vg
  617. LEFT JOIN course_schedule cs ON vg.id_=cs.music_group_id_ AND cs.group_type_ = 'VIP'
  618. LEFT JOIN course_schedule_student_payment cssp ON cs.id_=cssp.course_schedule_id_
  619. WHERE vg.id_=#{vipGroupId} AND cs.status_='NOT_START'
  620. GROUP BY cssp.user_id_
  621. </select>
  622. <select id="countTeacherVipGroups" resultType="int">
  623. SELECT COUNT(vg.id_) FROM vip_group vg
  624. WHERE vg.user_id_ = #{teacherId} AND vg.status_!=3
  625. </select>
  626. <select id="countTeacherVipClass" resultType="java.lang.Integer">
  627. SELECT COUNT(DISTINCT vg.id_) FROM vip_group vg
  628. LEFT JOIN class_group cg ON cg.music_group_id_ = vg.id_ AND cg.group_type_ = 'VIP'
  629. LEFT JOIN course_schedule cs ON cs.class_group_id_ = cg.id_
  630. WHERE cs.actual_teacher_id_ = #{teacherId} AND cs.type_ = 'VIP' AND cg.del_flag_ = 0
  631. </select>
  632. <resultMap type="com.ym.mec.biz.dal.dto.TeacherVipClassInfoDto" id="getTeacherVipClassMap">
  633. <result column="vip_group_id_" property="vipClassId"/>
  634. <result column="student_num_" property="studentNum"/>
  635. <result column="online_classes_unit_price_" property="onlineClassesUnitPrice"/>
  636. <result column="offline_classes_unit_price_" property="offlineClassesUnitPrice"/>
  637. <result column="class_group_id_" property="classGroupId"/>
  638. <result column="courses_expire_date_" property="coursesExpireDate"/>
  639. <result column="payment_expire_date_" property="paymentExpireDate"/>
  640. <result column="create_time_" property="createDate"/>
  641. <result column="current_class_times_" property="currentClassTimes"/>
  642. <result column="total_class_times_" property="totalClassTimes"/>
  643. <result column="vip_group_name_" property="vipClassName"/>
  644. <result column="audit_status_" property="auditStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  645. <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  646. <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  647. <result column="vip_group_activity_id_" property="activityId"/>
  648. </resultMap>
  649. <select id="getTeacherVipClass" resultMap="getTeacherVipClassMap">
  650. SELECT vg.id_ vip_group_id_,vg.name_ vip_group_name_,vg.status_,vg.audit_status_,vg.create_time_,
  651. vg.payment_expire_date_,vg.courses_expire_date_,vg.online_classes_unit_price_,vg.offline_classes_unit_price_,
  652. cg.total_class_times_,cg.current_class_times_,cg.id_ class_group_id_,cg.student_num_,vg.vip_group_activity_id_
  653. FROM vip_group vg
  654. LEFT JOIN class_group cg ON vg.id_ = cg.music_group_id_ AND cg.group_type_ = 'VIP'
  655. LEFT JOIN course_schedule cs ON cs.class_group_id_ = cg.id_
  656. WHERE cs.actual_teacher_id_ = #{teacherId} AND cs.type_ = 'VIP' AND cg.del_flag_ = 0 GROUP BY vg.id_,cg.id_
  657. <include refid="global.limit"/>
  658. </select>
  659. <select id="querySchoolByUserId" resultMap="School">
  660. SELECT * from school where user_id_ = #{userId} or user_id_ is null
  661. </select>
  662. <select id="countVipGroupOverCourse" resultType="java.util.Map">
  663. SELECT
  664. cs.music_group_id_ AS 'key',
  665. COUNT(cs.Id_) AS 'value'
  666. FROM
  667. course_schedule cs
  668. WHERE cs.status_='OVER'
  669. AND DATE_FORMAT(cs.class_date_,'%Y-%m')=DATE_FORMAT(NOW(),'%Y-%m')
  670. AND cs.group_type_='VIP'
  671. AND cs.music_group_id_ IN
  672. <foreach collection="list" item="id" open="(" close=")" separator=",">
  673. #{id}
  674. </foreach>
  675. GROUP BY cs.music_group_id_
  676. </select>
  677. <select id="findByCourseSchedule" resultMap="VipGroup">
  678. SELECT
  679. vg.*
  680. FROM
  681. vip_group vg
  682. LEFT JOIN course_schedule cs ON vg.id_=cs.music_group_id_ AND cs.group_type_ = 'VIP'
  683. WHERE cs.id_=#{courseScheduleId}
  684. </select>
  685. <select id="queryVipGroupNum" resultType="map">
  686. select count(*) total,sum(case when status_ = 1 then 1 else 0 end) applying_num_,sum(case when status_ = 2 then 1 else 0 end) finished_num_ from vip_group
  687. <where>
  688. <if test="organId != null">
  689. FIND_IN_SET(organ_id_,#{organId})
  690. </if>
  691. </where>
  692. </select>
  693. <select id="queryCurrentMonthCoursesNum" resultType="int">
  694. select count(cs.id_) from course_schedule cs left join vip_group vg on cs.music_group_id_ = vg.id_ where cs.type_ in ('VIP')
  695. and DATE_FORMAT(cs.class_date_, '%Y%m' ) = DATE_FORMAT(CURDATE() , '%Y%m')
  696. <if test="organId != null">
  697. AND FIND_IN_SET(vg.organ_id_,#{organId})
  698. </if>
  699. </select>
  700. <select id="findNoCreateSuccessVipGroup" resultMap="VipGroup">
  701. SELECT
  702. *
  703. FROM
  704. vip_group
  705. WHERE
  706. (payment_expire_date_ &lt; DATE_FORMAT(NOW( ),'%Y-%m-%d')
  707. OR courses_start_date &lt; NOW())
  708. AND status_ =1
  709. </select>
  710. <select id="countStudentPaymentNum" resultType="int">
  711. SELECT
  712. COUNT(*)
  713. FROM course_schedule_student_payment cssp
  714. WHERE
  715. cssp.settlement_time_ IS NOT NULL
  716. AND cssp.class_group_id_ = #{classGroupId}
  717. </select>
  718. <select id="countStudentPaymentFee" resultType="java.math.BigDecimal">
  719. SELECT
  720. SUM( actual_price_ )
  721. FROM
  722. course_schedule_student_payment cssp
  723. WHERE
  724. cssp.settlement_time_ IS NOT NULL
  725. AND cssp.class_group_id_ = #{classGroupId}
  726. </select>
  727. <select id="queryByIds" resultMap="VipGroup" parameterType="string">
  728. select * from vip_group where id_ in (#{idList})
  729. </select>
  730. <resultMap id="VipBuyResult" type="com.ym.mec.biz.dal.dto.VipBuyResultDto">
  731. <result property="vipGroupId" column="id_"/>
  732. <result property="vipGroupName" column="name_"/>
  733. <result property="teacherName" column="username_"/>
  734. <result property="classTimes" column="total_class_times_"/>
  735. <result property="startClassTime" column="courses_start_date"/>
  736. <result property="endClassTime" column="courses_expire_date_"/>
  737. </resultMap>
  738. <select id="getVipBuyResultInfo" resultMap="VipBuyResult">
  739. SELECT
  740. vg.id_,
  741. vg.name_,
  742. vg.courses_start_date,
  743. vg.courses_expire_date_,
  744. cg.total_class_times_,
  745. su.username_
  746. FROM
  747. vip_group vg
  748. LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_='VIP'
  749. LEFT JOIN sys_user su ON vg.user_id_=su.id_
  750. WHERE vg.id_=#{vipGroupId}
  751. </select>
  752. <update id="batchUpdate" parameterType="java.util.List">
  753. <foreach collection="vipGroupList" item="item" index="index" open="" close="" separator=";">
  754. UPDATE vip_group
  755. <set>
  756. <if test="item.paymentExpireDate != null">
  757. payment_expire_date_ = #{item.paymentExpireDate},
  758. </if>
  759. <if test="item.userId != null">
  760. user_id_ = #{item.userId},
  761. </if>
  762. <if test="item.offlineClassesNum != null">
  763. offline_classes_num_ = #{item.offlineClassesNum},
  764. </if>
  765. <if test="item.onlineClassesNum != null">
  766. online_classes_num_ = #{item.onlineClassesNum},
  767. </if>
  768. <if test="item.updateTime != null">
  769. update_time_ = NOW(),
  770. </if>
  771. <if test="item.singleClassMinutes != null">
  772. single_class_minutes_ = #{item.singleClassMinutes},
  773. </if>
  774. <if test="item.teacherSchoolId != null">
  775. teacher_school_id_ = #{item.teacherSchoolId},
  776. </if>
  777. <if test="item.coursesExpireDate != null">
  778. courses_expire_date_ = #{item.coursesExpireDate},
  779. </if>
  780. <if test="item.registrationStartTime != null">
  781. registration_start_time_ = #{item.registrationStartTime},
  782. </if>
  783. <if test="item.organIdList!=null">
  784. organ_id_list_=#{item.organIdList},
  785. </if>
  786. <if test="item.auditStatus != null">
  787. audit_status_ = #{item.auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  788. </if>
  789. <if test="item.organIdList != null">
  790. organ_id_list_ = #{item.organIdList},
  791. </if>
  792. <if test="item.vipGroupActivityId != null">
  793. vip_group_activity_id_ = #{item.vipGroupActivityId},
  794. </if>
  795. <if test="item.status != null">
  796. status_ = #{item.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  797. </if>
  798. <if test="item.onlineClassesUnitPrice != null">
  799. online_classes_unit_price_ = #{item.onlineClassesUnitPrice},
  800. </if>
  801. <if test="item.offlineClassesUnitPrice != null">
  802. offline_classes_unit_price_ = #{item.offlineClassesUnitPrice},
  803. </if>
  804. <if test="item.totalPrice != null">
  805. total_price_ = #{item.totalPrice},
  806. </if>
  807. <if test="item.giveTeachMode!=null">
  808. give_teach_mode_=#{item.giveTeachMode},
  809. </if>
  810. <if test="item.organId!=null">
  811. organ_id_=#{item.organId},
  812. </if>
  813. <if test="item.stopReason!=null">
  814. stop_reason_=#{item.stopReason},
  815. </if>
  816. <if test="item.auditStatus!=null">
  817. audit_status_=#{item.auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  818. </if>
  819. <if test="item.courseSchedulesJson!=null">
  820. course_schedules_json_=#{item.courseSchedulesJson},
  821. </if>
  822. </set>
  823. WHERE id_ = #{item.id}
  824. </foreach>
  825. </update>
  826. <select id="queryRequiredOverList" resultMap="VipGroup">
  827. select vg.* from vip_group vg left join class_group cg on vg.id_ = cg.music_group_id_ where vg.status_ = 2 and cg.total_class_times_ = cg.current_class_times_ and cg.total_class_times_ &gt; 0
  828. </select>
  829. <select id="queryNormalStatusList" resultMap="VipGroup">
  830. SELECT * FROM vip_group WHERE status_!=3 AND status_!=4
  831. </select>
  832. </mapper>