|
@@ -828,6 +828,38 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 批量检查老师课时在数据库是否重复
|
|
|
+ *
|
|
|
+ * @param teacherId 老师id
|
|
|
+ * @param timeList 时间集合
|
|
|
+ */
|
|
|
+ private <T> void batchCheckTeacherCourseTime(Long teacherId, List<T> timeList, Function<T, Date> startTimeFun, Function<T, Date> endTimeFun) {
|
|
|
+ //再校验数据库中课程时间和传入时间是否有交集
|
|
|
+ timeList.forEach(o -> {
|
|
|
+ boolean checkDataTime = this.checkTeacherCourseTime(teacherId, startTimeFun.apply(o), endTimeFun.apply(o));
|
|
|
+ if (checkDataTime) {
|
|
|
+ throw new BizException("预计安排在" + DateUtil.dateToString(startTimeFun.apply(o), "yyyy年MM月dd号 HH点mm分") + "的课程时间存在冲突!");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量检查学生课时在数据库是否重复
|
|
|
+ *
|
|
|
+ * @param studentId 老师id
|
|
|
+ * @param timeList 时间集合
|
|
|
+ */
|
|
|
+ private <T> void batchCheckStudentCourseTime(Long studentId, List<T> timeList, Function<T, Date> startTimeFun, Function<T, Date> endTimeFun) {
|
|
|
+ //再校验数据库中课程时间和传入时间是否有交集
|
|
|
+ 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分") + "的课程时间存在冲突!");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* @Description: 学生购买陪练课
|
|
|
* @Author: cy
|
|
|
* @Date: 2022/4/21
|
|
@@ -842,8 +874,24 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
PracticeScheduleDto scheduleDto = objectMapper.convertValue(orderReqInfo.getBizContent(), PracticeScheduleDto.class);
|
|
|
+ List<CourseScheduleDate> dateList = scheduleDto.getClassTime();
|
|
|
+ Integer courseNum = scheduleDto.getCourseNum();//课程数
|
|
|
+
|
|
|
+ //校验课时数
|
|
|
+ if (dateList.size() != courseNum) {
|
|
|
+ throw new BizException("课程数与课时数不符");
|
|
|
+ }
|
|
|
+ BigDecimal price=baseMapper.selectPrice(scheduleDto.getTeacherId(), scheduleDto.getSubjectId());//老师设置声部价格
|
|
|
+ BigDecimal decimal = new BigDecimal(courseNum);//选购课程节数
|
|
|
+ BigDecimal multiply = price.multiply(decimal);//预计总价
|
|
|
+ if (multiply.compareTo(scheduleDto.getCoursePrice())!=0){
|
|
|
+ throw new BizException("价格异常。预计价格:{},实际价格:{}",multiply,scheduleDto.getCoursePrice());
|
|
|
+ }
|
|
|
|
|
|
- //校验课程数与价格
|
|
|
+ //批量检查老师课时在数据库是否重复
|
|
|
+ batchCheckTeacherCourseTime(scheduleDto.getTeacherId(), dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getEndTime);
|
|
|
+ //批量检查学生课时在数据库是否重复
|
|
|
+ batchCheckStudentCourseTime(studentId, dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getEndTime);
|
|
|
|
|
|
String orderNo = orderReqInfo.getOrderNo();
|
|
|
scheduleDto.setType(CourseScheduleEnum.PRACTICE.getCode());
|