|  | @@ -19,6 +19,7 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 | 
											
												
													
														|  |  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.lang3.StringUtils;
 | 
											
												
													
														|  |  import org.slf4j.Logger;
 |  |  import org.slf4j.Logger;
 | 
											
												
													
														|  |  import org.slf4j.LoggerFactory;
 |  |  import org.slf4j.LoggerFactory;
 | 
											
												
													
														|  |  import org.springframework.beans.factory.annotation.Autowired;
 |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
											
										
											
												
													
														|  | @@ -27,12 +28,8 @@ import org.springframework.stereotype.Service;
 | 
											
												
													
														|  |  import org.springframework.transaction.annotation.Isolation;
 |  |  import org.springframework.transaction.annotation.Isolation;
 | 
											
												
													
														|  |  import org.springframework.transaction.annotation.Transactional;
 |  |  import org.springframework.transaction.annotation.Transactional;
 | 
											
												
													
														|  |  import org.springframework.util.CollectionUtils;
 |  |  import org.springframework.util.CollectionUtils;
 | 
											
												
													
														|  | -import org.springframework.util.StringUtils;
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  import java.math.BigDecimal;
 |  |  import java.math.BigDecimal;
 | 
											
												
													
														|  | -import java.math.RoundingMode;
 |  | 
 | 
											
												
													
														|  | -import java.time.Duration;
 |  | 
 | 
											
												
													
														|  | -import java.time.LocalDateTime;
 |  | 
 | 
											
												
													
														|  |  import java.util.*;
 |  |  import java.util.*;
 | 
											
												
													
														|  |  import java.util.stream.Collectors;
 |  |  import java.util.stream.Collectors;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -82,15 +79,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |      private MusicGroupDao musicGroupDao;
 |  |      private MusicGroupDao musicGroupDao;
 | 
											
												
													
														|  |      @Autowired
 |  |      @Autowired
 | 
											
												
													
														|  |      private TeacherDefaultPracticeGroupSalaryDao teacherDefaultPracticeGroupSalaryDao;
 |  |      private TeacherDefaultPracticeGroupSalaryDao teacherDefaultPracticeGroupSalaryDao;
 | 
											
												
													
														|  | -    @Autowired
 |  | 
 | 
											
												
													
														|  | -    private VipGroupDao vipGroupDao;
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      private static final Logger LOGGER = LoggerFactory
 |  |      private static final Logger LOGGER = LoggerFactory
 | 
											
												
													
														|  |              .getLogger(CourseScheduleTeacherSalaryServiceImpl.class);
 |  |              .getLogger(CourseScheduleTeacherSalaryServiceImpl.class);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    //按节数计算课酬的课程类型
 |  | 
 | 
											
												
													
														|  | -    protected static final Set<CourseSchedule.CourseScheduleType> UNIT_PRICE_COURSE_TYPES=new HashSet<>(Arrays.asList(CourseSchedule.CourseScheduleType.HIGH_ONLINE, CourseSchedule.CourseScheduleType.MUSIC_NETWORK));
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |      @Override
 |  |      @Override
 | 
											
												
													
														|  |      public BaseDAO<Long, CourseScheduleTeacherSalary> getDAO() {
 |  |      public BaseDAO<Long, CourseScheduleTeacherSalary> getDAO() {
 | 
											
												
													
														|  |          return courseScheduleTeacherSalaryDao;
 |  |          return courseScheduleTeacherSalaryDao;
 | 
											
										
											
												
													
														|  | @@ -204,85 +196,54 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |      @Override
 |  |      @Override
 | 
											
												
													
														|  |      @Transactional(rollbackFor = Exception.class)
 |  |      @Transactional(rollbackFor = Exception.class)
 | 
											
												
													
														|  |      public void practiceTeacherSalarySettlement() {
 |  |      public void practiceTeacherSalarySettlement() {
 | 
											
												
													
														|  | -//        int days = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.VIP_APPEAL_DAYS_RANGE).getParanValue());
 |  | 
 | 
											
												
													
														|  | -//        int days = 0;
 |  | 
 | 
											
												
													
														|  |          //获取教师未结算课程记录
 |  |          //获取教师未结算课程记录
 | 
											
												
													
														|  |          Date now = new Date();
 |  |          Date now = new Date();
 | 
											
												
													
														|  |          Date date = DateUtil.addMonths(now, -1);
 |  |          Date date = DateUtil.addMonths(now, -1);
 | 
											
												
													
														|  |          String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
 |  |          String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
 | 
											
												
													
														|  |          String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
 |  |          String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
 | 
											
												
													
														|  |          List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findTeacherCourseSalaryNoSettlement(startDate,endDate);
 |  |          List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findTeacherCourseSalaryNoSettlement(startDate,endDate);
 | 
											
												
													
														|  | -        if (!CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
 |  | 
 | 
											
												
													
														|  | -            someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
 |  | 
 | 
											
												
													
														|  | -                courseScheduleTeacherSalary.setActualSalary(courseScheduleTeacherSalary.getTeacherActualSalary().setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP));
 |  | 
 | 
											
												
													
														|  | -                courseScheduleTeacherSalary.setSettlementTime(now);
 |  | 
 | 
											
												
													
														|  | -                courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
 |  | 
 | 
											
												
													
														|  | -            });
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        Set<Long> courseScheduleIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toSet());
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        //教师签到记录
 | 
											
												
													
														|  | 
 |  | +        List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(new ArrayList<>(courseScheduleIds));
 | 
											
												
													
														|  | 
 |  | +        Map<String, List<TeacherAttendance>> teacherCourseAttendanceMap = allTeacherAttendances.stream().collect(Collectors.groupingBy(ta -> org.apache.commons.lang3.StringUtils.joinWith(":", ta.getCourseScheduleId(), ta.getTeacherId())));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        if (CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
 | 
											
												
													
														|  | 
 |  | +            return;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -        //获取未转结的
 |  | 
 | 
											
												
													
														|  | -        List<TeacherCourseReward> teacherCourseRewards = teacherCourseRewardService.findBySettlementStatus(0);
 |  | 
 | 
											
												
													
														|  | -        if(teacherCourseRewards.size() > 0){
 |  | 
 | 
											
												
													
														|  | -            //逗号分隔的课程拆分
 |  | 
 | 
											
												
													
														|  | -            List<String> collect = teacherCourseRewards.stream().map(e -> e.getCourseScheduleIdList()).collect(Collectors.toList());
 |  | 
 | 
											
												
													
														|  | -            List<Long> courseScheduleIds = new ArrayList<>();
 |  | 
 | 
											
												
													
														|  | -            collect.forEach(e->{
 |  | 
 | 
											
												
													
														|  | -                if(!StringUtils.isEmpty(e)){
 |  | 
 | 
											
												
													
														|  | -                    String[] split = e.split(",");
 |  | 
 | 
											
												
													
														|  | -                    for (String s : split) {
 |  | 
 | 
											
												
													
														|  | -                        courseScheduleIds.add(Long.parseLong(s));
 |  | 
 | 
											
												
													
														|  | -                    }
 |  | 
 | 
											
												
													
														|  | -                }
 |  | 
 | 
											
												
													
														|  | -            });
 |  | 
 | 
											
												
													
														|  | -            if (courseScheduleIds.size() > 0){
 |  | 
 | 
											
												
													
														|  | -                //去掉有未结束课程的数据
 |  | 
 | 
											
												
													
														|  | -                List<Long> mapList = courseScheduleDao.findNotStartCourseByIds(courseScheduleIds);
 |  | 
 | 
											
												
													
														|  | -                List<TeacherAttendance> teacherAttendances = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
 |  | 
 | 
											
												
													
														|  | -                Map<Long, TeacherAttendance> teacherAttendancesMap = teacherAttendances.stream().collect(Collectors.toMap(TeacherAttendance::getCourseScheduleId,t -> t));
 |  | 
 | 
											
												
													
														|  | -                String courseScheduleIdList = null;
 |  | 
 | 
											
												
													
														|  | -                StringBuffer memo;
 |  | 
 | 
											
												
													
														|  | -                BigDecimal multiply;
 |  | 
 | 
											
												
													
														|  | -                BigDecimal add;
 |  | 
 | 
											
												
													
														|  | -                outer1:for (TeacherCourseReward e : teacherCourseRewards) {
 |  | 
 | 
											
												
													
														|  | -                    memo = new StringBuffer();
 |  | 
 | 
											
												
													
														|  | -                    courseScheduleIdList = e.getCourseScheduleIdList();
 |  | 
 | 
											
												
													
														|  | -                    if(!StringUtils.isEmpty(courseScheduleIdList)){
 |  | 
 | 
											
												
													
														|  | -                        String[] split = courseScheduleIdList.split(",");
 |  | 
 | 
											
												
													
														|  | -                        for (String s : split) {
 |  | 
 | 
											
												
													
														|  | -                            //如果包含未结算的课程,不转结
 |  | 
 | 
											
												
													
														|  | -                            if(mapList.contains(Long.parseLong(s))){
 |  | 
 | 
											
												
													
														|  | -                                continue outer1;
 |  | 
 | 
											
												
													
														|  | -                            }
 |  | 
 | 
											
												
													
														|  | -                        }
 |  | 
 | 
											
												
													
														|  | -                        //转结,是否正常签到,签退
 |  | 
 | 
											
												
													
														|  | -                        BigDecimal expectRewardAmount = e.getExpectRewardAmount().divide(new BigDecimal(split.length));
 |  | 
 | 
											
												
													
														|  | -                        multiply = expectRewardAmount.multiply(new BigDecimal(0.5));
 |  | 
 | 
											
												
													
														|  | -                        add = expectRewardAmount.multiply(new BigDecimal(0));
 |  | 
 | 
											
												
													
														|  | -                        for (String s : split) {
 |  | 
 | 
											
												
													
														|  | -                            //如果包含未结算的课程,不转结
 |  | 
 | 
											
												
													
														|  | -                            TeacherAttendance teacherAttendance = teacherAttendancesMap.get(Long.parseLong(s));
 |  | 
 | 
											
												
													
														|  | -                            if(teacherAttendance == null){
 |  | 
 | 
											
												
													
														|  | -                                throw new BizException("教师签到记录不存在 : courseScheduleId:{}",s);
 |  | 
 | 
											
												
													
														|  | -                            }
 |  | 
 | 
											
												
													
														|  | -                            if(teacherAttendance.getSignInStatus() == null || teacherAttendance.getSignInStatus() == YesOrNoEnum.NO){
 |  | 
 | 
											
												
													
														|  | -                                expectRewardAmount = expectRewardAmount.subtract(multiply);
 |  | 
 | 
											
												
													
														|  | -                                memo.append("课程").append(s).append("异常签到;");
 |  | 
 | 
											
												
													
														|  | -                            }
 |  | 
 | 
											
												
													
														|  | -                            if(teacherAttendance.getSignOutStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){
 |  | 
 | 
											
												
													
														|  | -                                expectRewardAmount = expectRewardAmount.subtract(multiply);
 |  | 
 | 
											
												
													
														|  | -                                memo.append("课程").append(s).append("异常签退;");
 |  | 
 | 
											
												
													
														|  | -                            }
 |  | 
 | 
											
												
													
														|  | -                            add = add.add(expectRewardAmount);
 |  | 
 | 
											
												
													
														|  | -                            expectRewardAmount = e.getExpectRewardAmount().divide(new BigDecimal(split.length));
 |  | 
 | 
											
												
													
														|  | -                        }
 |  | 
 | 
											
												
													
														|  | -                        e.setMemo(memo.toString());
 |  | 
 | 
											
												
													
														|  | -                        e.setActualRewardAmount(add);
 |  | 
 | 
											
												
													
														|  | -                        e.setSettlementStatus(YesOrNoEnum.YES);
 |  | 
 | 
											
												
													
														|  | -                        e.setSettlementDate(now);
 |  | 
 | 
											
												
													
														|  | -                    }
 |  | 
 | 
											
												
													
														|  | -                }
 |  | 
 | 
											
												
													
														|  | -                teacherCourseRewardService.batchUpdate(teacherCourseRewards);
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            //扣除费用
 | 
											
												
													
														|  | 
 |  | +            BigDecimal deductCost = new BigDecimal(0);
 | 
											
												
													
														|  | 
 |  | +            List<String> deductReasons = new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +            List<TeacherAttendance> courseTeacherAttendances = teacherCourseAttendanceMap.get(org.apache.commons.lang3.StringUtils.joinWith(":", courseScheduleTeacherSalary.getCourseScheduleId(), courseScheduleTeacherSalary.getUserId()));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
 | 
											
												
													
														|  | 
 |  | +            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
 | 
											
												
													
														|  | 
 |  | +                //未签到或异常签到扣除一半课酬
 | 
											
												
													
														|  | 
 |  | +                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
 | 
											
												
													
														|  | 
 |  | +                deductReasons.add("未签到或异常签到扣除一半课酬");
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  | -        }
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
 | 
											
												
													
														|  | 
 |  | +                //未签退或异常签退扣除一半课酬
 | 
											
												
													
														|  | 
 |  | +                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
 | 
											
												
													
														|  | 
 |  | +                deductReasons.add("未签退或异常签退扣除一半课酬");
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            BigDecimal finalSalary = courseScheduleTeacherSalary.getExpectSalary().subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            if(BigDecimal.ZERO.compareTo(deductCost)<0){
 | 
											
												
													
														|  | 
 |  | +                deductReasons.add("扣除总费用:" + deductCost);
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setActualSalary(finalSalary);
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setSettlementTime(now);
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setDeductionReason(StringUtils.join(deductReasons, ";"));
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
 | 
											
												
													
														|  | 
 |  | +        });
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      @Override
 |  |      @Override
 | 
											
										
											
												
													
														|  | @@ -330,31 +291,41 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |          //获取未结算课程编号列表
 |  |          //获取未结算课程编号列表
 | 
											
												
													
														|  |          List<Long> courseScheduleIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
 |  |          List<Long> courseScheduleIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        //获取未结算课程学生缴费信息
 |  | 
 | 
											
												
													
														|  | -        List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findByCourseScheduleIds(courseScheduleIds);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -        //根据课程将学生缴费信息分组
 |  | 
 | 
											
												
													
														|  | -        Map<Long, List<CourseScheduleStudentPayment>> studentPaymentGroupByCourse = courseScheduleStudentPayments.stream().collect(Collectors.groupingBy(CourseScheduleStudentPayment::getCourseScheduleId));
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -        //需更新教师课程结算记录
 |  | 
 | 
											
												
													
														|  | -        List<CourseScheduleTeacherSalary> updateTeacherSalarys = new ArrayList<>();
 |  | 
 | 
											
												
													
														|  | 
 |  | +        //教师签到记录
 | 
											
												
													
														|  | 
 |  | +        List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseScheduleIds);
 | 
											
												
													
														|  | 
 |  | +        Map<String, List<TeacherAttendance>> teacherCourseAttendanceMap = allTeacherAttendances.stream().collect(Collectors.groupingBy(ta -> org.apache.commons.lang3.StringUtils.joinWith(":", ta.getCourseScheduleId(), ta.getTeacherId())));
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          //处理课酬信息
 |  |          //处理课酬信息
 | 
											
												
													
														|  |          someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
 |  |          someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -            //获取当前课程学生缴费记录
 |  | 
 | 
											
												
													
														|  | -            List<CourseScheduleStudentPayment> studentPaymentsWithCourse = studentPaymentGroupByCourse.get(courseScheduleTeacherSalary.getCourseScheduleId());
 |  | 
 | 
											
												
													
														|  | 
 |  | +            //扣除费用
 | 
											
												
													
														|  | 
 |  | +            BigDecimal deductCost = new BigDecimal(0);
 | 
											
												
													
														|  | 
 |  | +            List<String> deductReasons = new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +            List<TeacherAttendance> courseTeacherAttendances = teacherCourseAttendanceMap.get(org.apache.commons.lang3.StringUtils.joinWith(":", courseScheduleTeacherSalary.getCourseScheduleId(), courseScheduleTeacherSalary.getUserId()));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
 | 
											
												
													
														|  | 
 |  | +            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
 | 
											
												
													
														|  | 
 |  | +                //未签到或异常签到扣除一半课酬
 | 
											
												
													
														|  | 
 |  | +                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
 | 
											
												
													
														|  | 
 |  | +                deductReasons.add("未签到或异常签到扣除一半课酬");
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -            if (CollectionUtils.isEmpty(studentPaymentsWithCourse)) {
 |  | 
 | 
											
												
													
														|  | -                return;
 |  | 
 | 
											
												
													
														|  | 
 |  | +            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
 | 
											
												
													
														|  | 
 |  | +                //未签退或异常签退扣除一半课酬
 | 
											
												
													
														|  | 
 |  | +                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
 | 
											
												
													
														|  | 
 |  | +                deductReasons.add("未签退或异常签退扣除一半课酬");
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  | -            BigDecimal expectSalary = courseScheduleTeacherSalary.getTeacherActualSalary().setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -            courseScheduleTeacherSalary.setActualSalary(expectSalary);
 |  | 
 | 
											
												
													
														|  | 
 |  | +            if(BigDecimal.ZERO.compareTo(deductCost)<0){
 | 
											
												
													
														|  | 
 |  | +                deductReasons.add("扣除总费用:" + deductCost);
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            BigDecimal finalSalary = courseScheduleTeacherSalary.getExpectSalary().subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setActualSalary(finalSalary);
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setDeductionReason(StringUtils.join(deductReasons, ";"));
 | 
											
												
													
														|  |              courseScheduleTeacherSalary.setSettlementTime(now);
 |  |              courseScheduleTeacherSalary.setSettlementTime(now);
 | 
											
												
													
														|  |              courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
 |  |              courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
 | 
											
												
													
														|  | -            updateTeacherSalarys.add(courseScheduleTeacherSalary);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |          });
 |  |          });
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -412,6 +383,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |                      .collect(Collectors.groupingBy(StudentAttendance::getCourseScheduleId, Collectors.counting()));
 |  |                      .collect(Collectors.groupingBy(StudentAttendance::getCourseScheduleId, Collectors.counting()));
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +        //课程对应乐团结算方式集合
 | 
											
												
													
														|  | 
 |  | +        List<Map<String, String>> musicGroupSettlementTypeByCourse = courseScheduleTeacherSalaryDao.findMusicGroupSettlementTypeByCourse(courseScheduleIds);
 | 
											
												
													
														|  | 
 |  | +        Map<String, String> musicGroupSettlementsMap = MapUtil.convertMybatisMap(musicGroupSettlementTypeByCourse);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |          //所有老师编号
 |  |          //所有老师编号
 | 
											
												
													
														|  |          List<Integer> allTeacherIds = courseScheduleTeacherSalaries.stream()
 |  |          List<Integer> allTeacherIds = courseScheduleTeacherSalaries.stream()
 | 
											
												
													
														|  |                  .map(CourseScheduleTeacherSalary::getUserId)
 |  |                  .map(CourseScheduleTeacherSalary::getUserId)
 | 
											
										
											
												
													
														|  | @@ -456,7 +431,40 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |                      teacherSalary = BigDecimal.ZERO;
 |  |                      teacherSalary = BigDecimal.ZERO;
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  |              }else if(CourseSchedule.CourseScheduleType.HIGH.equals(courseSchedule.getType())){
 |  |              }else if(CourseSchedule.CourseScheduleType.HIGH.equals(courseSchedule.getType())){
 | 
											
												
													
														|  | 
 |  | +                //根据课程类型获取对应的默认课酬设置列表
 | 
											
												
													
														|  | 
 |  | +                List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithCourseType = teacherDefaultMusicGroupSalariesGroupByCourseType.get(courseSchedule.getType());
 | 
											
												
													
														|  | 
 |  | +                if (CollectionUtils.isEmpty(teacherDefaultMusicGroupSalariesWithCourseType)) {
 | 
											
												
													
														|  | 
 |  | +                    LOGGER.error("存在未指定结算方式的课程类型[{}]", courseScheduleTeacherSalary.getId());
 | 
											
												
													
														|  | 
 |  | +                    continue;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                //根据教师编号将对应结算方式下的默认课酬设置分组
 | 
											
												
													
														|  | 
 |  | +                Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseScheduleTeacherSalary.getUserId());
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                Long normalStudentNum = courseNormalStudentsMap.get(courseSchedule.getId());
 | 
											
												
													
														|  | 
 |  | +                if(Objects.isNull(normalStudentNum)){
 | 
											
												
													
														|  | 
 |  | +                    normalStudentNum = Long.valueOf(0);
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                //结算方式
 | 
											
												
													
														|  | 
 |  | +                String settlementType = musicGroupSettlementsMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
 | 
											
												
													
														|  | 
 |  | +                if(StringUtils.isEmpty(settlementType)){
 | 
											
												
													
														|  | 
 |  | +                    LOGGER.error("未指定课酬结算方式[{}]", courseScheduleTeacherSalary.getId());
 | 
											
												
													
														|  | 
 |  | +                    continue;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                teacherSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
 | 
											
												
													
														|  | 
 |  | +                if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
 | 
											
												
													
														|  | 
 |  | +                    teacherSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +                if(Objects.isNull(teacherSalary)){
 | 
											
												
													
														|  | 
 |  | +                    LOGGER.error("教师课酬设置异常{}", courseSchedule.getId());
 | 
											
												
													
														|  | 
 |  | +                    continue;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +                teacherSalary = teacherSalary.multiply(new BigDecimal(normalStudentNum));
 | 
											
												
													
														|  |              }else{
 |  |              }else{
 | 
											
												
													
														|  |                  teacherSalary=courseScheduleTeacherSalary.getExpectSalary();
 |  |                  teacherSalary=courseScheduleTeacherSalary.getExpectSalary();
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
										
											
												
													
														|  | @@ -519,6 +527,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 |  |              BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +            if(BigDecimal.ZERO.compareTo(deductCost)<0){
 | 
											
												
													
														|  | 
 |  | +                deductReasons.add("扣除总费用:" + deductCost);
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |              //更新教师结算信息
 |  |              //更新教师结算信息
 | 
											
												
													
														|  |              courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
 |  |              courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
 | 
											
												
													
														|  |              courseScheduleTeacherSalary.setSettlementTime(now);
 |  |              courseScheduleTeacherSalary.setSettlementTime(now);
 | 
											
										
											
												
													
														|  | @@ -865,20 +877,28 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |          switch (courseSchedule.getGroupType()){
 |  |          switch (courseSchedule.getGroupType()){
 | 
											
												
													
														|  |              case MUSIC:
 |  |              case MUSIC:
 | 
											
												
													
														|  |                  //生成乐团课课酬
 |  |                  //生成乐团课课酬
 | 
											
												
													
														|  | -                createMusicGroupCourseTeacherSalary(courseSchedule, courseScheduleTeacherSalaries);
 |  | 
 | 
											
												
													
														|  | 
 |  | +                createMusicGroupCourseTeacherSalaries(null, courseSchedule, courseScheduleTeacherSalaries);
 | 
											
												
													
														|  |                  break;
 |  |                  break;
 | 
											
												
													
														|  |              case VIP:
 |  |              case VIP:
 | 
											
												
													
														|  |                  //生成vip课课酬
 |  |                  //生成vip课课酬
 | 
											
												
													
														|  | -                createVipGroupCourseTeacherSalary(courseSchedule, courseScheduleTeacherSalaries);
 |  | 
 | 
											
												
													
														|  | 
 |  | +                createVipGroupCourseTeacherSalaries(courseSchedule, courseScheduleTeacherSalaries);
 | 
											
												
													
														|  |                  break;
 |  |                  break;
 | 
											
												
													
														|  |              case PRACTICE:
 |  |              case PRACTICE:
 | 
											
												
													
														|  |                  //生成网管课课酬
 |  |                  //生成网管课课酬
 | 
											
												
													
														|  | -                createPracticeGroupCourseTeacherSalary(courseSchedule, courseScheduleTeacherSalaries);
 |  | 
 | 
											
												
													
														|  | 
 |  | +                createPracticeGroupCourseTeacherSalaries(courseSchedule, courseScheduleTeacherSalaries);
 | 
											
												
													
														|  |                  break;
 |  |                  break;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |          return courseScheduleTeacherSalaries;
 |  |          return courseScheduleTeacherSalaries;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    @Override
 | 
											
												
													
														|  | 
 |  | +    public void createMusicGroupCourseTeacherSalary(MusicGroup musicGroup, CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary) {
 | 
											
												
													
														|  | 
 |  | +        List<CourseScheduleTeacherSalary> teacherSalaries = new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +        teacherSalaries.add(courseScheduleTeacherSalary);
 | 
											
												
													
														|  | 
 |  | +        createMusicGroupCourseTeacherSalaries(musicGroup,courseSchedule,teacherSalaries);
 | 
											
												
													
														|  | 
 |  | +        courseScheduleTeacherSalary.setExpectSalary(teacherSalaries.get(0).getExpectSalary());
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  |       * @describe 创建课程指定教师的课酬记录-乐团课
 |  |       * @describe 创建课程指定教师的课酬记录-乐团课
 | 
											
												
													
														|  |       * @author Joburgess
 |  |       * @author Joburgess
 | 
											
										
											
												
													
														|  | @@ -887,22 +907,22 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |       * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
 |  |       * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
 | 
											
												
													
														|  |       * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
 |  |       * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
 | 
											
												
													
														|  |       */
 |  |       */
 | 
											
												
													
														|  | -    private void createMusicGroupCourseTeacherSalary(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries) {
 |  | 
 | 
											
												
													
														|  | -        MusicGroup musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
 |  | 
 | 
											
												
													
														|  | 
 |  | +    private void createMusicGroupCourseTeacherSalaries(MusicGroup musicGroup, CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries) {
 | 
											
												
													
														|  | 
 |  | +        if(Objects.isNull(musicGroup)){
 | 
											
												
													
														|  | 
 |  | +            musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          List<Integer> teacherIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
 |  |          List<Integer> teacherIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        List<Teacher> teachers = teacherDao.findByTeacherIds(teacherIds);
 |  | 
 | 
											
												
													
														|  | -        Map<Integer, Teacher> teacherMap = teachers.stream().collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |          List<TeacherDefaultMusicGroupSalary> allTeacherDefaultMusicGroupSalary = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherIds);
 |  |          List<TeacherDefaultMusicGroupSalary> allTeacherDefaultMusicGroupSalary = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherIds);
 | 
											
												
													
														|  |          Map<Integer, List<TeacherDefaultMusicGroupSalary>> teacherSalaryMap = allTeacherDefaultMusicGroupSalary.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getUserId));
 |  |          Map<Integer, List<TeacherDefaultMusicGroupSalary>> teacherSalaryMap = allTeacherDefaultMusicGroupSalary.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getUserId));
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |          long classCourseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
 |  |          long classCourseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
 |  |          for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
 | 
											
												
													
														|  | 
 |  | +            if(Objects.isNull(courseScheduleTeacherSalary.getTeacherRole())){
 | 
											
												
													
														|  | 
 |  | +                throw new BizException("请指定教师类型");
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  |              List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherSalaryMap.get(courseScheduleTeacherSalary.getUserId());
 |  |              List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherSalaryMap.get(courseScheduleTeacherSalary.getUserId());
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              BigDecimal salary;
 |  |              BigDecimal salary;
 | 
											
										
											
												
													
														|  | @@ -911,8 +931,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(courseSchedule.getType());
 |  |              TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(courseSchedule.getType());
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -            Teacher teacher = teacherMap.get(courseScheduleTeacherSalary.getUserId());
 |  | 
 | 
											
												
													
														|  |              if (teacherDefaultMusicGroupSalary == null) {
 |  |              if (teacherDefaultMusicGroupSalary == null) {
 | 
											
												
													
														|  | 
 |  | +                Teacher teacher = teacherDao.get(courseScheduleTeacherSalary.getUserId());
 | 
											
												
													
														|  |                  throw new BizException("请设置" + teacher.getRealName() + "老师的" + courseSchedule.getType().getMsg() + "课酬");
 |  |                  throw new BizException("请设置" + teacher.getRealName() + "老师的" + courseSchedule.getType().getMsg() + "课酬");
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -920,27 +940,23 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |              BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
 |  |              BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
 |  |              SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
 | 
											
												
													
														|  | -            if (Objects.nonNull(teacher.getEntryDate())
 |  | 
 | 
											
												
													
														|  | -                    && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
 |  | 
 | 
											
												
													
														|  | -                settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
 |  | 
 | 
											
												
													
														|  | -            }
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              //基准课酬
 |  |              //基准课酬
 | 
											
												
													
														|  |              if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
 |  |              if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
 | 
											
												
													
														|  |                  //课程时长与结算单位时长占比
 |  |                  //课程时长与结算单位时长占比
 | 
											
												
													
														|  |                  classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 |  |                  classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 | 
											
												
													
														|  | -                baseSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
 |  | 
 | 
											
												
													
														|  | 
 |  | +                baseSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              //阶梯课酬
 |  |              //阶梯课酬
 | 
											
												
													
														|  |              if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
 |  |              if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
 | 
											
												
													
														|  |                  //课程时长与结算单位时长占比
 |  |                  //课程时长与结算单位时长占比
 | 
											
												
													
														|  |                  classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 |  |                  classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 | 
											
												
													
														|  | -                baseSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
 |  | 
 | 
											
												
													
														|  | 
 |  | +                baseSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              //课堂课课酬改为按分钟数计算,并且时长占比向下取整
 |  |              //课堂课课酬改为按分钟数计算,并且时长占比向下取整
 | 
											
												
													
														|  |              if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
 |  |              if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
 | 
											
												
													
														|  | -                baseSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
 |  | 
 | 
											
												
													
														|  | 
 |  | +                baseSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
 | 
											
												
													
														|  |                  classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
 |  |                  classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -948,17 +964,21 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              //基础技能提高课
 |  |              //基础技能提高课
 | 
											
												
													
														|  |              if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
 |  |              if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
 | 
											
												
													
														|  | -                salary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
 |  | 
 | 
											
												
													
														|  | 
 |  | +                salary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
 | 
											
												
													
														|  |                  if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
 |  |                  if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
 | 
											
												
													
														|  | -                    salary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    salary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +                if(Objects.isNull(salary)){
 | 
											
												
													
														|  | 
 |  | +                    throw new BizException("课酬设置异常");
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  | 
 |  | +                Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(courseSchedule.getClassGroupId());
 | 
											
												
													
														|  | 
 |  | +                salary = salary.multiply(new BigDecimal(studentNum));
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              //线上小班课
 |  |              //线上小班课
 | 
											
												
													
														|  |              if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)) {
 |  |              if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)) {
 | 
											
												
													
														|  |                  Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(courseSchedule.getClassGroupId());
 |  |                  Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(courseSchedule.getClassGroupId());
 | 
											
												
													
														|  | -                if (studentNum < 3 || studentNum > 5) {
 |  | 
 | 
											
												
													
														|  | -                    String numWaring = studentNum < 3 ? "小班课人数不能小于3," : "小班课人数不能大于5,";
 |  | 
 | 
											
												
													
														|  | -                    throw new BizException( numWaring + "请调整");
 |  | 
 | 
											
												
													
														|  | 
 |  | +                if(studentNum>5){
 | 
											
												
													
														|  | 
 |  | +                    studentNum=5;
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  |                  salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
 |  |                  salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
										
											
												
													
														|  | @@ -967,6 +987,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |                  salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
 |  |                  salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +            if(Objects.isNull(salary)){
 | 
											
												
													
														|  | 
 |  | +                throw new BizException("课酬设置异常");
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |              courseScheduleTeacherSalary.setExpectSalary(salary);
 |  |              courseScheduleTeacherSalary.setExpectSalary(salary);
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
										
											
												
													
														|  | @@ -979,10 +1003,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |       * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
 |  |       * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
 | 
											
												
													
														|  |       * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
 |  |       * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
 | 
											
												
													
														|  |       */
 |  |       */
 | 
											
												
													
														|  | -    private void createVipGroupCourseTeacherSalary(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
 |  | 
 | 
											
												
													
														|  | 
 |  | +    private void createVipGroupCourseTeacherSalaries(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
 | 
											
												
													
														|  |          VipGroup vipGroup = vipGroupService.get(Long.valueOf(courseSchedule.getMusicGroupId()));
 |  |          VipGroup vipGroup = vipGroupService.get(Long.valueOf(courseSchedule.getMusicGroupId()));
 | 
											
												
													
														|  |          for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
 |  |          for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
 | 
											
												
													
														|  | -            Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, courseSchedule.getActualTeacherId(), null, null);
 |  | 
 | 
											
												
													
														|  | 
 |  | +            Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupCoursePredictFee(vipGroup, courseSchedule.getActualTeacherId(), courseSchedule.getId());
 | 
											
												
													
														|  |              courseScheduleTeacherSalary.setExpectSalary(courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary"));
 |  |              courseScheduleTeacherSalary.setExpectSalary(courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary"));
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
										
											
												
													
														|  | @@ -995,7 +1019,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
											
												
													
														|  |       * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
 |  |       * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
 | 
											
												
													
														|  |       * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
 |  |       * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
 | 
											
												
													
														|  |       */
 |  |       */
 | 
											
												
													
														|  | -    private void createPracticeGroupCourseTeacherSalary(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
 |  | 
 | 
											
												
													
														|  | 
 |  | +    private void createPracticeGroupCourseTeacherSalaries(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
 | 
											
												
													
														|  |          List<Integer> teacherIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
 |  |          List<Integer> teacherIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          List<TeacherDefaultPracticeGroupSalary> allTeacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao.queryByUserIdList(teacherIds);
 |  |          List<TeacherDefaultPracticeGroupSalary> allTeacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao.queryByUserIdList(teacherIds);
 |