|
@@ -37,6 +37,7 @@ import org.apache.commons.beanutils.BeanUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Isolation;
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
@@ -1885,6 +1886,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
courseScheduleList.add(courseSchedule);
|
|
|
courseSchedules.add(courseSchedule);
|
|
|
|
|
|
+
|
|
|
times++;
|
|
|
|
|
|
for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
|
|
@@ -2025,6 +2027,319 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
+ public ClassGroup classGroupAdjust2(ClassGroup4MixDto classGroup4MixDto){
|
|
|
+ Date date = new Date();
|
|
|
+ String musicGroupId = classGroup4MixDto.getMusicGroupId();
|
|
|
+ MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
|
|
|
+ if (musicGroup == null) {
|
|
|
+ throw new BizException("乐团不存在");
|
|
|
+ }
|
|
|
+ if (classGroup4MixDto.getCourseTimes().compareTo(0) <= 0) {
|
|
|
+ throw new BizException("排课次数必须大于0");
|
|
|
+ }
|
|
|
+ Integer schoolId = musicGroup.getSchoolId();
|
|
|
+
|
|
|
+ List<Integer> studentIdList = classGroup4MixDto.getStudents();
|
|
|
+ List<StudentRegistration> studentList = studentRegistrationService.findStudentListByUserIdList(musicGroupId, studentIdList);
|
|
|
+
|
|
|
+ List<Integer> subjectIdList = studentList.stream().map(student -> student.getActualSubjectId()).collect(Collectors.toList());
|
|
|
+ TeachModeEnum teachMode = TeachModeEnum.OFFLINE;
|
|
|
+ if (classGroup4MixDto.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)) {
|
|
|
+ subjectIdList.clear();
|
|
|
+ subjectIdList.add(classGroup4MixDto.getSubjectId());
|
|
|
+ teachMode = TeachModeEnum.ONLINE;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Subject> subjectList = subjectService.findBySubjectByIdList(subjectIdList);
|
|
|
+
|
|
|
+ String subjectIds = subjectList.stream().map(subject -> subject.getId().toString()).collect(Collectors.joining(","));
|
|
|
+ String subjectNames = subjectList.stream().map(subject -> subject.getName()).collect(Collectors.joining("/"));
|
|
|
+
|
|
|
+ if(classGroup4MixDto.getType().equals(ClassGroupTypeEnum.MUSIC_NETWORK)){
|
|
|
+ teachMode = TeachModeEnum.ONLINE;
|
|
|
+ List<String> studentNames = studentDao.getStudentNames(studentIdList);
|
|
|
+ classGroup4MixDto.setClassGroupName(subjectNames + "•" + StringUtils.join(studentNames, ","));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (classGroup4MixDto.getType() == null) {
|
|
|
+ classGroup4MixDto.setType(ClassGroupTypeEnum.NORMAL);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroup4MixDto.getClassGroupTeacherMapperList();
|
|
|
+
|
|
|
+ Set<Integer> noRepeatTeacherIds = classGroupTeacherMapperList.stream().map(ClassGroupTeacherMapper::getUserId).collect(Collectors.toSet());
|
|
|
+ if(noRepeatTeacherIds.size()!=classGroupTeacherMapperList.size()){
|
|
|
+ throw new BizException("主教与助教存在冲突");
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer teacherId = null;
|
|
|
+ for (ClassGroupTeacherMapper groupTeacherMapper : classGroupTeacherMapperList) {
|
|
|
+ if (groupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP)) {
|
|
|
+ teacherId = groupTeacherMapper.getUserId();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ String classCourseMinute = classGroup4MixDto.getClassCourseMinute();
|
|
|
+
|
|
|
+ //5、插入班级排课信息
|
|
|
+ LocalDateTime now = LocalDate.parse(classGroup4MixDto.getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay();
|
|
|
+ //获取默认的排课时长
|
|
|
+ String courseDefaultMinutes = sysConfigDao.findConfigValue("music_course_default_minutes");
|
|
|
+ JSONObject jsonObject = JSON.parseObject(courseDefaultMinutes);
|
|
|
+ long classCourseDuration = Integer.parseInt(jsonObject.get(classGroup4MixDto.getCourseType().getCode()).toString());
|
|
|
+//
|
|
|
+ Map<String, Integer> classCourseMinuteMap = JSON.parseObject(classCourseMinute, Map.class);
|
|
|
+ classGroup4MixDto.setCourseTimes(classCourseMinuteMap.get(classGroup4MixDto.getCourseType().getCode())/(int)classCourseDuration);
|
|
|
+
|
|
|
+ Set<String> holidayDays = new HashSet<>();
|
|
|
+ if (classGroup4MixDto.getHoliday()) {
|
|
|
+ SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
|
|
|
+ if (Objects.nonNull(holidaySetting) && StringUtils.isNotBlank(holidaySetting.getParanValue())) {
|
|
|
+ holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<CourseSchedule> courseScheduleList = new ArrayList<>();
|
|
|
+ int times = 0;
|
|
|
+ WhileNode:
|
|
|
+ while (true) {
|
|
|
+ if (classGroup4MixDto.getHoliday() && holidayDays.contains(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
|
|
|
+ now = now.plusDays(1);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ int dayOfWeek = now.getDayOfWeek().getValue();//当前星期
|
|
|
+ for (CourseTimeDto courseTimeDto : classGroup4MixDto.getCourseTimeDtoList()) {
|
|
|
+ if (courseTimeDto.getDayOfWeek() < 1 || courseTimeDto.getDayOfWeek() > 7) {
|
|
|
+ throw new BizException("排课循环周期错误,请核查");
|
|
|
+ }
|
|
|
+ if (!courseTimeDto.getDayOfWeek().equals(dayOfWeek)) continue;
|
|
|
+ Date classDate = DateConvertor.toDate(now);
|
|
|
+ String startClassTime = DateUtil.getDate(classDate) + " " + courseTimeDto.getStartClassTime() + ":00";
|
|
|
+ String endClassTime = DateUtil.getDate(classDate) + " " + courseTimeDto.getEndClassTime() + ":00";
|
|
|
+
|
|
|
+ CourseSchedule courseSchedule = new CourseSchedule();
|
|
|
+ courseSchedule.setSchoolId(schoolId);
|
|
|
+ courseSchedule.setMusicGroupId(musicGroupId);
|
|
|
+ courseSchedule.setStatus(CourseStatusEnum.NOT_START);
|
|
|
+ courseSchedule.setClassDate(classDate);
|
|
|
+ courseSchedule.setStartClassTime(DateUtil.stringToDate(startClassTime));
|
|
|
+ courseSchedule.setEndClassTime(DateUtil.stringToDate(endClassTime));
|
|
|
+ courseSchedule.setCreateTime(date);
|
|
|
+ courseSchedule.setUpdateTime(date);
|
|
|
+ courseSchedule.setTeachMode(teachMode);
|
|
|
+ courseSchedule.setType(classGroup4MixDto.getCourseType());
|
|
|
+ courseSchedule.setGroupType(MUSIC);
|
|
|
+ courseSchedule.setOrganId(musicGroup.getOrganId());
|
|
|
+ courseSchedule.setTeacherId(teacherId);
|
|
|
+ courseSchedule.setActualTeacherId(teacherId);
|
|
|
+ courseScheduleList.add(courseSchedule);
|
|
|
+
|
|
|
+ times++;
|
|
|
+
|
|
|
+ if (classGroup4MixDto.getCourseTimes().equals(times)) {
|
|
|
+ break WhileNode;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ now = now.plusDays(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ ClassGroup classGroup = classGroup4MixDto.getClassGroup();
|
|
|
+ //计算每节课的课酬
|
|
|
+ List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
|
|
|
+
|
|
|
+ if(classGroup == null){
|
|
|
+ //1、新建班级
|
|
|
+ classGroup = new ClassGroup();
|
|
|
+ classGroup.setMusicGroupId(classGroup4MixDto.getMusicGroupId());
|
|
|
+ classGroup.setSubjectIdList(subjectIds);
|
|
|
+ classGroup.setName(classGroup4MixDto.getClassGroupName());
|
|
|
+ classGroup.setExpectStudentNum(studentList.size());
|
|
|
+ classGroup.setStudentNum(studentList.size());
|
|
|
+ classGroup.setType(classGroup4MixDto.getType());
|
|
|
+ classGroup.setDelFlag(0);
|
|
|
+ classGroup.setGroupType(MUSIC);
|
|
|
+ classGroup.setCurrentClassTimes(0);
|
|
|
+ classGroup.setTotalClassTimes(classGroup4MixDto.getCourseTimes());
|
|
|
+ classGroup.setCreateTime(date);
|
|
|
+ classGroup.setUpdateTime(date);
|
|
|
+ classGroupDao.insert(classGroup);
|
|
|
+ for (CourseSchedule courseSchedule : courseScheduleList) {
|
|
|
+ courseSchedule.setClassGroupId(classGroup.getId());
|
|
|
+ if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MIX)) {
|
|
|
+ courseSchedule.setName(classGroup4MixDto.getCourseType().getMsg());
|
|
|
+ }else if(classGroup4MixDto.getCourseType().equals(CourseScheduleType.MUSIC_NETWORK)){
|
|
|
+ courseSchedule.setName(classGroup.getName());
|
|
|
+ } else {
|
|
|
+ courseSchedule.setName(subjectNames + "-" + classGroup4MixDto.getCourseType().getMsg());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //自动排课,校验冲突
|
|
|
+ if(courseScheduleList.size() > 0){
|
|
|
+ try {
|
|
|
+ courseScheduleService.checkNewCourseSchedules(courseScheduleList, false);
|
|
|
+ }catch (BizException e){
|
|
|
+ classGroup4MixDto.setClassGroup(classGroup);
|
|
|
+ //排课开始时间加一周
|
|
|
+ Date stringToDate = DateUtil.stringToDate(classGroup4MixDto.getStartDate(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
|
|
|
+ classGroup4MixDto.setStartDate(DateUtil.format(DateUtil.addDays(stringToDate, 7),DateUtil.ISO_EXPANDED_DATE_FORMAT));
|
|
|
+// 再次尝试排课
|
|
|
+ classGroupAdjust2(classGroup4MixDto);
|
|
|
+ }
|
|
|
+
|
|
|
+ //2、将学生加入新班级(学生注册表,关联表
|
|
|
+ List<ClassGroupStudentMapper> classGroupStudentMapperList = new ArrayList<>();
|
|
|
+ List<Integer> userIds = new ArrayList<>(); //用户ids
|
|
|
+ for (StudentRegistration studentRegistration : studentList) {
|
|
|
+ if (classGroup4MixDto.getType().equals(ClassGroupTypeEnum.NORMAL)) {
|
|
|
+ studentRegistration.setClassGroupId(classGroup.getId());
|
|
|
+ studentRegistrationService.update(studentRegistration);
|
|
|
+ }
|
|
|
+
|
|
|
+ ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
|
|
|
+ classGroupStudentMapper.setMusicGroupId(musicGroupId);
|
|
|
+ classGroupStudentMapper.setClassGroupId(classGroup.getId());
|
|
|
+ classGroupStudentMapper.setUserId(studentRegistration.getUserId());
|
|
|
+ classGroupStudentMapper.setCreateTime(date);
|
|
|
+ classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
|
|
|
+ classGroupStudentMapper.setGroupType(MUSIC);
|
|
|
+ classGroupStudentMapperList.add(classGroupStudentMapper);
|
|
|
+
|
|
|
+ userIds.add(studentRegistration.getUserId());
|
|
|
+ }
|
|
|
+ classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMapperList);
|
|
|
+
|
|
|
+ for (ClassGroupTeacherMapper groupTeacherMapper : classGroupTeacherMapperList) {
|
|
|
+ groupTeacherMapper.setGroupType(classGroup.getGroupType());
|
|
|
+ groupTeacherMapper.setClassGroupId(classGroup.getId());
|
|
|
+ groupTeacherMapper.setMusicGroupId(classGroup4MixDto.getMusicGroupId());
|
|
|
+ userIds.add(groupTeacherMapper.getUserId());
|
|
|
+ }
|
|
|
+ //3、将老师加入关联关系
|
|
|
+ classGroupTeacherMapperDao.classGroupTeachersInsert(classGroupTeacherMapperList);
|
|
|
+ //创建IM群组
|
|
|
+ addImGroup(classGroup, userIds);
|
|
|
+
|
|
|
+ List<Integer> allTeacherIds = classGroupTeacherMapperList.stream()
|
|
|
+ .map(ClassGroupTeacherMapper::getUserId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ //所有教师列表
|
|
|
+ List<Teacher> teachers = teacherDao.findByTeacherIds(allTeacherIds);
|
|
|
+ Map<Integer, Teacher> teacherMap = teachers.stream()
|
|
|
+ .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
|
|
|
+
|
|
|
+ courseScheduleDao.batchAddCourseSchedules(courseScheduleList);
|
|
|
+
|
|
|
+ Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
|
|
|
+ for (CourseSchedule courseSchedule : courseScheduleList) {
|
|
|
+ //默认课程时长
|
|
|
+ for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
|
|
|
+ List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), null, null);
|
|
|
+ BigDecimal salary = new BigDecimal("0");
|
|
|
+
|
|
|
+ Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
|
|
|
+
|
|
|
+ TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(classGroup4MixDto.getCourseType());
|
|
|
+ Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
|
|
|
+ if (teacherDefaultMusicGroupSalary == null) {
|
|
|
+ throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
|
|
|
+ }
|
|
|
+ if ((classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE) ||
|
|
|
+ classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) &&
|
|
|
+ StringUtils.isBlank(teacherDefaultMusicGroupSalary.getSalaryRuleJson())) {
|
|
|
+ throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
|
|
|
+ } else if (teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary() == null
|
|
|
+ || teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary() == null
|
|
|
+ || teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() == null
|
|
|
+ || teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() == null) {
|
|
|
+ throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
|
|
|
+ }
|
|
|
+
|
|
|
+ //对应基准课酬
|
|
|
+ BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
|
|
|
+
|
|
|
+ SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
|
|
|
+ if (Objects.nonNull(teacher.getEntryDate())
|
|
|
+ && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
|
|
|
+ settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
|
|
|
+ }
|
|
|
+
|
|
|
+ //基准课酬
|
|
|
+ if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
|
|
|
+ //课程时长与结算单位时长占比
|
|
|
+ classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
+ baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
+ }
|
|
|
+ //阶梯课酬
|
|
|
+ if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
|
|
|
+ //课程时长与结算单位时长占比
|
|
|
+ classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
+ baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
|
|
|
+ }
|
|
|
+
|
|
|
+ //课堂课课酬改为按分钟数计算,并且时长占比向下取整
|
|
|
+ if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
|
|
|
+ baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
+ classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
|
|
|
+ }
|
|
|
+
|
|
|
+ salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+
|
|
|
+ //基础技能提高课
|
|
|
+ if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
|
|
|
+ salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
+ if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
|
|
|
+ salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //线上小班课
|
|
|
+ if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)||classGroup4MixDto.getCourseType().equals(CourseScheduleType.HIGH)) {
|
|
|
+ teacherDefaultMusicGroupSalary = collect.get(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
|
|
|
+ Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupTeacherMapper.getClassGroupId());
|
|
|
+ if(studentNum>5){
|
|
|
+ studentNum=5;
|
|
|
+ }
|
|
|
+ salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
|
|
|
+ if(Objects.isNull(salary)){
|
|
|
+ throw new BizException("课酬设置异常");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
|
|
|
+ salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
|
|
|
+ }
|
|
|
+
|
|
|
+ CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
|
|
|
+ courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
|
|
|
+ courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
|
|
|
+ courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
|
|
|
+ courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
|
|
|
+ courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
|
|
|
+ courseScheduleTeacherSalary.setExpectSalary(salary);
|
|
|
+ courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
|
|
|
+ courseScheduleTeacherSalary.setMusicGroupId(musicGroupId);
|
|
|
+ courseScheduleTeacherSalary.setCreateTime(date);
|
|
|
+ courseScheduleTeacherSalary.setUpdateTime(date);
|
|
|
+ courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //老师结算表
|
|
|
+ if (courseScheduleTeacherSalaryList.size() > 0) {
|
|
|
+ courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
|
|
|
+ }
|
|
|
+ Integer musicGroupStudentClassAdjustId = classGroup4MixDto.getMusicGroupStudentClassAdjustId();
|
|
|
+ //学生结算表
|
|
|
+ courseScheduleStudentPaymentService.createForMusicGroup(courseScheduleList, studentIdList,musicGroupStudentClassAdjustId);
|
|
|
+ return classGroup;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public ClassGroup classGroupUpdate(List<ClassGroup4MixDto> classGroup4MixDtos) {
|
|
|
Date date = new Date();
|
|
|
Integer classGroupId = classGroup4MixDtos.get(0).getClassGroupId();
|
|
@@ -3410,7 +3725,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
}
|
|
|
musicGroupStudentClassAdjustDao.insert(musicGroupStudentClassAdjust);
|
|
|
//如果需要审核,校验参数配置
|
|
|
- checkMergeClassSplitClassAffirmParam(classGroup4MixDtos);
|
|
|
+ checkMergeClassSplitClassAffirmParam(mergeClassSplitClassAffirmDto);
|
|
|
//如果缴费项目不需要审核,那么生成班级以及课表
|
|
|
if(status == null || status != AUDITING){
|
|
|
|
|
@@ -3427,7 +3742,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
List<CourseTimeDto> courseTimeDtos = new ArrayList<>();
|
|
|
courseTimeDtos.add(courseTimeDto);
|
|
|
classGroup4MixDto.setCourseTimeDtoList(courseTimeDtos);
|
|
|
- classGroupService.classGroupAdjust(classGroup4MixDtos);
|
|
|
+ classGroupService.classGroupAdjust2(classGroup4MixDto);
|
|
|
}
|
|
|
//排课完成后删除所选课程
|
|
|
courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds,studentIds);
|
|
@@ -3452,11 +3767,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void checkMergeClassSplitClassAffirmParam(List<ClassGroup4MixDto> classGroup4MixDtos){
|
|
|
- if (classGroup4MixDtos.get(0).getCourseTimes().compareTo(0) <= 0) {
|
|
|
+ private void checkMergeClassSplitClassAffirmParam(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto){
|
|
|
+ ClassGroup4MixDto classGroup4MixDto = mergeClassSplitClassAffirmDto.getClassGroup4MixDtos().get(0);
|
|
|
+ if (classGroup4MixDto.getCourseTimes().compareTo(0) <= 0) {
|
|
|
throw new BizException("排课次数必须大于0");
|
|
|
}
|
|
|
- List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroup4MixDtos.get(0).getClassGroupTeacherMapperList();
|
|
|
+ List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroup4MixDto.getClassGroupTeacherMapperList();
|
|
|
if(classGroupTeacherMapperList == null || classGroupTeacherMapperList.size() == 0){
|
|
|
throw new BizException("请设置上课老师");
|
|
|
}
|
|
@@ -3464,7 +3780,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
if(noRepeatTeacherIds.size()!=classGroupTeacherMapperList.size()){
|
|
|
throw new BizException("主教与助教存在冲突");
|
|
|
}
|
|
|
- //所选课程不能有未开始的临时合并课程
|
|
|
+ //所选班级不能有未开始的临时合并课程
|
|
|
+ List<CourseSchedule> noStartNewCourseList = courseScheduleDao.queryNoStartNewCourseList(mergeClassSplitClassAffirmDto.getClassGroupIds());
|
|
|
+ if(noStartNewCourseList != null && noStartNewCourseList.size() > 0){
|
|
|
+ throw new BizException("所选班级不能有未开始的临时合并课程");
|
|
|
+ }
|
|
|
List<Integer> allTeacherIds = classGroupTeacherMapperList.stream()
|
|
|
.map(ClassGroupTeacherMapper::getUserId)
|
|
|
.collect(Collectors.toList());
|
|
@@ -3473,27 +3793,25 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
List<Teacher> teachers = teacherDao.findByTeacherIds(allTeacherIds);
|
|
|
Map<Integer, Teacher> teacherMap = teachers.stream()
|
|
|
.collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
|
|
|
- for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
|
|
|
- for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
|
|
|
- List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), null, null);
|
|
|
-
|
|
|
- Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
|
|
|
-
|
|
|
- TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(classGroup4MixDto.getCourseType());
|
|
|
- Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
|
|
|
- if (teacherDefaultMusicGroupSalary == null) {
|
|
|
- throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
|
|
|
- }
|
|
|
- if ((classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE) ||
|
|
|
- classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) &&
|
|
|
- StringUtils.isBlank(teacherDefaultMusicGroupSalary.getSalaryRuleJson())) {
|
|
|
- throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
|
|
|
- } else if (teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary() == null
|
|
|
- || teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary() == null
|
|
|
- || teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() == null
|
|
|
- || teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() == null) {
|
|
|
- throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
|
|
|
- }
|
|
|
+ for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
|
|
|
+ List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), null, null);
|
|
|
+
|
|
|
+ Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
|
|
|
+
|
|
|
+ TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(classGroup4MixDto.getCourseType());
|
|
|
+ Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
|
|
|
+ if (teacherDefaultMusicGroupSalary == null) {
|
|
|
+ throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
|
|
|
+ }
|
|
|
+ if ((classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE) ||
|
|
|
+ classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) &&
|
|
|
+ StringUtils.isBlank(teacherDefaultMusicGroupSalary.getSalaryRuleJson())) {
|
|
|
+ throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
|
|
|
+ } else if (teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary() == null
|
|
|
+ || teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary() == null
|
|
|
+ || teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() == null
|
|
|
+ || teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() == null) {
|
|
|
+ throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
|
|
|
}
|
|
|
}
|
|
|
}
|