|
@@ -28,10 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.time.Instant;
|
|
|
-import java.time.LocalDate;
|
|
|
-import java.time.LocalDateTime;
|
|
|
-import java.time.ZoneId;
|
|
|
+import java.time.*;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -73,6 +70,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
private CourseScheduleDao courseScheduleDao;
|
|
|
@Autowired
|
|
|
private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
|
|
|
+ @Autowired
|
|
|
+ private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
|
|
|
|
|
|
@Override
|
|
|
public BaseDAO<Integer, ClassGroup> getDAO() {
|
|
@@ -712,29 +711,36 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public ClassGroup classGroupAdjust(ClassGroupAdjustDto classGroupAdjustDto) throws Exception {
|
|
|
Date date = new Date();
|
|
|
+ MusicGroup musicGroup = musicGroupDao.get(classGroupAdjustDto.getMusicGroupId());
|
|
|
+ if (musicGroup != null) {
|
|
|
+ throw new Exception("乐团不存在");
|
|
|
+ }
|
|
|
+ Integer schoolId = musicGroup.getSchoolId();
|
|
|
|
|
|
List<ClassGroupStudentMapperDto> classGroupStudentMapperDtoList = classGroupAdjustDto.getClassGroupStudentMapperDtoList();
|
|
|
- String subject_id_list_ = "";
|
|
|
- for (ClassGroupStudentMapper classGroupStudentMapperDto : classGroupStudentMapperDtoList) {
|
|
|
+ String subjectIdList = "";
|
|
|
+ String subjectNameList = "";
|
|
|
+ for (ClassGroupStudentMapperDto classGroupStudentMapperDto : classGroupStudentMapperDtoList) {
|
|
|
//1、永久调整,删除学生班级关联关系
|
|
|
if (classGroupAdjustDto.getType().equals(YesOrNoEnum.YES)) {
|
|
|
ClassGroupStudentMapper classStudentMapper = classGroupStudentMapperDao.query(classGroupStudentMapperDto.getClassGroupId(), classGroupStudentMapperDto.getUserId());
|
|
|
classStudentMapper.setStatus(ClassGroupStudentStatusEnum.QUIT);
|
|
|
classGroupStudentMapperDao.update(classStudentMapper);
|
|
|
} else { //临时删除学生对应时间段的课程
|
|
|
- List<CourseSchedule> courseScheduleList = courseScheduleDao.findCourseScheduleByClassGroupIdAndDate(classGroupStudentMapperDto.getClassGroupId(), classGroupAdjustDto.getStartDate(), classGroupAdjustDto.getEndDate());
|
|
|
+ List<CourseSchedule> courseScheduleList = courseScheduleDao.findCourseScheduleByClassGroupIdAndDate(classGroupStudentMapperDto.getClassGroupId(), classGroupAdjustDto.getStartDate(), classGroupAdjustDto.getCourseTimes());
|
|
|
courseScheduleStudentPaymentDao.deleteStudentCourseSchedule(classGroupStudentMapperDto.getUserId(), courseScheduleList);
|
|
|
}
|
|
|
- subject_id_list_ += classGroupStudentMapperDto.getUserId() + ",";
|
|
|
+ subjectIdList += classGroupStudentMapperDto.actualSubjectId() + ",";
|
|
|
+ subjectNameList += classGroupStudentMapperDto.getSubjectName() + "/";
|
|
|
}
|
|
|
|
|
|
|
|
|
- subject_id_list_ = subject_id_list_.substring(0, subject_id_list_.length() - 1);
|
|
|
+ subjectIdList = subjectIdList.substring(0, subjectIdList.length() - 1);
|
|
|
|
|
|
//2、新建班级
|
|
|
ClassGroup classGroup = new ClassGroup();
|
|
|
classGroup.setMusicGroupId(classGroupAdjustDto.getMusicGroupId());
|
|
|
- classGroup.setSubjectIdList(subject_id_list_);
|
|
|
+ classGroup.setSubjectIdList(subjectIdList);
|
|
|
classGroup.setName(classGroupAdjustDto.getClassGroupName());
|
|
|
classGroup.setExpectStudentNum(classGroupStudentMapperDtoList.size());
|
|
|
classGroup.setStudentNum(classGroupStudentMapperDtoList.size());
|
|
@@ -744,7 +750,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
classGroup.setUpdateTime(date);
|
|
|
classGroupDao.insert(classGroup);
|
|
|
|
|
|
- //3、将学生加入新班级(学生注册表,关联表)
|
|
|
+ //3、将学生加入新班级(学生注册表,关联表
|
|
|
List<ClassGroupStudentMapper> classGroupStudentMapperList = new ArrayList<>();
|
|
|
for (ClassGroupStudentMapperDto classGroupStudentMapperDto : classGroupStudentMapperDtoList) {
|
|
|
classGroupStudentMapperDto.setClassGroupId(classGroup.getId());
|
|
@@ -755,11 +761,87 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
|
|
|
//4、将老师加入关联关系
|
|
|
List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroupAdjustDto.getClassGroupTeacherMapperList();
|
|
|
+
|
|
|
+ //课时长度
|
|
|
+ long classCourseDuration = Duration.between(LocalDateTime.parse(classGroupAdjustDto.getStartDate() + " " + classGroupAdjustDto.getStartClassTime() + ":00"),
|
|
|
+ LocalDateTime.parse(classGroupAdjustDto.getStartDate() + " " + classGroupAdjustDto.getEndClassTime() + ":00"))
|
|
|
+ .toMinutes();
|
|
|
+
|
|
|
for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
|
|
|
classGroupTeacherMapper.setClassGroupId(classGroup.getId());
|
|
|
classGroupTeacherMapper.setMusicGroupId(classGroupAdjustDto.getMusicGroupId());
|
|
|
+
|
|
|
+ List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), "SINGLE", musicGroup.getSettlementType());
|
|
|
+ BigDecimal salary = new BigDecimal("0");
|
|
|
+ for (TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary : teacherSalaryList) {
|
|
|
+ //对应基准课酬
|
|
|
+ BigDecimal baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacherSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacherSalary();
|
|
|
+ //基准课酬
|
|
|
+ if (teacherDefaultMusicGroupSalary.getSettlementType().equals(SalarySettlementTypeEnum.TEACHER_DEFAULT)) {
|
|
|
+ salary = new BigDecimal(classCourseDuration).divide(new BigDecimal(30)).multiply(baseSalary).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //阶梯课酬
|
|
|
+ if (classCourseDuration >= teacherDefaultMusicGroupSalary.getDurationMin() && classCourseDuration <= teacherDefaultMusicGroupSalary.getDurationMin()) {
|
|
|
+ salary = baseSalary;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ classGroupTeacherMapper.setSalary(salary);
|
|
|
}
|
|
|
classGroupTeacherMapperDao.classGroupTeachersInsert(classGroupTeacherMapperList);
|
|
|
+
|
|
|
+ //5、插入班级排课信息
|
|
|
+ LocalDateTime now = LocalDate.parse(classGroupAdjustDto.getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay();
|
|
|
+
|
|
|
+ //计算每节课的课酬
|
|
|
+ List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
|
|
|
+
|
|
|
+ int times = 0;
|
|
|
+ while (true) {
|
|
|
+ int dayOfWeek = now.getDayOfWeek().getValue();
|
|
|
+ if (classGroupAdjustDto.getDayOfWeek().equals(dayOfWeek)) {
|
|
|
+ Instant instant = now.atZone(ZoneId.systemDefault()).toInstant();
|
|
|
+ Date classDate = Date.from(instant);
|
|
|
+ String startClassTime = DateUtil.getDate(classDate) + " " + classGroupAdjustDto.getStartClassTime() + ":00";
|
|
|
+ String endClassTime = DateUtil.getDate(classDate) + " " + classGroupAdjustDto.getEndClassTime() + ":00";
|
|
|
+
|
|
|
+ CourseSchedule courseSchedule = new CourseSchedule();
|
|
|
+ courseSchedule.setSchoolId(schoolId);
|
|
|
+ courseSchedule.setClassGroupId(classGroup.getId());
|
|
|
+ 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(TeachModeEnum.OFFLINE);
|
|
|
+ courseSchedule.setType(CourseSchedule.CourseScheduleType.SINGLE);
|
|
|
+ courseSchedule.setName(subjectNameList + "-" + CourseSchedule.CourseScheduleType.SINGLE.getMsg());
|
|
|
+
|
|
|
+ courseScheduleDao.insert(courseSchedule);
|
|
|
+
|
|
|
+ times++;
|
|
|
+
|
|
|
+ for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
|
|
|
+ CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
|
|
|
+ courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
|
|
|
+ courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
|
|
|
+ courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
|
|
|
+ courseScheduleTeacherSalary.setExpectSalary(classGroupTeacherMapper.getSalary());
|
|
|
+ courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
|
|
|
+ courseScheduleTeacherSalary.setCreateTime(date);
|
|
|
+ courseScheduleTeacherSalary.setUpdateTime(date);
|
|
|
+ courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ now = now.plusDays(1);
|
|
|
+ if (classGroupAdjustDto.getCourseTimes().equals(times)) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaryList);
|
|
|
return classGroup;
|
|
|
}
|
|
|
|