|
@@ -1,14 +1,127 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
+import static com.ym.mec.biz.dal.enums.GroupType.COMM;
|
|
|
+import static com.ym.mec.biz.dal.enums.GroupType.PRACTICE;
|
|
|
+import static com.ym.mec.biz.dal.enums.GroupType.VIP;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.Duration;
|
|
|
+import java.time.Instant;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Propagation;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
|
-import com.ym.mec.biz.dal.dao.*;
|
|
|
-import com.ym.mec.biz.dal.dto.*;
|
|
|
-import com.ym.mec.biz.dal.entity.*;
|
|
|
-import com.ym.mec.biz.dal.enums.*;
|
|
|
-import com.ym.mec.biz.dal.page.*;
|
|
|
-import com.ym.mec.biz.service.*;
|
|
|
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
|
|
|
+import com.ym.mec.biz.dal.dao.ClassGroupRelationDao;
|
|
|
+import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
|
|
|
+import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
|
|
|
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
|
|
|
+import com.ym.mec.biz.dal.dao.CourseScheduleEvaluateDao;
|
|
|
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
|
|
|
+import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
|
|
|
+import com.ym.mec.biz.dal.dao.CoursesGroupDao;
|
|
|
+import com.ym.mec.biz.dal.dao.GroupDao;
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
|
|
|
+import com.ym.mec.biz.dal.dao.PracticeGroupDao;
|
|
|
+import com.ym.mec.biz.dal.dao.SchoolDao;
|
|
|
+import com.ym.mec.biz.dal.dao.StudentApplyRefundsDao;
|
|
|
+import com.ym.mec.biz.dal.dao.StudentAttendanceDao;
|
|
|
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
|
|
|
+import com.ym.mec.biz.dal.dao.SubjectDao;
|
|
|
+import com.ym.mec.biz.dal.dao.SysConfigDao;
|
|
|
+import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
|
|
|
+import com.ym.mec.biz.dal.dao.TeacherDao;
|
|
|
+import com.ym.mec.biz.dal.dao.VipGroupDao;
|
|
|
+import com.ym.mec.biz.dal.dto.ClassGroup4MixDto;
|
|
|
+import com.ym.mec.biz.dal.dto.ClassGroupImGroupDto;
|
|
|
+import com.ym.mec.biz.dal.dto.ClassGroupTeacherMapDto;
|
|
|
+import com.ym.mec.biz.dal.dto.ClassGroupTeachersDto;
|
|
|
+import com.ym.mec.biz.dal.dto.CourseListDto;
|
|
|
+import com.ym.mec.biz.dal.dto.CourseTimeDto;
|
|
|
+import com.ym.mec.biz.dal.dto.HighClassGroupDto;
|
|
|
+import com.ym.mec.biz.dal.dto.MusicGroupClassGroupDto;
|
|
|
+import com.ym.mec.biz.dal.dto.MusicGroupCourseScheduleDto;
|
|
|
+import com.ym.mec.biz.dal.dto.StudentAttendanceViewDto;
|
|
|
+import com.ym.mec.biz.dal.dto.StudentPayInfoDto;
|
|
|
+import com.ym.mec.biz.dal.dto.SuperClassGroupDto;
|
|
|
+import com.ym.mec.biz.dal.dto.TeacherClassGroupDto;
|
|
|
+import com.ym.mec.biz.dal.dto.TeacherClassHeadInfo;
|
|
|
+import com.ym.mec.biz.dal.dto.TeacherMusicClassInfoDto;
|
|
|
+import com.ym.mec.biz.dal.dto.TeacherVipClassInfoDto;
|
|
|
+import com.ym.mec.biz.dal.dto.UserMusicGroupQueryInfo;
|
|
|
+import com.ym.mec.biz.dal.entity.ClassGroup;
|
|
|
+import com.ym.mec.biz.dal.entity.ClassGroupRelation;
|
|
|
+import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
|
|
|
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
|
|
|
+import com.ym.mec.biz.dal.entity.CourseSchedule;
|
|
|
+import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
|
|
|
+import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
|
|
|
+import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
|
|
|
+import com.ym.mec.biz.dal.entity.CoursesGroup;
|
|
|
+import com.ym.mec.biz.dal.entity.Group;
|
|
|
+import com.ym.mec.biz.dal.entity.MusicGroup;
|
|
|
+import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
|
|
|
+import com.ym.mec.biz.dal.entity.PracticeGroup;
|
|
|
+import com.ym.mec.biz.dal.entity.StudentRegistration;
|
|
|
+import com.ym.mec.biz.dal.entity.Subject;
|
|
|
+import com.ym.mec.biz.dal.entity.SysConfig;
|
|
|
+import com.ym.mec.biz.dal.entity.Teacher;
|
|
|
+import com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary;
|
|
|
+import com.ym.mec.biz.dal.entity.VipGroup;
|
|
|
+import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.GroupType;
|
|
|
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.TeachTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
|
|
|
+import com.ym.mec.biz.dal.page.ClassGroupQueryInfo;
|
|
|
+import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
|
|
|
+import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
|
|
|
+import com.ym.mec.biz.dal.page.StudentPayLogQueryInfo;
|
|
|
+import com.ym.mec.biz.dal.page.TeacherMusicClassQueryInfo;
|
|
|
+import com.ym.mec.biz.dal.page.VipClassQueryInfo;
|
|
|
+import com.ym.mec.biz.dal.page.queryMusicGroupCourseScheduleQueryInfo;
|
|
|
+import com.ym.mec.biz.service.ClassGroupRelationService;
|
|
|
+import com.ym.mec.biz.service.ClassGroupService;
|
|
|
+import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
|
|
|
+import com.ym.mec.biz.service.CourseScheduleService;
|
|
|
+import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
|
|
|
+import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
|
|
|
+import com.ym.mec.biz.service.StudentRegistrationService;
|
|
|
+import com.ym.mec.biz.service.SubjectService;
|
|
|
+import com.ym.mec.biz.service.SysConfigService;
|
|
|
+import com.ym.mec.biz.service.TeacherDefaultMusicGroupSalaryService;
|
|
|
import com.ym.mec.common.constant.CommonConstants;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
|
import com.ym.mec.common.entity.ImGroupMember;
|
|
@@ -24,20 +137,6 @@ import com.ym.mec.jiari.JiaRiFeignService;
|
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
|
import com.ym.mec.util.date.DateConvertor;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.transaction.annotation.Propagation;
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
-import org.springframework.util.CollectionUtils;
|
|
|
-
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.time.*;
|
|
|
-import java.time.format.DateTimeFormatter;
|
|
|
-import java.util.*;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-
|
|
|
-import static com.ym.mec.biz.dal.enums.GroupType.*;
|
|
|
|
|
|
@Service
|
|
|
public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup> implements ClassGroupService {
|
|
@@ -124,6 +223,106 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public PageInfo<ClassGroup> queryPage(ClassGroupQueryInfo queryInfo) {
|
|
|
+ PageInfo<ClassGroup> pageInfo = new PageInfo<ClassGroup>(queryInfo.getPage(), queryInfo.getRows());
|
|
|
+ Map<String, Object> params = new HashMap<String, Object>();
|
|
|
+ MapUtil.populateMap(params, queryInfo);
|
|
|
+
|
|
|
+ List<ClassGroup> dataList = new ArrayList<ClassGroup>();
|
|
|
+ int count = this.findCount(params);
|
|
|
+ if (count > 0) {
|
|
|
+ pageInfo.setTotal(count);
|
|
|
+ params.put("offset", pageInfo.getOffset());
|
|
|
+ dataList = this.getDAO().queryPage(params);
|
|
|
+ List<Integer> classGroupIds = dataList.stream().map(ClassGroup::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<Map<Integer, Integer>> classGroupStudentNumMaps = classGroupStudentMapperDao.countClassGroupsStudentNum(classGroupIds, null);
|
|
|
+ Map<Integer, Long> classGroupStudentNumMap = MapUtil.convertIntegerMap(classGroupStudentNumMaps);
|
|
|
+
|
|
|
+ for (ClassGroup cg : dataList) {
|
|
|
+ Long studentNum = classGroupStudentNumMap.get(cg.getId());
|
|
|
+ cg.setStudentNum(Objects.isNull(studentNum) ? 0 : studentNum.intValue());
|
|
|
+ cg.setTeacherMapperList(classGroupTeacherMapperDao.findClassGroupTeachers(cg.getId() + ""));
|
|
|
+ cg.setCourseScheduleList(courseScheduleDao.findCoursesByClassGroupId(cg.getId(), null));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ pageInfo.setRows(dataList);
|
|
|
+ return pageInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
|
|
|
+ public boolean create(ClassGroup classGroup) {
|
|
|
+
|
|
|
+ if(classGroup.getType() == null){
|
|
|
+ throw new BizException("班级类型不能为空");
|
|
|
+ }
|
|
|
+ if(classGroup.getGroupType() == null){
|
|
|
+ throw new BizException("课程组类型不能为空");
|
|
|
+ }
|
|
|
+ String userIds = classGroup.getUserIds();
|
|
|
+
|
|
|
+ Set<String> userIdStrSet = new HashSet<String>();
|
|
|
+
|
|
|
+ if(StringUtils.isNotBlank(userIds)){
|
|
|
+ userIdStrSet = new HashSet<>(Arrays.asList(userIds.split(",")));
|
|
|
+ }
|
|
|
+
|
|
|
+ Date date = new Date();
|
|
|
+ classGroup.setCreateTime(date);
|
|
|
+ classGroup.setUpdateTime(date);
|
|
|
+ classGroup.setStudentNum(userIdStrSet.size());
|
|
|
+ //创建班级
|
|
|
+ insert(classGroup);
|
|
|
+
|
|
|
+ //设置班级上的老师
|
|
|
+ List<ClassGroupTeacherMapper> teacherMapperList = classGroup.getTeacherMapperList();
|
|
|
+ for(ClassGroupTeacherMapper tm : teacherMapperList){
|
|
|
+ tm.setClassGroupId(classGroup.getId());
|
|
|
+ tm.setMusicGroupId(classGroup.getMusicGroupId());
|
|
|
+ tm.setGroupType(classGroup.getGroupType());
|
|
|
+ tm.setCreateTime(date);
|
|
|
+ tm.setUpdateTime(date);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(teacherMapperList.size() > 0){
|
|
|
+ classGroupTeacherMapperDao.classGroupTeachersInsert(teacherMapperList);
|
|
|
+ }
|
|
|
+
|
|
|
+ //2、插入班级学生关联关系
|
|
|
+ List<Integer> userIdList = new ArrayList<>();
|
|
|
+ List<ClassGroupStudentMapper> classGroupStudentList = new ArrayList<>();
|
|
|
+ for (String userId : userIdStrSet) {
|
|
|
+ ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
|
|
|
+ classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId());
|
|
|
+ classGroupStudentMapper.setClassGroupId(classGroup.getId());
|
|
|
+ classGroupStudentMapper.setUserId(Integer.parseInt(userId));
|
|
|
+ classGroupStudentMapper.setCreateTime(date);
|
|
|
+ classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
|
|
|
+ classGroupStudentMapper.setGroupType(GroupType.MUSIC);
|
|
|
+ classGroupStudentList.add(classGroupStudentMapper);
|
|
|
+
|
|
|
+ StudentRegistration studentRegistration = new StudentRegistration();
|
|
|
+ studentRegistration.setClassGroupId(classGroup.getId());
|
|
|
+ studentRegistration.setUserId(Integer.parseInt(userId));
|
|
|
+ studentRegistration.setMusicGroupId(classGroup.getMusicGroupId());
|
|
|
+ studentRegistrationDao.updateByUserIdAndMusicGroupId(studentRegistration);
|
|
|
+
|
|
|
+ userIdList.add(Integer.parseInt(userId));
|
|
|
+ }
|
|
|
+ if (classGroupStudentList.size() > 0) {
|
|
|
+ classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentList);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加入IM群组
|
|
|
+ if (userIdList.size() > 0) {
|
|
|
+ addImGroup(classGroup, userIdList);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public List<ClassGroup> findClassGroup4Teacher(Integer teacherId) {
|
|
|
return classGroupDao.findClassGroup4Teacher(teacherId);
|
|
|
}
|
|
@@ -358,19 +557,17 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
|
|
|
String courseScheduleName = subjectList.stream().map(subject -> subject.getName()).collect(Collectors.joining("/"));
|
|
|
|
|
|
- Map<String, Integer> holidayDays = new HashMap<>();
|
|
|
- Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
|
|
|
+ Set<String> holidayDays = new HashSet<>();
|
|
|
+
|
|
|
if (highClassGroup.getHoliday()) {
|
|
|
- holiday = jiaRiFeignService.query(now.getYear());
|
|
|
- holidayDays = holiday.get(now.getYear());
|
|
|
+ SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
|
|
|
+ if(Objects.nonNull(holidaySetting)&&StringUtils.isNotBlank(holidaySetting.getParanValue())){
|
|
|
+ holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
WhileNode: while (highClassGroup.getCourseTimes() > times) {
|
|
|
- if (highClassGroup.getHoliday() && !holiday.containsKey(now.getYear())) {
|
|
|
- holiday = jiaRiFeignService.query(now.getYear());
|
|
|
- holidayDays = holiday.get(now.getYear());
|
|
|
- }
|
|
|
- if (highClassGroup.getHoliday() && holidayDays.containsKey(now.format(DateTimeFormatter.ofPattern("MMdd")))) {
|
|
|
+ if (highClassGroup.getHoliday() && holidayDays.contains(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
|
|
|
now = now.plusDays(1);
|
|
|
continue;
|
|
|
}
|
|
@@ -398,6 +595,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
courseSchedule.setType(CourseSchedule.CourseScheduleType.HIGH);
|
|
|
courseSchedule.setGroupType(GroupType.MUSIC);
|
|
|
courseSchedule.setName(courseScheduleName + "-" + CourseSchedule.CourseScheduleType.HIGH.getMsg());
|
|
|
+ courseSchedule.setOrganId(musicGroup.getOrganId());
|
|
|
courseScheduleList.add(courseSchedule);
|
|
|
times++;
|
|
|
}
|
|
@@ -525,15 +723,36 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
@Override
|
|
|
public List<ClassGroupTeachersDto> getClassGroupAndTeacherSalary(String musicGroupId, SalarySettlementTypeEnum type, Integer classGroupId) throws Exception {
|
|
|
//乐团班级及班级老师
|
|
|
- List<ClassGroupTeachersDto> classGroupAndTeachers = getClassGroupAndTeachers(musicGroupId, "NORMAL,MIX,HIGH", classGroupId);
|
|
|
+ List<ClassGroupTeachersDto> classGroupAndTeachers = getClassGroupAndTeachers(musicGroupId, "NORMAL,MIX,HIGH,HIGH_ONLINE", classGroupId);
|
|
|
BigDecimal zeroSalary = new BigDecimal(0);
|
|
|
MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
|
|
|
if (type != null) {
|
|
|
musicGroup.setSettlementType(type);
|
|
|
musicGroupDao.update(musicGroup);
|
|
|
}
|
|
|
+ if(classGroupAndTeachers == null || classGroupAndTeachers.size()==0){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Integer> classGroupIds = classGroupAndTeachers.stream().map(ClassGroupTeachersDto::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<Map<Integer, Integer>> classGroupStudentNumMaps = classGroupStudentMapperDao.countClassGroupsStudentNum(classGroupIds, null);
|
|
|
+ Map<Integer, Long> classGroupStudentNumMap = MapUtil.convertIntegerMap(classGroupStudentNumMaps);
|
|
|
|
|
|
+ String waringStr = "";
|
|
|
for (ClassGroupTeachersDto classGroupAndTeacher : classGroupAndTeachers) {
|
|
|
+ //所有教师列表
|
|
|
+ List<Integer> teacherUserIds = classGroupAndTeacher.getClassGroupTeacherMapperList().stream().map(ClassGroupTeacherMapper::getUserId).collect(Collectors.toList());
|
|
|
+ List<Teacher> teachers = teacherDao.findByTeacherIds(teacherUserIds);
|
|
|
+ Map<Integer, Teacher> teacherMap = teachers.stream()
|
|
|
+ .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
|
|
|
+
|
|
|
+ Long studentNum = classGroupStudentNumMap.get(classGroupAndTeacher.getId());
|
|
|
+ studentNum = Objects.isNull(studentNum) ? 0 : studentNum;
|
|
|
+ if(classGroupAndTeacher.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) && (studentNum < 3 || studentNum > 5)){
|
|
|
+ String numWaring = studentNum < 3 ? "人数不能小于3," : "人数不能大于5,";
|
|
|
+ waringStr += classGroupAndTeacher.getName()+numWaring;
|
|
|
+ }
|
|
|
//班级的教师列表
|
|
|
List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroupAndTeacher.getClassGroupTeacherMapperList();
|
|
|
for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
|
|
@@ -547,19 +766,24 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
List<TeacherDefaultMusicGroupSalary> teacherSalaryByUserIdAndType = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), courseType, type);
|
|
|
//老师课酬没有设置,设置成0
|
|
|
if (teacherSalaryByUserIdAndType == null || teacherSalaryByUserIdAndType.size() == 0) {
|
|
|
- TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = new TeacherDefaultMusicGroupSalary();
|
|
|
- teacherDefaultMusicGroupSalary.setAssistantTeacher30MinSalary(zeroSalary);
|
|
|
- teacherDefaultMusicGroupSalary.setMainTeacher30MinSalary(zeroSalary);
|
|
|
- teacherDefaultMusicGroupSalary.setMainTeacher90MinSalary(zeroSalary);
|
|
|
- teacherDefaultMusicGroupSalary.setAssistantTeacher90MinSalary(zeroSalary);
|
|
|
- teacherDefaultMusicGroupSalary.setUserId(classGroupTeacherMapper.getUserId());
|
|
|
- teacherDefaultMusicGroupSalary.setCourseScheduleType(CourseSchedule.getCourseScheduleTypeByCode(courseType));
|
|
|
- teacherSalaryByUserIdAndType.add(teacherDefaultMusicGroupSalary);
|
|
|
+ Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
|
|
|
+ throw new BizException("请设置"+teacher.getRealName()+"老师"+classGroupAndTeacher.getType().getMsg()+"课酬");
|
|
|
+ }
|
|
|
+
|
|
|
+ for (TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary : teacherSalaryByUserIdAndType) {
|
|
|
+ if(teacherDefaultMusicGroupSalary.getCourseScheduleType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE) && teacherDefaultMusicGroupSalary.getSalaryRuleJson() != null){
|
|
|
+ BigDecimal salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
|
|
|
+ teacherDefaultMusicGroupSalary.setMainTeacher30MinSalary(salary);
|
|
|
+ teacherDefaultMusicGroupSalary.setMainTeacher90MinSalary(salary);
|
|
|
+ }
|
|
|
}
|
|
|
classGroupTeacherMapper.setTeacherDefaultMusicGroupSalaryList(teacherSalaryByUserIdAndType);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
+ if(!waringStr.isEmpty()){
|
|
|
+ throw new BizException(waringStr+"请调整");
|
|
|
+ }
|
|
|
return classGroupAndTeachers;
|
|
|
}
|
|
|
|
|
@@ -574,7 +798,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
//获取分页前的所有的乐团编号和vip编号
|
|
|
params.put("offset", pageInfo.getOffset());
|
|
|
List<String> musicGroupIds = null;
|
|
|
- List<Group> groups=new ArrayList<>();
|
|
|
+ List<Group> groups;
|
|
|
if (queryInfo.isHideOverGroup()) {
|
|
|
groups = courseScheduleDao.queryMusicGroupIdsWithoutOverGroup(params);
|
|
|
pageInfo.setTotal(courseScheduleDao.countMusicGroupIdsWithoutOverGroup(params));
|
|
@@ -1108,7 +1332,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public TeacherClassHeadInfo findTeacherClassGroupInfo(Long classGroupId) {
|
|
|
+ public TeacherClassHeadInfo findTeacherClassGroupInfo(Integer classGroupId) {
|
|
|
if (Objects.isNull(classGroupId)) {
|
|
|
throw new BizException("请指定班级");
|
|
|
}
|
|
@@ -1258,6 +1482,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
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);
|
|
|
|
|
@@ -1274,6 +1504,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
classGroup.setName(classGroup4MixDto.getClassGroupName());
|
|
|
classGroup.setExpectStudentNum(studentList.size());
|
|
|
classGroup.setStudentNum(studentList.size());
|
|
|
+ classGroup.setExpectStudentNum(classGroup4MixDto.getExpectStudentNum());
|
|
|
classGroup.setType(classGroup4MixDto.getType());
|
|
|
classGroup.setDelFlag(0);
|
|
|
classGroup.setGroupType(GroupType.MUSIC);
|
|
@@ -1345,21 +1576,19 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
BigDecimal expectPrice = new BigDecimal("0");
|
|
|
int times = 0;
|
|
|
|
|
|
- Map<String, Integer> holidayDays = new HashMap<>();
|
|
|
- Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
|
|
|
+ Set<String> holidayDays = new HashSet<>();
|
|
|
+
|
|
|
if (classGroup4MixDto.getHoliday()) {
|
|
|
- holiday = jiaRiFeignService.query(now.getYear());
|
|
|
- holidayDays = holiday.get(now.getYear());
|
|
|
+ SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
|
|
|
+ if(Objects.nonNull(holidaySetting)&&StringUtils.isNotBlank(holidaySetting.getParanValue())){
|
|
|
+ holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
|
|
|
+ }
|
|
|
}
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
WhileNode:
|
|
|
while (true) {
|
|
|
- if(classGroup4MixDto.getHoliday() && !holiday.containsKey(now.getYear())){
|
|
|
- holiday = jiaRiFeignService.query(now.getYear());
|
|
|
- holidayDays = holiday.get(now.getYear());
|
|
|
- }
|
|
|
- if (classGroup4MixDto.getHoliday() && holidayDays.containsKey(now.format(DateTimeFormatter.ofPattern("MMdd")))) {
|
|
|
+ if (classGroup4MixDto.getHoliday() && holidayDays.contains(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
|
|
|
now = now.plusDays(1);
|
|
|
continue;
|
|
|
}
|
|
@@ -1390,13 +1619,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
courseSchedule.setEndClassTime(DateUtil.stringToDate(endClassTime));
|
|
|
courseSchedule.setCreateTime(date);
|
|
|
courseSchedule.setUpdateTime(date);
|
|
|
- courseSchedule.setTeachMode(TeachModeEnum.OFFLINE);
|
|
|
+ courseSchedule.setTeachMode(teachMode);
|
|
|
courseSchedule.setType(classGroup4MixDto.getCourseType());
|
|
|
courseSchedule.setGroupType(GroupType.MUSIC);
|
|
|
+ courseSchedule.setOrganId(musicGroup.getOrganId());
|
|
|
if(classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MIX)){
|
|
|
courseSchedule.setName(classGroup4MixDto.getCourseType().getMsg());
|
|
|
}else{
|
|
|
- courseSchedule.setName(subjectNames + "-" + CourseSchedule.CourseScheduleType.SINGLE.getMsg());
|
|
|
+ courseSchedule.setName(subjectNames + "-" + classGroup4MixDto.getCourseType().getMsg());
|
|
|
}
|
|
|
courseSchedule.setTeacherId(teacherId);
|
|
|
courseSchedule.setActualTeacherId(teacherId);
|
|
@@ -1412,19 +1642,24 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
|
|
|
|
|
|
TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(classGroup4MixDto.getCourseType());
|
|
|
- if(teacherDefaultMusicGroupSalary != null){
|
|
|
- if (teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary() == null
|
|
|
- || teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary() == null
|
|
|
- || teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() == null
|
|
|
- || teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() == null) {
|
|
|
- throw new BizException("请设置老师默认课酬");
|
|
|
- }
|
|
|
+ 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);
|
|
|
|
|
|
- Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
|
|
|
SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
|
|
|
if(Objects.nonNull(teacher.getEntryDate())
|
|
|
&&(teacher.getEntryDate().after(entryDate)||teacher.getEntryDate().getTime()==entryDate.getTime())){
|
|
@@ -1444,22 +1679,33 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
|
|
|
}
|
|
|
|
|
|
+ salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+
|
|
|
+
|
|
|
//课堂课课酬
|
|
|
- if (musicGroup.isClassroomLessons()) {
|
|
|
- //课程时长与结算单位时长占比
|
|
|
- classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
- baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
+ if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
|
|
|
+ salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
}
|
|
|
//基础技能提高课
|
|
|
if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
|
|
|
- //课程时长与结算单位时长占比
|
|
|
- classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
- baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
+ salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
|
|
|
- baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
|
|
|
+ salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
|
|
|
}
|
|
|
}
|
|
|
- salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ //线上小班课
|
|
|
+ if(classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)){
|
|
|
+ Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupTeacherMapper.getClassGroupId());
|
|
|
+ if (studentNum < 3 || studentNum > 5) {
|
|
|
+ String numWaring = studentNum < 3 ? "人数不能小于3," : "人数不能大于5,";
|
|
|
+ throw new BizException(classGroup.getName() + numWaring + "请调整");
|
|
|
+ }
|
|
|
+ salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
|
|
|
+ salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
|
|
|
+ }
|
|
|
|
|
|
CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
|
|
|
courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
|
|
@@ -1517,6 +1763,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
if (classGroup == null) {
|
|
|
throw new BizException("班级不存在");
|
|
|
}
|
|
|
+
|
|
|
+ TeachModeEnum teachMode = TeachModeEnum.OFFLINE;
|
|
|
+ if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)){
|
|
|
+ teachMode = TeachModeEnum.ONLINE;
|
|
|
+ }
|
|
|
+
|
|
|
List<ClassGroupTeacherMapper> byClassGroup = classGroupTeacherMapperDao.findByClassGroup(classGroupId);
|
|
|
if(byClassGroup != null && byClassGroup.size() > 0){
|
|
|
ClassGroupTeacherMapper groupTeacherMapper = byClassGroup.stream().filter(classGroupTeacherMapper -> classGroupTeacherMapper.getTeacherRole() == TeachTypeEnum.BISHOP).findFirst().get();
|
|
@@ -1635,21 +1887,18 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
List<CourseSchedule> courseScheduleList = new ArrayList<>();
|
|
|
|
|
|
int times = 0;
|
|
|
- Map<String, Integer> holidayDays = new HashMap<>();
|
|
|
- Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
|
|
|
+ Set<String> holidayDays = new HashSet<>();
|
|
|
if (classGroup4MixDto.getHoliday()) {
|
|
|
- holiday = jiaRiFeignService.query(now.getYear());
|
|
|
- holidayDays = holiday.get(now.getYear());
|
|
|
+ SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
|
|
|
+ if(Objects.nonNull(holidaySetting)&&StringUtils.isNotBlank(holidaySetting.getParanValue())){
|
|
|
+ holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
|
|
|
+ }
|
|
|
}
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
WhileNode:
|
|
|
while (true) {
|
|
|
- if(classGroup4MixDto.getHoliday() && !holiday.containsKey(now.getYear())){
|
|
|
- holiday = jiaRiFeignService.query(now.getYear());
|
|
|
- holidayDays = holiday.get(now.getYear());
|
|
|
- }
|
|
|
- if (classGroup4MixDto.getHoliday() && holidayDays.containsKey(now.format(DateTimeFormatter.ofPattern("MMdd")))) {
|
|
|
+ if (classGroup4MixDto.getHoliday() && holidayDays.contains(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
|
|
|
now = now.plusDays(1);
|
|
|
continue;
|
|
|
}
|
|
@@ -1679,7 +1928,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
courseSchedule.setEndClassTime(DateUtil.stringToDate(endClassTime));
|
|
|
courseSchedule.setCreateTime(date);
|
|
|
courseSchedule.setUpdateTime(date);
|
|
|
- courseSchedule.setTeachMode(TeachModeEnum.OFFLINE);
|
|
|
+ courseSchedule.setTeachMode(teachMode);
|
|
|
courseSchedule.setMusicGroupId(classGroup.getMusicGroupId());
|
|
|
courseSchedule.setType(classGroup4MixDto.getCourseType());
|
|
|
if(classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MIX)){
|
|
@@ -1690,6 +1939,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
courseSchedule.setGroupType(GroupType.MUSIC);
|
|
|
courseSchedule.setTeacherId(teacherId);
|
|
|
courseSchedule.setActualTeacherId(teacherId);
|
|
|
+ courseSchedule.setOrganId(musicGroup.getOrganId());
|
|
|
courseScheduleDao.insert(courseSchedule);
|
|
|
courseScheduleList.add(courseSchedule);
|
|
|
times++;
|
|
@@ -1702,10 +1952,25 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
|
|
|
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);
|
|
|
|
|
|
- Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
|
|
|
SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
|
|
|
if(Objects.nonNull(teacher.getEntryDate())
|
|
|
&&(teacher.getEntryDate().after(entryDate)||teacher.getEntryDate().getTime()==entryDate.getTime())){
|
|
@@ -1724,21 +1989,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
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 (musicGroup.isClassroomLessons()) {
|
|
|
- //课程时长与结算单位时长占比
|
|
|
- classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
- baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
- }
|
|
|
- //基础技能提高课
|
|
|
- if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
|
|
|
- //课程时长与结算单位时长占比
|
|
|
- classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
- baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
- if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
|
|
|
- baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
|
for (CourseScheduleTeacherSalary teacherSalary : allTeacherSalarys) {
|
|
@@ -1750,6 +2001,31 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //课堂课课酬
|
|
|
+ if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
|
|
|
+ salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
+ }
|
|
|
+ //基础技能提高课
|
|
|
+ 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)){
|
|
|
+ Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupTeacherMapper.getClassGroupId());
|
|
|
+ if (studentNum < 3 || studentNum > 5) {
|
|
|
+ String numWaring = studentNum < 3 ? "人数不能小于3," : "人数不能大于5,";
|
|
|
+ throw new BizException(classGroup.getName() + numWaring + "请调整");
|
|
|
+ }
|
|
|
+ salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ 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());
|
|
@@ -1901,21 +2177,18 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
|
|
|
BigDecimal expectPrice = new BigDecimal("0");
|
|
|
int times = 0;
|
|
|
- Map<String, Integer> holidayDays = new HashMap<>();
|
|
|
- Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
|
|
|
+ Set<String> holidayDays = new HashSet<>();
|
|
|
if (classGroup4MixDto.getHoliday()) {
|
|
|
- holiday = jiaRiFeignService.query(now.getYear());
|
|
|
- holidayDays = holiday.get(now.getYear());
|
|
|
+ SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
|
|
|
+ if(Objects.nonNull(holidaySetting)&&StringUtils.isNotBlank(holidaySetting.getParanValue())){
|
|
|
+ holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
|
|
|
+ }
|
|
|
}
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
WhileNode:
|
|
|
while (true) {
|
|
|
- if(classGroup4MixDto.getHoliday() && !holiday.containsKey(now.getYear())){
|
|
|
- holiday = jiaRiFeignService.query(now.getYear());
|
|
|
- holidayDays = holiday.get(now.getYear());
|
|
|
- }
|
|
|
- if (classGroup4MixDto.getHoliday() && holidayDays.containsKey(now.format(DateTimeFormatter.ofPattern("MMdd")))) {
|
|
|
+ if (classGroup4MixDto.getHoliday() && holidayDays.contains(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
|
|
|
now = now.plusDays(1);
|
|
|
continue;
|
|
|
}
|
|
@@ -1958,6 +2231,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
}
|
|
|
courseSchedule.setTeacherId(teacherId);
|
|
|
courseSchedule.setActualTeacherId(teacherId);
|
|
|
+ courseSchedule.setOrganId(musicGroup.getOrganId());
|
|
|
courseScheduleList.add(courseSchedule);
|
|
|
|
|
|
courseScheduleDao.insert(courseSchedule);
|
|
@@ -1972,10 +2246,24 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
|
|
|
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);
|
|
|
|
|
|
- Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
|
|
|
SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
|
|
|
if(Objects.nonNull(teacher.getEntryDate())
|
|
|
&&(teacher.getEntryDate().after(entryDate)||teacher.getEntryDate().getTime()==entryDate.getTime())){
|
|
@@ -1994,23 +2282,33 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
|
|
|
}
|
|
|
+
|
|
|
+ salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+
|
|
|
//课堂课课酬
|
|
|
- if (musicGroup.isClassroomLessons()) {
|
|
|
- //课程时长与结算单位时长占比
|
|
|
- classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
- baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
+ if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
|
|
|
+ salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
}
|
|
|
//基础技能提高课
|
|
|
if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
|
|
|
- //课程时长与结算单位时长占比
|
|
|
- classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
- baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
+ salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
|
|
|
if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
|
|
|
- baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
|
|
|
+ salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
|
|
|
}
|
|
|
}
|
|
|
+ //线上小班课
|
|
|
+ if(classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)){
|
|
|
+ Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupTeacherMapper.getClassGroupId());
|
|
|
+ if (studentNum < 3 || studentNum > 5) {
|
|
|
+ String numWaring = studentNum < 3 ? "人数不能小于3," : "人数不能大于5,";
|
|
|
+ throw new BizException(classGroup.getName() + numWaring + "请调整");
|
|
|
+ }
|
|
|
+ salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
|
|
|
+ }
|
|
|
|
|
|
- salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
|
|
|
+ salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
|
|
|
+ }
|
|
|
|
|
|
CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
|
|
|
courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
|
|
@@ -2264,18 +2562,20 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
List<String> subjects = subjectService.findBySubIds(highClassGroup.getSubjectIdList());
|
|
|
highClassGroup.setSubjectName(subjects.stream().collect(Collectors.joining(",")));
|
|
|
|
|
|
- ClassGroupTeacherMapper bishopTeacher = classGroupTeacherMapperDao.findByClassGroupAndRole(highClassGroup.getId().longValue(), TeachTypeEnum.BISHOP);
|
|
|
+ ClassGroupTeacherMapper bishopTeacher = classGroupTeacherMapperDao.findByClassGroupAndRole(highClassGroup.getId(), TeachTypeEnum.BISHOP);
|
|
|
highClassGroup.setTeacherName(bishopTeacher.getUserName());
|
|
|
highClassGroup.setUserId(bishopTeacher.getUserId());
|
|
|
CourseSchedule courseSchedule = courseScheduleDao.findOneCourseScheduleByClassGroupId(highClassGroup.getId());
|
|
|
- highClassGroup.setStartClassTime(DateUtil.format(courseSchedule.getStartClassTime(), "HH:mm"));
|
|
|
- highClassGroup.setEndClassTime(DateUtil.format(courseSchedule.getEndClassTime(), "HH:mm"));
|
|
|
-
|
|
|
- Calendar calendar = Calendar.getInstance();
|
|
|
- calendar.setTime(courseSchedule.getClassDate());
|
|
|
- Integer dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
|
|
|
- dayOfWeek = dayOfWeek.equals(0) ? 7 : dayOfWeek;
|
|
|
- highClassGroup.setDayOfWeek(dayOfWeek);
|
|
|
+ if (courseSchedule != null) {
|
|
|
+ highClassGroup.setStartClassTime(DateUtil.format(courseSchedule.getStartClassTime(), "HH:mm"));
|
|
|
+ highClassGroup.setEndClassTime(DateUtil.format(courseSchedule.getEndClassTime(), "HH:mm"));
|
|
|
+
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(courseSchedule.getClassDate());
|
|
|
+ Integer dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
|
|
|
+ dayOfWeek = dayOfWeek.equals(0) ? 7 : dayOfWeek;
|
|
|
+ highClassGroup.setDayOfWeek(dayOfWeek);
|
|
|
+ }
|
|
|
}
|
|
|
return highClassGroupList;
|
|
|
}
|