cy 3 лет назад
Родитель
Сommit
f5674799f1

+ 35 - 9
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseGroupController.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 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.CourseGroup;
@@ -13,10 +15,12 @@ import com.yonge.toolset.base.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.constraints.NotNull;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -30,6 +34,8 @@ import java.util.Map;
 public class CourseGroupController extends BaseController {
     @Autowired
     private CourseGroupService courseGroupService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
     @ApiOperation(value = "课程组管理-陪练课",notes = "{\n" +
             "    \"subjectId\":20,\n" +
@@ -129,22 +135,42 @@ public class CourseGroupController extends BaseController {
             "    \"status\":\"ING\"\n" +
             "}")
     @PostMapping(value = "/piano")
-    public HttpResponseResult<PageInfo<CourseGroupPianoVo>> selectLiveGroupInfo(@RequestBody CourseGroupSearch search) {
+    public HttpResponseResult<PageInfo<CourseGroupPianoVo>> selectPianoGroup(@RequestBody CourseGroupSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectPianoGroup(PageUtil.getPage(search), search)));
     }
 
     @ApiOperation(value = "课程组管理-琴房课-详情",notes = "{\n" +
-            "    \"courseGroupId\": 140,\n" +
-            "    \"teacherSign\": 0,\n" +
-            "    \"studentSign\": 0,\n" +
-            "    \"search\": \"游\",\n" +
-            "    \"status\": \"COMPLETE\",\n" +
-            "    \"salaryStatus\": \"NOT_START\",\n" +
-            "    \"startTime\": \"2022-05-21 08:00:00\",\n" +
-            "    \"endTime\": \"\"\n" +
+            "    \"courseGroupId\":334,\n" +
+            "    \"search\":\"\",\n" +
+            "    \"status\":\"\",\n" +
+            "    \"startTime\":null,\n" +
+            "    \"endTime\":null,\n" +
+            "    \"teacherSign\":null,\n" +
+            "    \"studentSign\":null\n" +
             "}")
     @PostMapping(value = "/piano/detail")
     public HttpResponseResult<PageInfo<CourseGroupPianoDetailVo>> selectPianoGroupDetail(@Validated @RequestBody CourseGroupDetailSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectPianoGroupDetail(PageUtil.getPage(search), search)));
     }
+
+    @ApiOperation(value = "课程组管理-琴房课-详情-学员名单")
+    @GetMapping(value = "/piano/student")
+    public HttpResponseResult<List<StudentSignVo>> studentSign(@NotNull Long courseId) {
+        return succeed(courseGroupService.studentSign(courseId,null));
+    }
+
+    @ApiOperation(value = "学员管理-琴房课",notes = "{\n" +
+            "    \"subjectId\":20,\n" +
+            "    \"search\":\"师\",\n" +
+            "    \"status\":\"ING\"\n" +
+            "}")
+    @PostMapping(value = "/piano/student")
+    public HttpResponseResult<PageInfo<CourseGroupPianoVo>> selectPianoGroupStudent(@RequestBody CourseGroupSearch search) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        search.setStudentId(user.getId());
+        return succeed(PageUtil.pageInfo(courseGroupService.selectPianoGroupStudent(PageUtil.getPage(search), search)));
+    }
 }

+ 19 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java

@@ -206,5 +206,24 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
      */
     IPage<CourseGroupPianoDetailVo> selectPianoGroupDetail(@Param("page") IPage<CourseGroupPianoDetailVo> page,
                                                            @Param("param") CourseGroupDetailSearch search);
+
+    /**
+     * 查询琴房课学员考勤
+     *
+     * @param courseId
+     * @param type
+     * @return
+     */
+    List<StudentSignVo> studentSign(@Param("courseId") Long courseId, @Param("type") String type);
+
+    /**
+     * 根据学员查询琴房课组
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoVo> selectPianoGroupStudent(@Param("page") IPage<CourseGroupPianoVo> page,
+                                                      @Param("param") CourseGroupSearch search);
 }
 

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java

@@ -39,6 +39,8 @@ public interface CourseScheduleRepliedDao extends BaseMapper<CourseScheduleRepli
 
     List<Long> selectAll();
 
+    List<Long> selectReplyStudent();
+
     List<Long> selectAllClass();
 
 	/**

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

@@ -8,6 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotNull;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author: cy
@@ -40,6 +41,16 @@ public class CourseGroupDetailSearch extends QueryInfo {
     private Long studentId;
     @ApiModelProperty(value = "老师id")
     private Long teacherId;
+    @ApiModelProperty(value = "课程id集合")
+    private List<Long> courseIds;
+
+    public List<Long> getCourseIds() {
+        return courseIds;
+    }
+
+    public void setCourseIds(List<Long> courseIds) {
+        this.courseIds = courseIds;
+    }
 
     public Long getStudentId() {
         return studentId;

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -261,5 +261,20 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * @return
      */
     IPage<CourseGroupPianoDetailVo> selectPianoGroupDetail(IPage<CourseGroupPianoDetailVo> page, CourseGroupDetailSearch search);
+
+    /**
+     * 课程组管理-琴房课-详情-学员名单
+     * @param courseId
+     * @return
+     */
+    List<StudentSignVo> studentSign(Long courseId,String type);
+
+    /**
+     * 学员管理-琴房课
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoVo> selectPianoGroupStudent(IPage<CourseGroupPianoVo> page, CourseGroupSearch search);
 }
 

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

@@ -1097,13 +1097,50 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         }
     }
 
+    @Override
     public IPage<CourseGroupPianoVo> selectPianoGroup(IPage<CourseGroupPianoVo> page, CourseGroupSearch search) {
         return baseMapper.selectPianoGroup(page, search);
     }
 
     @Override
     public IPage<CourseGroupPianoDetailVo> selectPianoGroupDetail(IPage<CourseGroupPianoDetailVo> page, CourseGroupDetailSearch search) {
-        return baseMapper.selectPianoGroupDetail(page,search);
+        if (search.getStudentSign() != null) {
+            List<StudentSignVo> list = studentSign(null, CourseScheduleEnum.PIANO_ROOM_CLASS.getCode());
+            List<Long> collect=new ArrayList<>();
+            if (search.getStudentSign() == 0) {//异常学生
+                collect = list.stream().filter(s -> (s.getStudentOutSign() + s.getStudentInSign()) != 2).map(StudentSignVo::getCourseId).collect(Collectors.toList());
+            }
+            if (search.getStudentSign() == 1) {//正常学生
+                collect = list.stream().filter(s -> (s.getStudentOutSign() + s.getStudentInSign()) == 2).map(StudentSignVo::getCourseId).collect(Collectors.toList());
+            }
+            collect.add(Long.valueOf(-1));
+            search.setCourseIds(collect);
+        }
+
+        IPage<CourseGroupPianoDetailVo> pianoGroupDetail = baseMapper.selectPianoGroupDetail(page, search);
+        List<CourseGroupPianoDetailVo> records = pianoGroupDetail.getRecords();
+
+        for (CourseGroupPianoDetailVo record : records) {
+            List<StudentSignVo> studentSigns = studentSign(record.getCourseId(), null);
+            for (StudentSignVo studentSign : studentSigns) {
+                if ((studentSign.getStudentInSign() + studentSign.getStudentOutSign()) == 2) {//签到正常
+                    record.setStudentSign(1);
+                } else {//签到异常
+                    record.setStudentSign(0);
+                }
+            }
+        }
+        return pianoGroupDetail;
+    }
+
+    @Override
+    public List<StudentSignVo> studentSign(Long courseId, String type) {
+        return baseMapper.studentSign(courseId, type);
+    }
+
+    @Override
+    public IPage<CourseGroupPianoVo> selectPianoGroupStudent(IPage<CourseGroupPianoVo> page, CourseGroupSearch search) {
+        return baseMapper.selectPianoGroupStudent(page, search);
     }
 }
 

+ 15 - 19
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -661,30 +661,26 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @Date: 2022/4/11
      */
     public IPage<MyCourseVo> queryTeacherPracticeCourse(IPage<MyCourseVo> page, MyCourseSearch search) {
-        //查询所有已评价学生id
-        List<Long> studentList = repliedDao.selectAll();
-
         Integer replied = search.getReplied();
         if (replied != null) {
-            //按评价筛选 0:未评价 1:已评价
-            if (replied == 0) {
-                if (CollectionUtils.isEmpty(studentList)) {
-                    search.setRepliedIds(null);
-                } else {
-                    search.setRepliedIds(studentList);
-                }
+            //查询所有已评价学生id
+            List<Long> replyStudent = repliedDao.selectReplyStudent();
+            //查询所有购课用户
+            List<Long> userList = paymentDao.selectAll();
+
+            if (CollectionUtils.isEmpty(userList)) {
+                return page.setRecords(new ArrayList<>());
             }
 
-            if (replied == 1) {
-                //查询所有购课用户
-                List<Long> userList = paymentDao.selectAll();
-                //取差集
-                userList.removeAll(studentList);
-                if (CollectionUtils.isEmpty(userList)) {
-                    return page.setRecords(new ArrayList<>());
-                }
+            if (replied == 0) {//未评价
+                userList.removeAll(replyStudent);
                 search.setRepliedIds(userList);
             }
+
+            if (replied == 1) {//已评价
+                replyStudent.add(Long.valueOf(-1));
+                search.setRepliedIds(replyStudent);
+            }
             search.setStatus(CourseScheduleEnum.COMPLETE.getCode());
         }
         return page.setRecords(baseMapper.queryTeacherPracticeCourse(page, monthToDate(search)));
@@ -1130,7 +1126,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 .eq(CourseSchedule::getStatus, CourseScheduleEnum.NOT_START)
                 .eq(CourseSchedule::getType, CourseScheduleEnum.PRACTICE));
         if (ObjectUtil.isEmpty(schedule)) {
-            throw new BizException("课程不存在");
+            throw new BizException("无法调整该课程");
         }
 
         //查询是否有人购买

+ 38 - 56
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupPianoDetailVo.java

@@ -16,40 +16,54 @@ import java.util.Date;
 public class CourseGroupPianoDetailVo extends BaseEntity {
     @ApiModelProperty("课程id")
     private Long courseId;
+
     @ApiModelProperty("声部名称")
     private String subjectName;
+
     @ApiModelProperty("老师id")
     private Long teacherId;
+
     @ApiModelProperty("老师姓名")
     private String teacherName;
+
     @ApiModelProperty("老师真实姓名")
     private String teacherRealName;
-    @ApiModelProperty("学生id")
-    private Long studentId;
-    @ApiModelProperty("学生姓名")
-    private String studentName;
-    @ApiModelProperty("学生真实姓名")
-    private String studentRealName;
+
     @ApiModelProperty("课程状态 NOT_START未开始 ING进行中 COMPLETE已完成 CANCEL已取消")
     private String status;
+
+    @ApiModelProperty("学员人数")
+    private Integer studentCount;
+
+    @ApiModelProperty("扣减时长")
+    private Integer courseTime;
+
     @ApiModelProperty("开始时间")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date startTime;
+
     @ApiModelProperty("结束时间")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
+
     @ApiModelProperty("老师签到状态 0:异常 1:正常")
     private Integer teacherInSign;
+
     @ApiModelProperty("老师签退状态 0:异常 1:正常")
     private Integer teacherOutSign;
-    @ApiModelProperty("学生签到状态 0:异常 1:正常")
-    private Integer studentInSign;
-    @ApiModelProperty("学生签退状态 0:异常 1:正常")
-    private Integer studentOutSign;
-    @ApiModelProperty("NOT_START未上课、WAIT待结算、COMPLETE已结算、CANCEL已取消")
-    private String salaryStatus;
+
+    @ApiModelProperty("学生状态 0:异常 1:正常")
+    private Integer studentSign;
+
+    public Integer getStudentSign() {
+        return studentSign;
+    }
+
+    public void setStudentSign(Integer studentSign) {
+        this.studentSign = studentSign;
+    }
 
     public Long getCourseId() {
         return courseId;
@@ -91,36 +105,28 @@ public class CourseGroupPianoDetailVo extends BaseEntity {
         this.teacherRealName = teacherRealName;
     }
 
-    public Long getStudentId() {
-        return studentId;
-    }
-
-    public void setStudentId(Long studentId) {
-        this.studentId = studentId;
-    }
-
-    public String getStudentName() {
-        return studentName;
+    public String getStatus() {
+        return status;
     }
 
-    public void setStudentName(String studentName) {
-        this.studentName = studentName;
+    public void setStatus(String status) {
+        this.status = status;
     }
 
-    public String getStudentRealName() {
-        return studentRealName;
+    public Integer getStudentCount() {
+        return studentCount;
     }
 
-    public void setStudentRealName(String studentRealName) {
-        this.studentRealName = studentRealName;
+    public void setStudentCount(Integer studentCount) {
+        this.studentCount = studentCount;
     }
 
-    public String getStatus() {
-        return status;
+    public Integer getCourseTime() {
+        return courseTime;
     }
 
-    public void setStatus(String status) {
-        this.status = status;
+    public void setCourseTime(Integer courseTime) {
+        this.courseTime = courseTime;
     }
 
     public Date getStartTime() {
@@ -154,28 +160,4 @@ public class CourseGroupPianoDetailVo extends BaseEntity {
     public void setTeacherOutSign(Integer teacherOutSign) {
         this.teacherOutSign = teacherOutSign;
     }
-
-    public Integer getStudentInSign() {
-        return studentInSign;
-    }
-
-    public void setStudentInSign(Integer studentInSign) {
-        this.studentInSign = studentInSign;
-    }
-
-    public Integer getStudentOutSign() {
-        return studentOutSign;
-    }
-
-    public void setStudentOutSign(Integer studentOutSign) {
-        this.studentOutSign = studentOutSign;
-    }
-
-    public String getSalaryStatus() {
-        return salaryStatus;
-    }
-
-    public void setSalaryStatus(String salaryStatus) {
-        this.salaryStatus = salaryStatus;
-    }
 }

+ 78 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentSignVo.java

@@ -0,0 +1,78 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: cy
+ * @Date: 2022/6/15
+ */
+@ApiModel
+public class StudentSignVo extends BaseEntity {
+    @ApiModelProperty("学生id")
+    private Long userId;
+
+    @ApiModelProperty("学生姓名")
+    private String userName;
+
+    @ApiModelProperty("学生真实姓名")
+    private String realName;
+
+    @ApiModelProperty("老师签到状态 0:异常 1:正常")
+    private Integer studentInSign;
+
+    @ApiModelProperty("老师签退状态 0:异常 1:正常")
+    private Integer studentOutSign;
+
+    @ApiModelProperty("课程id")
+    private Long courseId;
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public Integer getStudentInSign() {
+        return studentInSign;
+    }
+
+    public void setStudentInSign(Integer studentInSign) {
+        this.studentInSign = studentInSign;
+    }
+
+    public Integer getStudentOutSign() {
+        return studentOutSign;
+    }
+
+    public void setStudentOutSign(Integer studentOutSign) {
+        this.studentOutSign = studentOutSign;
+    }
+}

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

@@ -696,6 +696,107 @@
     </select>
     <select id="selectPianoGroupDetail"
             resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupPianoDetailVo">
-
+        SELECT
+        cs.id_ AS courseId,
+        sb.id_ AS subjectId,
+        sb.name_ AS subjectName,
+        cs.teacher_id_ AS teacherId,
+        tu.username_ AS teacherName,
+        tu.real_name_ AS teacherRealName,
+        cs.status_ AS `status`,
+        a.studentCount AS studentCount,
+        (cs.single_course_time_ * a.studentCount) AS course_time_,
+        cs.start_time_ AS startTime,
+        cs.end_time_ AS endTime,
+        b.teacherInSign AS teacherInSign,
+        b.teacherOutSign AS teacherOutSign
+        FROM course_schedule cs
+        LEFT JOIN course_group cg ON cs.course_group_id_ = cg.id_
+        LEFT JOIN `subject` sb ON cg.subject_id_ = sb.id_
+        LEFT JOIN sys_user tu ON cs.teacher_id_ = tu.id_
+        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_
+        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
+        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
+        WHERE cs.type_='PIANO_ROOM_CLASS'
+        AND cs.course_group_id_=#{param.courseGroupId}
+        <if test="param.search != null and param.search != ''">
+            AND cs.id_ LIKE concat('%',#{param.search},'%')
+        </if>
+        <if test="param.status != null and param.status != ''">
+            AND cs.status_ = #{param.status}
+        </if>
+        <if test="param.startTime != null">
+            AND cs.start_time_ &lt;= #{param.startTime}
+        </if>
+        <if test="param.endTime != null">
+            AND cs.start_time_ &gt;= #{param.endTime}
+        </if>
+        <if test="param.teacherSign == 1">
+            AND b.teacherInSign = #{param.teacherSign}
+        </if>
+        <if test="param.teacherSign == 0">
+            AND b.teacherOutSign = #{param.teacherSign}
+        </if>
+        <if test="param.studentSign != null">
+            AND cs.id_ IN
+            <foreach collection="param.courseIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+    <select id="studentSign" resultType="com.yonge.cooleshow.biz.dal.vo.StudentSignVo">
+        SELECT
+        p.course_id_ AS courseId,
+        p.user_id_ AS userId,
+        u.username_ AS userName,
+        u.real_name_ AS realName,
+        ( CASE WHEN c.start_time_ &gt;= a.sign_in_time_ THEN 1 ELSE 0 END ) AS studentInSign,
+        ( CASE WHEN c.end_time_ &lt;= a.sign_out_time_ THEN 1 ELSE 0 END ) AS studentOutSign
+        FROM course_schedule_student_payment p
+        LEFT JOIN sys_user u ON p.user_id_=u.id_
+        LEFT JOIN course_schedule c ON p.course_id_=c.id_
+        LEFT JOIN student_attendance a ON p.user_id_=a.student_id_
+        <where>
+            <if test="courseId !=null">
+                AND p.course_id_=#{courseId}
+            </if>
+            <if test="type !=null and type!=''">
+                AND p.course_type_=#{type}
+            </if>
+        </where>
+    </select>
+    <select id="selectPianoGroupStudent" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupPianoVo">
+        SELECT DISTINCT
+            g.id_ AS courseGroupId,
+            g.name_ AS courseGroupName,
+            s.id_ AS subjectId,
+            s.name_ AS subjectName,
+            g.teacher_id_ AS teacherId,
+            u.username_ AS teacherName,
+            u.real_name_ AS teacherRealName,
+            g.course_num_ AS courseNum,
+            IFNULL(cm.count_,0) AS completeCount,
+            g.status_ AS `status`,
+            st.start_time_ AS startTime
+        FROM course_schedule_student_payment p
+        LEFT JOIN course_group g ON p.course_group_id_=g.id_
+        LEFT JOIN `subject` s ON g.subject_id_=s.id_
+        LEFT JOIN sys_user u ON g.teacher_id_=u.id_
+        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_
+        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_
+        WHERE p.course_type_='PIANO_ROOM_CLASS'
+        AND p.user_id_=#{param.studentId}
+        <if test="param.search != null and param.search != ''">
+            AND (
+            g.id_ LIKE concat('%',#{param.search},'%') OR
+            g.name_ LIKE concat('%',#{param.search},'%')
+            )
+        </if>
+        <if test="param.subjectId != null">
+            AND s.id_ = #{param.subjectId}
+        </if>
+        <if test="param.status != null and param.status != ''">
+            AND g.status_ = #{param.status}
+        </if>
     </select>
 </mapper>

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

@@ -209,7 +209,7 @@
         <if test="param.endDate !=null and param.endDate !=''">
             <![CDATA[ AND cs.class_date_  <= #{param.endDate} ]]>
         </if>
-        <if test="param.repliedIds !=null">
+        <if test="param.repliedIds !=null and param.repliedIds.size > 0">
             AND p.user_id_ IN
             <foreach collection="param.repliedIds" item="repliedIds" open="(" close=")" separator=",">
                 #{repliedIds}

+ 3 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml

@@ -92,6 +92,9 @@
     <select id="selectAll" resultType="java.lang.Long">
         SELECT student_id_ FROM course_schedule_replied WHERE course_group_type_='PRACTICE'
     </select>
+    <select id="selectReplyStudent" resultType="java.lang.Long">
+        SELECT student_id_ FROM course_schedule_replied WHERE course_group_type_='PRACTICE' AND teacher_replied_ != ''
+    </select>
     <update id="updateReplied" parameterType="com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied">
         UPDATE course_schedule_replied
         <set>