VipGroupMapper.xml 52 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169
  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"
  23. typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  24. <result column="organ_id_list_" property="organIdList"/>
  25. <result column="vip_group_activity_id_" property="vipGroupActivityId"/>
  26. <result column="vip_group_activity_name_" property="vipGroupActivityName"/>
  27. <result column="group_status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  28. <result column="online_classes_unit_price_" property="onlineClassesUnitPrice"/>
  29. <result column="offline_classes_unit_price_" property="offlineClassesUnitPrice"/>
  30. <result column="total_price_" property="totalPrice"/>
  31. <result column="original_total_price_" property="originalTotalPrice"/>
  32. <result column="student_num_" property="studentNum"/>
  33. <result column="total_class_times_" property="totalClassTimes"/>
  34. <result column="current_class_times_" property="currentClassTimes"/>
  35. <result column="vip_group_category_id_" property="vipGroupCategoryId"/>
  36. <result column="give_teach_mode_" property="giveTeachMode"
  37. typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  38. <result column="organ_id_" property="organId"/>
  39. <result column="stop_reason_" property="stopReason"/>
  40. <result column="memo_" property="memo"/>
  41. <result column="courses_start_date" property="courseStartDate"/>
  42. <result column="course_schedules_json_" property="courseSchedulesJson"/>
  43. <result column="student_id_list_" property="studentIdList"/>
  44. <result column="organ_name_" property="organName"/>
  45. <result column="school_name_" property="schoolName"/>
  46. <result column="subject_name_" property="subjectName"/>
  47. <result column="educational_teacher_id_" property="educationalTeacherId"/>
  48. <result column="vip_group_category_name_" property="vipGroupCategoryName"/>
  49. <result column="educational_teacher_name_" property="educationalTeacherName" />
  50. <result column="live_config_json_" property="liveConfigJson" />
  51. <result column="tenant_id_" property="tenantId" />
  52. </resultMap>
  53. <resultMap type="com.ym.mec.biz.dal.entity.School" id="School">
  54. <result column="id_" property="id"/>
  55. <result column="user_id_" property="userId"/>
  56. <result column="name_" property="name"/>
  57. <result column="organ_id_" property="organId"/>
  58. <result column="address_" property="address"/>
  59. <result column="contact_phone_" property="contactPhone"/>
  60. <result column="create_time_" property="createTime"/>
  61. <result column="update_time_" property="updateTime"/>
  62. <result column="del_flag_" property="delFlag"/>
  63. <result column="contact_name_" property="contactName"/>
  64. <result column="longitude_latitude_" property="longitudeLatitude"/>
  65. <result column="subsidy_" property="subsidy"/>
  66. <result column="cooperation_organ_id_" property="cooperationOrganId"/>
  67. <result column="remark_" property="remark"/>
  68. </resultMap>
  69. <resultMap id="studentManageVipGroup" type="com.ym.mec.biz.dal.dto.StudentManageVipGroupDto">
  70. <result property="teachMode" column="teach_mode_"/>
  71. <result property="realName" column="real_name_"/>
  72. <result property="studentNum" column="student_num_"/>
  73. <result property="totalClassTimes" column="total_class_times_"/>
  74. <result property="currentClassTimes" column="current_class_times_"/>
  75. <result property="courseDate" column="course_date_"/>
  76. <result property="classGroupName" column="class_group_name_"/>
  77. <result property="courseStatus" column="course_status_"/>
  78. </resultMap>
  79. <resultMap id="vipCourseStudentInfoDto" type="com.ym.mec.biz.dal.dto.VipCourseStudentInfoDto">
  80. <result property="totalAmount" column="total_amount_"/>
  81. <result property="studentNum" column="student_num_"/>
  82. <result property="musicGroupId" column="music_group_id_"/>
  83. <result property="totalCourseTimes" column="total_times_"/>
  84. </resultMap>
  85. <resultMap id="vipGroupManageDetailDto" type="com.ym.mec.biz.dal.dto.VipGroupManageDetailDto" extends="VipGroup">
  86. <result property="studentNum" column="student_num_"/>
  87. <result property="subjectIdList" column="subject_id_list_"/>
  88. <result property="categoryName" column="category_name_"/>
  89. <result column="teacher_school_name_" property="teacherSchoolName"/>
  90. <result column="music_theory_" property="musicTheory"/>
  91. <!--<collection property="students" ofType="com.ym.mec.auth.api.entity.SysUser" column="student_id_">-->
  92. <!--<result property="id" column="student_id_"/>-->
  93. <!--<result property="username" column="username_"/>-->
  94. <!--</collection>-->
  95. </resultMap>
  96. <resultMap id="studentVipGroupDetailDto" type="com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto"
  97. extends="studentVipGroup">
  98. <result column="total_class_times_" property="totalClassTimes"/>
  99. <result column="address_" property="address"/>
  100. <collection property="courseSchedules" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule"
  101. column="cs.id_"/>
  102. </resultMap>
  103. <resultMap type="com.ym.mec.biz.dal.dto.StudentVipGroupShowListDto" id="studentVipGroup">
  104. <result column="id_" property="vipGroupId"/>
  105. <result column="name_" property="vipGroupName"/>
  106. <result column="single_class_minutes_" property="singleClassMinutes"/>
  107. <result column="payment_expire_date_" property="paymentExpireDate"/>
  108. <result column="online_classes_num_" property="onlineClassesNum"/>
  109. <result column="offline_classes_num_" property="offlineClassesNum"/>
  110. <result column="total_price_" property="totalPrice"/>
  111. <result column="original_total_price_" property="originalTotalPrice"/>
  112. <result column="expect_student_num_" property="expectStudentNum"/>
  113. <result column="student_num_" property="studentNum"/>
  114. <result column="user_id_" property="teacherId"/>
  115. <result column="teacher_name_" property="teacherName"/>
  116. <result column="introduction_" property="introduction"/>
  117. <result column="avatar_" property="avatar"/>
  118. <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  119. <result column="attribute1_" property="attribute1"/>
  120. <result column="category_name_" property="categoryName"/>
  121. <result property="courseStartDate" column="courses_start_date"/>
  122. <result property="createTime" column="create_time_"/>
  123. <result property="groupType" column="group_type_"/>
  124. </resultMap>
  125. <!-- 根据主键查询一条记录 -->
  126. <select id="get" resultMap="VipGroup">
  127. SELECT *
  128. FROM vip_group
  129. WHERE id_ = #{id}
  130. </select>
  131. <select id="findStudentVipGroups" resultMap="studentManageVipGroup">
  132. SELECT CONCAT(cs.class_date_," ",cs.start_class_time_) course_date_,cs.teach_mode_,
  133. cs.status_ course_status_,cs.name_ class_group_name_
  134. FROM course_schedule_student_payment cssp
  135. LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
  136. WHERE cssp.group_type_ = 'VIP' and cssp.tenant_id_ = #{tenantId}
  137. <if test="vipGroupId != null">
  138. AND cssp.music_group_id_ = #{vipGroupId}
  139. </if>
  140. <if test="studentId != null">
  141. AND cssp.user_id_ = #{studentId}
  142. </if>
  143. <if test="classGroupName != null">
  144. AND cs.name_ LIKE CONCAT('%',#{classGroupName},'%')
  145. </if>
  146. ORDER BY course_date_
  147. <include refid="global.limit"/>
  148. </select>
  149. <select id="countStudentVipGroups" resultType="java.lang.Integer">
  150. SELECT COUNT(cssp.id_)
  151. FROM course_schedule_student_payment cssp
  152. LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
  153. WHERE cssp.group_type_ = 'VIP' and cssp.tenant_id_ = #{tenantId}
  154. <if test="vipGroupId != null">
  155. AND cssp.music_group_id_ = #{vipGroupId}
  156. </if>
  157. <if test="studentId != null">
  158. AND cssp.user_id_ = #{studentId}
  159. </if>
  160. <if test="classGroupName != null">
  161. AND cs.name_ LIKE CONCAT('%',#{classGroupName},'%')
  162. </if>
  163. </select>
  164. <!-- 全查询 -->
  165. <select id="findAll" resultMap="VipGroup">
  166. SELECT *
  167. FROM vip_group where tenant_id_ = #{tenantId}
  168. ORDER BY id_
  169. </select>
  170. <sql id="vipGroupQueryCondition">
  171. <where>
  172. vg.audit_status_='PASS' AND vg.group_status_ != 7 and vg.tenant_id_ = #{tenantId}
  173. <if test="search!=null and search!=''">
  174. AND (vg.name_ LIKE CONCAT('%',#{search},'%') OR vg.id_= #{search})
  175. </if>
  176. <if test="hasEducationalTeacherId != null and hasEducationalTeacherId == true">
  177. AND vg.educational_teacher_id_ IS NOT NULL
  178. </if>
  179. <if test="hasEducationalTeacherId != null and hasEducationalTeacherId == false">
  180. AND vg.educational_teacher_id_ IS NULL
  181. </if>
  182. <if test="teacherId!=null">
  183. AND vg.user_id_=#{teacherId}
  184. </if>
  185. <if test="status != null and status != ''">
  186. AND vg.group_status_ = #{status}
  187. </if>
  188. <if test="activityId!=null">
  189. AND vg.vip_group_activity_id_=#{activityId}
  190. </if>
  191. <if test="organId != null and organId != ''">
  192. AND FIND_IN_SET(vg.organ_id_,#{organId})
  193. </if>
  194. <if test="liveOrganId != null and liveOrganId != ''">
  195. AND INTE_ARRAY(vg.organ_id_list_,#{liveOrganId})
  196. </if>
  197. <if test="educationalTeacherId!=null">
  198. AND vg.educational_teacher_id_=#{educationalTeacherId}
  199. </if>
  200. <if test="groupType != null and groupType != ''">
  201. AND vg.group_type_ = #{groupType}
  202. </if>
  203. </where>
  204. </sql>
  205. <select id="findAllByOrgan" resultMap="VipGroup">
  206. SELECT
  207. vg.*,
  208. vga.name_ vip_group_activity_name_,
  209. su.real_name_ username_,
  210. vgc.name_ vip_group_category_name_
  211. FROM
  212. vip_group vg
  213. LEFT JOIN sys_user su ON vg.user_id_=su.id_
  214. LEFT JOIN vip_group_activity vga ON vg.vip_group_activity_id_=vga.id_
  215. LEFT JOIN vip_group_category vgc ON vgc.id_=vg.vip_group_category_id_
  216. <include refid="vipGroupQueryCondition"/>
  217. ORDER BY vg.id_ DESC
  218. <include refid="global.limit"/>
  219. </select>
  220. <select id="countVipGroupByOrgan" resultType="int">
  221. SELECT
  222. count(id_)
  223. FROM
  224. vip_group vg
  225. <include refid="vipGroupQueryCondition"/>
  226. </select>
  227. <!-- 向数据库增加一条记录 -->
  228. <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.VipGroup" useGeneratedKeys="true" keyColumn="id"
  229. keyProperty="id">
  230. INSERT INTO vip_group
  231. (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,
  232. update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,
  233. name_,organ_id_list_,vip_group_activity_id_,group_status_,online_classes_unit_price_,offline_classes_unit_price_,
  234. total_price_,give_teach_mode_,vip_group_category_id_,organ_id_,stop_reason_,memo_,audit_status_,courses_start_date,
  235. course_schedules_json_,student_id_list_,tenant_id_, group_type_, live_config_json_,original_total_price_)
  236. VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},
  237. #{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{name},#{organIdList},#{vipGroupActivityId},
  238. #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},
  239. #{totalPrice},#{giveTeachMode},#{vipGroupCategoryId},#{organId},#{stopReason},#{memo},
  240. #{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{courseStartDate},#{courseSchedulesJson},#{studentIdList},#{tenantId},
  241. #{groupType}, #{liveConfigJson},#{originalTotalPrice})
  242. </insert>
  243. <!-- 根据主键查询一条记录 -->
  244. <update id="update" parameterType="com.ym.mec.biz.dal.entity.VipGroup">
  245. UPDATE vip_group
  246. <set>
  247. <if test="courseStartDate != null">
  248. courses_start_date = #{courseStartDate},
  249. </if>
  250. <if test="paymentExpireDate != null">
  251. payment_expire_date_ = #{paymentExpireDate},
  252. </if>
  253. <if test="userId != null">
  254. user_id_ = #{userId},
  255. </if>
  256. <if test="offlineClassesNum != null">
  257. offline_classes_num_ = #{offlineClassesNum},
  258. </if>
  259. <if test="onlineClassesNum != null">
  260. online_classes_num_ = #{onlineClassesNum},
  261. </if>
  262. update_time_ = NOW(),
  263. <if test="singleClassMinutes != null">
  264. single_class_minutes_ = #{singleClassMinutes},
  265. </if>
  266. <if test="teacherSchoolId != null">
  267. teacher_school_id_ = #{teacherSchoolId},
  268. </if>
  269. <if test="coursesExpireDate != null">
  270. courses_expire_date_ = #{coursesExpireDate},
  271. </if>
  272. <if test="registrationStartTime != null">
  273. registration_start_time_ = #{registrationStartTime},
  274. </if>
  275. <if test="organIdList!=null">
  276. organ_id_list_=#{organIdList},
  277. </if>
  278. <if test="auditStatus != null">
  279. audit_status_ = #{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  280. </if>
  281. <if test="vipGroupActivityId != null">
  282. vip_group_activity_id_ = #{vipGroupActivityId},
  283. </if>
  284. <if test="status != null">
  285. group_status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  286. </if>
  287. <if test="onlineClassesUnitPrice != null">
  288. online_classes_unit_price_ = #{onlineClassesUnitPrice},
  289. </if>
  290. <if test="offlineClassesUnitPrice != null">
  291. offline_classes_unit_price_ = #{offlineClassesUnitPrice},
  292. </if>
  293. <if test="totalPrice != null">
  294. total_price_ = #{totalPrice},
  295. </if>
  296. <if test="giveTeachMode!=null">
  297. give_teach_mode_=#{giveTeachMode},
  298. </if>
  299. <if test="organId!=null">
  300. organ_id_=#{organId},
  301. </if>
  302. <if test="stopReason!=null">
  303. stop_reason_=#{stopReason},
  304. </if>
  305. <if test="memo!=null">
  306. memo_=#{memo},
  307. </if>
  308. <if test="courseSchedulesJson!=null">
  309. course_schedules_json_=#{courseSchedulesJson},
  310. </if>
  311. <if test="studentIdList!=null">
  312. student_id_list_=#{studentIdList},
  313. </if>
  314. <if test="educationalTeacherId!=null">
  315. educational_teacher_id_=#{educationalTeacherId},
  316. </if>
  317. <if test="originalTotalPrice != null">
  318. original_total_price_=#{originalTotalPrice},
  319. </if>
  320. </set>
  321. WHERE id_ = #{id} and tenant_id_ = #{tenantId}
  322. </update>
  323. <!-- 根据主键删除一条记录 -->
  324. <delete id="delete">
  325. DELETE
  326. FROM vip_group
  327. WHERE id_ = #{id}
  328. </delete>
  329. <!-- 分页查询 -->
  330. <select id="queryPage" resultMap="VipGroup" parameterType="map">
  331. SELECT * FROM vip_group where tenant_id_ = #{tenantId} ORDER BY id_
  332. <include refid="global.limit"/>
  333. </select>
  334. <!-- 查询当前表的总记录数 -->
  335. <select id="queryCount" resultType="int">
  336. SELECT COUNT(*)
  337. FROM vip_group where tenant_id_ = #{tenantId}
  338. </select>
  339. <select id="getLockVipGroup" resultMap="VipGroup">
  340. SELECT *
  341. FROM vip_group
  342. WHERE id_ = #{vipGroupId} FOR
  343. UPDATE
  344. </select>
  345. <sql id="studentVipGroupQueryCondition">
  346. <where>
  347. vg.audit_status_='PASS'
  348. AND vg.group_status_ = 1 AND vg.group_type_ = 'VIP'
  349. AND vg.courses_expire_date_ &gt;= DATE_FORMAT(NOW(),'%Y%m%d')
  350. AND vg.registration_start_time_ &lt;= NOW()
  351. AND vg.courses_start_date &gt; NOW()
  352. AND (select count(1) from class_group_student_mapper where status_ != 'QUIT'
  353. and music_group_id_ = vg.id_ and group_type_ = vg.group_type_ and user_id_ = #{userId}) = 0
  354. AND IF(vg.student_id_list_ IS NULL, vg.organ_id_ = #{organId}, FIND_IN_SET(#{userId},
  355. vg.student_id_list_))
  356. <if test="expireFlag != null and expireFlag == true">
  357. AND vg.payment_expire_date_ >= NOW()
  358. </if>
  359. <if test="subjectId!=null">
  360. AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)
  361. </if>
  362. <if test="subjectId!=null">
  363. AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)
  364. </if>
  365. <if test="categoryId!=null">
  366. AND FIND_IN_SET(vg.vip_group_category_id_,#{categoryId})
  367. </if>
  368. <if test="classType!=null and classType.toString()=='0'.toString()">
  369. AND vg.offline_classes_num_>0
  370. </if>
  371. <if test="classType!=null and classType.toString()=='1'.toString()">
  372. AND vg.online_classes_num_>0
  373. </if>
  374. <if test="search != null and search != ''">
  375. AND vg.name_ like concat('%',#{search},'%')
  376. </if>
  377. <if test="groupType != null and groupType != ''">
  378. AND vg.group_type_ = #{groupType}
  379. </if>
  380. </where>
  381. </sql>
  382. <sql id="studentLiveGroupQueryCondition">
  383. <where>
  384. vg.audit_status_='PASS'
  385. AND vg.group_status_ = 1 AND vg.group_type_ = 'LIVE'
  386. AND vg.courses_expire_date_ &gt;= DATE_FORMAT(NOW(),'%Y%m%d')
  387. AND vg.registration_start_time_ &lt;= NOW()
  388. AND vg.courses_start_date &gt; NOW()
  389. AND (select count(1) from class_group_student_mapper where status_ != 'QUIT'
  390. and music_group_id_ = vg.id_ and group_type_ = vg.group_type_ and user_id_ = #{userId}) = 0
  391. <if test="expireFlag != null and expireFlag == true">
  392. AND vg.payment_expire_date_ >= NOW()
  393. </if>
  394. <if test="organId != null">
  395. AND FIND_IN_SET(#{organId},vg.organ_id_list_)
  396. </if>
  397. <if test="subjectId!=null">
  398. AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)
  399. </if>
  400. <if test="subjectId!=null">
  401. AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)
  402. </if>
  403. <if test="categoryId!=null">
  404. AND FIND_IN_SET(vg.vip_group_category_id_,#{categoryId})
  405. </if>
  406. <if test="classType!=null and classType.toString()=='0'.toString()">
  407. AND vg.offline_classes_num_>0
  408. </if>
  409. <if test="classType!=null and classType.toString()=='1'.toString()">
  410. AND vg.online_classes_num_>0
  411. </if>
  412. <if test="search != null and search != ''">
  413. AND vg.name_ like concat('%',#{search},'%')
  414. </if>
  415. <if test="groupType != null and groupType != ''">
  416. AND vg.group_type_ = #{groupType}
  417. </if>
  418. </where>
  419. </sql>
  420. <select id="findVipGroups" resultMap="studentVipGroup">
  421. SELECT
  422. vg.id_,
  423. vg.name_,
  424. vg.single_class_minutes_,
  425. vg.payment_expire_date_,
  426. vg.courses_expire_date_,
  427. vg.courses_start_date,
  428. vg.online_classes_num_,
  429. vg.offline_classes_num_,
  430. vg.original_total_price_,
  431. vg.total_price_,
  432. cg.expect_student_num_,
  433. cg.student_num_,
  434. su.real_name_ teacher_name_,
  435. su.avatar_,
  436. t.introduction_,
  437. vga.type_,
  438. vgc.name_ category_name_,vg.create_time_,
  439. vg.group_type_
  440. FROM
  441. vip_group vg
  442. LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_ = vg.group_type_
  443. LEFT JOIN teacher t ON vg.user_id_=t.id_
  444. LEFT JOIN sys_user su ON vg.user_id_=su.id_
  445. LEFT JOIN vip_group_activity vga ON vg.vip_group_activity_id_=vga.id_
  446. LEFT JOIN vip_group_category vgc ON vg.vip_group_category_id_=vgc.id_
  447. <include refid="studentVipGroupQueryCondition"/>
  448. ORDER BY vg.id_ DESC
  449. <include refid="global.limit"/>
  450. </select>
  451. <select id="findLiveGroups" resultMap="studentVipGroup">
  452. SELECT
  453. vg.id_,
  454. vg.name_,
  455. vg.single_class_minutes_,
  456. vg.payment_expire_date_,
  457. vg.courses_expire_date_,
  458. vg.courses_start_date,
  459. vg.online_classes_num_,
  460. vg.offline_classes_num_,
  461. vg.total_price_,
  462. vg.original_total_price_,
  463. cg.expect_student_num_,
  464. cg.student_num_,
  465. su.real_name_ teacher_name_,
  466. su.avatar_,
  467. t.introduction_,
  468. vgc.name_ category_name_,vg.create_time_,
  469. vg.group_type_
  470. FROM
  471. vip_group vg
  472. LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_ = vg.group_type_
  473. LEFT JOIN teacher t ON vg.user_id_=t.id_
  474. LEFT JOIN sys_user su ON vg.user_id_=su.id_
  475. LEFT JOIN vip_group_category vgc ON vg.vip_group_category_id_=vgc.id_
  476. <include refid="studentLiveGroupQueryCondition"/>
  477. ORDER BY vg.id_ DESC
  478. <include refid="global.limit"/>
  479. </select>
  480. <select id="countVipGorups" resultType="int">
  481. SELECT
  482. count(*)
  483. FROM
  484. vip_group vg
  485. LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_ = 'VIP'
  486. LEFT JOIN vip_group_category vgc ON vg.vip_group_category_id_=vgc.id_
  487. <include refid="studentVipGroupQueryCondition"/>
  488. </select>
  489. <select id="getVipGroupBaseInfo" resultMap="vipGroupManageDetailDto">
  490. SELECT vg.*,
  491. vga.name_ vip_group_activity_name_,
  492. su.real_name_ username_,
  493. cg.student_num_,
  494. cg.subject_id_list_,
  495. cg.total_class_times_,
  496. cg.current_class_times_,
  497. vgc.name_ category_name_,
  498. s.name_ teacher_school_name_,
  499. vgc.music_theory_
  500. FROM vip_group vg
  501. LEFT JOIN sys_user su ON vg.user_id_ = su.id_
  502. LEFT JOIN class_group cg ON vg.id_ = cg.music_group_id_ AND cg.group_type_ = 'VIP'
  503. LEFT JOIN vip_group_activity vga ON vg.vip_group_activity_id_ = vga.id_
  504. LEFT JOIN vip_group_category vgc ON vg.vip_group_category_id_ = vgc.id_
  505. LEFT JOIN school s ON vg.teacher_school_id_ = s.id_
  506. WHERE vg.id_ = #{vipGroupId}
  507. </select>
  508. <sql id="vipGroupAttendanceQueryCondition">
  509. <where>
  510. vg.tenant_id_ = #{tenantId}
  511. <if test="vipGroupId!=null">
  512. and vg.id_=#{vipGroupId}
  513. </if>
  514. <if test="startTime != null">
  515. and CONCAT(cs.class_date_,' ',cs.end_class_time_) &gt; #{startTime}
  516. </if>
  517. <if test="endTime != null">
  518. and CONCAT(cs.class_date_,' ',cs.end_class_time_) &lt; #{endTime}
  519. </if>
  520. <if test="status != null">
  521. and cs.status_ = #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
  522. </if>
  523. <if test="complaintStatus != null">
  524. and cs.complaint_status_ = #{complaintStatus}
  525. </if>
  526. </where>
  527. </sql>
  528. <select id="findVipGroupAttendances" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
  529. SELECT
  530. cs.*
  531. FROM
  532. vip_group vg
  533. LEFT JOIN teacher_attendance ta ON vg.id_=ta.music_group_id_ AND ta.group_type_ = 'VIP'
  534. LEFT JOIN course_schedule cs ON ta.course_schedule_id_=cs.id_
  535. <include refid="vipGroupAttendanceQueryCondition"/>
  536. ORDER BY ta.id_
  537. <include refid="global.limit"/>
  538. </select>
  539. <select id="countVipGroupAttendance" resultType="int">
  540. SELECT
  541. count(*)
  542. FROM
  543. vip_group vg
  544. LEFT JOIN teacher_attendance ta ON vg.id_=ta.music_group_id_ AND ta.group_type_ = 'VIP'
  545. LEFT JOIN course_schedule cs ON ta.course_schedule_id_=cs.id_
  546. <include refid="vipGroupAttendanceQueryCondition"/>
  547. ORDER BY ta.id_
  548. </select>
  549. <select id="getVipGroupDetail" resultMap="studentVipGroupDetailDto">
  550. SELECT vg.*,
  551. cg.total_class_times_,
  552. cg.expect_student_num_,
  553. cg.student_num_,
  554. su.real_name_ teacher_name_,
  555. su.avatar_,
  556. t.introduction_,
  557. s.name_ address_,
  558. cs.id_ course_id_,
  559. cs.class_group_id_,
  560. cs.status_,
  561. cs.subsidy_,
  562. cs.class_date_,
  563. CONCAT(cs.class_date_, ' ', cs.start_class_time_) start_class_time_,
  564. CONCAT(cs.class_date_, ' ', cs.end_class_time_) end_class_time_,
  565. cs.teacher_id_,
  566. cs.actual_teacher_id_,
  567. cs.create_time_,
  568. cs.update_time_,
  569. cs.teach_mode_,
  570. cs.type_,
  571. cs.name_
  572. FROM vip_group vg
  573. LEFT JOIN class_group cg ON vg.id_ = cg.music_group_id_ AND cg.group_type_ = 'VIP'
  574. LEFT JOIN course_schedule cs ON cg.id_ = cs.class_group_id_
  575. LEFT JOIN school s ON vg.teacher_school_id_ = s.id_
  576. LEFT JOIN teacher t ON vg.user_id_ = t.id_
  577. LEFT JOIN sys_user su ON vg.user_id_ = su.id_
  578. WHERE vg.id_ = #{vipGroupId}
  579. ORDER BY start_class_time_
  580. </select>
  581. <select id="countSurplusClassTimes" resultType="java.util.Map">
  582. SELECT cs.teach_mode_ as 'key',
  583. COUNT(cs.id_) as 'value'
  584. FROM course_schedule cs
  585. WHERE cs.status_ = "NOT_START"
  586. AND cs.type_ = 'VIP'
  587. AND cs.music_group_id_ = #{vipGroupId}
  588. AND cs.group_type_ = 'VIP'
  589. GROUP BY cs.teach_mode_
  590. </select>
  591. <resultMap id="vipGroupStudentDto" type="com.ym.mec.biz.dal.dto.VipGroupStudentDto">
  592. <result column="user_id_" property="id"/>
  593. <result column="username_" property="userName"/>
  594. <result column="organ_id_" property="organId"/>
  595. <result column="subject_id_list_" property="organId"/>
  596. <result column="phone_" property="phone"/>
  597. <result column="total_class_times_" property="totalClassTimes"/>
  598. <result column="current_class_times_" property="currentClassTimes"/>
  599. <result column="course_balance_" property="courseSalary"/>
  600. <result column="create_time_" property="applyDate"/>
  601. <result column="update_time_" property="refundDate"/>
  602. <result column="student_status_" property="studentStatus"/>
  603. </resultMap>
  604. <select id="findVipGroupStudents" resultMap="vipGroupStudentDto">
  605. SELECT
  606. cgsm.user_id_,
  607. s.subject_id_list_,
  608. cg.total_class_times_,
  609. cg.current_class_times_,
  610. suaa.course_balance_,
  611. cgsm.create_time_,
  612. cgsm.update_time_,
  613. CASE cgsm.status_
  614. WHEN 'QUIT' THEN 1
  615. WHEN 'QUIT_SCHOOL' THEN 3
  616. ELSE 0
  617. END student_status_
  618. FROM
  619. class_group cg
  620. LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
  621. LEFT JOIN sys_user_cash_account suaa ON cgsm.user_id_=suaa.user_id_
  622. left join student s ON s.user_id_ = cgsm.user_id_
  623. WHERE cg.music_group_id_=#{vipGroupId}
  624. <if test="groupType != null">
  625. AND cg.group_type_= #{groupType}
  626. </if>
  627. AND cgsm.user_id_ IS NOT NULL
  628. ORDER BY cgsm.user_id_
  629. <include refid="global.limit"/>
  630. </select>
  631. <select id="findHaveCourseBalanceStudents" resultMap="vipGroupStudentDto">
  632. SELECT
  633. su.id_,
  634. su.username_,
  635. su.phone_,
  636. suca.course_balance_,
  637. suca.balance_ balance,
  638. (suca.course_balance_+suca.balance_) allBalance
  639. FROM
  640. sys_user_cash_account suca
  641. LEFT JOIN sys_user su ON suca.user_id_=su.id_
  642. WHERE
  643. suca.tenant_id_ = #{tenantId}
  644. AND su.user_type_ LIKE '%STUDENT%'
  645. # suca.course_balance_ >0
  646. <if test="search!=null and search!=''">
  647. AND (su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
  648. </if>
  649. <if test="organIds!=null and organIds.size()>0">
  650. AND su.organ_id_ IN
  651. <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
  652. #{organId}
  653. </foreach>
  654. </if>
  655. ORDER BY suca.course_balance_ DESC
  656. <include refid="global.limit"/>
  657. </select>
  658. <select id="countHaveCourseBalanceStudentNum" resultType="int">
  659. SELECT
  660. COUNT(1)
  661. FROM
  662. sys_user_cash_account suca
  663. LEFT JOIN sys_user su ON suca.user_id_=su.id_
  664. WHERE suca.tenant_id_ = #{tenantId}
  665. AND su.user_type_ LIKE '%STUDENT%'
  666. # suca.course_balance_ > 0
  667. <if test="search!=null and search!=''">
  668. AND (su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
  669. </if>
  670. <if test="organIds!=null and organIds.size()>0">
  671. AND su.organ_id_ IN
  672. <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
  673. #{organId}
  674. </foreach>
  675. </if>
  676. </select>
  677. <select id="countVipGroupStudents" resultType="int">
  678. SELECT count(*)
  679. FROM class_group cg
  680. LEFT JOIN class_group_student_mapper cgsm ON cg.id_ = cgsm.class_group_id_
  681. WHERE cg.music_group_id_ = #{vipGroupId}
  682. AND cg.group_type_ = #{groupType}
  683. </select>
  684. <resultMap id="teachingRecord" type="com.ym.mec.biz.dal.dto.VipGroupCourseSchduleRecordDto">
  685. <result column="id_" property="id"/>
  686. <result column="start_class_time_" property="startClassTime"/>
  687. <result column="end_class_time_" property="endClassTime"/>
  688. <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  689. <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  690. <result column="give_teach_mode_" property="giveTeachMode"
  691. typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  692. <result column="is_salary_" property="isSalary" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  693. <result column="student_num_" property="attendanceNum"/>
  694. <result column="school_name_" property="schoolName"/>
  695. <result column="schoole_id_" property="schooleId"/>
  696. <result column="sign_in_status_" property="signInStatus"/>
  697. <result column="sign_out_status_" property="signOutStatus"/>
  698. <result column="sign_in_time_" property="signInTime"/>
  699. <result column="sign_out_time_" property="signOutTime"/>
  700. </resultMap>
  701. <sql id="teachingRecordQueryCondition">
  702. <where>
  703. cs.music_group_id_=#{vipGroupId}
  704. <if test="groupType != null and groupType != ''">
  705. AND cs.group_type_= #{groupType}
  706. </if>
  707. <if test="startTime!=null and endTime!=null">
  708. AND (cs.class_date_ BETWEEN #{startTime} AND #{endTime})
  709. </if>
  710. <if test="teachMode!=null and teachMode!=''">
  711. AND cs.teach_mode_=#{teachMode}
  712. </if>
  713. <if test="status!=null and status!=''">
  714. AND cs.status_=#{status}
  715. </if>
  716. </where>
  717. </sql>
  718. <select id="findTeachingRecord" resultMap="teachingRecord">
  719. SELECT
  720. cs.id_,
  721. CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
  722. CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
  723. cs.status_,
  724. cs.teach_mode_,
  725. s.name_ school_name_,
  726. csts.actual_salary_ IS NOT NULL is_salary_,
  727. cs.schoole_id_,
  728. IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_,
  729. IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_,
  730. ta.sign_in_time_,
  731. ta.sign_out_time_
  732. FROM
  733. course_schedule cs
  734. LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
  735. left join school s on cs.schoole_id_ = s.id_
  736. LEFT JOIN teacher_attendance ta ON cs.id_ = ta.course_schedule_id_ AND ta.teacher_id_ = cs.actual_teacher_id_
  737. <include refid="teachingRecordQueryCondition"/>
  738. ORDER BY start_class_time_
  739. <include refid="global.limit"/>
  740. </select>
  741. <select id="countTeachingRecord" resultType="int">
  742. SELECT
  743. COUNT(*)
  744. FROM
  745. course_schedule cs
  746. <include refid="teachingRecordQueryCondition"/>
  747. </select>
  748. <select id="getClassTimes" resultType="com.ym.mec.biz.dal.dto.TeachingRecordBaseInfo">
  749. SELECT cg.total_class_times_ totalClassTimes,
  750. cg.current_class_times_ currentClassTimes
  751. FROM class_group cg
  752. WHERE cg.music_group_id_ = #{vipGroupId}
  753. </select>
  754. <select id="countIsSalaryNum" resultType="int">
  755. SELECT COUNT(*)
  756. FROM course_schedule cs
  757. LEFT JOIN course_schedule_teacher_salary csts ON cs.id_ = csts.course_schedule_id_
  758. WHERE cs.music_group_id_ = #{vipGroupId}
  759. AND cs.group_type_ = 'VIP'
  760. AND csts.settlement_time_ IS NOT NULL
  761. </select>
  762. <select id="countComplaintsNum" resultType="java.lang.Integer">
  763. SELECT COUNT(*)
  764. FROM course_schedule cs
  765. LEFT JOIN course_schedule_complaints csc ON cs.id_ = csc.course_schedule_id_
  766. WHERE cs.music_group_id_ = #{vipGroupId}
  767. AND cs.group_type_ = 'VIP'
  768. AND csc.course_schedule_id_ IS NOT NULL
  769. AND csc.score_ &lt;= 2
  770. </select>
  771. <select id="getVipGroupSalaryInfo" resultType="com.ym.mec.biz.dal.dto.VipGroupSalaryBaseInfo">
  772. SELECT SUM(csts.expect_salary_) expectTotalSalary,
  773. SUM(csts.actual_salary_) totalSalary
  774. FROM vip_group vg
  775. LEFT JOIN course_schedule cs ON vg.id_ = cs.music_group_id_ AND cs.group_type_ = vg.group_type_
  776. LEFT JOIN course_schedule_teacher_salary csts ON cs.id_ = csts.course_schedule_id_
  777. WHERE vg.id_ = #{vipGroupId}
  778. AND cs.id_ IS NOT NULL
  779. </select>
  780. <select id="countVipGroupDeductionNum" resultType="int">
  781. SELECT COUNT(csts.id_)
  782. FROM vip_group vg
  783. LEFT JOIN course_schedule cs ON vg.id_ = cs.music_group_id_ AND cs.group_type_ = vg.group_type_
  784. LEFT JOIN course_schedule_teacher_salary csts ON cs.id_ = csts.course_schedule_id_
  785. WHERE vg.id_ = #{vipGroupId}
  786. AND cs.id_ != NULL
  787. AND csts.settlement_time_ != NULL
  788. AND csts.actual_salary_ &lt; csts.expect_salary_
  789. </select>
  790. <select id="countSurplusCourseFee" resultType="map">
  791. SELECT cssp.user_id_ as 'key',
  792. SUM(cssp.expect_price_) as 'value'
  793. FROM vip_group vg
  794. LEFT JOIN course_schedule cs ON vg.id_ = cs.music_group_id_ AND cs.group_type_ = vg.group_type_
  795. LEFT JOIN course_schedule_student_payment cssp ON cs.id_ = cssp.course_schedule_id_
  796. WHERE vg.id_ = #{vipGroupId}
  797. AND cs.status_ = 'NOT_START'
  798. GROUP BY cssp.user_id_
  799. </select>
  800. <select id="countTeacherVipGroups" resultType="int">
  801. SELECT COUNT(vg.id_)
  802. FROM vip_group vg
  803. WHERE vg.user_id_ = #{teacherId}
  804. AND vg.group_status_ != 3
  805. </select>
  806. <select id="countTeacherVipClass" resultType="java.lang.Integer">
  807. SELECT COUNT(DISTINCT vg.id_)
  808. FROM vip_group vg
  809. LEFT JOIN class_group cg ON cg.music_group_id_ = vg.id_ AND cg.group_type_ = vg.group_type_
  810. LEFT JOIN course_schedule cs ON cs.class_group_id_ = cg.id_
  811. WHERE cs.actual_teacher_id_ = #{teacherId}
  812. AND cs.type_ = 'VIP'
  813. AND cg.del_flag_ = 0
  814. </select>
  815. <resultMap type="com.ym.mec.biz.dal.dto.TeacherVipClassInfoDto" id="getTeacherVipClassMap">
  816. <result column="vip_group_id_" property="vipClassId"/>
  817. <result column="student_num_" property="studentNum"/>
  818. <result column="online_classes_unit_price_" property="onlineClassesUnitPrice"/>
  819. <result column="offline_classes_unit_price_" property="offlineClassesUnitPrice"/>
  820. <result column="class_group_id_" property="classGroupId"/>
  821. <result column="courses_expire_date_" property="coursesExpireDate"/>
  822. <result column="payment_expire_date_" property="paymentExpireDate"/>
  823. <result column="create_time_" property="createDate"/>
  824. <result column="current_class_times_" property="currentClassTimes"/>
  825. <result column="total_class_times_" property="totalClassTimes"/>
  826. <result column="vip_group_name_" property="vipClassName"/>
  827. <result column="audit_status_" property="auditStatus"
  828. typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  829. <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  830. <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  831. <result column="vip_group_activity_id_" property="activityId"/>
  832. </resultMap>
  833. <select id="getTeacherVipClass" resultMap="getTeacherVipClassMap">
  834. SELECT vg.id_ vip_group_id_,vg.name_ vip_group_name_,vg.group_status_,vg.audit_status_,vg.create_time_,
  835. vg.payment_expire_date_,vg.courses_expire_date_,vg.online_classes_unit_price_,vg.offline_classes_unit_price_,
  836. cg.total_class_times_,cg.current_class_times_,cg.id_ class_group_id_,cg.student_num_,vg.vip_group_activity_id_
  837. FROM vip_group vg
  838. LEFT JOIN class_group cg ON vg.id_ = cg.music_group_id_ AND cg.group_type_ = vg.group_type_
  839. LEFT JOIN course_schedule cs ON cs.class_group_id_ = cg.id_
  840. WHERE cs.actual_teacher_id_ = #{teacherId} AND cs.type_ = 'VIP' AND cg.del_flag_ = 0 GROUP BY vg.id_,cg.id_
  841. <include refid="global.limit"/>
  842. </select>
  843. <select id="querySchoolByUserId" resultMap="School">
  844. SELECT *
  845. from school
  846. where user_id_ = #{userId}
  847. or user_id_ is null
  848. </select>
  849. <select id="findByCourseSchedule" resultMap="VipGroup">
  850. SELECT vg.*
  851. FROM vip_group vg
  852. LEFT JOIN course_schedule cs ON vg.id_ = cs.music_group_id_ AND cs.group_type_ = vg.group_type_
  853. WHERE cs.id_ = #{courseScheduleId}
  854. </select>
  855. <select id="queryVipGroupNum" resultType="map">
  856. select count(*) total,sum(case when group_status_ = 2 then 1 else 0 end) applying_num_,sum(case when
  857. group_status_ = 4 then 1 else 0 end) finished_num_ from vip_group
  858. where organ_id_ not in (36,38) and tenant_id_ = #{tenantId}
  859. <if test="organId != null">
  860. and FIND_IN_SET(organ_id_,#{organId})
  861. </if>
  862. </select>
  863. <select id="queryCurrentMonthCoursesNum" resultType="int">
  864. select count(cs.id_) from course_schedule cs left join vip_group vg on cs.music_group_id_ = vg.id_ where
  865. cs.type_ in ('VIP')
  866. and DATE_FORMAT(cs.class_date_, '%Y%m' ) = DATE_FORMAT(CURDATE() , '%Y%m') and (cs.del_flag_ = 0 or cs.del_flag_
  867. is null) and vg.organ_id_ not in (36,38) and vg.tenant_id_ = #{tenantId}
  868. <if test="organId != null">
  869. AND FIND_IN_SET(vg.organ_id_,#{organId})
  870. </if>
  871. </select>
  872. <select id="findNoCreateSuccessVipGroup" resultMap="VipGroup">
  873. SELECT *
  874. FROM vip_group
  875. WHERE (payment_expire_date_ &lt; DATE_FORMAT(NOW(), '%Y-%m-%d')
  876. OR courses_start_date &lt; NOW())
  877. AND group_status_ = 1
  878. <if test="tenantId != null">
  879. and tenant_id_ = #{tenantId}
  880. </if>
  881. <if test="groupType != null and groupType != ''">
  882. and group_type_ = #{groupType}
  883. </if>
  884. </select>
  885. <select id="countStudentPaymentNum" resultType="int">
  886. SELECT COUNT(*)
  887. FROM course_schedule_student_payment cssp
  888. WHERE cssp.settlement_time_ IS NOT NULL
  889. AND cssp.class_group_id_ = #{classGroupId}
  890. </select>
  891. <select id="countStudentPaymentFee" resultType="java.math.BigDecimal">
  892. SELECT SUM(actual_price_)
  893. FROM course_schedule_student_payment cssp
  894. WHERE cssp.settlement_time_ IS NOT NULL
  895. AND cssp.class_group_id_ = #{classGroupId}
  896. </select>
  897. <select id="queryByIds" resultMap="VipGroup" parameterType="string">
  898. select *
  899. from vip_group
  900. where FIND_IN_SET(id_, #{idList})
  901. </select>
  902. <resultMap id="VipBuyResult" type="com.ym.mec.biz.dal.dto.VipBuyResultDto">
  903. <result property="vipGroupId" column="id_"/>
  904. <result property="vipGroupName" column="name_"/>
  905. <result property="teacherName" column="username_"/>
  906. <result property="eduTeacherName" column="eduTeacherName"/>
  907. <result property="classTimes" column="total_class_times_"/>
  908. <result property="startClassTime" column="courses_start_date"/>
  909. <result property="endClassTime" column="courses_expire_date_"/>
  910. <result property="groupType" column="group_type_"/>
  911. </resultMap>
  912. <select id="getVipBuyResultInfo" resultMap="VipBuyResult">
  913. SELECT vg.id_,
  914. vg.name_,
  915. vg.courses_start_date,
  916. vg.courses_expire_date_,
  917. cg.total_class_times_,
  918. su.real_name_ username_,
  919. vg.group_type_
  920. FROM vip_group vg
  921. LEFT JOIN class_group cg ON vg.id_ = cg.music_group_id_ AND cg.group_type_ = vg.group_type_
  922. LEFT JOIN sys_user su ON vg.user_id_ = su.id_
  923. WHERE vg.id_ = #{vipGroupId}
  924. </select>
  925. <update id="batchUpdate" parameterType="java.util.List">
  926. <foreach collection="vipGroupList" item="item" index="index" open="" close="" separator=";">
  927. UPDATE vip_group
  928. <set>
  929. <if test="item.paymentExpireDate != null">
  930. payment_expire_date_ = #{item.paymentExpireDate},
  931. </if>
  932. <if test="item.userId != null">
  933. user_id_ = #{item.userId},
  934. </if>
  935. <if test="item.offlineClassesNum != null">
  936. offline_classes_num_ = #{item.offlineClassesNum},
  937. </if>
  938. <if test="item.onlineClassesNum != null">
  939. online_classes_num_ = #{item.onlineClassesNum},
  940. </if>
  941. <if test="item.updateTime != null">
  942. update_time_ = NOW(),
  943. </if>
  944. <if test="item.singleClassMinutes != null">
  945. single_class_minutes_ = #{item.singleClassMinutes},
  946. </if>
  947. <if test="item.teacherSchoolId != null">
  948. teacher_school_id_ = #{item.teacherSchoolId},
  949. </if>
  950. <if test="item.coursesExpireDate != null">
  951. courses_expire_date_ = #{item.coursesExpireDate},
  952. </if>
  953. <if test="item.registrationStartTime != null">
  954. registration_start_time_ = #{item.registrationStartTime},
  955. </if>
  956. <if test="item.organIdList!=null">
  957. organ_id_list_=#{item.organIdList},
  958. </if>
  959. <if test="item.auditStatus != null">
  960. audit_status_ = #{item.auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  961. </if>
  962. <if test="item.organIdList != null">
  963. organ_id_list_ = #{item.organIdList},
  964. </if>
  965. <if test="item.vipGroupActivityId != null">
  966. vip_group_activity_id_ = #{item.vipGroupActivityId},
  967. </if>
  968. <if test="item.status != null">
  969. group_status_ = #{item.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  970. </if>
  971. <if test="item.onlineClassesUnitPrice != null">
  972. online_classes_unit_price_ = #{item.onlineClassesUnitPrice},
  973. </if>
  974. <if test="item.offlineClassesUnitPrice != null">
  975. offline_classes_unit_price_ = #{item.offlineClassesUnitPrice},
  976. </if>
  977. <if test="item.totalPrice != null">
  978. total_price_ = #{item.totalPrice},
  979. </if>
  980. <if test="item.giveTeachMode!=null">
  981. give_teach_mode_=#{item.giveTeachMode},
  982. </if>
  983. <if test="item.organId!=null">
  984. organ_id_=#{item.organId},
  985. </if>
  986. <if test="item.stopReason!=null">
  987. stop_reason_=#{item.stopReason},
  988. </if>
  989. <if test="item.auditStatus!=null">
  990. audit_status_=#{item.auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  991. </if>
  992. <if test="item.courseSchedulesJson!=null">
  993. course_schedules_json_=#{item.courseSchedulesJson},
  994. </if>
  995. <if test="item.studentIdList!=null">
  996. student_id_list_=#{item.studentIdList},
  997. </if>
  998. </set>
  999. WHERE id_ = #{item.id} and tenant_id_ = #{item.tenantId}
  1000. </foreach>
  1001. </update>
  1002. <update id="updateStudentIdList">
  1003. update vip_group set student_id_list_ = CASE WHEN student_id_list_ IS NULL OR student_id_list_ = ''
  1004. THEN #{userId} ELSE CONCAT(student_id_list_,',',#{userId}) END,update_time_ = NOW()
  1005. where id_ = #{groupId}
  1006. </update>
  1007. <select id="queryRequiredOverList" resultMap="VipGroup">
  1008. SELECT
  1009. vg.*
  1010. FROM
  1011. vip_group vg
  1012. LEFT JOIN course_schedule cs ON cs.group_type_ = vg.group_type_ AND CONCAT(vg.id_, '') = cs.music_group_id_
  1013. WHERE
  1014. vg.group_status_ = 2
  1015. GROUP BY
  1016. vg.id_
  1017. HAVING COUNT( CASE WHEN cs.status_ != 'OVER' THEN 1 ELSE NULL END )&lt;=0
  1018. </select>
  1019. <select id="queryNormalStatusList" resultMap="VipGroup">
  1020. SELECT *
  1021. FROM vip_group
  1022. WHERE group_status_ = 0
  1023. </select>
  1024. <select id="findVipGroupInfo" resultMap="VipGroup">
  1025. SELECT vg.*, s.name_ subject_name_, s2.name_ school_name_,su.real_name_ educational_teacher_name_
  1026. FROM vip_group vg
  1027. LEFT JOIN class_group cg on vg.id_ = cg.music_group_id_
  1028. LEFT JOIN subject s on cg.subject_id_list_ = s.id_
  1029. LEFT JOIN school s2 on vg.teacher_school_id_ = s2.id_
  1030. LEFT JOIN sys_user su on vg.educational_teacher_id_ = su.id_
  1031. WHERE vg.id_ = #{id}
  1032. AND cg.id_ = #{classGroupId}
  1033. AND cg.group_type_ = 'VIP'
  1034. </select>
  1035. <select id="queryUserVipNames" resultType="java.util.Map">
  1036. SELECT cgsm.user_id_ 'key',GROUP_CONCAT(vg.name_)'value' FROM class_group_student_mapper cgsm
  1037. LEFT JOIN vip_group vg ON cgsm.music_group_id_ = vg.id_
  1038. WHERE vg.group_status_ IN (2,4,6) AND cgsm.group_type_='VIP' AND cgsm.user_id_ IN
  1039. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  1040. #{userId}
  1041. </foreach>
  1042. GROUP BY cgsm.user_id_
  1043. </select>
  1044. <select id="queryUserVipStatus" resultType="java.util.Map">
  1045. SELECT cgsm.user_id_ 'key',GROUP_CONCAT(CASE WHEN cgsm.status_ = 'NORMAL' THEN '在读'
  1046. WHEN cgsm.status_ = 'LEAVE' THEN '请假'
  1047. WHEN cgsm.status_ = 'QUIT' THEN '退班'
  1048. WHEN cgsm.status_ = 'QUIT_SCHOOL' THEN '休学' END) 'value'
  1049. FROM class_group_student_mapper cgsm
  1050. LEFT JOIN vip_group vg ON cgsm.music_group_id_ = vg.id_
  1051. WHERE vg.group_status_ IN (2,4,6) AND cgsm.group_type_='VIP' AND cgsm.user_id_ IN
  1052. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  1053. #{userId}
  1054. </foreach>
  1055. GROUP BY cgsm.user_id_
  1056. </select>
  1057. <select id="countUserRepeatVipGroupInCourseStartEndTime" resultType="int">
  1058. SELECT COUNT(id_)
  1059. FROM vip_group
  1060. WHERE user_id_ = #{userId}
  1061. AND courses_start_date = #{courseStartDate}
  1062. AND courses_expire_date_ = #{courseEndDate}
  1063. </select>
  1064. <select id="getGroupTeachers" resultMap="VipBuyResult">
  1065. SELECT vg.id_,t.real_name_ username_,et.real_name_ eduTeacherName FROM vip_group vg
  1066. LEFT JOIN sys_user t on vg.user_id_ = t.id_
  1067. LEFT JOIN sys_user et on vg.educational_teacher_id_ = et.id_
  1068. <where>
  1069. vg.tenant_id_ = #{tenantId}
  1070. <if test="groupIds != null">
  1071. AND vg.id_ IN
  1072. <foreach collection="groupIds" item="groupId" open="(" close=")" separator=",">
  1073. #{groupId}
  1074. </foreach>
  1075. </if>
  1076. </where>
  1077. </select>
  1078. <select id="getVipGroupByIds" resultMap="VipGroup">
  1079. SELECT * FROM vip_group WHERE id_ IN
  1080. <foreach collection="ids" item="id" open="(" close=")" separator=",">
  1081. #{id}
  1082. </foreach>
  1083. </select>
  1084. <select id="queryEduNameMapByCourseId" resultType="java.util.Map">
  1085. SELECT cs.id_ 'key',su.real_name_ 'value' FROM course_schedule cs
  1086. LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
  1087. LEFT JOIN sys_user su ON su.id_ = vg.educational_teacher_id_
  1088. WHERE cs.id_ IN
  1089. <foreach collection="courseIds" item="item" open="(" close=")" separator=",">
  1090. #{item}
  1091. </foreach>
  1092. AND vg.educational_teacher_id_ IS NOT NULL
  1093. </select>
  1094. <select id="countStudentUserActivityNum" resultType="int">
  1095. SELECT COUNT(DISTINCT vg.id_)
  1096. FROM vip_group vg
  1097. LEFT JOIN class_group_student_mapper cgsm ON vg.id_=cgsm.music_group_id_ AND cgsm.group_type_='VIP'
  1098. WHERE vg.vip_group_activity_id_=#{vipGroupActivityId}
  1099. AND ((vg.group_status_ NOT IN (3, 7) AND FIND_IN_SET(#{studentId}, vg.student_id_list_)) OR cgsm.user_id_=#{studentId});
  1100. </select>
  1101. <select id="countStudentUseingActivityNum" resultType="int">
  1102. SELECT COUNT(DISTINCT vg.id_)
  1103. FROM vip_group vg
  1104. LEFT JOIN class_group_student_mapper cgsm ON vg.id_=cgsm.music_group_id_ AND cgsm.group_type_='VIP'
  1105. LEFT JOIN class_group cg ON cgsm.class_group_id_=cg.id_
  1106. WHERE vg.vip_group_activity_id_=#{vipGroupActivityId}
  1107. AND cg.del_flag_!=1
  1108. AND cgsm.user_id_=#{studentId}
  1109. </select>
  1110. <!--获取课程人数-->
  1111. <select id="getCourseStudentNumsByGroupId" resultType="java.lang.Integer">
  1112. SELECT t2.student_num_ FROM vip_group t1 JOIN vip_group_category t2 ON (t1.vip_group_category_id_ = t2.id_) WHERE t1.id_ = #{groupId}
  1113. </select>
  1114. <!--获取课程人数-->
  1115. </mapper>