Explorar o código

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan %!s(int64=5) %!d(string=hai) anos
pai
achega
43ffc07cc3

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleStudentDto.java

@@ -0,0 +1,25 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
+import com.ym.mec.biz.dal.enums.TeachTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/17
+ */
+public class CourseScheduleStudentDto extends CourseSchedule {
+
+private List<Integer> studentIds;
+
+    public List<Integer> getStudentIds() {
+        return studentIds;
+    }
+
+    public void setStudentIds(List<Integer> studentIds) {
+        this.studentIds = studentIds;
+    }
+}

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

@@ -1419,8 +1419,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
         }
 
-        //检测新排课冲突
-        courseScheduleService.checkNewCourseSchedules(courseScheduleList, false);
+        //排课处理
+        courseScheduleService.checkSnapCourseShchedules(courseScheduleList);
 
         //老师结算表
         courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);

+ 81 - 98
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -524,8 +524,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public List<Long> checkSnapCourseShchedules(List<CourseSchedule> courseSchedules) {
 		List<Long> courseScheduleIds = new ArrayList<>();
+		List<CourseScheduleStudentDto> courseScheduleStudents =  new ArrayList<>();
 		if(CollectionUtils.isEmpty(courseSchedules)){
 			return courseScheduleIds;
 		}
@@ -555,6 +557,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		existCourseSchedules=existCourseSchedules.stream()
 				.filter(courseSchedule -> !updateCourseScheduleIds.contains(courseSchedule.getId()))
 				.collect(Collectors.toList());
+		if(existCourseSchedules ==null || existCourseSchedules.size()==0){
+			return null;
+		}
 		//新课程对应的班级编号列表
 		List<Integer> newCourseScheduleClassGroupIds = courseSchedules
 				.stream()
@@ -598,111 +603,89 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		Map<Integer, IntegerAndIntegerListDto> classGroupTeachingTeacherMap = classGroupAndUserIdsMap.stream()
 				.collect(Collectors.toMap(IntegerAndIntegerListDto::getId, integerAndIntegerListDto -> integerAndIntegerListDto));
 
-		//将课程计划按照开课时间排序
-		allCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
-		if(allCourseSchedules.size()>1){
-			//记录连续冲突的次数
-			Integer repeatTimes=1;
-			for (int i=1;i<allCourseSchedules.size();i++){
-				for(int j=1;j<=repeatTimes;j++){
-					//当前课程
-					CourseSchedule preCourseSchedule = allCourseSchedules.get(i-j);
-					//后面一节课程
-					CourseSchedule backCourseSchedule = allCourseSchedules.get(i);
-					//判断前后两节课是否存在冲突
-					if(preCourseSchedule.getEndClassTime().before(backCourseSchedule.getStartClassTime())){
-						repeatTimes=j;
-						continue;
-					}
-					repeatTimes+=1;
-					if(existCourseScheduleIds.contains(preCourseSchedule.getId())
-							&&existCourseScheduleIds.contains(backCourseSchedule.getId())){
-						if(j==repeatTimes){
-							repeatTimes+=1;
-						}
-						continue;
-					}
+		existCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+		courseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 
-					//教师冲突检测
-					if(Objects.isNull(preCourseSchedule.getId())){
-						IntegerAndIntegerListDto integerAndIntegerListDto = classGroupTeachingTeacherMap.get(preCourseSchedule.getClassGroupId());
-						if(Objects.nonNull(integerAndIntegerListDto)){
-							preCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
-						}
-					}else if(existCourseScheduleIds.contains(preCourseSchedule.getId())){
-						IntegerAndIntegerListDto integerAndIntegerListDto = courseScheduleTeacherMap.get(preCourseSchedule.getId());
-						if(Objects.nonNull(integerAndIntegerListDto)){
-							preCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
-						}
-					}
-					if(Objects.isNull(backCourseSchedule.getId())){
-						IntegerAndIntegerListDto integerAndIntegerListDto = classGroupTeachingTeacherMap.get(backCourseSchedule.getClassGroupId());
-						if(Objects.nonNull(integerAndIntegerListDto)){
-							backCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
-						}
-					}else if(existCourseScheduleIds.contains(backCourseSchedule.getId())){
-						IntegerAndIntegerListDto integerAndIntegerListDto = courseScheduleTeacherMap.get(backCourseSchedule.getId());
-						if(Objects.nonNull(integerAndIntegerListDto)){
-							backCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
-						}
-					}
-					boolean isRepeat = false;
-					if(!CollectionUtils.isEmpty(preCourseSchedule.getTeachingTeacherIdList())
-							&&!CollectionUtils.isEmpty(backCourseSchedule.getTeachingTeacherIdList())){
-						List<Integer> repeatIds = preCourseSchedule.getTeachingTeacherIdList()
-								.stream().filter(backCourseSchedule.getTeachingTeacherIdList()::contains)
-								.collect(Collectors.toList());
-						if(!CollectionUtils.isEmpty(repeatIds)){
-							isRepeat = true;
-						}
-					}
-					//学生冲突检测
-					if(preCourseSchedule.getClassGroupId().equals(backCourseSchedule.getClassGroupId())){
-						//如果班级相同,则学生肯定存在冲突
-						isRepeat = true;
-					}
-					//如果班级不同,则需要检测两个班级是否存在重复的学生
-					List<ClassGroupStudentMapper> preClassGroupStudents=classGroupStudentsMap.get(preCourseSchedule.getClassGroupId());
-					List<ClassGroupStudentMapper> backClassGroupStudents=classGroupStudentsMap.get(backCourseSchedule.getClassGroupId());
-					//当前课程所在班级的学生编号列表
-					List<Integer> preClassGroupStudentIds = preClassGroupStudents.stream()
-							.map(ClassGroupStudentMapper::getUserId)
-							.collect(Collectors.toList());
-					//后面一节课程所在班级的学生编号列表
-					List<Integer> backClassGroupStudentIds = backClassGroupStudents.stream()
-							.map(ClassGroupStudentMapper::getUserId)
-							.collect(Collectors.toList());
-					List<Integer> repeatStudentIds = preClassGroupStudentIds.stream()
-							.filter(backClassGroupStudentIds::contains)
+		newNode:
+		for (CourseSchedule newCourseSchedule : courseSchedules) {
+			exitNode:
+			for (CourseSchedule existCourseSchedule : existCourseSchedules) {
+				if(newCourseSchedule.getEndClassTime().before(existCourseSchedule.getStartClassTime())){
+					continue newNode;
+				}
+				if(existCourseSchedule.getEndClassTime().before(newCourseSchedule.getStartClassTime())){
+					continue exitNode;
+				}
+
+				boolean isTeacherRepeat = false;
+				boolean isStudentRepeat = false;
+				//检测老师冲突
+				existCourseSchedule.setTeachingTeacherIdList(courseScheduleTeacherMap.get(existCourseSchedule.getId()).getIds());
+				newCourseSchedule.setTeachingTeacherIdList(classGroupTeachingTeacherMap.get(newCourseSchedule.getClassGroupId()).getIds());
+
+				if(!CollectionUtils.isEmpty(newCourseSchedule.getTeachingTeacherIdList())
+						&&!CollectionUtils.isEmpty(existCourseSchedule.getTeachingTeacherIdList())){
+					List<Integer> repeatIds = newCourseSchedule.getTeachingTeacherIdList()
+							.stream().filter(existCourseSchedule.getTeachingTeacherIdList()::contains)
 							.collect(Collectors.toList());
-					if(!CollectionUtils.isEmpty(repeatStudentIds)){
-						isRepeat = true;
+					if(!CollectionUtils.isEmpty(repeatIds)){
+						isTeacherRepeat = true;
 					}
+				}
 
-					if(isRepeat){
-						if(preCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.SNAP.getCode())
-								&&backCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.SNAP.getCode())){
-							throw new BizException("教师冲突");
-						}else if(preCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.SNAP.getCode())
-								&&backCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.VIP.getCode())){
-							throw new BizException("教师冲突");
-						}else if(preCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.VIP.getCode())
-								&&backCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.SNAP.getCode())){
-							throw new BizException("教师冲突");
-						}else{
-							if(!preCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.SNAP.getCode())
-								&&preCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.VIP.getCode())){
-								courseScheduleIds.add(preCourseSchedule.getId());
-							}
-							if(!backCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.SNAP.getCode())
-									&&backCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.VIP.getCode())){
-								courseScheduleIds.add(backCourseSchedule.getId());
-							}
-						}
-					}
+				//学生冲突检测
+				if(newCourseSchedule.getClassGroupId().equals(existCourseSchedule.getClassGroupId())){
+					//如果班级相同,则学生肯定存在冲突
+					isTeacherRepeat = true;
+				}
+				//如果班级不同,则需要检测两个班级是否存在重复的学生
+				List<ClassGroupStudentMapper> preClassGroupStudents=classGroupStudentsMap.get(newCourseSchedule.getClassGroupId());
+				List<ClassGroupStudentMapper> backClassGroupStudents=classGroupStudentsMap.get(existCourseSchedule.getClassGroupId());
+				//当前课程所在班级的学生编号列表
+				List<Integer> preClassGroupStudentIds = preClassGroupStudents.stream()
+						.map(ClassGroupStudentMapper::getUserId)
+						.collect(Collectors.toList());
+				//后面一节课程所在班级的学生编号列表
+				List<Integer> backClassGroupStudentIds = backClassGroupStudents.stream()
+						.map(ClassGroupStudentMapper::getUserId)
+						.collect(Collectors.toList());
+				List<Integer> repeatStudentIds = preClassGroupStudentIds.stream()
+						.filter(backClassGroupStudentIds::contains)
+						.collect(Collectors.toList());
+				if(!CollectionUtils.isEmpty(repeatStudentIds)){
+					isStudentRepeat = true;
 				}
+				if(!isTeacherRepeat && !isStudentRepeat){
+					continue;
+				}
+
+				if(existCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.SNAP.getCode())||existCourseSchedule.getClassGroupType().equals(ClassGroupTypeEnum.VIP.getCode())){
+					throw new BizException("排课冲突");
+				}
+
+				if(isTeacherRepeat){
+					courseScheduleIds.add(existCourseSchedule.getId());
+				}
+				if(isStudentRepeat){
+					CourseScheduleStudentDto courseScheduleStudentDto = new CourseScheduleStudentDto();
+					courseScheduleStudentDto.setId(existCourseSchedule.getId());
+					courseScheduleStudentDto.setStudentIds(repeatStudentIds);
+					courseScheduleStudents.add(courseScheduleStudentDto);
+				}
+
 			}
 		}
+		//老师冲突删除课程课程
+		if(courseScheduleIds.size()>0){
+			courseScheduleDao.batchDeleteCourseSchedules(courseScheduleIds);
+			courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
+			teacherAttendanceDao.batchDeleteByCourseSchedules(courseScheduleIds);
+			courseScheduleStudentPaymentDao.deleteByCourseSchedule(courseScheduleIds);
+		}
+		//学生冲突删除学生课程
+		if(courseScheduleStudents.size()>0){
+
+		}
 		return courseScheduleIds;
 	}
 

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -845,7 +845,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				default:
 					throw new BizException("活动类型错误!");
 			}
-			results.put("totalPrice",totalPrice.setScale(0,BigDecimal.ROUND_UP));
+			results.put("totalPrice",totalPrice.setScale(0,BigDecimal.ROUND_CEILING));
 		}
         return results;
     }