Browse Source

优化陪练课排课逻辑

hgw 2 years ago
parent
commit
f8da7c0325

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

@@ -98,8 +98,8 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      *              <p> - teacherId 老师id
      *              <p> - year 年
      *              <p> - month 月
-     *              <p> - day 日
-     *              <p> - singleCourseMinutes 单课时时长(包含休息时间)
+     *              <p> - singleCourseMinutes 单课时时长(不包含休息时间)
+     *              <p> - freeCourseMinutes 单课时休息时长
      * @return 返回传入时间当月每日的剩余时间段
      */
     List<CourseCalendarEntity> createLiveCourseCalendar(Map<String, Object> param);

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

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -46,6 +47,7 @@ import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.function.BiConsumer;
+import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -443,31 +445,37 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      */
     private List<CourseCalendarEntity> generatePracticeCalendar(TeacherFreeTime teacherTime, LocalDate firstDay, LocalDate lastDay) {
         //将老师设置的陪练课时间结构化   key::数字周几 1~7  value:具体的时间 开始时间-结束时间
-        Map<Integer, List<CourseTimeEntity>> teacherPracticeTime = getTeacherPracticeTime(teacherTime);
+        Map<Integer, JSONArray> teacherPracticeTime = getTeacherPracticeTime(teacherTime);
         //每日日期数据
         List<CourseCalendarEntity> list = new ArrayList<>();
-        //添加的天数
-        int addDay = 0;
+
         //获取每日日期数据
         while (firstDay.isBefore(lastDay) || firstDay.isEqual(lastDay)) {
             CourseCalendarEntity entity = new CourseCalendarEntity();
-            List<CourseTimeEntity> times = new ArrayList<>();
             //获取当前日期
             entity.setDate(firstDay.toString());
             //获取当前日期周几
             int weekNum = firstDay.getDayOfWeek().getValue();
-            List<CourseTimeEntity> timeEntities = teacherPracticeTime.get(weekNum);
-            if (CollectionUtils.isNotEmpty(timeEntities)) {
-                //将每日上课时间时间添加到日历中
-                opsCourseDayTime(addDay, entity, times, timeEntities);
-            }
+            JSONArray jsonArray = teacherPracticeTime.get(weekNum);
+            List<CourseTimeEntity> timeEntities = jsonArray.stream()
+                    .map(t -> getCourseTimeEntity(entity, (JSONObject) t))
+                    .collect(Collectors.toList());
+            entity.setCourseTime(timeEntities);
             list.add(entity);
             firstDay = firstDay.plusDays(1L);
-            addDay++;
         }
         return list;
     }
 
+    private CourseTimeEntity getCourseTimeEntity(CourseCalendarEntity entity, JSONObject t) {
+        //拼接时间
+        BiFunction<String, String, Date> canCatTime = (date, time) -> DateUtil.toDateTime(date + " " + time);
+        CourseTimeEntity timeEntity = new CourseTimeEntity();
+        timeEntity.setStartTime(canCatTime.apply(entity.getDate(), t.getString("startTime")));
+        timeEntity.setEndTime(canCatTime.apply(entity.getDate(), t.getString("endTime")));
+        return timeEntity;
+    }
+
     /**
      * 将每日上课时间时间添加到日历中
      *
@@ -491,15 +499,17 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      *
      * @return key::数字周几 1~7  value:具体的时间 开始时间-结束时间
      */
-    private Map<Integer, List<CourseTimeEntity>> getTeacherPracticeTime(TeacherFreeTime teacherTime) {
-        Map<Integer, List<CourseTimeEntity>> teacherPracticeTime = new HashMap<>();
+    private Map<Integer, JSONArray> getTeacherPracticeTime(TeacherFreeTime teacherTime) {
+        Map<Integer, JSONArray> teacherPracticeTime = new HashMap<>();
         //将老师设置的陪练课时间放入map中
         BiConsumer<String, Integer> timeCon = (timeStr, weekNum) -> {
             if (StringUtils.isBlank(timeStr)) {
                 return;
             }
-            List<CourseTimeEntity> timeEntityList = new ArrayList<>(JSONObject.parseArray(timeStr, CourseTimeEntity.class));
-            teacherPracticeTime.put(weekNum, timeEntityList);
+            JSONArray objects = JSONObject.parseArray(timeStr);
+            if (CollectionUtils.isNotEmpty(objects)) {
+                teacherPracticeTime.put(weekNum, objects);
+            }
         };
         timeCon.accept(teacherTime.getMonday(), 1);
         timeCon.accept(teacherTime.getTuesday(), 2);
@@ -983,7 +993,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @Author: cy
      * @Date: 2022/4/26
      */
-    public List<TeacherSubjectPrice> teacherSubjectPrice(Long teacherId){
+    public List<TeacherSubjectPrice> teacherSubjectPrice(Long teacherId) {
         return teacherFreeTimeDao.selectPriceByTeacherId(teacherId);
     }
 }

+ 5 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java

@@ -578,11 +578,13 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         //{"day":"01","month":"05","year":"2022","singleCourseMinutes":60,"teacherId":4}
         Map<String, Object> param = new HashMap<>();
         param.put("day", "01");
-        param.put("month", "05");
+        param.put("month", "04");
         param.put("year", "2022");
         param.put("singleCourseMinutes", 60);
-        param.put("teacherId", 4);
-        List<CourseCalendarEntity> courseTimeEntities = courseScheduleService.createLiveCourseCalendar(param);
+        param.put("teacherId", "4");
+        param.put("studentId", 143);
+        List<CourseCalendarEntity> courseTimeEntities = courseScheduleService.createPracticeCourseCalender(param);
+//        List<CourseCalendarEntity> courseTimeEntities = courseScheduleService.createLiveCourseCalendar(param);
         result.put("自动生成课时", courseTimeEntities);
 
         //获取房间信息

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

@@ -63,7 +63,6 @@ public class TeacherCourseScheduleController extends BaseController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "year", dataType = "Integer", value = "年"),
             @ApiImplicitParam(name = "month", dataType = "Integer", value = "月"),
-            @ApiImplicitParam(name = "day", dataType = "Integer", value = "日"),
             @ApiImplicitParam(name = "singleCourseMinutes", dataType = "Integer", value = "单课时时长(不包含休息时间)"),
             @ApiImplicitParam(name = "freeCourseMinutes", dataType = "Integer", value = "单课时休息时长)"),
             @ApiImplicitParam(name = "teacherId", dataType = "Long", value = "老师id"),