瀏覽代碼

课程组管理

cy 3 年之前
父節點
當前提交
d32025b509

+ 27 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseGroupController.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.yonge.cooleshow.biz.dal.dto.search.CourseGroupDetailSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.CourseGroupSearch;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
@@ -45,8 +46,32 @@ public class CourseGroupController extends BaseController {
     }
 
     @ApiOperation(value = "课程组管理-直播课-购买学员")
-    @PostMapping(value = "/live/student")
+    @PostMapping(value = "/live/studentPayment")
     public HttpResponseResult<PageInfo<CourseSchedulePaymentVo>> selectLiveGroupStudent(@RequestBody CourseGroupSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectLiveGroupStudent(PageUtil.getPage(search), search)));
     }
-}
+
+    @ApiOperation(value = "课程组管理-直播课-教学计划")
+    @PostMapping(value = "/live/plan")
+    public HttpResponseResult<PageInfo<CourseSchedulePlanVo>> selectLiveGroupPlan(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectLiveGroupPlan(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation(value = "课程组管理-视频课")
+    @PostMapping(value = "/video")
+    public HttpResponseResult<PageInfo<CourseGroupVideoVo>> selectVideoGroup(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectVideoGroup(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation(value = "课程组管理-视频课-购买学员")
+    @PostMapping(value = "/video/studentPayment")
+    public HttpResponseResult<PageInfo<CourseGroupStudentVo>> selectVideoGroupStudent(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectVideoGroupStudent(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation(value = "课程组管理-视频课-教学计划")
+    @PostMapping(value = "/video/plan")
+    public HttpResponseResult<PageInfo<VideoLessonGroupDetail>> selectVideoGroupPlan(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectVideoGroupPlan(PageUtil.getPage(search), search)));
+    }
+}

+ 42 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import org.apache.ibatis.annotations.Param;
 
@@ -122,7 +123,7 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
                                              @Param("param") CourseGroupSearch search);
 
     /**
-     * 查询购买学员
+     * 查询直播课购买学员
      *
      * @param page
      * @param search
@@ -130,5 +131,45 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
      */
     IPage<CourseSchedulePaymentVo> selectLiveGroupStudent(@Param("page") IPage<CourseSchedulePaymentVo> page,
                                                           @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询直播课教学计划
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseSchedulePlanVo> selectLiveGroupPlan(@Param("page") IPage<CourseSchedulePlanVo> page,
+                                                    @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询视频课
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupVideoVo> selectVideoGroup(@Param("page") IPage<CourseGroupVideoVo> page,
+                                               @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询视频课购课学员
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupStudentVo> selectVideoGroupStudent(@Param("page") IPage<CourseGroupStudentVo> page,
+                                                        @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询视频课教学计划
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<VideoLessonGroupDetail> selectVideoGroupPlan(@Param("page") IPage<VideoLessonGroupDetail> page,
+                                                       @Param("param") CourseGroupSearch search);
 }
 

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/CourseGroupSearch.java

@@ -23,9 +23,15 @@ public class CourseGroupSearch extends QueryInfo {
     @ApiModelProperty("课程组id")
     private Long groupId;
 
+    @ApiModelProperty("课程id")
+    private Long courseId;
+
     @ApiModelProperty(value = "课程状态")
     private String status;
 
+    @ApiModelProperty(value = "结算状态")
+    private String salaryStatus;
+
     @ApiModelProperty(value = "订单号")
     private String orderNo;
 
@@ -39,6 +45,22 @@ public class CourseGroupSearch extends QueryInfo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getSalaryStatus() {
+        return salaryStatus;
+    }
+
+    public void setSalaryStatus(String salaryStatus) {
+        this.salaryStatus = salaryStatus;
+    }
+
     public Long getGroupId() {
         return groupId;
     }

+ 33 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -10,7 +10,7 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes;
@@ -203,5 +203,37 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * @return
      */
     IPage<CourseSchedulePaymentVo> selectLiveGroupStudent(IPage<CourseSchedulePaymentVo> page, CourseGroupSearch search);
+
+    /**
+     * 课程组管理-直播课-教学计划
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseSchedulePlanVo> selectLiveGroupPlan(IPage<CourseSchedulePlanVo> page, CourseGroupSearch search);
+
+    /**
+     * 课程组管理-视频课
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupVideoVo> selectVideoGroup(IPage<CourseGroupVideoVo> page, CourseGroupSearch search);
+
+    /**
+     * 课程组管理-视频课-购买学员
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupStudentVo> selectVideoGroupStudent(IPage<CourseGroupStudentVo> page, CourseGroupSearch search);
+
+    /**
+     * 课程组管理-视频课-教学计划
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<VideoLessonGroupDetail> selectVideoGroupPlan(IPage<VideoLessonGroupDetail> page, CourseGroupSearch search);
 }
 

+ 20 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -925,6 +925,26 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         return baseMapper.selectLiveGroupStudent(page,search);
     }
 
+    @Override
+    public IPage<CourseSchedulePlanVo> selectLiveGroupPlan(IPage<CourseSchedulePlanVo> page, CourseGroupSearch search) {
+        return baseMapper.selectLiveGroupPlan(page,search);
+    }
+
+    @Override
+    public IPage<CourseGroupVideoVo> selectVideoGroup(IPage<CourseGroupVideoVo> page, CourseGroupSearch search) {
+        return baseMapper.selectVideoGroup(page,search);
+    }
+
+    @Override
+    public IPage<CourseGroupStudentVo> selectVideoGroupStudent(IPage<CourseGroupStudentVo> page, CourseGroupSearch search) {
+        return baseMapper.selectVideoGroupStudent(page,search);
+    }
+
+    @Override
+    public IPage<VideoLessonGroupDetail> selectVideoGroupPlan(IPage<VideoLessonGroupDetail> page, CourseGroupSearch search) {
+        return baseMapper.selectVideoGroupPlan(page,search);
+    }
+
     /**
      * 定时将符合开售日期的未开售的直播课课程组修改为报名中状态
      */

+ 86 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupStudentVo.java

@@ -0,0 +1,86 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/19
+ */
+@ApiModel
+public class CourseGroupStudentVo extends BaseEntity {
+    @ApiModelProperty("学生id")
+    private Long studentId;
+    @ApiModelProperty("学生姓名")
+    private String studentName;
+    @ApiModelProperty("学生真实姓名")
+    private String studentRealName;
+    @ApiModelProperty("学生手机号")
+    private String studentPhone;
+    @ApiModelProperty("订单号")
+    private String orderNo;
+    @ApiModelProperty("支付金额")
+    private BigDecimal payMoney;
+    @ApiModelProperty("下单时间")
+    private Date createTime;
+
+    public String getStudentPhone() {
+        return studentPhone;
+    }
+
+    public void setStudentPhone(String studentPhone) {
+        this.studentPhone = studentPhone;
+    }
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getStudentRealName() {
+        return studentRealName;
+    }
+
+    public void setStudentRealName(String studentRealName) {
+        this.studentRealName = studentRealName;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public BigDecimal getPayMoney() {
+        return payMoney;
+    }
+
+    public void setPayMoney(BigDecimal payMoney) {
+        this.payMoney = payMoney;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 115 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupVideoVo.java

@@ -0,0 +1,115 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/19
+ */
+@ApiModel
+public class CourseGroupVideoVo extends BaseEntity {
+    @ApiModelProperty("课程组id")
+    private Long groupId;
+    @ApiModelProperty("课组名称")
+    private String lessonName;
+    @ApiModelProperty("声部id")
+    private Long subjectId;
+    @ApiModelProperty("声部名称")
+    private String subjectName;
+    @ApiModelProperty("购课人数")
+    private Integer buyCount;
+    @ApiModelProperty("课时总数")
+    private Integer lessonCount;
+    @ApiModelProperty("老师id")
+    private Long teacherId;
+    @ApiModelProperty("老师姓名")
+    private String teacherName;
+    @ApiModelProperty("老师真实姓名")
+    private String teacherRealName;
+    @ApiModelProperty("创建日期")
+    private Date createTime;
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getLessonName() {
+        return lessonName;
+    }
+
+    public void setLessonName(String lessonName) {
+        this.lessonName = lessonName;
+    }
+
+    public Long getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Long subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public Integer getBuyCount() {
+        return buyCount;
+    }
+
+    public void setBuyCount(Integer buyCount) {
+        this.buyCount = buyCount;
+    }
+
+    public Integer getLessonCount() {
+        return lessonCount;
+    }
+
+    public void setLessonCount(Integer lessonCount) {
+        this.lessonCount = lessonCount;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getTeacherRealName() {
+        return teacherRealName;
+    }
+
+    public void setTeacherRealName(String teacherRealName) {
+        this.teacherRealName = teacherRealName;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 12 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseSchedulePaymentVo.java

@@ -1,9 +1,9 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
-import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 
@@ -12,13 +12,15 @@ import java.util.Date;
  * @Date: 2022/5/20
  */
 @ApiModel
-public class CourseSchedulePaymentVo extends CourseScheduleStudentPayment {
+public class CourseSchedulePaymentVo implements Serializable {
     @ApiModelProperty(value = "学生id")
     private Long studentId;
     @ApiModelProperty(value = "学生姓名")
     private String studentName;
     @ApiModelProperty(value = "真实姓名")
     private String studentRealName;
+    @ApiModelProperty(value = "学生手机号")
+    private String studentPhone;
     @ApiModelProperty(value = "实际价格")
     private BigDecimal actualPrice;
     @ApiModelProperty(value = "订单号")
@@ -50,22 +52,26 @@ public class CourseSchedulePaymentVo extends CourseScheduleStudentPayment {
         this.studentRealName = studentRealName;
     }
 
-    @Override
+    public String getStudentPhone() {
+        return studentPhone;
+    }
+
+    public void setStudentPhone(String studentPhone) {
+        this.studentPhone = studentPhone;
+    }
+
     public BigDecimal getActualPrice() {
         return actualPrice;
     }
 
-    @Override
     public void setActualPrice(BigDecimal actualPrice) {
         this.actualPrice = actualPrice;
     }
 
-    @Override
     public String getOrderNo() {
         return orderNo;
     }
 
-    @Override
     public void setOrderNo(String orderNo) {
         this.orderNo = orderNo;
     }

+ 106 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseSchedulePlanVo.java

@@ -0,0 +1,106 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/20
+ */
+@ApiModel
+public class CourseSchedulePlanVo implements Serializable {
+    @ApiModelProperty(value = "课程id")
+    private Long courseId;
+    @ApiModelProperty(value = "课程介绍")
+    private String courseIntroduce;
+    @ApiModelProperty(value = "课程状态 NOT_START未开始 ING进行中 COMPLETE已完成 CANCEL已取消")
+    private String courseStatus;
+    @ApiModelProperty(value = "课时数")
+    private Integer classNum;
+    @ApiModelProperty(value = "上课日期")
+    private Date classDate;
+    @ApiModelProperty(value = "上课时间")
+    private Date startTime;
+    @ApiModelProperty(value = "下课时间")
+    private Date endTime;
+    @ApiModelProperty(value = "结算状态 NOT_START未上课、WAIT待结算、COMPLETE已结算、CANCEL已取消")
+    private String salaryStatus;
+    @ApiModelProperty(value = "录播地址")
+    private String url;
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getCourseIntroduce() {
+        return courseIntroduce;
+    }
+
+    public void setCourseIntroduce(String courseIntroduce) {
+        this.courseIntroduce = courseIntroduce;
+    }
+
+    public String getCourseStatus() {
+        return courseStatus;
+    }
+
+    public void setCourseStatus(String courseStatus) {
+        this.courseStatus = courseStatus;
+    }
+
+    public Integer getClassNum() {
+        return classNum;
+    }
+
+    public void setClassNum(Integer classNum) {
+        this.classNum = classNum;
+    }
+
+    public Date getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(Date classDate) {
+        this.classDate = classDate;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getSalaryStatus() {
+        return salaryStatus;
+    }
+
+    public void setSalaryStatus(String salaryStatus) {
+        this.salaryStatus = salaryStatus;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+}
+

+ 134 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml

@@ -485,7 +485,140 @@
         </if>
     </select>
     <select id="selectLiveGroupStudent" resultType="com.yonge.cooleshow.biz.dal.vo.CourseSchedulePaymentVo">
-
+        SELECT
+            p.user_id_ AS studentId,
+            u.username_ AS studentName,
+            u.real_name_ AS studentRealName,
+            u.phone_ AS studentPhone,
+            p.actual_price_ AS actualPrice,
+            p.order_no_ AS orderNo,
+            o.create_time_ AS createdOrderTime
+        FROM course_schedule_student_payment p
+        LEFT JOIN sys_user u ON p.user_id_=u.id_
+        LEFT JOIN user_order o ON p.order_no_ = o.order_no_
+        WHERE p.course_group_id_=#{param.groupId}
+        <if test="param.search != null and param.search != ''">
+            AND (
+            p.course_id_ LIKE concat('%',#{param.search},'%') OR
+            p.user_id_ LIKE concat('%',#{param.search},'%') OR
+            u.username_ LIKE concat('%',#{param.search},'%') OR
+            u.phone_ LIKE concat('%',#{param.search},'%')
+            )
+        </if>
+        <if test="param.orderNo != null and param.orderNo != ''">
+            AND p.order_no_ = #{param.orderNo}
+        </if>
+        <if test="param.startTime != null">
+            AND o.create_time_ &lt;= #{param.startTime}
+        </if>
+        <if test="param.endTime != null">
+            AND o.create_time_ &gt;= #{param.endTime}
+        </if>
+    </select>
+    <select id="selectLiveGroupPlan" resultType="com.yonge.cooleshow.biz.dal.vo.CourseSchedulePlanVo">
+        SELECT
+            cs.id_ AS courseId,
+            g.course_introduce_ AS courseIntroduce,
+            cs.class_num_ AS classNum,
+            cs.class_date_ AS classDate,
+            cs.start_time_ AS startTime,
+            cs.end_time_ AS endTime,
+            ts.status_ AS salaryStatus,
+            v.url_ AS url,
+            cs.status_ AS courseStatus,
+            (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
+        FROM course_schedule cs
+        LEFT JOIN course_group g ON cs.course_group_id_=g.id_
+        LEFT JOIN course_schedule_teacher_salary ts ON cs.id_=ts.course_schedule_id_
+        LEFT JOIN live_room_video v ON cs.id_=v.course_id_
+        LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
+        WHERE cs.course_group_id_= #{param.groupId}
+        <if test="param.salaryStatus != null and param.salaryStatus != ''">
+            AND ts.status_ = #{param.salaryStatus}
+        </if>
+        <if test="param.startTime != null">
+            AND cs.start_time_ &lt;= #{param.startTime}
+        </if>
+        <if test="param.endTime != null">
+            AND cs.end_time_ &gt;= #{param.endTime}
+        </if>
+        <if test="param.endTime != null">
+            AND cs.id_ LIKE concat('%',#{param.courseId},'%')
+        </if>
+    </select>
+    <select id="selectVideoGroup" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupVideoVo">
+        SELECT
+            g.id_ AS groupId,
+            g.lesson_name_ AS lessonName,
+            g.lesson_subject_ AS subjectId,
+            s.name_ AS subjectName,
+            g.lesson_count_ AS lessonCount,
+            IFNULL(p.count_,0)  AS buyCount,
+            g.teacher_id_ AS teacherId,
+            u.username_ AS teacherName,
+            u.real_name_ AS teacherRealName,
+            g.create_time_ AS createTime
+        FROM video_lesson_group g
+        LEFT JOIN `subject` s ON g.lesson_subject_=s.id_
+        LEFT JOIN sys_user u ON g.teacher_id_=u.id_
+        LEFT JOIN (
+            SELECT video_lesson_group_id_,COUNT(1) AS count_ FROM video_lesson_purchase_record
+            WHERE order_status_='PAID' GROUP BY video_lesson_group_id_) p ON g.id_=p.video_lesson_group_id_
+        <where>
+            <if test="param.search != null and param.search != ''">
+                AND (
+                g.id_ LIKE concat('%',#{param.search},'%') OR
+                g.lesson_name_ LIKE concat('%',#{param.search},'%') OR
+                g.teacher_id_ LIKE concat('%',#{param.search},'%') OR
+                u.username_ LIKE concat('%',#{param.search},'%')
+                )
+            </if>
+            <if test="param.subjectId != null and param.subjectId != ''">
+                AND g.lesson_subject_ = #{param.subjectId}
+            </if>
+        </where>
+    </select>
+    <select id="selectVideoGroupStudent" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupStudentVo">
+        SELECT
+            r.student_id_ AS studentId,
+            u.username_ AS studentName,
+            u.real_name_ AS studentRealName,
+            u.phone_ AS studentPhone,
+            r.order_no_ AS orderNo,
+            r.pay_money_ AS payMoney,
+            o.create_time_ AS createTime
+        FROM video_lesson_purchase_record r
+        LEFT JOIN sys_user u ON r.student_id_=u.id_
+        LEFT JOIN user_order o ON r.order_no_=o.order_no_
+        WHERE r.order_status_='PAID'
+        AND video_lesson_group_id_ = #{param.groupId}
+        <if test="param.search != null and param.search != ''">
+            AND (
+            r.student_id_ LIKE concat('%',#{param.search},'%') OR
+            u.username_ LIKE concat('%',#{param.search},'%') OR
+            u.phone_ LIKE concat('%',#{param.search},'%')
+            )
+        </if>
+        <if test="param.orderNo != null and param.orderNo != ''">
+            AND r.order_no_ = #{param.orderNo}
+        </if>
+        <if test="param.startTime != null">
+            AND o.create_time_ &lt;= #{param.startTime}
+        </if>
+        <if test="param.endTime != null">
+            AND o.create_time_ &gt;= #{param.endTime}
+        </if>
+    </select>
+    <select id="selectVideoGroupPlan" resultType="com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail">
+        SELECT
+            id_ AS id,
+            video_title_ AS videoTitle,
+            video_content_ AS videoContent,
+            video_url_ AS videoUrl,
+            cover_url_ AS coverUrl
+        FROM video_lesson_group_detail
+        WHERE video_lesson_group_id_=#{param.groupId}
     </select>
 
     <update id="opsPreStudentNum">