Переглянути джерело

Merge branch 'zx_saas_0428' of http://git.dayaedu.com/yonge/mec into dev

zouxuan 1 рік тому
батько
коміт
9643196b8d

+ 2 - 2
mec-application/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -19,13 +19,13 @@ import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.ModelMap;
-import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -357,7 +357,7 @@ public class CourseScheduleController extends BaseController {
 				return failed("请指定班级");
 			}
     		List<ClassGroup> classGroupList = classGroupDao.findClassGroupByMusicGroupIdAndType(batchInsertCoursesDto.getMusicGroupId(), ClassGroupTypeEnum.valueOf(batchInsertCoursesDto.getType().getCode()));
-    		if(classGroupList == null || classGroupList.size() == 0){
+    		if(CollectionUtils.isEmpty(classGroupList)){
     			return failed("没有查询到班级信息");
     		}
     		batchInsertCoursesDto.setClassGroupId(classGroupList.get(0).getId());

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

@@ -3,10 +3,13 @@ package com.ym.mec.biz.dal.dto;
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
+@Data
 public class CourseTimeDto {
 
 
@@ -15,6 +18,11 @@ public class CourseTimeDto {
 
     @ApiModelProperty(value = "排课星期几")
     private Integer dayOfWeek;
+    //当前排课日期
+    private Calendar calendar;
+
+    @ApiModelProperty(value = "间隔天数(默认7)")
+    private Integer intervalDays = 7;
 
     @ApiModelProperty(value = "开始排课日期,如果有值,则单独循环")
     private Date startDate;
@@ -43,22 +51,6 @@ public class CourseTimeDto {
     @ApiModelProperty(value = "课程老师设置", required = true)
     private List<ClassGroupTeacherMapper> classGroupTeacherMapperList;
 
-    public int getExpectCourseMinutes() {
-        return expectCourseMinutes;
-    }
-
-    public void setExpectCourseMinutes(int expectCourseMinutes) {
-        this.expectCourseMinutes = expectCourseMinutes;
-    }
-
-    public List<ClassGroupTeacherMapper> getClassGroupTeacherMapperList() {
-        return classGroupTeacherMapperList;
-    }
-
-    public void setClassGroupTeacherMapperList(List<ClassGroupTeacherMapper> classGroupTeacherMapperList) {
-        this.classGroupTeacherMapperList = classGroupTeacherMapperList;
-    }
-
     public Boolean getHoliday() {
         return isHoliday;
     }
@@ -66,68 +58,4 @@ public class CourseTimeDto {
     public void setHoliday(Boolean holiday) {
         isHoliday = holiday;
     }
-
-    public CourseSchedule.CourseScheduleType getCourseType() {
-        return courseType;
-    }
-
-    public void setCourseType(CourseSchedule.CourseScheduleType courseType) {
-        this.courseType = courseType;
-    }
-
-    public Date getStartDate() {
-        return startDate;
-    }
-
-    public void setStartDate(Date startDate) {
-        this.startDate = startDate;
-    }
-
-    public Date getEndDate() {
-        return endDate;
-    }
-
-    public void setEndDate(Date endDate) {
-        this.endDate = endDate;
-    }
-
-    public Integer getDayOfWeek() {
-        return dayOfWeek;
-    }
-
-    public void setDayOfWeek(Integer dayOfWeek) {
-        this.dayOfWeek = dayOfWeek;
-    }
-
-    public String getStartClassTime() {
-        return startClassTime;
-    }
-
-    public void setStartClassTime(String startClassTime) {
-        this.startClassTime = startClassTime;
-    }
-
-    public String getEndClassTime() {
-        return endClassTime;
-    }
-
-    public void setEndClassTime(String endClassTime) {
-        this.endClassTime = endClassTime;
-    }
-
-    public int getExpectCourseNum() {
-        return expectCourseNum;
-    }
-
-    public void setExpectCourseNum(int expectCourseNum) {
-        this.expectCourseNum = expectCourseNum;
-    }
-
-    public int getCourseNum() {
-        return courseNum;
-    }
-
-    public void setCourseNum(int courseNum) {
-        this.courseNum = courseNum;
-    }
 }

+ 14 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -32,6 +32,7 @@ import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateConvertor;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,8 +41,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
-import org.springframework.util.CollectionUtils;
-
 import java.math.BigDecimal;
 import java.time.*;
 import java.time.format.DateTimeFormatter;
@@ -2138,7 +2137,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
-            if (classGroup4MixDto.getCourseTimeDtoList() == null || classGroup4MixDto.getCourseTimeDtoList().size() == 0) {
+            if (CollectionUtils.isEmpty(classGroup4MixDto.getCourseTimeDtoList())) {
                 break;
             }
             //5、插入班级排课信息
@@ -2636,7 +2635,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 throw new BizException("主教与助教存在冲突");
             }
             //3、插入班级排课信息
-            LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0);
+//            LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0);
+
 
             if (!courseTypeMinutesMap.containsKey(classGroup4MixDto.getCourseType().getCode())) {
                 throw new BizException("{}课程类型暂无剩余课程时长", classGroup4MixDto.getCourseType().getMsg());
@@ -2678,8 +2678,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
             WhileNode:
             while (true) {
-                int dayOfWeek = now.getDayOfWeek().getValue();
+//                int dayOfWeek = now.getDayOfWeek().getValue();
                 for (CourseTimeDto courseTimeDto : classGroup4MixDto.getCourseTimeDtoList()) {
+                    //排课开始时间
+                    LocalDateTime now = LocalDateTime.parse(classGroup4MixDto.getStartDate() + " 00:00:00", formatter);
                     List<ClassGroupTeacherMapper> newClassGroupTeacherMapperList = courseTimeDto.getClassGroupTeacherMapperList();
 
                     Set<Integer> noRepeatTeacherIds = newClassGroupTeacherMapperList.stream().map(ClassGroupTeacherMapper::getUserId).collect(Collectors.toSet());
@@ -2692,19 +2694,20 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         throw new BizException("请设置主教");
                     }
 
-                    if (courseTimeDto.getDayOfWeek() < 1 || courseTimeDto.getDayOfWeek() > 7) {
-                        throw new BizException("排课循环周期错误,请核查");
-                    }
+//                    if (courseTimeDto.getDayOfWeek() < 1 || courseTimeDto.getDayOfWeek() > 7) {
+//                        throw new BizException("排课循环周期错误,请核查");
+//                    }
                     if (Objects.isNull(courseTimeDto.getStartDate()) || Objects.isNull(courseTimeDto.getEndDate())) {
                         throw new BizException("排课循环周期错误,请核查");
                     }
 
                     //跳过节假日
                     if (courseTimeDto.getHoliday() && holidayDays.contains(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
+                        now = now.plusDays(courseTimeDto.getIntervalDays());
                         continue;
                     }
 
-                    if (!courseTimeDto.getDayOfWeek().equals(dayOfWeek)) continue;
+//                    if (!courseTimeDto.getDayOfWeek().equals(dayOfWeek)) continue;
 
                     Date classDate = DateConvertor.toDate(now);
 
@@ -2717,6 +2720,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         if (totalCourseTimes <= generateCourseTimes) {
                             break WhileNode;
                         }
+                        now = now.plusDays(courseTimeDto.getIntervalDays());
                         continue;
                     }
 
@@ -2798,9 +2802,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                             return BaseController.failed(HttpStatus.MULTI_STATUS, "当前课程课酬预计为0,是否继续");
                         }
                     }
+                    now = now.plusDays(courseTimeDto.getIntervalDays());
                 }
-
-                now = now.plusDays(1);
             }
 
             if (totalCourseDuration > totalMinutes) {

+ 46 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -75,6 +75,7 @@ import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import static com.timevale.tgtext.text.html.b.i;
 import static com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType.MUSIC_NETWORK;
 import static com.ym.mec.biz.dal.enums.GroupType.*;
 import static com.ym.mec.biz.dal.enums.PracticeGroupType.FREE;
@@ -1649,13 +1650,56 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 holidayDays = new HashSet<>(JSON.parseArray(holidaySetting, String.class));
             }
 		}
-
 		Map<String, List<CourseSchedule>> result = new HashMap<String, List<CourseSchedule>>(){{
 			put("normal", new ArrayList<>());
 			put("revise", new ArrayList<>());
 			put("failed", new ArrayList<>());
 		}};
+		while (true) {
+			for (CourseTimeDto courseTime : courseAdjustInfo.getCourseTimes()) {
+				if (courseTime.getCalendar() == null) {
+					courseTime.setCalendar(calendar);
+				}
+				while (courseAdjustInfo.isHoliday() && holidayDays.contains(DateUtil.format(courseTime.getCalendar().getTime(), "yyyy-MM-dd"))) {
+					courseTime.getCalendar().add(Calendar.DATE, courseTime.getIntervalDays());
+				}
+				String dateYmdStr = DateUtil.dateToString(calendar.getTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
+				dateYmdStr = dateYmdStr + " " + courseTime.getStartClassTime();
+				Date courseStartTime = DateUtil.stringToDate(dateYmdStr, "yyyy-MM-dd HH:mm");
 
+				if (courseStartTime.compareTo(now) <= 0) {
+					throw new BizException("课程调整时间不得小于当前时间");
+				}
+
+				courseStartDates.add(DateUtil.stringToDate(dateYmdStr, DateUtil.EXPANDED_DATE_TIME_FORMAT));
+				CourseSchedule currentCourseSchedule = courseSchedules.get(courseStartDates.size() - 1);
+				int singleClassMinutes = DateUtil.minutesBetween(currentCourseSchedule.getStartClassTime(), currentCourseSchedule.getEndClassTime());
+				Date courseEndTime = DateUtil.addMinutes(courseStartTime, singleClassMinutes);
+				//校验课程是否结算
+				this.checkCourseIsSettlement(currentCourseSchedule);
+				int num = studentAttendanceDao.countStudentAttendenceNum(currentCourseSchedule.getId().intValue());
+				if (num > 0) {
+					throw new BizException("{}[{}]{}-{}课程已点名",
+							currentCourseSchedule.getName(),
+							currentCourseSchedule.getId(),
+							DateUtil.dateToString(currentCourseSchedule.getStartClassTime(),
+									DateUtil.EXPANDED_DATE_TIME_FORMAT),
+							DateUtil.dateToString(currentCourseSchedule.getEndClassTime(),
+									DateUtil.EXPANDED_DATE_TIME_FORMAT));
+				}
+				currentCourseSchedule.setStatus(CourseStatusEnum.NOT_START);
+				currentCourseSchedule.setClassDate(courseStartTime);
+				currentCourseSchedule.setStartClassTime(courseStartTime);
+				currentCourseSchedule.setEndClassTime(courseEndTime);
+				if (courseStartDates.size() == adjustCourseScheduleIds.size()) {
+					break;
+				}
+			}
+			if (courseStartDates.size() == adjustCourseScheduleIds.size()) {
+				break;
+			}
+		}
+/*
 		while (true) {
 			if (courseAdjustInfo.isHoliday() && holidayDays.contains(DateUtil.format(calendar.getTime(), "yyyy-MM-dd"))) {
 				calendar.add(Calendar.DATE, 1);
@@ -1712,7 +1756,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				break;
 			}
 			calendar.add(Calendar.DATE, 1);
-		}
+		}*/
 		for (CourseSchedule courseSchedule : courseSchedules) {
 			boolean b = checkSingleCourseConflict(courseSchedule, courseSchedules, result);
 			if(!b){