|  | @@ -1,40 +1,130 @@
 | 
	
		
			
				|  |  |  package com.ym.mec.biz.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import java.util.Date;
 | 
	
		
			
				|  |  | +import java.util.HashMap;
 | 
	
		
			
				|  |  | +import java.util.List;
 | 
	
		
			
				|  |  | +import java.util.Map;
 | 
	
		
			
				|  |  | +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 com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.MusicGroupDao;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.TeacherDefaultMusicGroupSalaryDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.MusicGroup;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.TeachTypeEnum;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.service.TeacherDefaultMusicGroupSalaryService;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.dal.BaseDAO;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.service.impl.BaseServiceImpl;
 | 
	
		
			
				|  |  | -import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | -import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import java.util.List;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  | -public class TeacherDefaultMusicGroupSalaryServiceImpl extends BaseServiceImpl<Long, TeacherDefaultMusicGroupSalary>  implements TeacherDefaultMusicGroupSalaryService {
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | +public class TeacherDefaultMusicGroupSalaryServiceImpl extends BaseServiceImpl<Long, TeacherDefaultMusicGroupSalary> implements
 | 
	
		
			
				|  |  | +		TeacherDefaultMusicGroupSalaryService {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	@Autowired
 | 
	
		
			
				|  |  |  	private TeacherDefaultMusicGroupSalaryDao teacherDefaultMusicGroupSalaryDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private MusicGroupDao musicGroupDao;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  |  	public BaseDAO<Long, TeacherDefaultMusicGroupSalary> getDAO() {
 | 
	
		
			
				|  |  |  		return teacherDefaultMusicGroupSalaryDao;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  | -    public List<TeacherDefaultMusicGroupSalary> getTeacherSalaryByUserIdAndType(int userId, String classGroupType, SalarySettlementTypeEnum settlementType) {
 | 
	
		
			
				|  |  | -        return teacherDefaultMusicGroupSalaryDao.getTeacherSalaryByUserIdAndType(userId, classGroupType,settlementType);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	public List<TeacherDefaultMusicGroupSalary> getTeacherSalaryByUserIdAndType(int userId, String classGroupType, SalarySettlementTypeEnum settlementType) {
 | 
	
		
			
				|  |  | +		return teacherDefaultMusicGroupSalaryDao.getTeacherSalaryByUserIdAndType(userId, classGroupType);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  | -	public void batchUpset(List<TeacherDefaultMusicGroupSalary> salaries) {
 | 
	
		
			
				|  |  | -		if(salaries != null && salaries.size() > 0){
 | 
	
		
			
				|  |  | -			//删除当前教师所有的结算类型的数据
 | 
	
		
			
				|  |  | +	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +	public void batchUpset(List<TeacherDefaultMusicGroupSalary> salaries, Date startDate) {
 | 
	
		
			
				|  |  | +		if (salaries != null && salaries.size() > 0) {
 | 
	
		
			
				|  |  |  			TeacherDefaultMusicGroupSalary salary = salaries.get(0);
 | 
	
		
			
				|  |  | -			teacherDefaultMusicGroupSalaryDao.delByTeacherId(salary.getUserId());
 | 
	
		
			
				|  |  | -			//批量新增
 | 
	
		
			
				|  |  | -			teacherDefaultMusicGroupSalaryDao.batchAdd(salaries);
 | 
	
		
			
				|  |  | +			Integer userId = salary.getUserId();
 | 
	
		
			
				|  |  | +			// 获取老师默认乐团课课酬
 | 
	
		
			
				|  |  | +			List<TeacherDefaultMusicGroupSalary> origSalaryList = teacherDefaultMusicGroupSalaryDao.getTeacherSalaryByUserIdAndType(userId, null);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			Map<CourseScheduleType, TeacherDefaultMusicGroupSalary> map = new HashMap<CourseScheduleType, TeacherDefaultMusicGroupSalary>();
 | 
	
		
			
				|  |  | +			if (origSalaryList != null && origSalaryList.size() > 0) {
 | 
	
		
			
				|  |  | +				for (TeacherDefaultMusicGroupSalary ms : origSalaryList) {
 | 
	
		
			
				|  |  | +					map.put(ms.getCourseScheduleType(), ms);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			Map<CourseScheduleType, TeacherDefaultMusicGroupSalary> salaryMap = new HashMap<CourseScheduleType, TeacherDefaultMusicGroupSalary>();
 | 
	
		
			
				|  |  | +			for (TeacherDefaultMusicGroupSalary ms : salaries) {
 | 
	
		
			
				|  |  | +				// 修改了哪些课酬
 | 
	
		
			
				|  |  | +				TeacherDefaultMusicGroupSalary oldMS = map.get(ms.getCourseScheduleType());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				if (oldMS.getAssistantTeacher30MinSalary().doubleValue() != ms.getAssistantTeacher30MinSalary().doubleValue()
 | 
	
		
			
				|  |  | +						|| oldMS.getMainTeacher30MinSalary().doubleValue() != ms.getMainTeacher30MinSalary().doubleValue()
 | 
	
		
			
				|  |  | +						|| oldMS.getAssistantTeacher90MinSalary().doubleValue() != ms.getAssistantTeacher90MinSalary().doubleValue()
 | 
	
		
			
				|  |  | +						|| oldMS.getMainTeacher90MinSalary().doubleValue() != ms.getMainTeacher90MinSalary().doubleValue()) {
 | 
	
		
			
				|  |  | +					salaryMap.put(ms.getCourseScheduleType(), ms);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if (salaryMap.size() > 0) {
 | 
	
		
			
				|  |  | +				String typeList = salaryMap.keySet().stream().map(e -> e.getCode()).collect(Collectors.joining(","));
 | 
	
		
			
				|  |  | +				// 查询所有需要修改的课酬
 | 
	
		
			
				|  |  | +				List<CourseScheduleTeacherSalary> updateTeacherSalaryList = courseScheduleTeacherSalaryDao.queryUserNoSettlementListByTypeAndStartClassDate(
 | 
	
		
			
				|  |  | +						userId, typeList, startDate);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				if (updateTeacherSalaryList != null && updateTeacherSalaryList.size() > 0) {
 | 
	
		
			
				|  |  | +					Set<String> musicGroupIdList = updateTeacherSalaryList.stream().map(ts -> ts.getMusicGroupId()).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | +					// 查询包含的乐团信息
 | 
	
		
			
				|  |  | +					Map<String, MusicGroup> musicGroupMap = musicGroupDao.queryListByIds(StringUtils.join(musicGroupIdList, ",")).stream()
 | 
	
		
			
				|  |  | +							.collect(Collectors.toMap(MusicGroup::getId, mg -> mg));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					// 批量修改课程课酬
 | 
	
		
			
				|  |  | +					for (CourseScheduleTeacherSalary ts : updateTeacherSalaryList) {
 | 
	
		
			
				|  |  | +						MusicGroup musicGroup = musicGroupMap.get(ts.getMusicGroupId());
 | 
	
		
			
				|  |  | +						// 课酬结算标准
 | 
	
		
			
				|  |  | +						if (musicGroup != null) {
 | 
	
		
			
				|  |  | +							TeacherDefaultMusicGroupSalary tdms = salaryMap.get(ts.getCourseSchedule().getType());
 | 
	
		
			
				|  |  | +							if (tdms != null) {
 | 
	
		
			
				|  |  | +								if (musicGroup.getSettlementType() == SalarySettlementTypeEnum.GRADIENT_SALARY) {// 3.0课酬
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +									// 判断是助教、主教
 | 
	
		
			
				|  |  | +									if (ts.getTeacherRole() == TeachTypeEnum.BISHOP) {
 | 
	
		
			
				|  |  | +										ts.setExpectSalary(tdms.getMainTeacher90MinSalary());
 | 
	
		
			
				|  |  | +									} else {
 | 
	
		
			
				|  |  | +										ts.setExpectSalary(tdms.getAssistantTeacher90MinSalary());
 | 
	
		
			
				|  |  | +									}
 | 
	
		
			
				|  |  | +								} else if (musicGroup.getSettlementType() == SalarySettlementTypeEnum.TEACHER_DEFAULT) {// 默认课酬
 | 
	
		
			
				|  |  | +									// 判断是助教、主教
 | 
	
		
			
				|  |  | +									if (ts.getTeacherRole() == TeachTypeEnum.BISHOP) {
 | 
	
		
			
				|  |  | +										ts.setExpectSalary(tdms.getMainTeacher30MinSalary());
 | 
	
		
			
				|  |  | +									} else {
 | 
	
		
			
				|  |  | +										ts.setExpectSalary(tdms.getAssistantTeacher30MinSalary());
 | 
	
		
			
				|  |  | +									}
 | 
	
		
			
				|  |  | +								}
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					courseScheduleTeacherSalaryDao.batchUpdateTeacherExpectSalarys(updateTeacherSalaryList);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				// 删除当前教师所有的结算类型的数据
 | 
	
		
			
				|  |  | +				teacherDefaultMusicGroupSalaryDao.delByTeacherId(userId);
 | 
	
		
			
				|  |  | +				// 批量新增
 | 
	
		
			
				|  |  | +				teacherDefaultMusicGroupSalaryDao.batchAdd(salaries);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 |