|
@@ -99,8 +99,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
@Autowired
|
|
|
private UserBindingTeacherDao userBindingTeacherDao;
|
|
|
@Autowired
|
|
|
- private CourseScheduleStudentDao courseScheduleStudentDao;
|
|
|
- @Autowired
|
|
|
private CourseScheduleRecordDao recordDao;
|
|
|
|
|
|
@Override
|
|
@@ -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分") + "的课程时间存在冲突!");
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -1117,23 +1115,14 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
throw new BizException("课程无人购买");
|
|
|
}
|
|
|
|
|
|
+ CourseTimeEntity timeEntity = new CourseTimeEntity();
|
|
|
+ timeEntity.setStartTime(startTime);
|
|
|
+ timeEntity.setEndTime(endTime);
|
|
|
+ List<CourseTimeEntity> timeList = Arrays.asList(timeEntity);
|
|
|
//校验老师课程是否冲突
|
|
|
- List<CourseSchedule> scheduleList = this.list(Wrappers.<CourseSchedule>lambdaQuery()
|
|
|
- .eq(CourseSchedule::getTeacherId, teacherId)
|
|
|
- .in(CourseSchedule::getStatus, Lists.newArrayList(CourseScheduleEnum.NOT_START.getCode(), CourseScheduleEnum.ING.getCode())));
|
|
|
- for (CourseSchedule courseSchedule : scheduleList) {
|
|
|
- if (inInterSection(startTime, endTime, courseSchedule.getStartTime(), courseSchedule.getEndTime(), true)) {
|
|
|
- throw new BizException("老师排课冲突,课程id:{}", courseSchedule.getId());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
|
|
|
//校验学生课程是否冲突
|
|
|
- List<CourseSchedule> studentList = baseMapper.selectSchedule(courseId);
|
|
|
- for (CourseSchedule courseSchedule : studentList) {
|
|
|
- if (inInterSection(startTime, endTime, courseSchedule.getStartTime(), courseSchedule.getEndTime(), true)) {
|
|
|
- throw new BizException("学生排课冲突,课程id:{}", courseSchedule.getId());
|
|
|
- }
|
|
|
- }
|
|
|
+ this.batchCheckTeacherCourseTime(studentPayment.getUserId(), timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
|
|
|
|
|
|
baseMapper.courseAdjust(adjustVo);
|
|
|
}
|
|
@@ -1503,14 +1492,18 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
}
|
|
|
|
|
|
//课程结束(NOW ≥ 结束时间)
|
|
|
- List<CourseScheduleStudentVo> userList = courseScheduleStudentDao.selectUser();
|
|
|
+ List<CourseScheduleStudentVo> userList = paymentDao.selectUser();
|
|
|
if (CollectionUtils.isNotEmpty(userList)) {
|
|
|
//更新学生最近结课时间
|
|
|
- pianoRoomTimeDao.updateEndTime(userList);
|
|
|
+ List<CourseScheduleStudentVo> pianoUserList = userList.stream().filter((CourseScheduleStudentVo s) -> s.getType().equals(CourseScheduleEnum.PIANO_ROOM_CLASS.getCode())).collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isNotEmpty(pianoUserList)) {
|
|
|
+ pianoRoomTimeDao.updateEndTime(pianoUserList);
|
|
|
+ }
|
|
|
|
|
|
+ //统计琴房课消耗时长
|
|
|
List<CourseScheduleRecord> recordList = recordDao.sumCourseTime();
|
|
|
if (CollectionUtils.isNotEmpty(recordList)) {
|
|
|
- //记录消耗课时
|
|
|
+ //时长消费记录
|
|
|
recordDao.insertBatch(recordList);
|
|
|
|
|
|
//释放冻结课时
|
|
@@ -1531,6 +1524,29 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
//课程状态更新为COMPLETE
|
|
|
baseMapper.updateEndTime(userList);
|
|
|
}
|
|
|
+
|
|
|
+ //查完完成的课程
|
|
|
+ List<CourseCompleteVo> completeList = baseMapper.selectComplete();
|
|
|
+ if (CollectionUtils.isNotEmpty(completeList)) {
|
|
|
+ List<Long> gids = completeList.stream().map(CourseCompleteVo::getCourseGroupId).collect(Collectors.toList());
|
|
|
+ List<CourseGroup> courseGroups = courseGroupService.getDao().selectList(Wrappers.<CourseGroup>lambdaQuery().in(CourseGroup::getId, gids));
|
|
|
+ if (CollectionUtils.isNotEmpty(courseGroups)) {
|
|
|
+ List<Long> ids = new ArrayList<>();
|
|
|
+ for (CourseGroup group : courseGroups) {
|
|
|
+ for (CourseCompleteVo complete : completeList) {
|
|
|
+ Integer courseNum = group.getCourseNum();
|
|
|
+ Integer completeCount = complete.getCourseCount();
|
|
|
+ if (courseNum.equals(completeCount)) {
|
|
|
+ ids.add(complete.getCourseGroupId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(ids)) {
|
|
|
+ //同步课程组状态
|
|
|
+ courseGroupService.getDao().updateBatch(ids);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1567,7 +1583,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
public PageInfo<CourseStudentVo> selectStudent(Map<String, Object> param) {
|
|
|
Integer courseId = (Integer) param.get("courseId");
|
|
|
if (courseId != null) {
|
|
|
- List<CourseScheduleStudent> studentList = courseScheduleStudentDao.selectList(Wrappers.<CourseScheduleStudent>lambdaQuery().eq(CourseScheduleStudent::getCourseId, courseId));
|
|
|
+ List<CourseScheduleStudentPayment> studentList = paymentDao.selectList(Wrappers.<CourseScheduleStudentPayment>lambdaQuery().eq(CourseScheduleStudentPayment::getCourseId, courseId));
|
|
|
param.put("studentList", studentList);//根据课程id查询报课学员
|
|
|
}
|
|
|
return PageUtil.pageInfo(userBindingTeacherDao.selectStudent(PageUtil.getPageInfo(param), param));
|
|
@@ -1623,7 +1639,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
|
|
|
//校验学员是否绑定
|
|
|
List<UserBindingTeacher> bindingTeachers = userBindingTeacherDao.selectList(Wrappers.<UserBindingTeacher>lambdaQuery().eq(UserBindingTeacher::getTeacherId, teacherId));
|
|
|
- if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(bindingTeachers)) {
|
|
|
+ if (CollectionUtils.isEmpty(bindingTeachers)) {
|
|
|
throw new BizException("无绑定学员");
|
|
|
}
|
|
|
List<Long> studentList = bindingTeachers.stream().map(UserBindingTeacher::getStudentId).collect(Collectors.toList());
|
|
@@ -1664,7 +1680,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
courseGroup.setSubjectId(arrangeCourseVo.getSubjectId());
|
|
|
courseGroup.setSingleCourseMinutes(singleClssTime);
|
|
|
courseGroup.setCourseNum(classNum);
|
|
|
- courseGroup.setStatus(CourseGroupEnum.NOT_SALE.getCode());
|
|
|
+ courseGroup.setStatus(CourseGroupEnum.ING.getCode());
|
|
|
courseGroup.setCreatedBy(teacherId);
|
|
|
courseGroupService.getDao().insert(courseGroup);
|
|
|
|
|
@@ -1685,15 +1701,17 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
schedule.setSingleCourseTime(singleClssTime);
|
|
|
baseMapper.insert(schedule);
|
|
|
|
|
|
- //添加course_schedule_student
|
|
|
- List<CourseScheduleStudent> list = new ArrayList<>();
|
|
|
+ //添加payment
|
|
|
for (Long studentId : studentIds) {
|
|
|
- CourseScheduleStudent teacherTime = new CourseScheduleStudent();
|
|
|
- teacherTime.setStudentId(studentId);
|
|
|
- teacherTime.setCourseId(schedule.getId());
|
|
|
- list.add(teacherTime);
|
|
|
+ CourseScheduleStudentPayment payment = new CourseScheduleStudentPayment();
|
|
|
+ payment.setCourseGroupId(courseGroup.getId());
|
|
|
+ payment.setCourseId(schedule.getId());
|
|
|
+ payment.setUserId(studentId);
|
|
|
+ payment.setCourseType(CourseScheduleEnum.PIANO_ROOM_CLASS.getCode());
|
|
|
+ courseScheduleStudentPaymentService.save(payment);
|
|
|
+
|
|
|
+ pianoSend(teacherId, studentId);
|
|
|
}
|
|
|
- courseScheduleStudentDao.insertBatch(list);
|
|
|
}
|
|
|
|
|
|
//扣减piano_room_time
|
|
@@ -1704,11 +1722,255 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 根据月份查询消耗记录
|
|
|
+ * @Description: 根据月份查询消耗记录
|
|
|
+ * @Author: cy
|
|
|
+ * @Date: 2022/5/30
|
|
|
*/
|
|
|
public Map<String, Object> selectConsumeTime(String month, Long teacherId) {
|
|
|
Map<String, Object> map = new HashMap();
|
|
|
map.put("consumeTime", recordDao.countTimeByTeacherId(teacherId, month));
|
|
|
return map;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description: 消耗时长详情
|
|
|
+ * @Author: cy
|
|
|
+ * @Date: 2022/5/30
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public PageInfo<CourseScheduleRecordVo> selectConsumeTimeList(Map<String, Object> param) {
|
|
|
+ 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);
|
|
|
+ }
|
|
|
}
|