|
@@ -34,6 +34,7 @@ import com.ym.mec.biz.service.*;
|
|
|
import com.ym.mec.common.service.IdGeneratorService;
|
|
|
import org.apache.commons.beanutils.BeanUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.json.JSONArray;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
@@ -1672,14 +1673,17 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
if (classGroup4MixDtos.get(0).getCourseTimes().compareTo(0) <= 0) {
|
|
|
throw new BizException("排课次数必须大于0");
|
|
|
}
|
|
|
- List<ClassGroup4MixDto> classGroup4MixDtosBackup = new ArrayList<>();
|
|
|
+ //准备自动排课数据
|
|
|
+ List<ClassGroup4MixDto> classGroup4MixDtosBackup = Arrays.asList(new ClassGroup4MixDto[classGroup4MixDtos.size()]);
|
|
|
+ String batchNo = classGroup4MixDtos.get(0).getBatchNo();
|
|
|
if(StringUtils.isNotEmpty(classGroup4MixDtos.get(0).getClassCourseMinute())){
|
|
|
try {
|
|
|
- classGroup4MixDtosBackup = (List<ClassGroup4MixDto>)BeanUtils.cloneBean(classGroup4MixDtos);
|
|
|
+ Collections.copy(classGroup4MixDtosBackup,classGroup4MixDtos);
|
|
|
} catch (Exception e) {
|
|
|
throw new BizException("拷贝课程信息异常");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
|
|
|
Integer schoolId = musicGroup.getSchoolId();
|
|
|
|
|
@@ -1792,6 +1796,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
String classCourseMinute = null;
|
|
|
for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
|
|
|
List<CourseSchedule> courseSchedules = new ArrayList<>();
|
|
|
+ courseSchedules.clear();
|
|
|
if(classGroup4MixDto.getCourseTimeDtoList() == null || classGroup4MixDto.getCourseTimeDtoList().size() == 0){
|
|
|
break;
|
|
|
}
|
|
@@ -1799,17 +1804,17 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
LocalDateTime now = LocalDate.parse(classGroup4MixDto.getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay();
|
|
|
//是否是合班后的自动排课
|
|
|
classCourseMinute = classGroup4MixDto.getClassCourseMinute();
|
|
|
+ long courseDuration = Duration.between(LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getStartClassTime() + ":00", formatter),
|
|
|
+ LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getEndClassTime() + ":00", formatter))
|
|
|
+ .toMinutes();
|
|
|
if(StringUtils.isNotEmpty(classCourseMinute)){
|
|
|
Map<String, Integer> classCourseMinuteMap = JSON.parseObject(classCourseMinute, Map.class);
|
|
|
- classGroup4MixDto.setCourseTimes(classCourseMinuteMap.get(classGroup4MixDto.getCourseType().getCode()));
|
|
|
+ classGroup4MixDto.setCourseTimes(classCourseMinuteMap.get(classGroup4MixDto.getCourseType().getCode())/(int)courseDuration);
|
|
|
}else {
|
|
|
if(!courseTypeMinutesMap.containsKey(classGroup4MixDto.getCourseType().getCode())){
|
|
|
throw new BizException("{}课程类型暂无剩余课程时长", classGroup4MixDto.getCourseType().getMsg());
|
|
|
}
|
|
|
Integer totalMinutes = courseTypeMinutesMap.get(classGroup4MixDto.getCourseType().getCode());
|
|
|
- long courseDuration = Duration.between(LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getStartClassTime() + ":00", formatter),
|
|
|
- LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getEndClassTime() + ":00", formatter))
|
|
|
- .toMinutes();
|
|
|
classGroup4MixDto.setCourseTimes(totalMinutes/(int)courseDuration);
|
|
|
|
|
|
if(classGroup4MixDto.getCourseTimes()<=0){
|
|
@@ -1817,7 +1822,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
int times = 0;
|
|
|
|
|
|
Set<String> holidayDays = new HashSet<>();
|
|
@@ -1985,8 +1989,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
try {
|
|
|
courseScheduleService.checkNewCourseSchedules(courseSchedules, false);
|
|
|
}catch (BizException e){
|
|
|
- e.printStackTrace();
|
|
|
- }finally {
|
|
|
//如果出现冲突
|
|
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
//排课开始时间加一周
|
|
@@ -2010,7 +2012,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
}
|
|
|
//学生结算表
|
|
|
if (courseScheduleList.size() > 0) {
|
|
|
- courseScheduleStudentPaymentService.createForMusicGroup(musicGroupId, courseScheduleList, studentIdList);
|
|
|
+ if(StringUtils.isEmpty(classCourseMinute)){
|
|
|
+ courseScheduleStudentPaymentService.createForMusicGroup(musicGroupId, courseScheduleList, studentIdList);
|
|
|
+ }else {
|
|
|
+ courseScheduleStudentPaymentService.createForMusicGroup(musicGroupId, courseScheduleList, studentIdList,batchNo);
|
|
|
+ }
|
|
|
}
|
|
|
return classGroup;
|
|
|
}
|
|
@@ -3374,13 +3380,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
//记录申请信息
|
|
|
MusicGroupStudentClassAdjust musicGroupStudentClassAdjust = new MusicGroupStudentClassAdjust();
|
|
|
musicGroupStudentClassAdjust.setBatchNo(batchNo);
|
|
|
- musicGroupStudentClassAdjust.setBatchNo(batchNo);
|
|
|
musicGroupStudentClassAdjust.setCourseFlag(false);
|
|
|
musicGroupStudentClassAdjust.setMusicGroupId(musicGroup.getId());
|
|
|
musicGroupStudentClassAdjust.setOperatorId(sysUser.getId());
|
|
|
musicGroupStudentClassAdjust.setNewClassGroupJson(JSON.toJSONString(classGroup4MixDtos));
|
|
|
musicGroupStudentClassAdjust.setClassGroupIds(JSON.toJSONString(classGroupIds));
|
|
|
musicGroupStudentClassAdjust.setStudentIds(JSON.toJSONString(studentIds));
|
|
|
+
|
|
|
//获取需要冻结的课程
|
|
|
List<Long> allLockCourseIds = courseScheduleDao.queryStudentNotStartByClassIdsAndStudentIds(classGroupIds,null);
|
|
|
musicGroupStudentClassAdjust.setAllLockCourseIds(JSON.toJSONString(allLockCourseIds));
|
|
@@ -3390,7 +3396,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
//计算新增班级的可排课时长,总课次*默认时长 (用学员剩余的课程时长加上购买的时长,可能导致同一班级学员时长不一致)
|
|
|
musicGroupStudentClassAdjust.setClassCourseMinute(JSON.toJSONString(findClassCourseMinuteMap(classGroupIds)));
|
|
|
|
|
|
-
|
|
|
//如果需要审核,校验参数配置
|
|
|
checkMergeClassSplitClassAffirmParam(classGroup4MixDtos);
|
|
|
//如果缴费项目不需要审核,那么生成班级以及课表
|
|
@@ -3398,7 +3403,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
ClassGroup4MixDto classGroup4MixDto = classGroup4MixDtos.get(0);
|
|
|
classGroup4MixDto.setClassCourseMinute(musicGroupStudentClassAdjust.getClassCourseMinute());
|
|
|
List<CourseTimeDto> courseTimeDtoList = classGroup4MixDto.getCourseTimeDtoList();
|
|
|
- List<CourseTimeDto> courseTimeDtoListBackup = (List<CourseTimeDto>)BeanUtils.cloneBean(courseTimeDtoList);
|
|
|
+ List<CourseTimeDto> courseTimeDtoListBackup = Arrays.asList(new CourseTimeDto[courseTimeDtoList.size()]);
|
|
|
+ Collections.copy(courseTimeDtoListBackup,courseTimeDtoList);
|
|
|
//每种课程类型单独排课
|
|
|
for (CourseTimeDto courseTimeDto : courseTimeDtoListBackup) {
|
|
|
List<CourseTimeDto> courseTimeDtos = new ArrayList<>();
|
|
@@ -3417,7 +3423,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
}
|
|
|
musicGroupStudentClassAdjustDao.insert(musicGroupStudentClassAdjust);
|
|
|
}
|
|
|
- //审核通过后排课,删除指定课程,并解冻当前班级课程
|
|
|
|
|
|
private void checkMergeClassSplitClassAffirmParam(List<ClassGroup4MixDto> classGroup4MixDtos){
|
|
|
if (classGroup4MixDtos.get(0).getCourseTimes().compareTo(0) <= 0) {
|
|
@@ -3431,6 +3436,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
if(noRepeatTeacherIds.size()!=classGroupTeacherMapperList.size()){
|
|
|
throw new BizException("主教与助教存在冲突");
|
|
|
}
|
|
|
+ //所选课程不能有未开始的临时合并课程
|
|
|
List<Integer> allTeacherIds = classGroupTeacherMapperList.stream()
|
|
|
.map(ClassGroupTeacherMapper::getUserId)
|
|
|
.collect(Collectors.toList());
|