Browse Source

琴房课

cy 3 years ago
parent
commit
4527976549

+ 14 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PianoRoomTime.java

@@ -25,11 +25,11 @@ public class PianoRoomTime implements Serializable {
 
     @TableField("remain_time_")
     @ApiModelProperty(value = "剩余时长(分钟)")
-    private Long remainTime;
+    private Integer remainTime;
 
     @TableField("frozen_time_")
     @ApiModelProperty(value = "冻结时长(分钟)")
-    private Long frozenTime;
+    private Integer frozenTime;
 
     @TableField("created_time_")
     @ApiModelProperty(value = "创建时间")
@@ -43,14 +43,6 @@ public class PianoRoomTime implements Serializable {
     @ApiModelProperty(value = "我的学员")
     private Integer studentCount;
 
-    public Integer getStudentCount() {
-        return studentCount;
-    }
-
-    public void setStudentCount(Integer studentCount) {
-        this.studentCount = studentCount;
-    }
-
     public Long getId() {
         return id;
     }
@@ -67,19 +59,19 @@ public class PianoRoomTime implements Serializable {
         this.teacherId = teacherId;
     }
 
-    public Long getRemainTime() {
+    public Integer getRemainTime() {
         return remainTime;
     }
 
-    public void setRemainTime(Long remainTime) {
+    public void setRemainTime(Integer remainTime) {
         this.remainTime = remainTime;
     }
 
-    public Long getFrozenTime() {
+    public Integer getFrozenTime() {
         return frozenTime;
     }
 
-    public void setFrozenTime(Long frozenTime) {
+    public void setFrozenTime(Integer frozenTime) {
         this.frozenTime = frozenTime;
     }
 
@@ -98,5 +90,13 @@ public class PianoRoomTime implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
+
+    public Integer getStudentCount() {
+        return studentCount;
+    }
+
+    public void setStudentCount(Integer studentCount) {
+        this.studentCount = studentCount;
+    }
 }
 

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -39,6 +39,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     STUDENT_BUY_PRACTICE("学员购买陪练课"),
     SMS_STUDENT_BUY_PRACTICE("学员购买陪练课(短信)"),
+    ARRANGE_PIANO_ROOM_CLASS("琴房课排课"),
 
     STUDENT_BUY_LIVE("学员购买直播课"),
     STUDENT_BUY_VIDEO("学员购买视频课"),

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java

@@ -247,5 +247,11 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
     Map<String, Object> selectConsumeTime(String month, Long teacherId);
 
     PageInfo<CourseScheduleRecordVo> selectConsumeTimeList(Map<String, Object> param);
+
+    void deleteCourse(Map<String, Object> param);
+
+    void updateCourseTime(Map<String, Object> param);
+
+    void updateCourseStudent(Map<String, Object> param);
 }
 

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

@@ -98,8 +98,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     private PianoRoomTimeDao pianoRoomTimeDao;
     @Autowired
     private UserBindingTeacherDao userBindingTeacherDao;
-    //    @Autowired
-//    private CourseScheduleStudentDao courseScheduleStudentDao;
     @Autowired
     private CourseScheduleRecordDao recordDao;
 
@@ -884,7 +882,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         timeList.forEach(o -> {
             boolean checkDataTime = this.checkStudentCourseTime(studentId, startTimeFun.apply(o), endTimeFun.apply(o));
             if (checkDataTime) {
-                throw new BizException("预计安排在" + DateUtil.dateToString(startTimeFun.apply(o), "yyyy年MM月dd号 HH点mm分") + "的课程时间存在冲突!");
+                throw new BizException("学生id:" + studentId + ",预计安排在" + DateUtil.dateToString(startTimeFun.apply(o), "yyyy年MM月dd号 HH点mm分") + "的课程时间存在冲突!");
             }
         });
     }
@@ -1120,7 +1118,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         CourseTimeEntity timeEntity = new CourseTimeEntity();
         timeEntity.setStartTime(startTime);
         timeEntity.setEndTime(endTime);
-        List<CourseTimeEntity> timeList=Arrays.asList(timeEntity);
+        List<CourseTimeEntity> timeList = Arrays.asList(timeEntity);
         //校验老师课程是否冲突
         this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
         //校验学生课程是否冲突
@@ -1513,11 +1511,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 Map<Long, List<CourseScheduleRecord>> collect = recordList.stream().collect(Collectors.groupingBy(CourseScheduleRecord::getTeacherId, Collectors.toList()));
                 collect.forEach((key, list) -> {
                     PianoRoomTime pianoRoomTime = pianoRoomTimeDao.selectOne(Wrappers.<PianoRoomTime>lambdaQuery().eq(PianoRoomTime::getTeacherId, key));
-                    Long frozenTime = pianoRoomTime.getFrozenTime();
+                    Integer frozenTime = pianoRoomTime.getFrozenTime();
 
                     PianoRoomTime roomTime = new PianoRoomTime();
                     roomTime.setTeacherId(key);
-                    roomTime.setFrozenTime(frozenTime - Long.valueOf(list.stream().mapToInt(CourseScheduleRecord::getConsumTime).sum()));
+                    roomTime.setFrozenTime(frozenTime - list.stream().mapToInt(CourseScheduleRecord::getConsumTime).sum());
                     roomTimeList.add(roomTime);
                 });
                 pianoRoomTimeDao.updateBatch(roomTimeList);
@@ -1633,8 +1631,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         if (pianoRoomTime == null) {
             throw new BizException("未查询到老师剩余时长");
         }
-        Long remainTime = pianoRoomTime.getRemainTime();
-        Long frozenTime = pianoRoomTime.getFrozenTime();
+        Integer remainTime = pianoRoomTime.getRemainTime();
+        Integer frozenTime = pianoRoomTime.getFrozenTime();
         if (consumTime > remainTime) {
             throw new BizException("剩余时长不足");
         }
@@ -1703,7 +1701,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             schedule.setSingleCourseTime(singleClssTime);
             baseMapper.insert(schedule);
 
-            //添加course_schedule_student
+            //添加payment
             for (Long studentId : studentIds) {
                 CourseScheduleStudentPayment payment = new CourseScheduleStudentPayment();
                 payment.setCourseGroupId(courseGroup.getId());
@@ -1711,6 +1709,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 payment.setUserId(studentId);
                 payment.setCourseType(CourseScheduleEnum.PIANO_ROOM_CLASS.getCode());
                 courseScheduleStudentPaymentService.save(payment);
+
+                pianoSend(teacherId, studentId);
             }
         }
 
@@ -1742,4 +1742,235 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         param.put("type", CourseScheduleEnum.PIANO_ROOM_CLASS.getCode());
         return PageUtil.pageInfo(recordDao.selectConsumeTimeList(PageUtil.getPageInfo(param), param));
     }
+
+    /**
+     * @Description: 排课推送
+     * @Author: cy
+     * @Date: 2022/5/31
+     */
+    public void pianoSend(Long teacherId, Long studentId) {
+        try {
+            //查询老师&学生信息
+            SysUser teacher = sysUserFeignService.queryUserById(teacherId);
+            SysUser student = sysUserFeignService.queryUserById(studentId);
+
+            //消息接收者(Key:用户编号 value:消息接收对象)
+            Map<Long, String> studentReceivers = new HashMap<>();
+            studentReceivers.put(studentId, student.getPhone());
+
+            String pianoUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.ARRANGE_PIANO_ROOM_CLASS.getCode());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.ARRANGE_PIANO_ROOM_CLASS,
+                    studentReceivers, null, 0, pianoUrl, ClientEnum.STUDENT.getCode(),
+                    teacher.getUsername());
+            log.info("老师:{},学员:{},排课推送成功", teacherId, studentId);
+        } catch (Exception e) {
+            log.error("老师:{},学员:{},排课推送失败,{}", teacherId, studentId, e);
+        }
+    }
+
+    /**
+     * @Description: 删除课程
+     * @Author: cy
+     * @Date: 2022/5/31
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteCourse(Map<String, Object> param) {
+        Long courseId = WrapperUtil.toLong(param, "courseId", "课程id不能为空!");
+        Long teacherId = WrapperUtil.toLong(param, "teacherId", "老师id不能为空!");
+
+        //校验课程是否存在
+        CourseSchedule schedule = baseMapper.selectOne(Wrappers.<CourseSchedule>lambdaQuery()
+                .eq(CourseSchedule::getId, courseId)
+                .eq(CourseSchedule::getTeacherId, teacherId)
+                .eq(CourseSchedule::getType, CourseScheduleEnum.PIANO_ROOM_CLASS.getCode()));
+        if (schedule == null) {
+            throw new BizException("课程不存在");
+        }
+
+        //课程是否未开始
+        if (!schedule.getStatus().equals(CourseScheduleEnum.NOT_START.getCode())) {
+            throw new BizException("只能删除未开始的课程");
+        }
+
+        //计算课时
+        List<CourseScheduleStudentPayment> studentPaymentList = paymentDao.selectList(Wrappers.<CourseScheduleStudentPayment>lambdaQuery().eq(CourseScheduleStudentPayment::getCourseId, courseId));
+        int time = studentPaymentList.size() * schedule.getSingleCourseTime();
+        PianoRoomTime pianoRoomTime = pianoRoomTimeDao.selectOne(Wrappers.<PianoRoomTime>lambdaQuery().eq(PianoRoomTime::getTeacherId, teacherId));
+        if (pianoRoomTime == null) {
+            throw new BizException("未查到剩余时长");
+        }
+        if (pianoRoomTime.getFrozenTime() - time < 0) {
+            throw new BizException("冻结时长计算错误");
+        }
+        pianoRoomTimeDao.update(null, Wrappers.<PianoRoomTime>lambdaUpdate()
+                .eq(PianoRoomTime::getTeacherId, teacherId)
+                .set(PianoRoomTime::getRemainTime, pianoRoomTime.getRemainTime() + time)
+                .set(PianoRoomTime::getFrozenTime, pianoRoomTime.getFrozenTime() - time));
+
+        //删除课程
+        baseMapper.deleteById(courseId);
+        //删除payment
+        paymentDao.delete(Wrappers.<CourseScheduleStudentPayment>lambdaQuery().eq(CourseScheduleStudentPayment::getCourseId, courseId));
+
+        //更新组课程数
+        Long groupId = schedule.getCourseGroupId();
+        Integer count = baseMapper.selectCount(Wrappers.<CourseSchedule>lambdaQuery().eq(CourseSchedule::getCourseGroupId, groupId));
+        if (count == 0) {
+            courseGroupService.getDao().deleteById(groupId);
+        } else {
+            courseGroupService.update(null, Wrappers.<CourseGroup>lambdaUpdate()
+                    .eq(CourseGroup::getId, groupId)
+                    .set(CourseGroup::getCourseNum, count));
+        }
+    }
+
+    /**
+     * @Description: 调整上课时间
+     * @Author: cy
+     * @Date: 2022/5/31
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void updateCourseTime(Map<String, Object> param) {
+        Long courseId = WrapperUtil.toLong(param, "courseId", "课程id不能为空!");
+        Long teacherId = WrapperUtil.toLong(param, "teacherId", "老师id不能为空!");
+        String startTimeStr = WrapperUtil.toStr(param, "startTime", "开始时间不能为空!");
+        String endTimeStr = WrapperUtil.toStr(param, "endTime", "结束时间不能为空!");
+
+        Date startTime = DateUtil.strToDate(startTimeStr);
+        Date endTime = DateUtil.strToDate(endTimeStr);
+        CourseTimeEntity courseTime = new CourseTimeEntity();
+        courseTime.setStartTime(startTime);
+        courseTime.setEndTime(endTime);
+        List<CourseTimeEntity> timeList = Arrays.asList(courseTime);
+
+        CourseSchedule courseSchedule = baseMapper.selectOne(Wrappers.<CourseSchedule>lambdaQuery()
+                .eq(CourseSchedule::getId, courseId)
+                .eq(CourseSchedule::getTeacherId, teacherId)
+                .eq(CourseSchedule::getStatus, CourseScheduleEnum.NOT_START.getCode())
+                .eq(CourseSchedule::getType, CourseScheduleEnum.PIANO_ROOM_CLASS.getCode()));
+        if (courseSchedule == null) {
+            throw new BizException("无法修改课程");
+        }
+
+        //校验上下课时间
+        Integer singleCourseTime = courseSchedule.getSingleCourseTime();
+        if (!DateUtil.offsetMinute(startTime, singleCourseTime).equals(endTime)) {
+            throw new BizException("课程结束时间计算错误");
+        }
+
+        //批量检查老师课时在数据库是否重复
+        this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
+
+        //校验购买的课程组每节课时间是否和自己的课时冲突
+        List<CourseScheduleStudentPayment> studentPayments = paymentDao.selectList(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+                .eq(CourseScheduleStudentPayment::getCourseId, courseId)
+                .eq(CourseScheduleStudentPayment::getCourseType, CourseScheduleEnum.PIANO_ROOM_CLASS.getCode()));
+        if (CollectionUtils.isNotEmpty(studentPayments)) {
+            for (CourseScheduleStudentPayment payment : studentPayments) {
+                this.batchCheckStudentCourseTime(payment.getUserId(), timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
+            }
+        }
+
+        //更新时间
+        baseMapper.update(null, Wrappers.<CourseSchedule>lambdaUpdate()
+                .eq(CourseSchedule::getId, courseId)
+                .set(CourseSchedule::getClassDate, DateUtil.trunc(startTime))
+                .set(CourseSchedule::getStartTime, startTime)
+                .set(CourseSchedule::getEndTime, endTime));
+    }
+
+    /**
+     * @Description: 调整学员
+     * @Author: cy
+     * @Date: 2022/5/31
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void updateCourseStudent(Map<String, Object> param) {
+        Long courseId = WrapperUtil.toLong(param, "courseId", "课程id不能为空!");
+        Long teacherId = WrapperUtil.toLong(param, "teacherId", "老师id不能为空!");
+        List<Integer> studentIdsList = (List<Integer>) param.get("studentIds");
+        List<Long> studentIds = JSONArray.parseArray(studentIdsList.toString(), Long.class);
+        if (CollectionUtils.isEmpty(studentIds)) {
+            throw new BizException("学生id不能为空");
+        }
+
+        List<UserBindingTeacher> bindingTeachers = userBindingTeacherDao.selectList(Wrappers.<UserBindingTeacher>lambdaQuery().eq(UserBindingTeacher::getTeacherId, teacherId));
+        if (CollectionUtils.isEmpty(bindingTeachers)) {
+            throw new BizException("未绑定学员");
+        }
+        List<Long> students = bindingTeachers.stream().map(UserBindingTeacher::getStudentId).collect(Collectors.toList());
+        if (!students.containsAll(studentIds)) {
+            throw new BizException("存在未绑定学员");
+        }
+
+        CourseSchedule courseSchedule = baseMapper.selectOne(Wrappers.<CourseSchedule>lambdaQuery()
+                .eq(CourseSchedule::getId, courseId)
+                .eq(CourseSchedule::getTeacherId, teacherId)
+                .eq(CourseSchedule::getStatus, CourseScheduleEnum.NOT_START.getCode())
+                .eq(CourseSchedule::getType, CourseScheduleEnum.PIANO_ROOM_CLASS.getCode()));
+        if (courseSchedule == null) {
+            throw new BizException("无法修改课程");
+        }
+        Integer singleCourseTime = courseSchedule.getSingleCourseTime();
+        Long groupId = courseSchedule.getCourseGroupId();
+
+        List<CourseScheduleStudentPayment> paymentList = paymentDao.selectList(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+                .eq(CourseScheduleStudentPayment::getCourseId, courseId)
+                .eq(CourseScheduleStudentPayment::getCourseType, CourseScheduleEnum.PIANO_ROOM_CLASS.getCode()));
+        if (CollectionUtils.isEmpty(paymentList)) {
+            throw new BizException("未查到排课学员");
+        }
+
+        PianoRoomTime pianoRoomTime = pianoRoomTimeDao.selectOne(Wrappers.<PianoRoomTime>lambdaQuery().eq(PianoRoomTime::getTeacherId, teacherId));
+        if (pianoRoomTime == null) {
+            throw new BizException("未查到剩余时长");
+        }
+        Integer frozenTime = pianoRoomTime.getFrozenTime();
+        Integer remainTime = pianoRoomTime.getRemainTime();
+
+        int i = studentIds.size() - paymentList.size();//新人数-原人数
+        if (i > 0) {//加人,扣时长
+            int courseTime = singleCourseTime * i;
+            if (remainTime - courseTime < 0) {
+                throw new BizException("剩余时长不足");
+            }
+            pianoRoomTimeDao.update(null, Wrappers.<PianoRoomTime>lambdaUpdate()
+                    .eq(PianoRoomTime::getTeacherId, teacherId)
+                    .set(PianoRoomTime::getRemainTime, remainTime - courseTime)
+                    .set(PianoRoomTime::getFrozenTime, frozenTime + courseTime));
+        }
+        if (i < 0) {//减人,释放时长
+            int courseTime = singleCourseTime * (-i);
+            pianoRoomTimeDao.update(null, Wrappers.<PianoRoomTime>lambdaUpdate()
+                    .eq(PianoRoomTime::getTeacherId, teacherId)
+                    .set(PianoRoomTime::getRemainTime, remainTime + courseTime)
+                    .set(PianoRoomTime::getFrozenTime, frozenTime - courseTime));
+        }
+
+        //删除原学员
+        paymentDao.delete(Wrappers.<CourseScheduleStudentPayment>lambdaQuery().eq(CourseScheduleStudentPayment::getCourseId, courseId));
+
+        CourseTimeEntity courseTime = new CourseTimeEntity();
+        courseTime.setStartTime(courseSchedule.getStartTime());
+        courseTime.setEndTime(courseSchedule.getEndTime());
+        List<CourseTimeEntity> timeList = Arrays.asList(courseTime);
+        //批量检查老师课时在数据库是否重复
+        this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
+
+        List<CourseScheduleStudentPayment> payments = new ArrayList<>();
+        for (Long studentId : studentIds) {
+            //校验购买的课程组每节课时间是否和自己的课时冲突
+            this.batchCheckStudentCourseTime(studentId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
+
+            CourseScheduleStudentPayment payment = new CourseScheduleStudentPayment();
+            payment.setUserId(studentId);
+            payment.setCourseId(courseId);
+            payment.setCourseGroupId(groupId);
+            payment.setCourseType(CourseScheduleEnum.PIANO_ROOM_CLASS.getCode());
+            payments.add(payment);
+        }
+
+        //重新新增学员
+        paymentDao.insertBatch(payments);
+    }
 }

+ 0 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ArrangeCourseVo.java

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
-import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseScheduleRecordVo.java

@@ -39,6 +39,17 @@ public class CourseScheduleRecordVo implements Serializable {
     @ApiModelProperty(value = "总消耗时长")
     private Integer consumTime;
 
+    @ApiModelProperty(value = "单课时长")
+    private Integer singleCourseTime;
+
+    public Integer getSingleCourseTime() {
+        return singleCourseTime;
+    }
+
+    public void setSingleCourseTime(Integer singleCourseTime) {
+        this.singleCourseTime = singleCourseTime;
+    }
+
     public Long getCourseId() {
         return courseId;
     }

+ 5 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRecordMapper.xml

@@ -24,10 +24,10 @@
         GROUP BY courseId
     </select>
     <select id="countTimeByTeacherId" resultType="java.lang.Long">
-        SELECT SUM(consum_time_) FROM course_schedule_record WHERE teacher_id_=#{teacherId} AND  date_format(end_time_,'%Y-%m') = #{month}
+        SELECT SUM(consum_time_) FROM course_schedule_piano WHERE teacher_id_=#{teacherId} AND  date_format(end_time_,'%Y-%m') = #{month}
     </select>
     <insert id="insertBatch">
-        INSERT INTO course_schedule_record (course_id_, teacher_id_, student_count_, consum_time_, end_time_) VALUES
+        INSERT INTO course_schedule_piano (course_id_, teacher_id_, student_count_, consum_time_, end_time_) VALUES
         <foreach collection ="recordList" item="item" index="index" separator =",">
             (#{item.courseId},#{item.teacherId},#{item.studentCount}, #{item.consumTime}, #{item.endTime})
         </foreach>
@@ -42,9 +42,10 @@
             s.start_time_ AS startTime,
             s.end_time_ AS endTime,
             r.student_count_ AS studentCount,
-            r.consum_time_ AS consumTime
+            r.consum_time_ AS consumTime,
+            s.single_course_time_ AS singleCourseTime
         FROM course_schedule s
-        LEFT JOIN course_schedule_record r ON r.course_id_ =s.id_
+        LEFT JOIN course_schedule_piano r ON r.course_id_ =s.id_
         LEFT JOIN course_group g ON s.course_group_id_=g.id_
         LEFT JOIN `subject` sb ON g.subject_id_ = sb.id_
         <where>

+ 47 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseScheduleController.java

@@ -223,5 +223,52 @@ public class TeacherCourseScheduleController extends BaseController {
         param.put("teacherId", user.getId());
         return succeed(courseScheduleService.selectConsumeTimeList(param));
     }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "courseId", dataType = "Long", value = "课程id"),
+    })
+    @ApiOperation("删除课程")
+    @PostMapping("/deleteCourse")
+    public HttpResponseResult<Object> deleteCourse(@RequestBody Map<String, Object> param) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        param.put("teacherId", user.getId());
+        courseScheduleService.deleteCourse(param);
+        return succeed();
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "courseId", dataType = "Long", value = "课程id"),
+            @ApiImplicitParam(name = "startTime", dataType = "String", value = "上课时间"),
+            @ApiImplicitParam(name = "endTime", dataType = "String", value = "下课时间"),
+    })
+    @ApiOperation("调整上课时间")
+    @PostMapping("/updateCourseTime")
+    public HttpResponseResult<Object> updateCourseTime(@RequestBody Map<String, Object> param) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        param.put("teacherId", user.getId());
+        courseScheduleService.updateCourseTime(param);
+        return succeed();
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "studentIds", dataType = "List", value = "学生id集合"),
+    })
+    @ApiOperation("调整上课学员")
+    @PostMapping("/updateCourseStudent")
+    public HttpResponseResult<Object> updateCourseStudent(@RequestBody Map<String, Object> param) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        param.put("teacherId", user.getId());
+        courseScheduleService.updateCourseStudent(param);
+        return succeed();
+    }
 }