|
@@ -8,14 +8,17 @@ import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
|
|
import com.ym.mec.biz.dal.enums.TeachTypeEnum;
|
|
import com.ym.mec.biz.dal.enums.TeachTypeEnum;
|
|
import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
|
|
import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
|
|
import com.ym.mec.biz.service.CourseScheduleService;
|
|
import com.ym.mec.biz.service.CourseScheduleService;
|
|
|
|
+import com.ym.mec.biz.service.SysConfigService;
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
import com.ym.mec.common.exception.BizException;
|
|
import com.ym.mec.common.exception.BizException;
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
@@ -32,6 +35,8 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
|
|
private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
|
|
private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
|
|
@Autowired
|
|
@Autowired
|
|
private TeacherDefaultMusicGroupSalaryDao teacherDefaultMusicGroupSalaryDao;
|
|
private TeacherDefaultMusicGroupSalaryDao teacherDefaultMusicGroupSalaryDao;
|
|
|
|
+ @Autowired
|
|
|
|
+ private SysConfigService sysConfigService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public BaseDAO<Long, ClassGroupTeacherMapper> getDAO() {
|
|
public BaseDAO<Long, ClassGroupTeacherMapper> getDAO() {
|
|
@@ -90,18 +95,6 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- //班级与老师课酬表
|
|
|
|
-// ClassGroupTeacherSalary classGroupTeacherSalary = new ClassGroupTeacherSalary();
|
|
|
|
-// classGroupTeacherSalary.setMusicGroupId(classGroupTeacherMapper.getMusicGroupId());
|
|
|
|
-// classGroupTeacherSalary.setClassGroupId(classGroupTeacherMapper.getClassGroupId());
|
|
|
|
-// classGroupTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
|
|
|
|
-// classGroupTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
|
|
|
|
-// classGroupTeacherSalary.setDuration(duration);
|
|
|
|
-// classGroupTeacherSalary.setSalary(salary);
|
|
|
|
-// classGroupTeacherSalary.setCreateTime(date);
|
|
|
|
-// classGroupTeacherSalary.setUpdateTime(date);
|
|
|
|
-// classGroupTeacherSalaryList.add(classGroupTeacherSalary);
|
|
|
|
-
|
|
|
|
//课程与老师薪水表
|
|
//课程与老师薪水表
|
|
CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
|
|
CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
|
|
courseScheduleTeacherSalary.setCourseScheduleId(classGroupNoStartCourseSchedule.getId());
|
|
courseScheduleTeacherSalary.setCourseScheduleId(classGroupNoStartCourseSchedule.getId());
|
|
@@ -119,7 +112,12 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
public void createCourseScheduleTeacherSalary(List<CourseSchedule> courseSchedules) {
|
|
public void createCourseScheduleTeacherSalary(List<CourseSchedule> courseSchedules) {
|
|
|
|
+ List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ BigDecimal teacherSalaryTimeUnit=new BigDecimal(sysConfigService.findByParamName(SysConfigService.TEACHER_SALARY_TIME_UNIT).getParanValue());
|
|
|
|
+
|
|
//课程编号列表
|
|
//课程编号列表
|
|
List<Long> courseScheduleIds = courseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
|
|
List<Long> courseScheduleIds = courseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
|
|
//主教老师列表
|
|
//主教老师列表
|
|
@@ -135,15 +133,135 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
|
|
List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(allTeacherIds);
|
|
List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(allTeacherIds);
|
|
Map<CourseSchedule.CourseScheduleType, List<TeacherDefaultMusicGroupSalary>> teacherDefaultMusicGroupSalariesGroupByCourseType = teacherDefaultMusicGroupSalaries.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getCourseScheduleType));
|
|
Map<CourseSchedule.CourseScheduleType, List<TeacherDefaultMusicGroupSalary>> teacherDefaultMusicGroupSalariesGroupByCourseType = teacherDefaultMusicGroupSalaries.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getCourseScheduleType));
|
|
|
|
|
|
- //乐团结算方式集合
|
|
|
|
|
|
+ //获取课程对应教学点补贴
|
|
|
|
+ List<Map<Integer, BigDecimal>> courseSubsidyByCourses = courseScheduleTeacherSalaryDao.findCourseSubsidyByCourses(courseScheduleIds);
|
|
|
|
+ Map<Integer,BigDecimal> courseSubsidyMap= MapUtil.convertMybatisMap(courseSubsidyByCourses);
|
|
|
|
+
|
|
|
|
+ //课程对应乐团结算方式集合
|
|
List<Map<String, String>> musicGroupSettlementTypeByCourse = courseScheduleTeacherSalaryDao.findMusicGroupSettlementTypeByCourse(courseScheduleIds);
|
|
List<Map<String, String>> musicGroupSettlementTypeByCourse = courseScheduleTeacherSalaryDao.findMusicGroupSettlementTypeByCourse(courseScheduleIds);
|
|
- Map<String, String> musicGroupSettilementsMap = MapUtil.convertMybatisMap(musicGroupSettlementTypeByCourse);
|
|
|
|
|
|
+ Map<String, String> musicGroupSettlementsMap = MapUtil.convertMybatisMap(musicGroupSettlementTypeByCourse);
|
|
|
|
|
|
courseSchedules.forEach(courseSchedule -> {
|
|
courseSchedules.forEach(courseSchedule -> {
|
|
if(Objects.isNull(courseSchedule.getType())){
|
|
if(Objects.isNull(courseSchedule.getType())){
|
|
- throw new BizException("课程类型未指定");
|
|
|
|
|
|
+ throw new BizException("存在未指定课程类型的课程");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //获取结算方式
|
|
|
|
+ String settlementType = musicGroupSettlementsMap.get(courseSchedule.getId());
|
|
|
|
+ if(StringUtils.isBlank(settlementType)){
|
|
|
|
+ throw new BizException("存在未指定结算方式的课程");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //根据课程类型获取对应的默认课酬设置列表
|
|
|
|
+ List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithCourseType = teacherDefaultMusicGroupSalariesGroupByCourseType.get(courseSchedule.getType());
|
|
|
|
+ if(CollectionUtils.isEmpty(teacherDefaultMusicGroupSalariesWithCourseType)){
|
|
|
|
+ throw new BizException("存在未指定结算方式的课程类型");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //根据结算方式将对应课程类型下的默认课酬设置列表分组
|
|
|
|
+ Map<String, List<TeacherDefaultMusicGroupSalary>> teacherDefaultMusicGroupSalaryGroupBySettlementType = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.groupingBy(teacherDefaultMusicGroupSalary->teacherDefaultMusicGroupSalary.getSettlementType().getCode()));
|
|
|
|
+
|
|
|
|
+ //获取对应结算方式下的默认课酬设置列表
|
|
|
|
+ List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithSettlementType = teacherDefaultMusicGroupSalaryGroupBySettlementType.get(settlementType);
|
|
|
|
+ if(CollectionUtils.isEmpty(teacherDefaultMusicGroupSalariesWithSettlementType)){
|
|
|
|
+ throw new BizException("未找到结算方式对应的默认课酬");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //根据教师编号将对应结算方式下的默认课酬设置分组
|
|
|
|
+ Map<Integer, List<TeacherDefaultMusicGroupSalary>> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithSettlementType.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getUserId));
|
|
|
|
+
|
|
|
|
+ //课时长度
|
|
|
|
+ int duration = DateUtil.minutesBetween(courseSchedule.getEndClassTime(), courseSchedule.getStartClassTime());
|
|
|
|
+
|
|
|
|
+ //课程时长与结算单位时长占比
|
|
|
|
+ BigDecimal classTimeDuty=new BigDecimal(duration).divide(teacherSalaryTimeUnit);
|
|
|
|
+
|
|
|
|
+ if(!courseSchedule.isBishopTeacherSalaryNotCreate()){
|
|
|
|
+ //根据课程获取主教的默认课酬设置列表
|
|
|
|
+ List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseSchedule.getActualTeacherId());
|
|
|
|
+ courseScheduleTeacherSalaryList.add(countMusicGroupTeacherSalary(
|
|
|
|
+ courseSchedule,
|
|
|
|
+ TeachTypeEnum.BISHOP,
|
|
|
|
+ settlementType,
|
|
|
|
+ classTimeDuty,
|
|
|
|
+ courseSubsidyMap.get(courseSchedule.getId()),
|
|
|
|
+ duration,
|
|
|
|
+ courseSchedule.getActualTeacherId().intValue(),
|
|
|
|
+ teacherDefaultMusicGroupSalariesWithTeacherId));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ //计算助教课程薪酬
|
|
|
|
+ //助教编号列表
|
|
|
|
+ List<Integer> teachingTeacherIdList = courseSchedule.getTeachingTeacherIdList();
|
|
|
|
+ if(CollectionUtils.isEmpty(teachingTeacherIdList)){
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ teachingTeacherIdList.forEach(teacherId->{
|
|
|
|
+ List<TeacherDefaultMusicGroupSalary> teachingTeacherDefaultMusicGroupSalariesWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(teacherId);
|
|
|
|
+ courseScheduleTeacherSalaryList.add(countMusicGroupTeacherSalary(
|
|
|
|
+ courseSchedule,
|
|
|
|
+ TeachTypeEnum.TEACHING,
|
|
|
|
+ settlementType,
|
|
|
|
+ classTimeDuty,
|
|
|
|
+ courseSubsidyMap.get(courseSchedule.getId()),
|
|
|
|
+ duration,
|
|
|
|
+ teacherId,
|
|
|
|
+ teachingTeacherDefaultMusicGroupSalariesWithTeacherId));
|
|
|
|
+ });
|
|
});
|
|
});
|
|
|
|
+ courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaryList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @describe 计算教师课酬
|
|
|
|
+ * @author Joburgess
|
|
|
|
+ * @date 2019/10/24
|
|
|
|
+ * @param courseSchedule:
|
|
|
|
+ * @param teachType:
|
|
|
|
+ * @param settlementType:
|
|
|
|
+ * @param classTimeDuty:
|
|
|
|
+ * @param subsidy:
|
|
|
|
+ * @param duration:
|
|
|
|
+ * @param teacherId:
|
|
|
|
+ * @param teacherDefaultMusicGroupSalariesWithTeacherId:
|
|
|
|
+ * @return com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary
|
|
|
|
+ */
|
|
|
|
+ private CourseScheduleTeacherSalary countMusicGroupTeacherSalary(CourseSchedule courseSchedule,
|
|
|
|
+ TeachTypeEnum teachType,
|
|
|
|
+ String settlementType,
|
|
|
|
+ BigDecimal classTimeDuty,
|
|
|
|
+ BigDecimal subsidy,
|
|
|
|
+ int duration,
|
|
|
|
+ Integer teacherId,
|
|
|
|
+ List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithTeacherId){
|
|
|
|
+ if(CollectionUtils.isEmpty(teacherDefaultMusicGroupSalariesWithTeacherId)){
|
|
|
|
+ throw new BizException("存在未设置默认课酬的教师");
|
|
|
|
+ }
|
|
|
|
+ //教师课酬
|
|
|
|
+ BigDecimal teacherSalary=new BigDecimal(0);
|
|
|
|
+
|
|
|
|
+ //如果结算方式是教师默认课酬
|
|
|
|
+ if(settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT)){
|
|
|
|
+ TeacherDefaultMusicGroupSalary bishopTeacherDefaultMusicGroupSalary = teacherDefaultMusicGroupSalariesWithTeacherId.get(0);
|
|
|
|
+ if(Objects.isNull(bishopTeacherDefaultMusicGroupSalary)){
|
|
|
|
+ throw new BizException("存在未设置默认课酬的教师");
|
|
|
|
+ }
|
|
|
|
+ BigDecimal bishopTeacherDefaultSalary = teachType==TeachTypeEnum.BISHOP?bishopTeacherDefaultMusicGroupSalary.getMainTeacherSalary():bishopTeacherDefaultMusicGroupSalary.getAssistantTeacherSalary();
|
|
|
|
+ teacherSalary=bishopTeacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
+ }else if(settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)){
|
|
|
|
+ for (TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary : teacherDefaultMusicGroupSalariesWithTeacherId) {
|
|
|
|
+ if(duration >= teacherDefaultMusicGroupSalary.getDurationMin() && duration <= teacherDefaultMusicGroupSalary.getDurationMin()){
|
|
|
|
+ teacherSalary=teachType==TeachTypeEnum.BISHOP?teacherDefaultMusicGroupSalary.getMainTeacherSalary():teacherDefaultMusicGroupSalary.getAssistantTeacherSalary();
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return new CourseScheduleTeacherSalary(
|
|
|
|
+ courseSchedule.getId(),
|
|
|
|
+ TeachTypeEnum.BISHOP,
|
|
|
|
+ teacherId,
|
|
|
|
+ teacherSalary,
|
|
|
|
+ subsidy,
|
|
|
|
+ courseSchedule.getClassGroupId());
|
|
}
|
|
}
|
|
}
|
|
}
|