Browse Source

双周排课

zouxuan 1 year ago
parent
commit
9b49c7f9bc

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseTimeDto.java

@@ -19,8 +19,8 @@ public class CourseTimeDto {
     @ApiModelProperty(value = "开始排课时间(原来按周排课参数,从外层,提到内层)")
     private Date courseCreateStartTime;
 
-    @ApiModelProperty(value = "排课星期几")
-    private Integer dayOfWeek;
+//    @ApiModelProperty(value = "排课星期几")
+//    private Integer dayOfWeek;
     //当前排课日期
     private Calendar calendar;
 

+ 95 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -2371,16 +2371,16 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if (Objects.isNull(vipGroupCourseAdjustInfo.getVipGroupId())) {
             throw new BizException("请指定课程");
         }
-        if (Objects.isNull(vipGroupCourseAdjustInfo.getCourseCreateStartTime())) {
-            throw new BizException("请指定排课起始时间;");
-        }
+//        if (Objects.isNull(vipGroupCourseAdjustInfo.getCourseCreateStartTime())) {
+//            throw new BizException("请指定排课起始时间;");
+//        }
         if (CollectionUtils.isEmpty(vipGroupCourseAdjustInfo.getCourseTimes())) {
             throw new BizException("请指定排课周期");
         }
         if (StringUtils.isBlank(vipGroupCourseAdjustInfo.getCourseScheduleIds())) {
             throw new BizException("请指定需要调整的课程");
         }
-        Date courseCreateStartTime = vipGroupCourseAdjustInfo.getCourseCreateStartTime();
+//        Date courseCreateStartTime = vipGroupCourseAdjustInfo.getCourseCreateStartTime();
         Date now = new Date();
         Date today = DateUtil.stringToDate(DateUtil.dateToString(now, DateUtil.ISO_EXPANDED_DATE_FORMAT),
                 DateUtil.ISO_EXPANDED_DATE_FORMAT);
@@ -2461,8 +2461,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             throw new BizException("部分课程不存在");
         }
 
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(courseCreateStartTime);
+//        Calendar calendar = Calendar.getInstance();
+//        calendar.setTime(courseCreateStartTime);
         List<Date> courseStartDates = new ArrayList<>();
 
 		Set<String> holidayDays = new HashSet<>();
@@ -2475,7 +2475,94 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             }
 		}
 
-        while (true) {
+		while (true) {
+			for (CourseTimeDto courseTime : vipGroupCourseAdjustInfo.getCourseTimes()) {
+				if(courseTime.getCourseCreateStartTime() == null){
+					courseTime.setCourseCreateStartTime(vipGroupCourseAdjustInfo.getCourseCreateStartTime());
+				}
+				if (courseTime.getCourseCreateStartTime().before(today)) {
+					throw new BizException("排课起始时间不能小于当前时间");
+				}
+				if (courseTime.getCalendar() == null) {
+					Calendar calendar = Calendar.getInstance();
+					calendar.setTime(courseTime.getCourseCreateStartTime());
+					courseTime.setCalendar(calendar);
+				}
+				while (vipGroupCourseAdjustInfo.isHoliday() && holidayDays.contains(DateUtil.format(courseTime.getCalendar().getTime(), "yyyy-MM-dd"))) {
+					courseTime.getCalendar().add(Calendar.DATE, courseTime.getIntervalDays());
+				}
+				String dateYmdStr = DateUtil.dateToString(courseTime.getCalendar().getTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
+				dateYmdStr = dateYmdStr + " " + courseTime.getStartClassTime();
+				Date courseStartTime = DateUtil.stringToDate(dateYmdStr, "yyyy-MM-dd HH:mm");
+				Date courseEndTime = DateUtil.addMinutes(courseStartTime, singleClassMinutes);
+				if(DateUtil.daysBetween(DateUtil.stringToDate(DateUtil.format(courseStartTime,DateUtil.DEFAULT_PATTERN),DateUtil.DEFAULT_PATTERN),
+						DateUtil.stringToDate(DateUtil.format(courseEndTime,DateUtil.DEFAULT_PATTERN),DateUtil.DEFAULT_PATTERN)) > 0){
+					throw new BizException("单节课时不允许跨天");
+				}
+				courseStartDates.add(DateUtil.stringToDate(dateYmdStr, DateUtil.EXPANDED_DATE_TIME_FORMAT));
+				CourseSchedule courseSchedule = courseSchedules.get(courseStartDates.size() - 1);
+				//校验课程是否结算
+				this.checkCourseIsSettlement(courseSchedule);
+				int num = studentAttendanceDao.countStudentAttendenceNum(courseSchedule.getId().intValue());
+				if (num > 0) {
+					throw new BizException("{}[{}]{}-{}课程已点名",
+							courseSchedule.getName(),
+							courseSchedule.getId(),
+							DateUtil.dateToString(courseSchedule.getStartClassTime(),
+									DateUtil.EXPANDED_DATE_TIME_FORMAT),
+							DateUtil.dateToString(courseSchedule.getEndClassTime(),
+									DateUtil.EXPANDED_DATE_TIME_FORMAT));
+				}
+				courseSchedule.setStatus(CourseStatusEnum.NOT_START);
+				courseSchedule.setClassDate(courseStartTime);
+				courseSchedule.setStartClassTime(courseStartTime);
+				courseSchedule.setEndClassTime(courseEndTime);
+
+				Integer allowOnlineToOffline = 0;
+				if(Objects.nonNull(vipGroupActivity)){
+					allowOnlineToOffline = vipGroupActivity.getAllowOnlineToOffline();
+					ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(vipGroup.getId(), "VIP",null);
+					if(activityUserMapper != null){
+						if(vipGroup.getId().equals(activityUserMapper.getGiveVipGroupId())){
+							allowOnlineToOffline = vipGroupActivity.getGiveAllowOnlineToOffline();
+						}
+					}
+				}
+
+				if (Objects.nonNull(vipGroupCourseAdjustInfo.getTeachMode())) {
+					boolean onlineToOffline = courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)
+							&&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE);
+					boolean offlineToOnline = courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)
+							&&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.ONLINE);
+					if(onlineToOffline && Objects.nonNull(vipGroupActivity) && (allowOnlineToOffline == 0 || allowOnlineToOffline == 3)){
+						throw new BizException("此VIP课活动不支持线上课调整为线下课");
+					}
+					if(offlineToOnline&&Objects.nonNull(vipGroupActivity) && (allowOnlineToOffline == 2 || allowOnlineToOffline == 3)){
+						throw new BizException("此VIP课活动不支持线下课调整为线上课");
+					}
+					if(onlineToOffline&&Objects.isNull(vipGroupCourseAdjustInfo.getSchoolId())){
+						throw new BizException("请选择教学点");
+					}
+					courseSchedule.setTeachMode(vipGroupCourseAdjustInfo.getTeachMode());
+					if (vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)) {
+						if(Objects.nonNull(vipGroupCourseAdjustInfo.getSchoolId())){
+							courseSchedule.setSchoolId(vipGroupCourseAdjustInfo.getSchoolId());
+						}
+					} else {
+						courseSchedule.setSchoolId(null);
+					}
+				}
+				courseTime.getCalendar().add(Calendar.DATE, courseTime.getIntervalDays());
+				if (courseStartDates.size() == courseScheduleIds.size()) {
+					break;
+				}
+			}
+			if (courseStartDates.size() == courseScheduleIds.size()) {
+				break;
+			}
+		}
+
+        /*while (true) {
             if (vipGroupCourseAdjustInfo.isHoliday() && holidayDays.contains(DateUtil.format(calendar.getTime(), "yyyy-MM-dd"))) {
                 calendar.add(Calendar.DATE, 1);
                 continue;
@@ -2564,7 +2651,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 break;
             }
             calendar.add(Calendar.DATE, 1);
-        }
+        }*/
         checkNewCourseSchedules(courseSchedules, false,false);
         //如果是陪练课,调整时间不允许超过有效期
         if(groupType == PRACTICE){