|
@@ -2631,6 +2631,126 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
+ public void confirmPreCourseSchedule(Integer musicGroupSchoolTermCourseDetailId) {
|
|
|
+ MusicGroupSchoolTermCourseDetail termCourseDetail = musicGroupSchoolTermCourseDetailDao.get(musicGroupSchoolTermCourseDetailId);
|
|
|
+ //校验所有学员的课时都有消耗
|
|
|
+ if(musicGroupSchoolTermStudentCourseDetailDao.checkNoCourse(musicGroupSchoolTermCourseDetailId)){
|
|
|
+ throw new BizException("操作失败:请确保所有学员都已排课");
|
|
|
+ }
|
|
|
+ //获取所有预排课课程列表
|
|
|
+ List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseListByMusicGroupId(termCourseDetail.getMusicGroupId());
|
|
|
+ if(courseSchedules.size() == 0){
|
|
|
+ throw new BizException("操作失败:请先预排课");
|
|
|
+ }
|
|
|
+ Map<Integer, List<CourseSchedule>> courseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getClassGroupId));
|
|
|
+ courseMap.keySet().forEach(e->{
|
|
|
+ //更新班级课程数
|
|
|
+ classGroupService.updateTotalClassTimes(e, courseMap.get(e).size());
|
|
|
+ });
|
|
|
+ List<Long> courseScheduleIds = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toList());
|
|
|
+ //取消预排课标记
|
|
|
+ courseScheduleDao.batchUpdateLockByCourseIds(courseScheduleIds,0,0);
|
|
|
+ //标记已排课
|
|
|
+ termCourseDetail.setCourseFlag(true);
|
|
|
+ musicGroupSchoolTermCourseDetailDao.update(termCourseDetail);
|
|
|
+ //更新学员服务指标
|
|
|
+ List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentDao.findByCourseScheduleIds(courseScheduleIds);
|
|
|
+ List<Integer> studentIds = studentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toList());
|
|
|
+ studentDao.updateStudentServiceTag(null, studentIds, YesOrNoEnum.YES.getCode());
|
|
|
+ //初始化老师考勤表
|
|
|
+ List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseScheduleIds);
|
|
|
+// List<ClassGroup> byCourseSchedules = classGroupDao.findByCourseSchedules(courseScheduleIds);
|
|
|
+
|
|
|
+// Map<Integer, ClassGroup> classGroupMap = new HashMap<Integer, ClassGroup>();
|
|
|
+// for (ClassGroup classGroup : byCourseSchedules) {
|
|
|
+// if (!classGroupMap.containsKey(classGroup.getId())) {
|
|
|
+// classGroupMap.put(classGroup.getId(), classGroup);
|
|
|
+// }
|
|
|
+// }
|
|
|
+ List<TeacherAttendance> teacherIdByCourseSchedule = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
|
|
|
+ Map<Long, List<TeacherAttendance>> courseScheduleTeacherAttendanceMap = teacherIdByCourseSchedule.stream()
|
|
|
+ .collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
|
|
|
+ List<TeacherAttendance> teacherAttendances = new ArrayList<>();
|
|
|
+ courseScheduleTeacherSalaries.forEach(courseScheduleTeacherSalary -> {
|
|
|
+ List<TeacherAttendance> teacherAttendancesTemp = courseScheduleTeacherAttendanceMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
|
|
|
+ List<Integer> collect = new ArrayList<>();
|
|
|
+ if (!CollectionUtils.isEmpty(teacherAttendancesTemp)) {
|
|
|
+ collect = teacherAttendancesTemp.stream().map(TeacherAttendance::getTeacherId).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ TeacherAttendance teacherAttendance = new TeacherAttendance();
|
|
|
+ teacherAttendance.setGroupType(courseScheduleTeacherSalary.getGroupType());
|
|
|
+ teacherAttendance.setClassGroupId(courseScheduleTeacherSalary.getClassGroupId());
|
|
|
+ teacherAttendance.setMusicGroupId(courseScheduleTeacherSalary.getMusicGroupId());
|
|
|
+ if (CollectionUtils.isEmpty(collect) || !collect.contains(courseScheduleTeacherSalary.getUserId())) {
|
|
|
+ teacherAttendance.setTeacherId(courseScheduleTeacherSalary.getUserId());
|
|
|
+ teacherAttendance.setCourseScheduleId(courseScheduleTeacherSalary.getCourseScheduleId());
|
|
|
+ teacherAttendances.add(teacherAttendance);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (!CollectionUtils.isEmpty(teacherAttendances)) {
|
|
|
+ teacherAttendanceDao.batchInsert(teacherAttendances);
|
|
|
+ }
|
|
|
+ imUserFriendService.refreshGroupImUserFriend(termCourseDetail.getMusicGroupId(),MUSIC);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void cancelPreCourseSchedule(Integer musicGroupSchoolTermCourseDetailId, Integer classGroupId) {
|
|
|
+ MusicGroupSchoolTermCourseDetail termCourseDetail = musicGroupSchoolTermCourseDetailDao.get(musicGroupSchoolTermCourseDetailId);
|
|
|
+ if(classGroupId == null){
|
|
|
+ List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseListByMusicGroupId(termCourseDetail.getMusicGroupId());
|
|
|
+ if(courseSchedules.size() == 0){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<Long> courseScheduleIds = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toList());
|
|
|
+ //取消所有预排课
|
|
|
+ musicGroupSchoolTermStudentCourseDetailDao.cleanMinutes(musicGroupSchoolTermCourseDetailId);
|
|
|
+ //删除课程以及关联的学员老师
|
|
|
+ courseScheduleStudentPaymentDao.deleteByCourseSchedule(courseScheduleIds);
|
|
|
+ courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
|
|
|
+ courseScheduleDao.deleteCourseSchedulesByClassGroupIds(courseScheduleIds);
|
|
|
+ }else {
|
|
|
+ List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseListByClassGroupId(classGroupId);
|
|
|
+ if(courseSchedules.size() == 0){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<Long> courseScheduleIds = courseSchedules.stream().map(c -> c.getId()).collect(Collectors.toList());
|
|
|
+ List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findByCourseScheduleIds(courseScheduleIds);
|
|
|
+ Map<Integer, List<CourseScheduleStudentPayment>> studentCourseMap = courseScheduleStudentPayments.stream().collect(Collectors.groupingBy(CourseScheduleStudentPayment::getUserId));
|
|
|
+
|
|
|
+ for (Integer studentId : studentCourseMap.keySet()) {
|
|
|
+ int preMemberCourseMinutes = 0;
|
|
|
+ int mixCourseMinutes = 0;
|
|
|
+ int singleCourseMinutes = 0;
|
|
|
+
|
|
|
+ List<CourseScheduleStudentPayment> courseScheduleStudentPaymentList = studentCourseMap.get(studentId);
|
|
|
+ List<Long> courseIds = courseScheduleStudentPaymentList.stream().map(c -> c.getId()).collect(Collectors.toList());
|
|
|
+ List<CourseSchedule> schedules = courseScheduleDao.findByCourseScheduleIds(courseIds);
|
|
|
+ Map<CourseScheduleType, List<CourseSchedule>> courseTypeMap = schedules.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
|
|
|
+ for (CourseScheduleType scheduleType : courseTypeMap.keySet()) {
|
|
|
+ List<CourseSchedule> courseScheduleList = courseTypeMap.get(scheduleType);
|
|
|
+ List<Long> courseScheduleIdList = courseScheduleList.stream().map(c -> c.getId()).collect(Collectors.toList());
|
|
|
+ //根据课程编号获取总时长
|
|
|
+ int courseMinutes = courseScheduleDao.sumCourseMinutes(courseScheduleIdList);
|
|
|
+ preMemberCourseMinutes += courseMinutes;
|
|
|
+ if(scheduleType == SINGLE || scheduleType == TRAINING_SINGLE){
|
|
|
+ singleCourseMinutes += courseMinutes;
|
|
|
+ }
|
|
|
+ if(scheduleType == MIX || scheduleType == TRAINING_MIX){
|
|
|
+ mixCourseMinutes += courseMinutes;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ musicGroupSchoolTermStudentCourseDetailDao.cutMinutes(musicGroupSchoolTermCourseDetailId,preMemberCourseMinutes,mixCourseMinutes,singleCourseMinutes,studentId);
|
|
|
+ }
|
|
|
+ //删除课程以及关联的学员老师
|
|
|
+ courseScheduleStudentPaymentDao.deleteByCourseSchedule(courseScheduleIds);
|
|
|
+ courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
|
|
|
+ courseScheduleDao.deleteCourseSchedulesByClassGroupIds(courseScheduleIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public HttpResponseResult preCourseSchedule(List<ClassGroup4MixDto> classGroup4MixDtos) {
|
|
|
Date date = new Date();
|
|
|
Integer classGroupId = classGroup4MixDtos.get(0).getClassGroupId();
|
|
@@ -2682,6 +2802,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0);
|
|
|
|
|
|
int totalCourseMinutes = classGroup4MixDto.getExpectStudentNum() * classGroup4MixDto.getCourseMinutes();
|
|
|
+ Integer totalMixCourseMinutes = 0;
|
|
|
+ Integer singleCourseMinutes = 0;
|
|
|
if(classGroup4MixDto.getCourseType() == SINGLE || classGroup4MixDto.getCourseType() == MIX ||
|
|
|
classGroup4MixDto.getCourseType() == TRAINING_SINGLE || classGroup4MixDto.getCourseType() == TRAINING_MIX){
|
|
|
//单技课和合奏课最大的排课时长不能超过44 * 45 分钟
|
|
@@ -2689,12 +2811,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
throw new BizException("操作失败:单技课和合奏课最大的排课时长不能超过{}分钟",44*45);
|
|
|
}
|
|
|
if(classGroup4MixDto.getCourseType() == SINGLE || classGroup4MixDto.getCourseType() == TRAINING_SINGLE){
|
|
|
+ singleCourseMinutes = totalCourseMinutes;
|
|
|
//获取所选学员最大的已消耗的单技课时长
|
|
|
int maxSingleCourseMinutes = musicGroupSchoolTermStudentCourseDetailDao.getMaxSingleCourseMinutes(musicGroupSchoolTermCourseDetailId,studentIds);
|
|
|
if(44 * 45 - maxSingleCourseMinutes > totalCourseMinutes){
|
|
|
throw new BizException("操作失败:所选学员可排单技课时长已不足{}分钟",totalCourseMinutes);
|
|
|
}
|
|
|
} else {
|
|
|
+ totalMixCourseMinutes = totalCourseMinutes;
|
|
|
int maxMixCourseMinutes = musicGroupSchoolTermStudentCourseDetailDao.getMaxMixCourseMinutes(musicGroupSchoolTermCourseDetailId,studentIds);
|
|
|
if(44 * 45 - maxMixCourseMinutes > totalCourseMinutes){
|
|
|
throw new BizException("操作失败:所选学员可排合奏课时长已不足{}分钟",totalCourseMinutes);
|
|
@@ -2870,10 +2994,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
|
|
|
now = now.plusDays(1);
|
|
|
}
|
|
|
-
|
|
|
-// if (totalCourseDuration > totalMinutes) {
|
|
|
-// throw new BizException("课程时长不足");
|
|
|
-// }
|
|
|
+ //更新学员的排课时长
|
|
|
+ musicGroupSchoolTermStudentCourseDetailDao.updateMinutes(musicGroupSchoolTermCourseDetailId,
|
|
|
+ totalCourseMinutes,
|
|
|
+ totalMixCourseMinutes,
|
|
|
+ singleCourseMinutes,
|
|
|
+ studentIds);
|
|
|
}
|
|
|
|
|
|
courseScheduleService.checkNewCourseSchedules(courseScheduleList, false, false);
|
|
@@ -2892,7 +3018,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
|
|
|
if (!CollectionUtils.isEmpty(studentList)) {
|
|
|
// studentDao.updateStudentServiceTag(null, studentIds, YesOrNoEnum.YES.getCode());
|
|
|
-
|
|
|
//学生结算表
|
|
|
courseScheduleStudentPaymentService.createForMemberMusicGroup(musicGroupId, courseScheduleList, studentIds);
|
|
|
}
|
|
@@ -4021,7 +4146,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
//冻结班级
|
|
|
classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 1);
|
|
|
//冻结所选班级的课程
|
|
|
- courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1);
|
|
|
+ courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1,null);
|
|
|
httpResponseResult.setMsg("学员班级调整申请已提交,缴费项目审核中");
|
|
|
}
|
|
|
return httpResponseResult;
|
|
@@ -4452,7 +4577,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
// 冻结班级
|
|
|
classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 1);
|
|
|
// 冻结所选班级的课程
|
|
|
- courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1);
|
|
|
+ courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1,null);
|
|
|
httpResponseResult.setMsg("操作成功:学员班级调整申请已提交,缴费项目审核中");
|
|
|
}
|
|
|
return httpResponseResult;
|
|
@@ -4488,7 +4613,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds, studentIds);
|
|
|
}
|
|
|
//解冻课程
|
|
|
- courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 0);
|
|
|
+ courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 0,null);
|
|
|
//解冻班级
|
|
|
classGroupIds.add(masterClassGroupId);
|
|
|
classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 0);
|
|
@@ -4510,7 +4635,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
|
|
|
@Override
|
|
|
public List<CourseSchedule> queryPreCourseList(Integer classGroupId) {
|
|
|
- List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseList(classGroupId);
|
|
|
+ List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseListByClassGroupId(classGroupId);
|
|
|
if(courseSchedules.size() > 0){
|
|
|
List<Long> courseIdList = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toList());
|
|
|
Map<Long, String> bishopTeacherMap = MapUtil.convertMybatisMap(courseScheduleTeacherSalaryDao.queryTeacherIdMap(courseIdList,"BISHOP"));
|
|
@@ -4522,9 +4647,4 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
}
|
|
|
return courseSchedules;
|
|
|
}
|
|
|
-
|
|
|
- @Override
|
|
|
- public HttpResponseResult confirmPreCourseSchedule(Integer musicGroupSchoolTermCourseDetailId) {
|
|
|
- return null;
|
|
|
- }
|
|
|
}
|