yonge hace 5 años
padre
commit
772dc6c38a

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDefaultPracticeGroupSalaryDao.java

@@ -15,6 +15,8 @@ public interface TeacherDefaultPracticeGroupSalaryDao extends BaseDAO<Long, Teac
 	 */
 	List<TeacherDefaultPracticeGroupSalary> queryByUserId(Integer userId);
 
+	List<TeacherDefaultPracticeGroupSalary> queryByUserIdList(@Param("userIdList") List<Integer> userIdList);
+
     int deleteByUserId(Integer userId);
     
     int batchInsert(List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList);

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -86,10 +86,11 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param teachMode 教学模式
 	 * @param type 课程类型
 	 * @param schoolId 教学点
+	 * @param isJumpHoliday 是否跳过节假日
 	 * @return
 	 */
 	boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, String teachingArrangement, TeachModeEnum teachMode,
-			CourseScheduleType type, Integer schoolId);
+			CourseScheduleType type, Integer schoolId, boolean isJumpHoliday);
 
 	/**
 	 * @Author: Joburgess

+ 180 - 81
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -106,6 +106,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     private MusicGroupService musicGroupService;
     @Autowired
     private SysConfigService sysConfigService;
+    @Autowired
+    private SchoolDao schoolDao;
     
     @Autowired
     private CourseHomeworkService courseHomeworkService;
@@ -247,82 +249,127 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     @Override
     @Transactional(rollbackFor = Exception.class)
 	public boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, String teachingArrangement, TeachModeEnum teachMode,
-			CourseScheduleType type, Integer schoolId) {
-    	ClassGroup classGroup = classGroupService.get(classGroupId);
-    	if(classGroup == null){
-    		throw new BizException("排课失败,班级信息不存在");
-    	}
-    	
-    	if(teachMode == TeachModeEnum.OFFLINE && schoolId == null){
-    		throw new BizException("线下课请指定教学点");
-    	}
-    	
-    	if(type == null){
-    		throw new BizException("请指定课程类型");
-    	}
-    	
-    	if (type == CourseScheduleType.VIP){
-    		throw new BizException("暂不支持vip课加课");
-    	}
-    	
-    	List<CourseTimeDto> teachingArrangementList = JsonUtil.parseArray(teachingArrangement, CourseTimeDto.class);
-    	if(teachingArrangementList == null || teachingArrangementList.size() == 0){
-    		throw new BizException("请设置课时安排");
-    	}
-    	
-    	//查询班级老师信息
-    	List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroupTeacherMapperService.getClassGroupTeachers(classGroupId);
-    	
-    	//查询主教老师
-    	Integer teacherId = null;
-    	for(ClassGroupTeacherMapper cgtm : classGroupTeacherMapperList){
-    		if(cgtm.getTeacherRole() == TeachTypeEnum.BISHOP){
-    			teacherId = cgtm.getUserId();
-    			break;
-    		}
-    	}
-    	
-    	if(teacherId == null){
-    		throw new BizException("班级缺少主教老师");
-    	}
-    	
-    	//查询老师默认课酬
+			CourseScheduleType type, Integer schoolId, boolean isJumpHoliday) {
+		ClassGroup classGroup = classGroupService.get(classGroupId);
+		if (classGroup == null) {
+			throw new BizException("排课失败,班级信息不存在");
+		}
+
+		if (teachMode == TeachModeEnum.OFFLINE && schoolId == null) {
+			throw new BizException("线下课请指定教学点");
+		}
+
+		if (type == null) {
+			throw new BizException("请指定课程类型");
+		}
+
+		if (type == CourseScheduleType.VIP) {
+			throw new BizException("暂不支持vip课加课");
+		}
+
+		List<CourseTimeDto> teachingArrangementList = JsonUtil.parseArray(teachingArrangement, CourseTimeDto.class);
+		if (teachingArrangementList == null || teachingArrangementList.size() == 0) {
+			throw new BizException("请设置课时安排");
+		}
+
+		BigDecimal subSidy = new BigDecimal(0);
+		// 查询教学点补贴
+		if (schoolId != null) {
+			School school = schoolDao.get(schoolId);
+			if (school == null) {
+				throw new BizException("指定的教学点不存在");
+			}
+			subSidy = school.getSubsidy();
+		}
+
+		// 查询班级老师信息
+		List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroupTeacherMapperService.getClassGroupTeachers(classGroupId);
+
+		// 查询主教老师
+		Integer teacherId = null;
+		for (ClassGroupTeacherMapper cgtm : classGroupTeacherMapperList) {
+			if (cgtm.getTeacherRole() == TeachTypeEnum.BISHOP) {
+				teacherId = cgtm.getUserId();
+				break;
+			}
+		}
+
+		if (teacherId == null) {
+			throw new BizException("班级缺少主教老师");
+		}
+
+		List<Integer> teacherIdList = classGroupTeacherMapperList.stream().map(ClassGroupTeacherMapper::getUserId).collect(Collectors.toList());
+
+		// 查询老师列表
+		List<Teacher> teacherList = teacherDao.findByTeacherIds(teacherIdList);
+		Map<Integer, Teacher> teacherMap = teacherList.stream().collect(Collectors.toMap(Teacher::getId, t -> t));
+
+		Map<Integer, BigDecimal> teacherPracticeSalaryMap = new HashMap<Integer, BigDecimal>();
+		Map<Integer, TeacherDefaultMusicGroupSalary> teacherMusicSalaryMap = new HashMap<Integer, TeacherDefaultMusicGroupSalary>();
+
+		Date entryDate = null;
+		String settlementType = null;
+
+		// 查询老师默认课酬
 		if (type == CourseScheduleType.PRACTICE) {
 
 			List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao
-					.queryByUserId(teacherId);
-			
+					.queryByUserIdList(teacherIdList);
+
+			teacherPracticeSalaryMap = teacherDefaultPracticeGroupSalaryList.stream().collect(
+					Collectors.toMap(TeacherDefaultPracticeGroupSalary::getUserId, TeacherDefaultPracticeGroupSalary::getMainTeacherSalary));
+
 		} else {
+			MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
+			if (musicGroup == null) {
+				throw new BizException("找不到乐团信息");
+			}
+			// 乐团结算方式
+			settlementType = musicGroup.getSettlementType().getCode();
+
+			// 老师入职的分界线
+			entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
+
 			// 所有老师默认乐团课酬
-			/*List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(newTeacherIdList);
+			List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherIdList);
+
 			for (TeacherDefaultMusicGroupSalary tdms : teacherDefaultMusicGroupSalaries) {
-				Map<CourseScheduleType, TeacherDefaultMusicGroupSalary> map = musicGroupSalaryMap.get(tdms.getUserId());
-				if (map == null) {
-					map = new HashMap<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary>();
+				if (tdms.getCourseScheduleType() == type) {
+					teacherMusicSalaryMap.put(tdms.getUserId(), tdms);
 				}
-				map.put(tdms.getCourseScheduleType(), tdms);
-				musicGroupSalaryMap.put(tdms.getUserId(), map);
-			}*/
+			}
+		}
+
+		// 查询班级学生信息
+		List<ClassGroupStudentMapper> classGroupStudentMapperList = classGroupStudentMapperDao.findByClassGroup(classGroupId);
+
+		Map<Integer, CourseTimeDto> dayOfWeekMap = teachingArrangementList.stream().collect(Collectors.toMap(CourseTimeDto::getDayOfWeek, ct -> ct));
+
+		Calendar calendar = Calendar.getInstance();
+		Date now = new Date();
+		CourseTimeDto courseTimeDto = null;
+		List<CourseSchedule> courseScheduleList = new ArrayList<CourseSchedule>();
+		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<CourseScheduleTeacherSalary>();
+		List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<CourseScheduleStudentPayment>();
+		List<TeacherAttendance> teacherAttendances = new ArrayList<TeacherAttendance>();
+		Map<String, Integer> holidayDays = new HashMap<>();
+		if (isJumpHoliday) {
+			try {
+		        Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
+				holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
+				holidayDays = holiday.get(calendar.get(Calendar.YEAR));
+
+			} catch (Exception e) {
+				throw new BizException("获取节假日失败",e);
+			}
 		}
-    	
-    	//查询班级学生信息
-    	List<ClassGroupStudentMapper> classGroupStudentMapperList = classGroupStudentMapperDao.findByClassGroup(classGroupId);
-    	
-    	//查询教学点补贴
-    	
-    	Map<Integer,CourseTimeDto> dayOfWeekMap = teachingArrangementList.stream().collect(Collectors.toMap(CourseTimeDto :: getDayOfWeek, ct -> ct));
-    	
-    	Calendar calendar = Calendar.getInstance();
-    	Date now = new Date();
-    	CourseTimeDto courseTimeDto = null;
-    	List<CourseSchedule> courseScheduleList = new ArrayList<CourseSchedule>();
-    	List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<CourseScheduleTeacherSalary>();
-        List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<CourseScheduleStudentPayment>();
-        List<TeacherAttendance> teacherAttendances = new ArrayList<TeacherAttendance>();
+		calendar.setTime(startDate);
 		for (int i = 0; i < coursesTimes; i++) {
 			while (true) {
-				startDate = DateUtil.addDays1(startDate, 1);
-				calendar.setTime(startDate);
+	            if (holidayDays.containsKey(DateUtil.format(calendar.getTime(), "MMdd"))) {
+	                calendar.add(Calendar.DATE, 1);
+	                continue;
+	            }
 				// 查询当前日期是周几
 				int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
 				if (dayOfWeek == 1) {
@@ -337,7 +384,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					courseSchedule.setMusicGroupId(classGroup.getMusicGroupId());
 					courseSchedule.setClassGroupId(classGroup.getId());
 					courseSchedule.setStatus(CourseStatusEnum.NOT_START);
-					courseSchedule.setClassDate(startDate);
+					courseSchedule.setClassDate(calendar.getTime());
 
 					String dateYmdStr = DateUtil.dateToString(calendar.getTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
 
@@ -348,10 +395,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					dateYmdStr = dateYmdStr + " " + courseTimeDto.getEndClassTime();
 					Date courseEndTime = DateUtil.stringToDate(dateYmdStr, "yyyy-MM-dd HH:mm");
 					courseSchedule.setEndClassTime(courseEndTime);
-					
-					if(courseEndTime.before(courseStartTime)){
+
+					if (courseEndTime.before(courseStartTime)) {
 						throw new BizException("课时上课时间安排错误");
 					}
+					
+					//检查是否冲突
 
 					courseSchedule.setTeacherId(teacherId);
 					courseSchedule.setActualTeacherId(teacherId);
@@ -362,6 +411,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					courseSchedule.setGroupType(classGroup.getGroupType());
 					courseSchedule.setName(classGroup.getName());
 					courseSchedule.setSchoolId(schoolId);
+					courseSchedule.setSubsidy(subSidy);
 					courseScheduleList.add(courseSchedule);
 
 					// 课程与老师薪水表
@@ -372,10 +422,58 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						courseScheduleTeacherSalary.setMusicGroupId(classGroup.getMusicGroupId());
 						courseScheduleTeacherSalary.setTeacherRole(cgtm.getTeacherRole());
 						courseScheduleTeacherSalary.setUserId(cgtm.getUserId());
-						//courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(practiceCourseSalaryConfig.getParanValue()));
+						if (type == CourseScheduleType.PRACTICE) {
+							courseScheduleTeacherSalary.setExpectSalary(teacherPracticeSalaryMap.get(cgtm.getUserId()));
+						} else if (type == CourseScheduleType.VIP) {
+
+						} else {
+							TeacherDefaultMusicGroupSalary tdms = teacherMusicSalaryMap.get(cgtm.getUserId());
+
+							int newMinutes = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
+
+							int unitMinutes = 30;
+
+							// 如果当前教师是在指定日期之后入职的,则按照3.0的方式结算
+							if (type != CourseScheduleType.CLASSROOM) {
+								Teacher teacher = teacherMap.get(teacherId);
+								if (Objects.nonNull(teacher.getEntryDate())
+										&& (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
+									settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
+								}
+							}
+							if (StringUtils.equals(settlementType, "TEACHER_DEFAULT")) {
+								if (type == CourseScheduleType.CLASSROOM) {
+									unitMinutes = 40;
+								} else if (type == CourseScheduleType.HIGH) {
+									unitMinutes = 45;
+								}
+								if (courseScheduleTeacherSalary.getTeacherRole() == TeachTypeEnum.BISHOP) {
+									courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(tdms.getMainTeacher30MinSalary().doubleValue() * newMinutes
+											/ unitMinutes));
+								} else {
+									courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(tdms.getAssistantTeacher30MinSalary().doubleValue() * newMinutes
+											/ unitMinutes));
+								}
+							} else if (StringUtils.equals(settlementType, "GRADIENT_SALARY")) {
+								unitMinutes = 90;
+								if (type == CourseScheduleType.CLASSROOM) {
+									unitMinutes = 40;
+								} else if (type == CourseScheduleType.HIGH) {
+									unitMinutes = 45;
+								}
+								if (courseScheduleTeacherSalary.getTeacherRole() == TeachTypeEnum.BISHOP) {
+									courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(tdms.getMainTeacher90MinSalary().doubleValue() * newMinutes
+											/ unitMinutes));
+								} else {
+									courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(tdms.getAssistantTeacher90MinSalary().doubleValue() * newMinutes
+											/ unitMinutes));
+								}
+							}
+						}
 						courseScheduleTeacherSalary.setCreateTime(now);
 						courseScheduleTeacherSalary.setUpdateTime(now);
 						courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
+						courseScheduleTeacherSalary.setSubsidy(subSidy);
 						courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
 					}
 
@@ -406,28 +504,29 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					}
 					break;
 				}
+                calendar.add(Calendar.DATE, 1);
 			}
 		}
-		
-		if(courseScheduleList.size() > 0){
+
+		if (courseScheduleList.size() > 0) {
 			courseScheduleDao.batchAddCourseSchedules(courseScheduleList);
 		}
-		
-		if(courseScheduleTeacherSalaries.size() > 0){
+
+		if (courseScheduleTeacherSalaries.size() > 0) {
 			courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
 		}
-		
-		if(courseScheduleStudentPayments.size() > 0){
+
+		if (courseScheduleStudentPayments.size() > 0) {
 			courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 		}
-		
-		if(teacherAttendances.size() > 0){
+
+		if (teacherAttendances.size() > 0) {
 			teacherAttendanceDao.batchInsert(teacherAttendances);
 		}
-		
-		//更新班级信息
+
+		// 更新班级信息
 		classGroupService.updateClassGroupInfo(classGroupId);
-		
+
 		return true;
 	}
 

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/TeacherDefaultPracticeGroupSalaryMapper.xml

@@ -100,6 +100,14 @@
 	<select id="queryByUserId" resultMap="TeacherDefaultPracticeGroupSalary">
 		SELECT * FROM teacher_default_practice_group_salary where user_id_ = #{userId} ORDER BY id_
 	</select>
+
+	<select id="queryByUserIdList" resultMap="TeacherDefaultPracticeGroupSalary">
+		SELECT * FROM teacher_default_practice_group_salary where ser_id_ IN
+		<foreach collection="userIdList" item="userId" open="(" close=")" separator=",">
+			#{userId}
+		</foreach>
+		ORDER BY id_
+	</select>
 	<select id="findByTeacherAndCourseMinutes" resultMap="TeacherDefaultPracticeGroupSalary">
 		SELECT * FROM teacher_default_practice_group_salary where user_id_ = #{userId} AND minutes_=#{minutes}
 	</select>