刘俊驰 8 ヶ月 前
コミット
5fdd5279de

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import cn.hutool.core.date.DateUnit;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -322,7 +323,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 Iterator<CourseTimeEntity> iterator = calendarEntity.getCourseTime().iterator();
                 while (iterator.hasNext()) {
                     CourseTimeEntity next = iterator.next();
-                    boolean flag = checkCourseTime(nowCourse, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime, next.getStartTime(), next.getEndTime());
+                    boolean flag = checkCourseTime(nowCourse, CourseTimeEntity::getStartTime, CourseTimeEntity::getFreeEndTime, next.getStartTime(), next.getFreeEndTime());
                     if (flag) {
                         iterator.remove();
                     }
@@ -442,6 +443,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 timeEntity.setEndTime(edate);
                 //再加上单节课休息时间
                 edate = DateUtil.addMinutes(edate, freeCourseMinutes);
+                timeEntity.setFreeEndTime(edate);
                 result.add(timeEntity);
             }
         }
@@ -611,10 +613,10 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         }
         for (CourseTimeEntity trainingPlanTimeDetail : timeList) {
             if (time.getStartTime().compareTo(trainingPlanTimeDetail.getStartTime()) < 0) {
-                if (time.getEndTime().compareTo(trainingPlanTimeDetail.getStartTime()) <= 0) {
+                if (time.getFreeEndTime().compareTo(trainingPlanTimeDetail.getStartTime()) <= 0) {
                     result.add(time);
                     return result;
-                } else if (time.getEndTime().compareTo(trainingPlanTimeDetail.getEndTime()) <= 0) {
+                } else if (time.getFreeEndTime().compareTo(trainingPlanTimeDetail.getFreeEndTime()) <= 0) {
                     CourseTimeEntity trainingPlanTimeDetail1 = new CourseTimeEntity();
                     trainingPlanTimeDetail1.setStartTime(time.getStartTime());
                     trainingPlanTimeDetail1.setEndTime(trainingPlanTimeDetail.getStartTime());
@@ -627,9 +629,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                     result.add(trainingPlanTimeDetail1);
                     time.setStartTime(trainingPlanTimeDetail.getEndTime());
                 }
-            } else if (time.getStartTime().compareTo(trainingPlanTimeDetail.getEndTime()) <= 0) {
-                if (time.getEndTime().compareTo(trainingPlanTimeDetail.getEndTime()) > 0) {
-                    time.setStartTime(trainingPlanTimeDetail.getEndTime());
+            } else if (time.getStartTime().compareTo(trainingPlanTimeDetail.getFreeEndTime()) <= 0) {
+                if (time.getFreeEndTime().compareTo(trainingPlanTimeDetail.getFreeEndTime()) > 0) {
+                    time.setStartTime(trainingPlanTimeDetail.getFreeEndTime());
                 } else {
                     return result;
                 }
@@ -653,16 +655,17 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         for (int i = 1; i < timeList.size(); i++) {
             CourseTimeEntity nextTime = timeList.get(i);
             // 如果下一个时间段的开始时间小于等于上一个时间段的结束时间
-            if (nextTime.getStartTime().compareTo(time.getEndTime()) <= 0 ) {
+            if (nextTime.getStartTime().compareTo(time.getFreeEndTime()) <= 0 ) {
                 // 合并时间段
-                if (nextTime.getEndTime().compareTo(time.getEndTime()) >= 0) {
+                if (nextTime.getFreeEndTime().compareTo(time.getFreeEndTime()) >= 0) {
                     time.setEndTime(nextTime.getEndTime());
+                    time.setFreeEndTime(nextTime.getFreeEndTime());
                 }
             } else {
                 // 保存上一个时间段
                 result.add(time);
                 // 重置时间段
-                if (nextTime.getEndTime().compareTo(time.getEndTime()) >= 0) {
+                if (nextTime.getFreeEndTime().compareTo(time.getFreeEndTime()) >= 0) {
                     time = nextTime;
                 }
             }
@@ -745,6 +748,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             CourseTimeEntity courseTimeEntity = new CourseTimeEntity();
             courseTimeEntity.setStartTime(DateUtil.addDays(time.getStartTime(), addDay));
             courseTimeEntity.setEndTime(DateUtil.addDays(time.getEndTime(), addDay));
+            courseTimeEntity.setFreeEndTime(DateUtil.addDays(time.getFreeEndTime(), addDay));
             times.add(courseTimeEntity);
         });
         entity.setCourseTime(times);
@@ -817,6 +821,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                     lockCourse.setClassDate(DateUtil.toDate(ymd));
                     lockCourse.setStartTime(courseTimeEntity.getStartTime());
                     lockCourse.setEndTime(courseTimeEntity.getEndTime());
+                    lockCourse.setFreeEndTime(courseTimeEntity.getFreeEndTime());
                     lockCourseList.add(lockCourse);
                 });
             }
@@ -842,7 +847,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                         v.forEach(course -> {
                             CourseTimeEntity courseTimeEntity = new CourseTimeEntity();
                             courseTimeEntity.setStartTime(course.getStartTime());
-                            courseTimeEntity.setEndTime(course.getFreeEndTime());
+                            courseTimeEntity.setEndTime(course.getEndTime());
+                            courseTimeEntity.setFreeEndTime(course.getFreeEndTime());
                             value.add(courseTimeEntity);
                         });
                         nowCourse.put(DateUtil.dateToString(k), value);
@@ -1461,16 +1467,24 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         baseMapper.update(null, Wrappers.<CourseSchedule>lambdaUpdate()
                 .eq(CourseSchedule::getId, adjustVo.getCourseId())
                 .set(CourseSchedule::getStartTime, DateUtil.getYesterday())
-                .set(CourseSchedule::getEndTime, DateUtil.getYesterday()));
+                .set(CourseSchedule::getEndTime, DateUtil.getYesterday())
+                .set(CourseSchedule::getFreeEndTime, DateUtil.getYesterday())
+        );
 
         CourseTimeEntity timeEntity = new CourseTimeEntity();
         timeEntity.setStartTime(startTime);
         timeEntity.setEndTime(endTime);
+
+        // 加上课间时间
+        int feeTime = Integer.parseInt(String.valueOf(cn.hutool.core.date.DateUtil.between(schedule.getEndTime(), schedule.getFreeEndTime(), DateUnit.MINUTE)));
+        Date freeEndTime = DateUtil.offsetMinute(endTime, feeTime);
+        timeEntity.setFreeEndTime(freeEndTime);
+
         List<CourseTimeEntity> timeList = Arrays.asList(timeEntity);
         //校验老师课程是否冲突
-        this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
+        this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getFreeEndTime);
         //校验学生课程是否冲突
-        this.batchCheckTeacherCourseTime(studentPayment.getUserId(), timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
+        this.batchCheckStudentCourseTime(studentPayment.getUserId(), timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
 
         baseMapper.courseAdjust(adjustVo);
 
@@ -2434,6 +2448,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             throw new BizException("无法修改课程");
         }
 
+        // 加上课间时间
+        int feeTime = Integer.parseInt(String.valueOf(cn.hutool.core.date.DateUtil.between(courseSchedule.getStartTime(), startTime, DateUnit.MINUTE)));
+        Date freeEndTime = DateUtil.offsetMinute(endTime, feeTime);
+        courseTime.setFreeEndTime(freeEndTime);
+
         //校验上下课时间
         Integer singleCourseTime = courseSchedule.getSingleCourseTime();
         if (!DateUtil.offsetMinute(startTime, singleCourseTime).equals(endTime)) {
@@ -2444,10 +2463,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         baseMapper.update(null, Wrappers.<CourseSchedule>lambdaUpdate()
                 .eq(CourseSchedule::getId, courseId)
                 .set(CourseSchedule::getStartTime, DateUtil.getYesterday())
+                .set(CourseSchedule::getFreeEndTime, DateUtil.getYesterday())
                 .set(CourseSchedule::getEndTime, DateUtil.getYesterday()));
 
         //批量检查老师课时在数据库是否重复
-        this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
+        this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getFreeEndTime);
 
         //校验购买的课程组每节课时间是否和自己的课时冲突
         List<CourseScheduleStudentPayment> studentPayments = paymentDao.selectList(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
@@ -2464,7 +2484,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 .eq(CourseSchedule::getId, courseId)
                 .set(CourseSchedule::getClassDate, DateUtil.trunc(startTime))
                 .set(CourseSchedule::getStartTime, startTime)
-                .set(CourseSchedule::getEndTime, endTime));
+                .set(CourseSchedule::getEndTime, endTime)
+                .set(CourseSchedule::getFreeEndTime, freeEndTime)
+        );
 
         if (CollectionUtils.isNotEmpty(studentPayments)) {
             SysUser teacher = sysUserService.getByUserId(teacherId);
@@ -2497,7 +2519,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                     0, null, ClientEnum.STUDENT.getCode(), teacher.getUsername(),"琴房课",courseName,dateString);
 
         } catch (Exception e) {
-            log.error("琴房课调整发送消息失败--> {}", e.fillInStackTrace());
+            log.error("琴房课调整发送消息失败", e);
         }
     }