CourseGroupMapper.xml 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129
  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. <mapper namespace="com.yonge.cooleshow.biz.dal.dao.CourseGroupDao">
  4. <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.CourseGroup">
  5. <id column="id_" jdbcType="BIGINT" property="id"/>
  6. <result column="type_" jdbcType="VARCHAR" property="type"/>
  7. <result column="teacher_id_" jdbcType="INTEGER" property="teacherId"/>
  8. <result column="name_" jdbcType="VARCHAR" property="name"/>
  9. <result column="subject_id_" jdbcType="INTEGER" property="subjectId"/>
  10. <result column="single_course_minutes_" jdbcType="INTEGER" property="singleCourseMinutes"/>
  11. <result column="course_num_" jdbcType="INTEGER" property="courseNum"/>
  12. <result column="complete_course_num_" jdbcType="INTEGER" property="completeCourseNum"/>
  13. <result column="course_introduce_" jdbcType="VARCHAR" property="courseIntroduce"/>
  14. <result column="course_price_" jdbcType="VARCHAR" property="coursePrice"/>
  15. <result column="status_" jdbcType="VARCHAR" property="status"/>
  16. <result column="sales_start_date_" jdbcType="TIMESTAMP" property="salesStartDate"/>
  17. <result column="sales_end_date_" jdbcType="TIMESTAMP" property="salesEndDate"/>
  18. <result column="background_pic_" jdbcType="VARCHAR" property="backgroundPic"/>
  19. <result column="mix_student_num_" jdbcType="INTEGER" property="mixStudentNum"/>
  20. <result column="max_student_num_" jdbcType="INTEGER" property="maxStudentNum"/>
  21. <result column="course_start_time_" jdbcType="TIMESTAMP" property="courseStartTime"/>
  22. <result column="created_by_" jdbcType="INTEGER" property="createdBy"/>
  23. <result column="created_time_" jdbcType="TIMESTAMP" property="createdTime"/>
  24. <result column="updated_by_" jdbcType="INTEGER" property="updatedBy"/>
  25. <result column="updated_time_" jdbcType="TIMESTAMP" property="updatedTime"/>
  26. <result column="pre_student_num_" jdbcType="INTEGER" property="preStudentNum"/>
  27. <result column="im_group_id_" jdbcType="VARCHAR" property="imGroupId"/>
  28. <result column="reason_" jdbcType="VARCHAR" property="reason"/>
  29. <result column="course_plan_" jdbcType="VARCHAR" property="coursePlan"/>
  30. </resultMap>
  31. <sql id="Base_Column_List">
  32. id_
  33. , type_, teacher_id_, name_, subject_id_, single_course_minutes_, course_num_,
  34. complete_course_num_, course_introduce_, course_price_, status_, sales_start_date_,
  35. sales_end_date_, background_pic_, mix_student_num_,max_student_num_,pre_student_num_, im_group_id_,
  36. course_start_time_, created_by_, created_time_, updated_by_, updated_time_,reason_,course_plan_
  37. </sql>
  38. <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
  39. parameterType="com.yonge.cooleshow.biz.dal.entity.CourseGroup">
  40. insert into course_group(type_, teacher_id_, name_, subject_id_, single_course_minutes_, course_num_,
  41. complete_course_num_, course_introduce_, course_price_, status_, sales_start_date_, sales_end_date_, background_pic_,
  42. mix_student_num_,max_student_num_,pre_student_num_,im_group_id_, course_start_time_, created_by_, created_time_, updated_by_, updated_time_,reason_,course_plan_)
  43. values
  44. <foreach collection="entities" item="entity" separator=",">
  45. (#{entity.type}, #{entity.teacherId}, #{entity.name}, #{entity.subjectId}, #{entity.singleCourseMinutes},
  46. #{entity.courseNum}, #{entity.completeCourseNum}, #{entity.courseIntroduce}, #{entity.coursePrice}, #{entity.status},
  47. #{entity.salesStartDate}, #{entity.salesEndDate}, #{entity.backgroundPic}, #{entity.mixStudentNum},#{entity.maxStudentNum},
  48. #{entity.preStudentNum},#{entity.imGroupId},#{entity.courseStartTime}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updatedBy},
  49. #{entity.updatedTime},#{entity.reason},#{entity.coursePlan})
  50. </foreach>
  51. </insert>
  52. <select id="queryTeacherCourseGroup" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupVo">
  53. select distinct
  54. b.id_ as courseGroupId,
  55. b.name_ as courseGroupName,
  56. s.name_ as subjectName,
  57. b.teacher_id_ as teacherId,
  58. u.username_ as teacherName,
  59. b.course_start_time_ as courseStartTime,
  60. b.single_course_minutes_ as singleCourseMinutes,
  61. b.status_ as `status`,
  62. ifnull(b.pre_student_num_, 0) as studentCount,
  63. b.background_pic_ as backgroundPic,
  64. b.course_price_ as coursePrice,
  65. b.course_num_ as courseNum,
  66. u.avatar_ as avatar,
  67. b.sales_start_date_ as salesStartDate,
  68. b.sales_end_date_ as salesEndDate,
  69. b.mix_student_num_ as mixStudentNum,
  70. b.max_student_num_ as maxStudentNum,
  71. b.im_group_id_ as imGroupId,
  72. b.reason_ as reason,
  73. b.course_plan_ as coursePlan,
  74. b.course_introduce_ as courseIntroduce,
  75. 0 as existBuy
  76. from course_group as b
  77. left join subject as s on b.subject_id_ = s.id_
  78. left join sys_user as u on b.teacher_id_ = u.id_
  79. <where>
  80. u.del_flag_ = 0
  81. <if test="param.teacherId != null">
  82. and b.teacher_id_ = #{param.teacherId}
  83. </if>
  84. <if test="param.groupStatus != null">
  85. and b.status_ = #{param.groupStatus}
  86. </if>
  87. <if test="param.subjectId != null">
  88. AND b.subject_id_ = #{param.subjectId}
  89. </if>
  90. <if test="param.search != null and param.search !=''">
  91. and (
  92. u.username_ like concat('%',#{param.search},'%')
  93. or b.name_ like concat('%',#{param.search},'%')
  94. )
  95. </if>
  96. <if test="param.type != null and param.type != ''">
  97. and b.type_ = #{param.type}
  98. </if>
  99. </where>
  100. order by b.created_time_
  101. </select>
  102. <select id="queryStudentCourseGroup" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupVo">
  103. select distinct b.id_ as courseGroupId,
  104. b.name_ as courseGroupName,
  105. s.name_ as subjectName,
  106. b.teacher_id_ as teacherId,
  107. u.username_ as teacherName,
  108. b.course_start_time_ as courseStartTime,
  109. b.single_course_minutes_ as singleCourseMinutes,
  110. b.status_ as `status`,
  111. ifnull(b.pre_student_num_, 0) as studentCount,
  112. b.background_pic_ as backgroundPic,
  113. b.course_price_ as coursePrice,
  114. b.course_num_ as courseNum,
  115. u.avatar_ as avatar,
  116. b.sales_start_date_ as salesStartDate,
  117. b.sales_end_date_ as salesEndDate,
  118. b.mix_student_num_ as mixStudentNum,
  119. b.max_student_num_ as maxStudentNum,
  120. b.im_group_id_ as imGroupId,
  121. b.reason_ as reason,
  122. b.course_plan_ as coursePlan,
  123. b.course_introduce_ as courseIntroduce,
  124. if(y.status_ = 'PAID', 1, 0) as existBuy
  125. from course_group as b
  126. left join subject as s on b.subject_id_ = s.id_
  127. left join sys_user as u on b.teacher_id_ = u.id_
  128. left join
  129. (select x.user_id_, x.course_group_id_, o.status_
  130. from course_schedule_student_payment as x
  131. left join user_order as o on x.order_no_ = o.order_no_ and x.user_id_ = o.user_id_
  132. left join user_order_detail as d on d.order_no_ = x.order_no_
  133. where x.user_id_ = #{param.studentId}) as y on b.id_ = y.course_group_id_
  134. <where>
  135. u.del_flag_ = 0
  136. <if test="param.teacherId != null">
  137. and b.teacher_id_ = #{param.teacherId}
  138. </if>
  139. <if test="param.groupStatus != null">
  140. and b.status_ = #{param.groupStatus}
  141. </if>
  142. <if test="param.subjectId != null">
  143. AND b.subject_id_ = #{param.subjectId}
  144. </if>
  145. <if test="param.search != null and param.search !=''">
  146. and (
  147. u.real_name_ like concat('%',#{param.search},'%')
  148. or b.name_ like concat('%',#{param.search},'%')
  149. )
  150. </if>
  151. <if test="param.auditVersion != null ">
  152. and #{param.auditVersion} = b.audit_version_
  153. </if>
  154. <if test="param.subjectId != null ">
  155. and #{param.subjectId} = b.subject_id_
  156. </if>
  157. <if test="param.type != null and param.type != ''">
  158. and b.type_ = #{param.type}
  159. </if>
  160. </where>
  161. </select>
  162. <select id="selectAdminLivePage" resultType="com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupVo">
  163. select distinct
  164. cg.id_ as courseGroupId,
  165. cg.reason_ as reason,
  166. cg.name_ as name,
  167. cg.complete_course_num_ as endCourseNum,
  168. if(cg.complete_course_num_ = 0 ,cg.course_num_,cg.course_num_ - cg.complete_course_num_) as noStartCourseNum,
  169. cg.course_price_ as coursePrice,
  170. cg.pre_student_num_ as preStudentNum,
  171. cg.status_ as status,
  172. cg.course_num_ as courseNum,
  173. cg.created_time_ as createTime,
  174. cg.course_introduce_ as courseIntroduce,
  175. <if test="param.studentId != null">
  176. cssp.order_no_ as orderNo,
  177. </if>
  178. cg.im_group_id_ as imGroupId,
  179. cg.course_plan_ as coursePlan,
  180. su.username_ as teacherName,
  181. su.phone_ as phone,
  182. cg.teacher_id_ as teacherId
  183. from course_group cg
  184. left join sys_user su on su.id_ = cg. teacher_id_
  185. <if test="param.studentId != null">
  186. left join course_schedule_student_payment cssp on cg.id_ = cssp.course_group_id_
  187. </if>
  188. <where>
  189. <if test="param.teacherId != null">
  190. and #{param.teacherId} = cg.teacher_id_
  191. <if test="param.search != null and param.search !=''">
  192. and (cg.id_ = #{param.search} or cg.name_ like concat('%',#{param.search},'%'))
  193. </if>
  194. </if>
  195. <if test="param.studentId != null">
  196. and #{param.studentId} = cssp.user_id_
  197. <if test="param.search != null and param.search !=''">
  198. and (
  199. cg.id_ = #{param.search}
  200. or cg.name_ like concat('%',#{param.search},'%')
  201. or su.id_ = #{param.search}
  202. or su.username_ like concat('%',#{param.search},'%')
  203. or su.phone_ like concat('%',#{param.search},'%')
  204. )
  205. </if>
  206. <if test="param.orderNo != null and param.orderNo != ''">
  207. and cssp.order_no_ like concat('%',#{param.orderNo},'%')
  208. </if>
  209. </if>
  210. <if test="param.subjectId != null">
  211. and #{param.subjectId} = cg.subject_id_
  212. </if>
  213. <if test="param.status != null">
  214. and #{param.status} = cg.status_
  215. </if>
  216. <if test="param.startTime != null">
  217. and #{param.startTime} &lt;= cg.created_time_
  218. </if>
  219. <if test="param.endTime != null">
  220. and #{param.endTime} &gt;= cg.created_time_
  221. </if>
  222. <if test="param.courseType != null">
  223. and #{param.courseType} = cg.type_
  224. </if>
  225. </where>
  226. order by cg.id_ desc
  227. </select>
  228. <select id="selectCourseGroupSubject" resultType="com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupVo">
  229. select
  230. cg.id_ as courseGroupId,
  231. s.name_ as subjectName
  232. from course_group cg
  233. left join subject s on cg.subject_id_ = s.id_
  234. <where>
  235. <if test="courseGroupIdList != null and courseGroupIdList.size() != 0">
  236. and cg.id_ in
  237. <foreach collection="courseGroupIdList" item="item" open="(" close=")" separator=",">
  238. #{item}
  239. </foreach>
  240. </if>
  241. </where>
  242. </select>
  243. <select id="selectAdminLiveStudentPage" resultType="com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupStudentVo">
  244. select
  245. a.id_ as paymentId,
  246. su.id_ as studentId,
  247. su.username_ as studentName,
  248. a.actual_price_ as price,
  249. a.order_no_ as orderNo,
  250. su.phone_ as phone,
  251. a.create_time_ as payTime
  252. from user_order_detail as a
  253. left join user_order as o on a.order_no_ = o.order_no_
  254. left join sys_user as su on o.user_id_ = su.id_
  255. <where>
  256. o.status_ = 'PAID'
  257. <if test="param.courseGroupId != null">
  258. and #{param.courseGroupId} = a.biz_id_
  259. </if>
  260. <if test="param.search != null and param.search != ''">
  261. and (
  262. a.biz_id_ like concat('%',#{param.search},'%')
  263. or su.id_ like concat('%',#{param.search},'%')
  264. or su.username_ like concat('%',#{param.search},'%')
  265. or su.phone_ like concat('%',#{param.search},'%')
  266. )
  267. </if>
  268. <if test="param.orderNo != null and param.orderNo != ''">
  269. and a.order_no_ like concat('%',#{param.orderNo},'%')
  270. </if>
  271. <if test="param.startTime != null">
  272. and #{param.startTime} &lt;= a.create_time_
  273. </if>
  274. <if test="param.endTime != null">
  275. and #{param.endTime} &gt;= a.create_time_
  276. </if>
  277. </where>
  278. group by o.user_id_
  279. order by a.id_ desc
  280. </select>
  281. <select id="selectAdminLivePlan" resultType="com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupPlanVo">
  282. select
  283. cs.id_ as courseId,
  284. cs.class_num_ as classNum,
  285. cs.class_date_ as classDate,
  286. cs.start_time_ as startTime,
  287. cs.end_time_ as endTime,
  288. cs.status_ as courseStatus,
  289. cp.plan_ as planInfo,
  290. lrv.url_ as videoUrl
  291. from course_schedule cs
  292. left join live_room_video lrv on cs.id_ = lrv.course_id_
  293. left join course_plan cp on cp.course_group_id_ = cs.course_group_id_ and cp.class_num_ = cs.class_num_
  294. <where>
  295. <if test="courseGroupId != null">
  296. and #{courseGroupId} = cs.course_group_id_
  297. </if>
  298. </where>
  299. order by cs.class_num_
  300. </select>
  301. <select id="selectAdminLiveCourseGroup" resultType="com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupVo">
  302. select distinct
  303. cg.id_ as courseGroupId,
  304. cg.name_ as name,
  305. cg.complete_course_num_ as endCourseNum,
  306. if(cg.complete_course_num_ = 0 ,cg.course_num_,cg.course_num_ - cg.complete_course_num_) as noStartCourseNum,
  307. cg.course_price_ as coursePrice,
  308. cg.pre_student_num_ as preStudentNum,
  309. cg.status_ as status,
  310. cg.course_num_ as courseNum,
  311. cg.created_time_ as createTime,
  312. cg.course_introduce_ as courseIntroduce,
  313. cg.type_ as type,
  314. s.name_ as subjectName,
  315. cg.course_plan_ as coursePlan
  316. from course_group cg
  317. left join course_schedule_student_payment cssp on cg.id_ = cssp.course_group_id_
  318. left join subject s on cg.subject_id_ = s.id_
  319. <where>
  320. <if test="courseGroupId != null">
  321. and #{courseGroupId} = cg.id_
  322. </if>
  323. </where>
  324. </select>
  325. <select id="selectAdminLiveStudentCoursePage"
  326. resultType="com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupStudentCourseVo">
  327. select distinct
  328. cs.id_ as courseId,
  329. cs.class_date_ as classDate,
  330. cs.start_time_ as startTime,
  331. cs.end_time_ as endTime,
  332. cs.status_ as courseStatue,
  333. cssp.order_no_ as orderNo,
  334. sa.id_ as studentAttendanceId
  335. from course_schedule cs
  336. left join course_schedule_student_payment cssp on cs.id_ = cssp.course_id_ and #{param.studentId} = cssp.user_id_
  337. left join student_attendance sa on cs.id_ = sa.course_schedule_id_ and #{param.studentId} = sa.student_id_
  338. <where>
  339. cs.status_ != '${@com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum@CANCEL}'
  340. <if test="param.studentId != null">
  341. and cssp.user_id_ = #{param.studentId}
  342. </if>
  343. <if test="param.status != null">
  344. <choose>
  345. <when test="param.status == @com.yonge.cooleshow.biz.dal.enums.StudentCourseEnum@TRUANT">
  346. and sa.id_ is null AND cs.status_ IN ('ING','COMPLETE')
  347. </when>
  348. <when test="param.status == @com.yonge.cooleshow.biz.dal.enums.StudentCourseEnum@ATTENDCLASS">
  349. and sa.id_ is not null and #{param.studentId} = sa.student_id_
  350. </when>
  351. <when test="param.status == @com.yonge.cooleshow.biz.dal.enums.StudentCourseEnum@NOTSTART">
  352. and cs.status_ = '${@ com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum@NOT_START}'
  353. </when>
  354. </choose>
  355. </if>
  356. <if test="param.courseGroupId != null">
  357. and #{param.courseGroupId} = cs.course_group_id_
  358. </if>
  359. <if test="param.courseId != null">
  360. and cs.id_ like concat('%',#{param.courseId},'%')
  361. </if>
  362. </where>
  363. order by cs.id_ desc
  364. </select>
  365. <select id="selectPracticeGroup" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupPracticeVo">
  366. SELECT
  367. cg.id_ AS groupId,
  368. cg.name_ AS groupName,
  369. cg.subject_id_ AS subjectId,
  370. sub.name_ AS subjectName,
  371. cg.course_num_ AS courseNum,
  372. IFNULL(cs.count_ ,0)AS completeCount,
  373. cg.teacher_id_ AS teacherId,
  374. tu.username_ AS teacherName,
  375. tu.real_name_ AS teacherRealName,
  376. sp.user_id_ AS studentId,
  377. su.username_ AS studentName,
  378. su.real_name_ AS studentRealName,
  379. cg.status_ AS `status`,
  380. cst.start_time_ AS startTime,
  381. cg.course_plan_ AS coursePlan
  382. FROM course_group cg
  383. LEFT JOIN `subject` sub ON cg.subject_id_=sub.id_
  384. LEFT JOIN sys_user tu ON cg.teacher_id_=tu.id_
  385. LEFT JOIN (SELECT user_id_,course_group_id_ FROM course_schedule_student_payment WHERE course_type_=#{param.groupType} GROUP BY course_group_id_) sp ON cg.id_=sp.course_group_id_
  386. LEFT JOIN sys_user su ON sp.user_id_=su.id_
  387. LEFT JOIN (SELECT course_group_id_,COUNT(1) AS count_ FROM course_schedule WHERE type_= #{param.groupType} AND status_='COMPLETE' GROUP BY course_group_id_) cs ON cg.id_=cs.course_group_id_
  388. LEFT JOIN (SELECT course_group_id_,start_time_ FROM course_schedule WHERE type_=#{param.groupType} GROUP BY course_group_id_) cst ON cg.id_=cst.course_group_id_
  389. WHERE cg.type_=#{param.groupType} AND cg.status_ IN('ING','COMPLETE')
  390. <if test="param.search != null and param.search != ''">
  391. AND (
  392. cg.id_ LIKE concat('%',#{param.search},'%') OR
  393. cg.teacher_id_ LIKE concat('%',#{param.search},'%') OR
  394. sp.user_id_ LIKE concat('%',#{param.search},'%') OR
  395. cg.name_ LIKE concat('%',#{param.search},'%') OR
  396. tu.username_ LIKE concat('%',#{param.search},'%') OR
  397. su.username_ LIKE concat('%',#{param.search},'%')
  398. )
  399. </if>
  400. <if test="param.subjectId != null">
  401. AND cg.subject_id_ = #{param.subjectId}
  402. </if>
  403. <if test="param.status != null and param.status != ''">
  404. AND cg.status_ = #{param.status}
  405. </if>
  406. <if test="param.studentId != null">
  407. AND sp.user_id_ = #{param.studentId}
  408. </if>
  409. <if test="param.teacherId != null">
  410. AND cg.teacher_id_ = #{param.teacherId}
  411. </if>
  412. </select>
  413. <select id="selectPracticeGroupDetail"
  414. resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupPracticeDetailVo">
  415. SELECT * FROM
  416. (SELECT
  417. cs.id_ AS courseId,
  418. sb.name_ AS subjectName,
  419. cs.teacher_id_ AS teacherId,
  420. tu.username_ AS teacherName,
  421. tu.real_name_ AS teacherRealName,
  422. sp.user_id_ AS studentId,
  423. su.username_ AS studentName,
  424. su.real_name_ AS studentRealName,
  425. cs.status_ AS `status`,
  426. cs.start_time_ AS startTime,
  427. cs.end_time_ AS endTime,
  428. cs.class_date_ AS classDate,
  429. (CASE WHEN cs.start_time_ &gt;= ta.sign_in_time_ THEN 1 ELSE 0 END) AS teacherInSign,
  430. (CASE WHEN cs.end_time_ &lt;= ta.sign_out_time_ THEN 1 ELSE 0 END) AS teacherOutSign,
  431. (CASE WHEN cs.start_time_ &gt;= sa.sign_in_time_ THEN 1 ELSE 0 END) AS studentInSign,
  432. (CASE WHEN cs.end_time_ &lt;= sa.sign_out_time_ THEN 1 ELSE 0 END) AS studentOutSign,
  433. ts.status_ AS salaryStatus
  434. FROM course_schedule cs
  435. LEFT JOIN course_group cg ON cs.course_group_id_=cg.id_
  436. LEFT JOIN `subject` sb ON cg.subject_id_=sb.id_
  437. LEFT JOIN sys_user tu ON cs.teacher_id_=tu.id_
  438. LEFT JOIN course_schedule_student_payment sp ON cs.id_=sp.course_id_
  439. LEFT JOIN sys_user su ON sp.user_id_=su.id_
  440. LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
  441. LEFT JOIN student_attendance sa ON cs.id_=sa.course_schedule_id_
  442. LEFT JOIN course_schedule_teacher_salary ts ON cs.id_=ts.course_schedule_id_
  443. WHERE cs.lock_=0 AND cs.course_group_id_ = #{param.courseGroupId}) a
  444. <where>
  445. <if test="param.search != null and param.search != ''">
  446. AND (
  447. courseId LIKE concat('%',#{param.search},'%') OR
  448. teacherName LIKE concat('%',#{param.search},'%') OR
  449. teacherId LIKE concat('%',#{param.search},'%') OR
  450. studentName LIKE concat('%',#{param.search},'%') OR
  451. studentId LIKE concat('%',#{param.search},'%')
  452. )
  453. </if>
  454. <if test="param.teacherSign == 1">
  455. AND teacherInSign = #{param.teacherSign}
  456. </if>
  457. <if test="param.teacherSign == 0">
  458. AND teacherOutSign = #{param.teacherSign}
  459. </if>
  460. <if test="param.studentSign == 1">
  461. AND studentInSign = #{param.studentSign}
  462. </if>
  463. <if test="param.studentSign == 0">
  464. AND studentOutSign = #{param.studentSign}
  465. </if>
  466. <if test="param.status != null and param.status != ''">
  467. AND `status` = #{param.status}
  468. </if>
  469. <if test="param.salaryStatus != null and param.salaryStatus != ''">
  470. AND salaryStatus = #{param.salaryStatus}
  471. </if>
  472. <if test="param.startTime != null">
  473. AND classDate BETWEEN #{param.startTime} AND #{param.endTime}
  474. </if>
  475. <if test="param.studentId != null">
  476. AND studentId = #{param.studentId}
  477. </if>
  478. <if test="param.teacherId != null">
  479. AND teacherId = #{param.teacherId}
  480. </if>
  481. </where>
  482. </select>
  483. <select id="selectLiveGroup" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupLiveVo">
  484. SELECT
  485. cg.id_ AS courseGroupId,
  486. cg.name_ AS courseGroupName,
  487. cg.subject_id_ AS subjectId,
  488. sb.name_ AS subjectName,
  489. cg.teacher_id_ AS teacherId,
  490. su.username_ AS teacherName,
  491. su.real_name_ AS teacherRealName,
  492. cg.course_num_ AS courseNum,
  493. cg.pre_student_num_ AS studentNum,
  494. cg.status_ AS `status`,
  495. IFNULL(cm.count_,0) AS completeCount,
  496. st.start_time_ AS startTime,
  497. cg.course_plan_ AS coursePlan
  498. FROM course_group cg
  499. LEFT JOIN `subject` sb ON cg.subject_id_=sb.id_
  500. LEFT JOIN sys_user su ON su.id_=cg.teacher_id_
  501. LEFT JOIN (SELECT course_group_id_,COUNT(1) AS count_ FROM course_schedule WHERE type_ = #{param.groupType} AND status_='COMPLETE' GROUP BY course_group_id_) cm ON cg.id_=cm.course_group_id_
  502. LEFT JOIN (SELECT course_group_id_,start_time_ FROM course_schedule WHERE type_ = #{param.groupType} GROUP BY course_group_id_) st ON cg.id_=st.course_group_id_
  503. <where>
  504. <if test="param.search != null and param.search != ''">
  505. AND (
  506. cg.id_ LIKE concat('%',#{param.search},'%') OR
  507. cg.teacher_id_ LIKE concat('%',#{param.search},'%') OR
  508. cg.name_ LIKE concat('%',#{param.search},'%') OR
  509. su.username_ LIKE concat('%',#{param.search},'%')
  510. )
  511. </if>
  512. <if test="param.subjectId != null">
  513. AND cg.subject_id_ = #{param.subjectId}
  514. </if>
  515. <if test="param.groupType != null and param.groupType != ''">
  516. AND cg.type_ = #{param.groupType}
  517. </if>
  518. <if test="param.status != null and param.status != ''">
  519. AND cg.status_ = #{param.status}
  520. </if>
  521. </where>
  522. </select>
  523. <select id="selectLiveGroupStudent" resultType="com.yonge.cooleshow.biz.dal.vo.CourseSchedulePaymentVo">
  524. SELECT
  525. p.user_id_ AS studentId,
  526. u.username_ AS studentName,
  527. u.real_name_ AS studentRealName,
  528. u.phone_ AS studentPhone,
  529. p.actual_price_ AS actualPrice,
  530. p.order_no_ AS orderNo,
  531. o.create_time_ AS createdOrderTime
  532. FROM course_schedule_student_payment p
  533. LEFT JOIN sys_user u ON p.user_id_=u.id_
  534. LEFT JOIN user_order o ON p.order_no_ = o.order_no_
  535. WHERE p.course_group_id_=#{param.groupId}
  536. <if test="param.search != null and param.search != ''">
  537. AND (
  538. p.course_id_ LIKE concat('%',#{param.search},'%') OR
  539. p.user_id_ LIKE concat('%',#{param.search},'%') OR
  540. u.username_ LIKE concat('%',#{param.search},'%') OR
  541. u.phone_ LIKE concat('%',#{param.search},'%')
  542. )
  543. </if>
  544. <if test="param.orderNo != null and param.orderNo != ''">
  545. AND p.order_no_ = #{param.orderNo}
  546. </if>
  547. <if test="param.startTime != null">
  548. AND o.create_time_ &lt;= #{param.startTime}
  549. </if>
  550. <if test="param.endTime != null">
  551. AND o.create_time_ &gt;= #{param.endTime}
  552. </if>
  553. </select>
  554. <select id="selectLiveGroupPlan" resultType="com.yonge.cooleshow.biz.dal.vo.CourseSchedulePlanVo">
  555. SELECT
  556. distinct
  557. cs.id_ AS courseId,
  558. cp.plan_ AS courseIntroduce,
  559. cs.class_num_ AS classNum,
  560. cs.class_date_ AS classDate,
  561. cs.start_time_ AS startTime,
  562. cs.end_time_ AS endTime,
  563. ts.status_ AS salaryStatus,
  564. (select group_concat(lrv.url_) from live_room_video lrv where lrv.course_id_ = cs.id_)AS url,
  565. cs.status_ AS courseStatus,
  566. (CASE WHEN cs.start_time_ &gt;= ta.sign_in_time_ THEN 1 ELSE 0 END) AS teacherInSign,
  567. (CASE WHEN cs.end_time_ &lt;= ta.sign_out_time_ THEN 1 ELSE 0 END) AS teacherOutSign
  568. FROM course_schedule cs
  569. LEFT JOIN course_group g ON cs.course_group_id_=g.id_
  570. LEFT JOIN course_schedule_teacher_salary ts ON cs.id_=ts.course_schedule_id_
  571. LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
  572. left join course_plan cp on cp.course_group_id_ = cs.course_group_id_ and cp.class_num_ = cs.class_num_
  573. WHERE cs.course_group_id_= #{param.groupId}
  574. <if test="param.salaryStatus != null and param.salaryStatus != ''">
  575. AND ts.status_ = #{param.salaryStatus}
  576. </if>
  577. <if test="param.startTime != null">
  578. AND cs.class_date_ BETWEEN #{param.startTime} AND #{param.endTime}
  579. </if>
  580. <if test="param.search != null and param.search != ''">
  581. AND cs.id_ = #{param.search}
  582. </if>
  583. </select>
  584. <select id="selectVideoGroup" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupVideoVo">
  585. SELECT
  586. g.id_ AS groupId,
  587. g.lesson_name_ AS lessonName,
  588. g.lesson_subject_ AS subjectId,
  589. s.name_ AS subjectName,
  590. g.lesson_count_ AS lessonCount,
  591. IFNULL(p.count_,0) AS buyCount,
  592. g.teacher_id_ AS teacherId,
  593. u.username_ AS teacherName,
  594. g.pay_type_ AS payType,
  595. u.real_name_ AS teacherRealName,
  596. g.create_time_ AS createTime,
  597. g.shelves_time_ AS recordTime,
  598. g.shelves_flag_ as shelvesFlag,
  599. g.sort_number_ as sortNumber,
  600. g.top_flag_ as topFlag,
  601. g.audit_status_ as status,
  602. g.relation_type_ as relationType,
  603. g.draft_flag_ as draftFlag
  604. FROM video_lesson_group g
  605. LEFT JOIN `subject` s ON g.lesson_subject_=s.id_
  606. LEFT JOIN sys_user u ON g.teacher_id_=u.id_
  607. LEFT JOIN (
  608. SELECT video_lesson_group_id_,COUNT(1) AS count_ FROM video_lesson_purchase_record
  609. WHERE order_status_='PAID' GROUP BY video_lesson_group_id_) p ON g.id_=p.video_lesson_group_id_
  610. <where>
  611. <if test="param.search != null and param.search != ''">
  612. AND (
  613. g.id_ LIKE concat('%',#{param.search},'%') OR
  614. g.lesson_name_ LIKE concat('%',#{param.search},'%') OR
  615. g.teacher_id_ LIKE concat('%',#{param.search},'%') OR
  616. u.username_ LIKE concat('%',#{param.search},'%')
  617. )
  618. </if>
  619. <if test="param.subjectId != null and param.subjectId != ''">
  620. AND g.lesson_subject_ = #{param.subjectId}
  621. </if>
  622. <if test="param.status != null and param.status != ''">
  623. AND g.audit_status_ = #{param.status}
  624. </if>
  625. <if test="param.shelvesFlag != null">
  626. AND g.shelves_flag_ = #{param.shelvesFlag}
  627. </if>
  628. <if test="param.draftFlag != null">
  629. AND g.draft_flag_ = #{param.draftFlag}
  630. </if>
  631. <if test="param.topFlag != null">
  632. AND g.top_flag_ = #{param.topFlag}
  633. </if>
  634. <if test="param.relationType != null">
  635. AND g.relation_type_ = #{param.relationType}
  636. </if>
  637. <if test="param.payType != null">
  638. AND g.pay_type_ = #{param.payType}
  639. </if>
  640. </where>
  641. order by g.top_flag_ desc ,g.sort_number_ desc,g.id_ desc
  642. </select>
  643. <select id="selectVideoGroupStudent" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupStudentVo">
  644. SELECT
  645. r.student_id_ AS studentId,
  646. u.username_ AS studentName,
  647. u.real_name_ AS studentRealName,
  648. u.phone_ AS studentPhone,
  649. r.order_no_ AS orderNo,
  650. r.pay_money_ AS payMoney,
  651. o.create_time_ AS createTime
  652. FROM video_lesson_purchase_record r
  653. LEFT JOIN sys_user u ON r.student_id_=u.id_
  654. LEFT JOIN user_order o ON r.order_no_=o.order_no_
  655. WHERE r.order_status_='PAID'
  656. AND video_lesson_group_id_ = #{param.groupId}
  657. <if test="param.search != null and param.search != ''">
  658. AND (
  659. r.student_id_ LIKE concat('%',#{param.search},'%') OR
  660. u.username_ LIKE concat('%',#{param.search},'%') OR
  661. u.phone_ LIKE concat('%',#{param.search},'%')
  662. )
  663. </if>
  664. <if test="param.orderNo != null and param.orderNo != ''">
  665. AND r.order_no_ = #{param.orderNo}
  666. </if>
  667. <if test="param.startTime != null">
  668. AND o.create_time_ &lt;= #{param.startTime}
  669. </if>
  670. <if test="param.endTime != null">
  671. AND o.create_time_ &gt;= #{param.endTime}
  672. </if>
  673. </select>
  674. <select id="selectVideoGroupPlan" resultType="com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail">
  675. SELECT
  676. id_ AS id,
  677. video_title_ AS videoTitle,
  678. video_content_ AS videoContent,
  679. video_url_ AS videoUrl,
  680. cover_url_ AS coverUrl
  681. FROM video_lesson_group_detail
  682. WHERE video_lesson_group_id_=#{param.groupId}
  683. </select>
  684. <select id="selectGroupInfoVo" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupInfoVo"
  685. parameterType="java.lang.Long">
  686. SELECT
  687. g.id_ AS id,
  688. g.name_ AS name,
  689. g.subject_id_ AS subjectId,
  690. s.name_ AS subjectName,
  691. g.course_num_ AS courseNum,
  692. g.course_price_ AS coursePrice,
  693. g.status_ AS `status`,
  694. g.course_introduce_ AS courseIntroduce,
  695. g.created_time_ AS createdTime,
  696. g.course_plan_ AS coursePlan
  697. FROM course_group g
  698. LEFT JOIN `subject` s ON g.subject_id_=s.id_
  699. WHERE g.id_ =#{groupId}
  700. </select>
  701. <update id="opsPreStudentNum">
  702. update course_group
  703. set
  704. pre_student_num_ = pre_student_num_ + #{num}
  705. where id_ = #{id}
  706. </update>
  707. <update id="updateBatch">
  708. UPDATE course_group
  709. SET status_='COMPLETE'
  710. WHERE id_ IN
  711. <foreach collection="list" item="item" open="(" separator="," close=")">
  712. #{item}
  713. </foreach>
  714. </update>
  715. <update id="updateCompleteCourseNum">
  716. update course_group cg
  717. left join (
  718. select cs.course_group_id_,COUNT(cs.id_) num_ from course_schedule cs
  719. where cs.course_group_id_ IN
  720. <foreach collection="groupIds" item="item" open="(" separator="," close=")">
  721. #{item}
  722. </foreach>
  723. AND cs.status_ = 'COMPLETE'
  724. group by cs.course_group_id_) cs ON cs.course_group_id_ = cg.id_
  725. set cg.complete_course_num_ = cs.num_
  726. where cs.course_group_id_ = cg.id_
  727. </update>
  728. <update id="updateExposureNum">
  729. update course_group
  730. set exposure_num_ = exposure_num_ + #{exposureNum}
  731. where id_ = #{groupId}
  732. </update>
  733. <select id="selectPianoGroup" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupPianoVo">
  734. SELECT
  735. cg.id_ AS courseGroupId,
  736. cg.name_ AS courseGroupName,
  737. cg.subject_id_ AS subjectId,
  738. sb.name_ AS subjectName,
  739. cg.teacher_id_ AS teacherId,
  740. su.username_ AS teacherName,
  741. su.real_name_ AS teacherRealName,
  742. cg.course_num_ AS courseNum,
  743. cg.status_ AS `status`,
  744. cg.course_plan_ AS coursePlan,
  745. IFNULL(cm.count_,0) AS completeCount,
  746. st.start_time_ AS startTime
  747. FROM course_group cg
  748. LEFT JOIN `subject` sb ON cg.subject_id_=sb.id_
  749. LEFT JOIN sys_user su ON su.id_=cg.teacher_id_
  750. LEFT JOIN (SELECT course_group_id_,COUNT(1) AS count_ FROM course_schedule WHERE type_='PIANO_ROOM_CLASS' AND status_='COMPLETE' GROUP BY course_group_id_) cm ON cg.id_=cm.course_group_id_
  751. LEFT JOIN (SELECT course_group_id_,start_time_ FROM course_schedule WHERE type_='PIANO_ROOM_CLASS' GROUP BY course_group_id_) st ON cg.id_=st.course_group_id_
  752. WHERE cg.type_='PIANO_ROOM_CLASS'
  753. <if test="param.search != null and param.search != ''">
  754. AND (
  755. cg.id_ LIKE concat('%',#{param.search},'%') OR
  756. cg.teacher_id_ LIKE concat('%',#{param.search},'%') OR
  757. cg.name_ LIKE concat('%',#{param.search},'%') OR
  758. su.username_ LIKE concat('%',#{param.search},'%')
  759. )
  760. </if>
  761. <if test="param.subjectId != null">
  762. AND cg.subject_id_ = #{param.subjectId}
  763. </if>
  764. <if test="param.status != null and param.status != ''">
  765. AND cg.status_ = #{param.status}
  766. </if>
  767. order by st.start_time_ desc,cg.id_ desc
  768. </select>
  769. <select id="selectPianoGroupDetail"
  770. resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupPianoDetailVo">
  771. SELECT
  772. cs.id_ AS courseId,
  773. sb.id_ AS subjectId,
  774. sb.name_ AS subjectName,
  775. cs.teacher_id_ AS teacherId,
  776. tu.username_ AS teacherName,
  777. tu.real_name_ AS teacherRealName,
  778. cs.status_ AS `status`,
  779. a.studentCount AS studentCount,
  780. (cs.single_course_time_ * (a.studentCount+1)*(a.studentCount+1-1)) AS courseTime,
  781. cs.start_time_ AS startTime,
  782. cs.end_time_ AS endTime,
  783. b.teacherInSign AS teacherInSign,
  784. b.teacherOutSign AS teacherOutSign
  785. FROM course_schedule cs
  786. LEFT JOIN course_group cg ON cs.course_group_id_ = cg.id_
  787. LEFT JOIN `subject` sb ON cg.subject_id_ = sb.id_
  788. LEFT JOIN sys_user tu ON cs.teacher_id_ = tu.id_
  789. LEFT JOIN (SELECT course_id_,COUNT(1) AS studentCount FROM course_schedule_student_payment WHERE course_type_='PIANO_ROOM_CLASS' GROUP BY course_id_) a ON cs.id_=a.course_id_
  790. LEFT JOIN (SELECT cs.id_ AS cid,( CASE WHEN cs.start_time_ &gt;= ta.sign_in_time_ THEN 1 ELSE 0 END ) AS teacherInSign,( CASE WHEN cs.end_time_ &lt;= ta.sign_out_time_ THEN 1 ELSE 0 END ) AS teacherOutSign
  791. FROM course_schedule cs LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_ WHERE cs.type_='PIANO_ROOM_CLASS') b ON cs.id_=b.cid
  792. WHERE cs.type_='PIANO_ROOM_CLASS'
  793. AND cs.course_group_id_=#{param.courseGroupId}
  794. <if test="param.search != null and param.search != ''">
  795. AND cs.id_ LIKE concat('%',#{param.search},'%')
  796. </if>
  797. <if test="param.status != null and param.status != ''">
  798. AND cs.status_ = #{param.status}
  799. </if>
  800. <if test="param.startTime != null">
  801. AND cs.start_time_ &gt;= #{param.startTime}
  802. </if>
  803. <if test="param.endTime != null">
  804. AND cs.start_time_ &lt;= #{param.endTime}
  805. </if>
  806. <if test="param.teacherSign == 1">
  807. AND b.teacherInSign = #{param.teacherSign}
  808. </if>
  809. <if test="param.teacherSign == 0">
  810. AND b.teacherOutSign = #{param.teacherSign}
  811. </if>
  812. <if test="param.studentSign != null">
  813. AND cs.id_ IN
  814. <foreach collection="param.courseIds" item="item" open="(" close=")" separator=",">
  815. #{item}
  816. </foreach>
  817. </if>
  818. </select>
  819. <select id="studentSign" resultType="com.yonge.cooleshow.biz.dal.vo.StudentSignVo">
  820. SELECT DISTINCT
  821. p.course_id_ AS courseId,
  822. p.user_id_ AS userId,
  823. u.username_ AS userName,
  824. u.real_name_ AS realName,
  825. ( CASE WHEN c.start_time_ &gt;= a.sign_in_time_ THEN 1 ELSE 0 END ) AS studentInSign,
  826. ( CASE WHEN c.end_time_ &lt;= a.sign_out_time_ THEN 1 ELSE 0 END ) AS studentOutSign
  827. FROM course_schedule_student_payment p
  828. LEFT JOIN sys_user u ON p.user_id_=u.id_
  829. LEFT JOIN course_schedule c ON p.course_id_=c.id_
  830. LEFT JOIN student_attendance a ON p.user_id_=a.student_id_ and a.course_schedule_id_ = c.id_
  831. <where>
  832. <if test="courseId !=null">
  833. AND p.course_id_=#{courseId}
  834. </if>
  835. <if test="type !=null and type!=''">
  836. AND p.course_type_=#{type}
  837. </if>
  838. </where>
  839. </select>
  840. <select id="selectPianoGroupStudent" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupPianoVo">
  841. SELECT DISTINCT
  842. g.id_ AS courseGroupId,
  843. g.name_ AS courseGroupName,
  844. s.id_ AS subjectId,
  845. s.name_ AS subjectName,
  846. g.teacher_id_ AS teacherId,
  847. u.username_ AS teacherName,
  848. u.real_name_ AS teacherRealName,
  849. g.course_num_ AS courseNum,
  850. IFNULL(cm.count_,0) AS completeCount,
  851. g.status_ AS `status`,
  852. st.start_time_ AS startTime
  853. FROM course_schedule_student_payment p
  854. LEFT JOIN course_group g ON p.course_group_id_=g.id_
  855. LEFT JOIN `subject` s ON g.subject_id_=s.id_
  856. LEFT JOIN sys_user u ON g.teacher_id_=u.id_
  857. LEFT JOIN (SELECT course_group_id_,COUNT(1) AS count_ FROM course_schedule WHERE type_='PIANO_ROOM_CLASS' AND status_='COMPLETE' GROUP BY course_group_id_) cm ON p.course_group_id_=cm.course_group_id_
  858. LEFT JOIN (SELECT course_group_id_,start_time_ FROM course_schedule WHERE type_='PIANO_ROOM_CLASS' GROUP BY course_group_id_) st ON p.course_group_id_=st.course_group_id_
  859. WHERE p.course_type_='PIANO_ROOM_CLASS'
  860. AND p.user_id_=#{param.studentId}
  861. <if test="param.search != null and param.search != ''">
  862. AND (
  863. g.id_ LIKE concat('%',#{param.search},'%') OR
  864. g.teacher_id_ LIKE concat('%',#{param.search},'%') OR
  865. u.username_ LIKE concat('%',#{param.search},'%') OR
  866. g.name_ LIKE concat('%',#{param.search},'%')
  867. )
  868. </if>
  869. <if test="param.subjectId != null">
  870. AND s.id_ = #{param.subjectId}
  871. </if>
  872. <if test="param.status != null and param.status != ''">
  873. AND g.status_ = #{param.status}
  874. </if>
  875. </select>
  876. <select id="selectPianoGroupStudentDetail"
  877. resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupPianoDetailVo">
  878. SELECT * FROM (
  879. SELECT
  880. cs.id_ AS courseId,
  881. sb.id_ AS subjectId,
  882. sb.name_ AS subjectName,
  883. cs.teacher_id_ AS teacherId,
  884. tu.username_ AS teacherName,
  885. tu.real_name_ AS teacherRealName,
  886. cs.status_ AS `status`,
  887. a.studentCount AS studentCount,
  888. (cs.single_course_time_ * (a.studentCount+1)*(a.studentCount+1-1)) AS courseTime,
  889. cs.start_time_ AS startTime,
  890. cs.end_time_ AS endTime,
  891. p.user_id_ AS studentId,
  892. su.username_ AS studentName,
  893. su.real_name_ AS studentRealName,
  894. (CASE WHEN cs.start_time_ &gt;= ta.sign_in_time_ THEN 1 ELSE 0 END) AS teacherInSign,
  895. (CASE WHEN cs.end_time_ &lt;= ta.sign_out_time_ THEN 1 ELSE 0 END) AS teacherOutSign,
  896. (CASE WHEN cs.start_time_ &gt;= sa.sign_in_time_ THEN 1 ELSE 0 END) AS studentInSign,
  897. (CASE WHEN cs.end_time_ &lt;= sa.sign_out_time_ THEN 1 ELSE 0 END) AS studentOutSign,
  898. (CASE WHEN cs.start_time_ &gt;= sa.sign_in_time_ AND cs.end_time_ &lt;= sa.sign_out_time_ THEN 1 ELSE 0 END) AS studentSign,
  899. (CASE WHEN cs.start_time_ &gt;= ta.sign_in_time_ AND cs.end_time_ &lt;= ta.sign_out_time_ THEN 1 ELSE 0 END) AS teacherSign
  900. FROM course_schedule cs
  901. LEFT JOIN course_group cg ON cs.course_group_id_ = cg.id_
  902. LEFT JOIN `subject` sb ON cg.subject_id_ = sb.id_
  903. LEFT JOIN sys_user tu ON cs.teacher_id_ = tu.id_
  904. LEFT JOIN (SELECT course_id_,COUNT(1) AS studentCount FROM course_schedule_student_payment WHERE course_type_='PIANO_ROOM_CLASS' GROUP BY course_id_) a ON cs.id_=a.course_id_
  905. LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
  906. LEFT JOIN student_attendance sa ON cs.id_=sa.course_schedule_id_
  907. LEFT JOIN course_schedule_student_payment p ON cs.id_=p.course_id_
  908. LEFT JOIN sys_user su ON p.user_id_ = su.id_
  909. WHERE cs.type_='PIANO_ROOM_CLASS'
  910. AND p.user_id_=#{param.studentId}
  911. AND p.course_group_id_=#{param.courseGroupId}) m
  912. <where>
  913. <if test="param.search != null and param.search != ''">
  914. AND courseId LIKE concat('%',#{param.search},'%')
  915. </if>
  916. <if test="param.studentSign != null">
  917. AND studentSign = #{param.studentSign}
  918. </if>
  919. <if test="param.teacherSign != null">
  920. AND teacherSign = #{param.teacherSign}
  921. </if>
  922. <if test="param.status != null and param.status != ''">
  923. AND `status` = #{param.status}
  924. </if>
  925. <if test="param.startTime != null">
  926. AND startTime &gt;= #{param.startTime}
  927. </if>
  928. <if test="param.endTime != null">
  929. AND startTime &lt;= #{param.endTime}
  930. </if>
  931. </where>
  932. </select>
  933. <select id="selectPianoGroupTeacher" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupPianoVo">
  934. SELECT
  935. cg.id_ AS courseGroupId,
  936. cg.name_ AS courseGroupName,
  937. cg.subject_id_ AS subjectId,
  938. sb.name_ AS subjectName,
  939. cg.teacher_id_ AS teacherId,
  940. su.username_ AS teacherName,
  941. su.real_name_ AS teacherRealName,
  942. cg.course_num_ AS courseNum,
  943. cg.status_ AS `status`,
  944. IFNULL(cm.count_,0) AS completeCount,
  945. cg.course_plan_ AS coursePlan,
  946. st.start_time_ AS startTime
  947. FROM course_group cg
  948. LEFT JOIN `subject` sb ON cg.subject_id_=sb.id_
  949. LEFT JOIN sys_user su ON su.id_=cg.teacher_id_
  950. LEFT JOIN (SELECT course_group_id_,COUNT(1) AS count_ FROM course_schedule WHERE type_='PIANO_ROOM_CLASS' AND status_='COMPLETE' GROUP BY course_group_id_) cm ON cg.id_=cm.course_group_id_
  951. LEFT JOIN (SELECT course_group_id_,start_time_ FROM course_schedule WHERE type_='PIANO_ROOM_CLASS' GROUP BY course_group_id_) st ON cg.id_=st.course_group_id_
  952. WHERE cg.type_='PIANO_ROOM_CLASS'
  953. AND cg.teacher_id_=#{param.teacherId}
  954. <if test="param.search != null and param.search != ''">
  955. AND (
  956. cg.name_ LIKE concat('%',#{param.search},'%') OR
  957. cg.id_ LIKE concat('%',#{param.search},'%')
  958. )
  959. </if>
  960. <if test="param.subjectId != null">
  961. AND cg.subject_id_ = #{param.subjectId}
  962. </if>
  963. <if test="param.status != null and param.status != ''">
  964. AND cg.status_ = #{param.status}
  965. </if>
  966. </select>
  967. <select id="selectPianoGroupTeacherDetail"
  968. resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupPianoDetailVo">
  969. SELECT * FROM (
  970. SELECT
  971. cs.id_ AS courseId,
  972. sb.id_ AS subjectId,
  973. sb.name_ AS subjectName,
  974. cs.teacher_id_ AS teacherId,
  975. tu.username_ AS teacherName,
  976. tu.real_name_ AS teacherRealName,
  977. cs.status_ AS `status`,
  978. a.studentCount AS studentCount,
  979. (cs.single_course_time_ * (a.studentCount+1)*(a.studentCount+1-1)) AS courseTime,
  980. cs.start_time_ AS startTime,
  981. cs.end_time_ AS endTime,
  982. p.user_id_ AS studentId,
  983. su.username_ AS studentName,
  984. su.real_name_ AS studentRealName,
  985. (CASE WHEN cs.start_time_ &gt;= ta.sign_in_time_ THEN 1 ELSE 0 END) AS teacherInSign,
  986. (CASE WHEN cs.end_time_ &lt;= ta.sign_out_time_ THEN 1 ELSE 0 END) AS teacherOutSign,
  987. (CASE WHEN cs.start_time_ &gt;= ta.sign_in_time_ AND cs.end_time_ &lt;= ta.sign_out_time_ THEN 1 ELSE 0 END) AS teacherSign
  988. FROM course_schedule cs
  989. LEFT JOIN course_group cg ON cs.course_group_id_ = cg.id_
  990. LEFT JOIN `subject` sb ON cg.subject_id_ = sb.id_
  991. LEFT JOIN sys_user tu ON cs.teacher_id_ = tu.id_
  992. LEFT JOIN (SELECT course_id_,COUNT(1) AS studentCount FROM course_schedule_student_payment WHERE course_type_='PIANO_ROOM_CLASS' GROUP BY course_id_) a ON cs.id_=a.course_id_
  993. LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
  994. LEFT JOIN student_attendance sa ON cs.id_=sa.course_schedule_id_
  995. LEFT JOIN course_schedule_student_payment p ON cs.id_=p.course_id_
  996. LEFT JOIN sys_user su ON cs.teacher_id_ = su.id_
  997. WHERE cs.type_='PIANO_ROOM_CLASS'
  998. AND cs.teacher_id_=#{param.teacherId}
  999. AND p.course_group_id_=#{param.courseGroupId}
  1000. <if test="param.studentSign != null">
  1001. AND cs.id_ IN
  1002. <foreach collection="param.courseIds" item="item" open="(" close=")" separator=",">
  1003. #{item}
  1004. </foreach>
  1005. </if>) m
  1006. <where>
  1007. <if test="param.search != null and param.search != ''">
  1008. AND (
  1009. courseId LIKE concat('%',#{param.search},'%') OR
  1010. studentName LIKE concat('%',#{param.search},'%') OR
  1011. studentId LIKE concat('%',#{param.search},'%')
  1012. )
  1013. </if>
  1014. <if test="param.teacherSign != null">
  1015. AND teacherSign = #{param.teacherSign}
  1016. </if>
  1017. <if test="param.status != null and param.status != ''">
  1018. AND `status` = #{param.status}
  1019. </if>
  1020. <if test="param.startTime != null">
  1021. AND startTime &gt;= #{param.startTime}
  1022. </if>
  1023. <if test="param.endTime != null">
  1024. AND endTime &lt;= #{param.endTime}
  1025. </if>
  1026. </where>
  1027. GROUP BY courseId
  1028. </select>
  1029. <select id="selectLiveSubject" resultType="com.yonge.cooleshow.biz.dal.entity.Subject">
  1030. select distinct s.* from course_group cg
  1031. left join subject s on cg.subject_id_ = s.id_
  1032. where cg.status_ = 'APPLY' and cg.type_ = 'LIVE'
  1033. </select>
  1034. <select id="teacherCourseGroup"
  1035. resultType="com.yonge.cooleshow.biz.dal.wrapper.course.CourseGroupWrapper$TeacherCourseGroupDto">
  1036. select cg.name_ courseGroupName,cg.status_ status,
  1037. cg.subject_id_ subjectId,
  1038. cg.complete_course_num_ completeCourseNum,cg.course_num_ courseNum,
  1039. cg.id_ courseGroupId,cg.course_plan_ coursePlan
  1040. from (select * from (
  1041. select cg.name_,cg.subject_id_,cg.complete_course_num_,cg.course_num_,
  1042. cg.id_,cg.course_plan_,cg.teacher_id_,cg.type_,
  1043. CASE WHEN cg.status_ = 'COMPLETE' THEN cg.status_ WHEN cs.status_ = 'NOT_START' THEN 'NOT_START' ELSE 'ING' END as status_
  1044. from course_schedule cs
  1045. left join course_group cg on cs.course_group_id_ = cg.id_
  1046. order by cs.start_time_) cs
  1047. group by cs.id_) cg
  1048. <where>
  1049. <if test="param.teacherId != null">
  1050. AND cg.teacher_id_ = #{param.teacherId}
  1051. </if>
  1052. <if test="param.status != null and param.status != ''">
  1053. AND cg.status_ = #{param.status}
  1054. </if>
  1055. <if test="param.subjectId != null">
  1056. AND cg.subject_id_ = #{param.subjectId}
  1057. </if>
  1058. <if test="param.courseGroupId != null">
  1059. AND cg.id_ = #{param.courseGroupId}
  1060. </if>
  1061. <if test="param.courseType != null and param.courseType != ''">
  1062. AND cg.type_ = #{param.courseType}
  1063. </if>
  1064. <if test="param.search != null and param.search != ''">
  1065. AND cg.name_ LIKE concat('%',#{param.search},'%')
  1066. </if>
  1067. </where>
  1068. GROUP BY cg.id_ DESC
  1069. </select>
  1070. <select id="studentCourseGroup"
  1071. resultType="com.yonge.cooleshow.biz.dal.wrapper.course.CourseGroupWrapper$StudentCourseGroupDto">
  1072. select cg.name_ courseGroupName,cg.status_ status,
  1073. cg.subject_id_ subjectId,
  1074. cg.complete_course_num_ completeCourseNum,cg.course_num_ courseNum,
  1075. cg.id_ courseGroupId,cg.course_plan_ coursePlan,cg.teacher_id_ teacherId
  1076. from (select * from (
  1077. select cg.name_,cg.subject_id_,cg.complete_course_num_,cg.course_num_,
  1078. cg.id_,cg.course_plan_,cg.teacher_id_,cg.type_,
  1079. CASE WHEN cg.status_ = 'COMPLETE' THEN cg.status_ WHEN cs.status_ = 'NOT_START' THEN 'NOT_START' ELSE 'ING' END as status_
  1080. from course_schedule cs
  1081. left join course_group cg on cs.course_group_id_ = cg.id_
  1082. order by cs.start_time_) cs
  1083. group by cs.id_) cg
  1084. LEFT JOIN sys_user su ON cg.teacher_id_ = su.id_
  1085. left join course_schedule_student_payment cssp ON cssp.course_group_id_ = cg.id_
  1086. <where>
  1087. <if test="param.teacherId != null">
  1088. AND cg.teacher_id_ = #{param.teacherId}
  1089. </if>
  1090. <if test="param.studentId != null">
  1091. AND cssp.user_id_ = #{param.studentId}
  1092. </if>
  1093. <if test="param.status != null and param.status != ''">
  1094. AND cg.status_ = #{param.status}
  1095. </if>
  1096. <if test="param.subjectId != null">
  1097. AND cg.subject_id_ = #{param.subjectId}
  1098. </if>
  1099. <if test="param.courseGroupId != null">
  1100. AND cg.id_ = #{param.courseGroupId}
  1101. </if>
  1102. <if test="param.courseType != null and param.courseType != ''">
  1103. AND cg.type_ = #{param.courseType}
  1104. </if>
  1105. <if test="param.search != null and param.search != ''">
  1106. AND (cg.name_ LIKE concat('%',#{param.search},'%') OR su.username_ LIKE concat('%',#{param.search},'%'))
  1107. </if>
  1108. </where>
  1109. GROUP BY cg.id_ DESC
  1110. </select>
  1111. <update id="updateLockNum">
  1112. update course_group
  1113. set lock_num_ = lock_num_ + #{num}
  1114. where id_ = #{groupId} and lock_num_ + #{num} &lt;= max_student_num_ and lock_num_ + #{num} &gt;= 0
  1115. </update>
  1116. </mapper>