|  | @@ -30,6 +30,7 @@ import org.springframework.util.CollectionUtils;
 | 
	
		
			
				|  |  |  import org.springframework.util.StringUtils;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import java.math.BigDecimal;
 | 
	
		
			
				|  |  | +import java.math.RoundingMode;
 | 
	
		
			
				|  |  |  import java.time.Duration;
 | 
	
		
			
				|  |  |  import java.time.LocalDateTime;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
	
		
			
				|  | @@ -43,12 +44,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private VipGroupActivityDao vipGroupActivityDao;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | -    private CourseScheduleComplaintsDao courseScheduleComplaintsDao;
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  |      private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | -    private SysUserCashAccountService sysUserCashAccountService;
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  |      @Lazy
 | 
	
		
			
				|  |  |      private VipGroupService vipGroupService;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
	
		
			
				|  | @@ -58,8 +55,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private TeacherDefaultMusicGroupSalaryDao teacherDefaultMusicGroupSalaryDao;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | -    private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  |      private SysConfigService sysConfigDao;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private TeacherAttendanceDao teacherAttendanceDao;
 | 
	
	
		
			
				|  | @@ -70,14 +65,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private ClassGroupStudentMapperDao classGroupStudentMapperDao;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | -    private ClassGroupTeacherSalaryDao classGroupTeacherSalaryDao;
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  |      private TeacherDefaultVipGroupSalaryDao teacherDefaultVipGroupSalaryDao;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private CourseScheduleRewardsRulesService courseScheduleRewardsRulesService;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | -    private VipGroupCategoryDao vipGroupCategoryDao;
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  |      private StudentAttendanceDao studentAttendanceDao;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private TeacherSalaryComplaintsDao teacherSalaryComplaintsDao;
 | 
	
	
		
			
				|  | @@ -91,6 +82,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |      private MusicGroupDao musicGroupDao;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private TeacherDefaultPracticeGroupSalaryDao teacherDefaultPracticeGroupSalaryDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private VipGroupDao vipGroupDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private static final Logger LOGGER = LoggerFactory
 | 
	
		
			
				|  |  |              .getLogger(CourseScheduleTeacherSalaryServiceImpl.class);
 | 
	
	
		
			
				|  | @@ -221,7 +214,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |          List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findTeacherCourseSalaryNoSettlement(startDate,endDate);
 | 
	
		
			
				|  |  |          if (!CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
 | 
	
		
			
				|  |  |              someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
 | 
	
		
			
				|  |  | -                courseScheduleTeacherSalary.setActualSalary(courseScheduleTeacherSalary.getTeacherActualSalary());
 | 
	
		
			
				|  |  | +                courseScheduleTeacherSalary.setActualSalary(courseScheduleTeacherSalary.getTeacherActualSalary().setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP));
 | 
	
		
			
				|  |  |                  courseScheduleTeacherSalary.setSettlementTime(now);
 | 
	
		
			
				|  |  |                  courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
 | 
	
		
			
				|  |  |              });
 | 
	
	
		
			
				|  | @@ -295,15 +288,38 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public void teacherSalarySettlement() {
 | 
	
		
			
				|  |  | -//        int days = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.VIP_APPEAL_DAYS_RANGE).getParanValue());
 | 
	
		
			
				|  |  | -//        int days = 0;
 | 
	
		
			
				|  |  | -        BigDecimal percent = new BigDecimal(10);
 | 
	
		
			
				|  |  |          Date now = new Date();
 | 
	
		
			
				|  |  |          Date date = DateUtil.addMonths(now, -1);
 | 
	
		
			
				|  |  |          String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
 | 
	
		
			
				|  |  |          String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        vipGroupService.updateHistoryTeacherSalaryOfOnline(startDate, endDate);
 | 
	
		
			
				|  |  | +        // 查询需要修改的课酬记录
 | 
	
		
			
				|  |  | +        List<TeacherVipSalaryDto> teacherSalaryList = courseScheduleTeacherSalaryDao.queryOnlineCourseByGroupType(startDate, endDate);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        for (TeacherVipSalaryDto ts : teacherSalaryList) {
 | 
	
		
			
				|  |  | +            // 修复兼职老师不管1v?和全职老师1vn的课酬为系统默认课酬(不管线上还是线下课)
 | 
	
		
			
				|  |  | +            if (ts.getTeacherJobNature() != JobNatureEnum.FULL_TIME || !org.apache.commons.lang3.StringUtils.equalsIgnoreCase("1v1", ts.getVipGroupCategoryName())) {
 | 
	
		
			
				|  |  | +                // 查询默认课酬
 | 
	
		
			
				|  |  | +                TeacherDefaultVipGroupSalary tdvs = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(ts.getUserId(), ts.getVipGroupCategoryId());
 | 
	
		
			
				|  |  | +                if (tdvs != null) {
 | 
	
		
			
				|  |  | +                    if (ts.getTeachMode() == TeachModeEnum.ONLINE) {
 | 
	
		
			
				|  |  | +                        ts.setExpectSalary(tdvs.getOfflineClassesSalary());
 | 
	
		
			
				|  |  | +                    } else {
 | 
	
		
			
				|  |  | +                        ts.setExpectSalary(tdvs.getOfflineClassesSalary());
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }else{
 | 
	
		
			
				|  |  | +                //按照活动重新计算课酬
 | 
	
		
			
				|  |  | +                VipGroup vipGroup = vipGroupService.get(Long.valueOf(ts.getMusicGroupId()));
 | 
	
		
			
				|  |  | +                Map<String, BigDecimal> teachModeSalaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, ts.getUserId(), null, null);
 | 
	
		
			
				|  |  | +                if(TeachModeEnum.ONLINE.equals(ts.getTeachMode())&&teachModeSalaryMap.containsKey("onlineTeacherSalary")){
 | 
	
		
			
				|  |  | +                    ts.setExpectSalary(teachModeSalaryMap.get("onlineTeacherSalary"));
 | 
	
		
			
				|  |  | +                }else if(TeachModeEnum.OFFLINE.equals(ts.getTeachMode())&&teachModeSalaryMap.containsKey("offlineTeacherSalary")){
 | 
	
		
			
				|  |  | +                    ts.setExpectSalary(teachModeSalaryMap.get("offlineTeacherSalary"));
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            courseScheduleTeacherSalaryDao.update(ts);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //获取教师未结算课程记录
 | 
	
		
			
				|  |  |          List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findSomeDayAgoTeacherCourseSalaryNoSettlement(startDate,endDate);
 | 
	
	
		
			
				|  | @@ -314,31 +330,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |          //获取未结算课程编号列表
 | 
	
		
			
				|  |  |          List<Long> courseScheduleIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        //所有课程的学生考勤记录
 | 
	
		
			
				|  |  | -//        List<StudentAttendance> studentAttendances = studentAttendanceDao.findByCourseIds(courseScheduleIds);
 | 
	
		
			
				|  |  | -//        Map<Long, List<StudentAttendance>> courseStudentAttendancesMap = studentAttendances.stream().collect(Collectors.groupingBy(StudentAttendance::getCourseScheduleId));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        //所有课程的教师考勤记录
 | 
	
		
			
				|  |  | -//        List<TeacherAttendance> teacherAttendancesByCourseSchedule = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
 | 
	
		
			
				|  |  | -//        Map<Long, List<TeacherAttendance>> courseTeacherAttendancesMap = teacherAttendancesByCourseSchedule.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        //获取未结算课程投诉记录
 | 
	
		
			
				|  |  | -        List<CourseScheduleComplaints> courseScheduleComplaints = courseScheduleComplaintsDao.findByCourseScheduleIds(courseScheduleIds);
 | 
	
		
			
				|  |  |          //获取未结算课程学生缴费信息
 | 
	
		
			
				|  |  |          List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findByCourseScheduleIds(courseScheduleIds);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        //根据课程将投诉信息分组
 | 
	
		
			
				|  |  | -        Map<Long, List<CourseScheduleComplaints>> complaintsGroupByCourse = courseScheduleComplaints.stream().collect(Collectors.groupingBy(CourseScheduleComplaints::getCourseScheduleId));
 | 
	
		
			
				|  |  |          //根据课程将学生缴费信息分组
 | 
	
		
			
				|  |  |          Map<Long, List<CourseScheduleStudentPayment>> studentPaymentGroupByCourse = courseScheduleStudentPayments.stream().collect(Collectors.groupingBy(CourseScheduleStudentPayment::getCourseScheduleId));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //需更新教师课程结算记录
 | 
	
		
			
				|  |  |          List<CourseScheduleTeacherSalary> updateTeacherSalarys = new ArrayList<>();
 | 
	
		
			
				|  |  | -        //需更新学生课程缴费记录
 | 
	
		
			
				|  |  | -        List<CourseScheduleStudentPayment> updateStudentPayments = new ArrayList<>();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        //用户账户资金变动信息列表
 | 
	
		
			
				|  |  | -//        List<SysUserCashAccountDetail> userCashAccountDetails = new ArrayList<>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //处理课酬信息
 | 
	
		
			
				|  |  |          someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
 | 
	
	
		
			
				|  | @@ -349,160 +348,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |              if (CollectionUtils.isEmpty(studentPaymentsWithCourse)) {
 | 
	
		
			
				|  |  |                  return;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            BigDecimal expectSalary = courseScheduleTeacherSalary.getTeacherActualSalary().setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -//            List<StudentAttendance> courseStudentAttendances = courseStudentAttendancesMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
 | 
	
		
			
				|  |  | -//            int normalStudentNum=0;
 | 
	
		
			
				|  |  | -//            if(CollectionUtils.isEmpty(courseStudentAttendances)){
 | 
	
		
			
				|  |  | -//                return;
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -//            for (StudentAttendance courseStudentAttendance : courseStudentAttendances) {
 | 
	
		
			
				|  |  | -//                if(Objects.nonNull(courseStudentAttendance.getStatus())&&courseStudentAttendance.getStatus().equals(StudentAttendanceStatusEnum.NORMAL)){
 | 
	
		
			
				|  |  | -//                    normalStudentNum+=1;
 | 
	
		
			
				|  |  | -//                }
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -//            if(normalStudentNum==0){
 | 
	
		
			
				|  |  | -//                return;
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//            List<TeacherAttendance> teacherAttendances = courseTeacherAttendancesMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
 | 
	
		
			
				|  |  | -//            if(CollectionUtils.isEmpty(teacherAttendances)){
 | 
	
		
			
				|  |  | -//                return;
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -//            int teacherAttendanceNum=0;
 | 
	
		
			
				|  |  | -//            for (TeacherAttendance teacherAttendance : teacherAttendances) {
 | 
	
		
			
				|  |  | -//                if(Objects.nonNull(teacherAttendance.getSignInTime())||Objects.nonNull(teacherAttendance.getSignOutTime())){
 | 
	
		
			
				|  |  | -//                    teacherAttendanceNum+=1;
 | 
	
		
			
				|  |  | -//                }
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -//            if(teacherAttendanceNum==0){
 | 
	
		
			
				|  |  | -//                return;
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            //当前课程缴费学生数量
 | 
	
		
			
				|  |  | -//            BigDecimal courseStudentNum = new BigDecimal(studentPaymentsWithCourse.size());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            //教师预计课酬
 | 
	
		
			
				|  |  | -            BigDecimal expectSalary = courseScheduleTeacherSalary.getTeacherActualSalary();
 | 
	
		
			
				|  |  | -            //当前课程每个学生平均课酬
 | 
	
		
			
				|  |  | -//            BigDecimal avgSalary = expectSalary.divide(courseStudentNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | -            //教师当前课程责任总占比,当前课程应得课酬
 | 
	
		
			
				|  |  | -//            BigDecimal teacherLiabilityAllratio;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            //当前课程学生投诉记录
 | 
	
		
			
				|  |  | -            List<CourseScheduleComplaints> courseStudentComplaints = complaintsGroupByCourse.get(courseScheduleTeacherSalary.getCourseScheduleId());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            //如果存在投诉记录,需要扣除相应费用
 | 
	
		
			
				|  |  | -            /*if (Objects.nonNull(courseStudentComplaints)) {
 | 
	
		
			
				|  |  | -                //获取审批中的投诉
 | 
	
		
			
				|  |  | -                List<CourseScheduleComplaints> auditIng = courseStudentComplaints.stream().filter(courseScheduleComplaint -> courseScheduleComplaint.getStatus() == AuditStatusEnum.ING).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -                if (!CollectionUtils.isEmpty(auditIng)) {
 | 
	
		
			
				|  |  | -                    //如果当前课程存在未处理的投诉,则不做结算处理
 | 
	
		
			
				|  |  | -                    return;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                //计算教师责任总占比
 | 
	
		
			
				|  |  | -                double teacherLiabilityRatioSum = courseStudentComplaints.stream().mapToDouble(courseScheduleComplaint -> Objects.isNull(courseScheduleComplaint.getTeacherLiabilityRatio()) ? 0 : courseScheduleComplaint.getTeacherLiabilityRatio()).sum();
 | 
	
		
			
				|  |  | -                teacherLiabilityAllratio = new BigDecimal(teacherLiabilityRatioSum).divide(percent,CommonConstants.DECIMAL_PLACE,BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | -                //如果没有投诉,则教师和学生的责任占比为0
 | 
	
		
			
				|  |  | -                teacherLiabilityAllratio = new BigDecimal(0);
 | 
	
		
			
				|  |  | -            }*/
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            //教师应扣除费用
 | 
	
		
			
				|  |  | -            /*BigDecimal deductPrice = avgSalary.multiply(teacherLiabilityAllratio);
 | 
	
		
			
				|  |  | -            //教师实际课酬
 | 
	
		
			
				|  |  | -            BigDecimal schoolSubsidy = new BigDecimal(0);
 | 
	
		
			
				|  |  | -            if (Objects.nonNull(courseScheduleTeacherSalary.getSubsidy())) {
 | 
	
		
			
				|  |  | -                schoolSubsidy = courseScheduleTeacherSalary.getSubsidy();
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            BigDecimal actualSalary = expectSalary.subtract(deductPrice).add(schoolSubsidy);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            //更新教师结算信息
 | 
	
		
			
				|  |  | -            courseScheduleTeacherSalary.setActualSalary(actualSalary);*/
 | 
	
		
			
				|  |  |              courseScheduleTeacherSalary.setActualSalary(expectSalary);
 | 
	
		
			
				|  |  |              courseScheduleTeacherSalary.setSettlementTime(now);
 | 
	
		
			
				|  |  |              courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
 | 
	
		
			
				|  |  |              updateTeacherSalarys.add(courseScheduleTeacherSalary);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            //生成教师账户资金变动记录
 | 
	
		
			
				|  |  | -//            sysUserCashAccountService.updateBalance(courseScheduleTeacherSalary.getUserId(), actualSalary);
 | 
	
		
			
				|  |  | -//            SysUserCashAccount teacherCashAccount = sysUserCashAccountService.get(courseScheduleTeacherSalary.getUserId().intValue());
 | 
	
		
			
				|  |  | -//            SysUserCashAccountDetail teacherCashAccountDetail = new SysUserCashAccountDetail();
 | 
	
		
			
				|  |  | -//            teacherCashAccountDetail.setUserId(courseScheduleTeacherSalary.getUserId());
 | 
	
		
			
				|  |  | -//            teacherCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WAGE);
 | 
	
		
			
				|  |  | -//            teacherCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
 | 
	
		
			
				|  |  | -//            teacherCashAccountDetail.setAmount(actualSalary);
 | 
	
		
			
				|  |  | -//            if(Objects.isNull(teacherCashAccount)){
 | 
	
		
			
				|  |  | -//                teacherCashAccountDetail.setBalance(new BigDecimal(0));
 | 
	
		
			
				|  |  | -//            }else{
 | 
	
		
			
				|  |  | -//                teacherCashAccountDetail.setBalance(teacherCashAccount.getBalance());
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -//            teacherCashAccountDetail.setAttribute(courseScheduleTeacherSalary.getCourseScheduleId().toString());
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//            userCashAccountDetails.add(teacherCashAccountDetail);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            //根据学生进行投诉分组
 | 
	
		
			
				|  |  | -            Map<Integer, List<CourseScheduleComplaints>> complainsGroupByStudent = null;
 | 
	
		
			
				|  |  | -            if (Objects.nonNull(courseStudentComplaints)) {
 | 
	
		
			
				|  |  | -                complainsGroupByStudent = courseStudentComplaints.stream().collect(Collectors.groupingBy(CourseScheduleComplaints::getUserId));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//            BigDecimal zero=new BigDecimal(0);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            //计算学生当前课程应缴费用
 | 
	
		
			
				|  |  | -            for (CourseScheduleStudentPayment studentPayment : studentPaymentsWithCourse) {
 | 
	
		
			
				|  |  | -                //当前课程学生应缴费用
 | 
	
		
			
				|  |  | -                BigDecimal studentExpectPrice = studentPayment.getExpectPrice();
 | 
	
		
			
				|  |  | -                if (Objects.isNull(studentExpectPrice)) {
 | 
	
		
			
				|  |  | -                    studentExpectPrice = new BigDecimal(0);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                //当前课程学生责任占比
 | 
	
		
			
				|  |  | -                BigDecimal studentLiabilityRatio;
 | 
	
		
			
				|  |  | -                List<CourseScheduleComplaints> currentCourseScheduleComplaints = null;
 | 
	
		
			
				|  |  | -                if (!CollectionUtils.isEmpty(complainsGroupByStudent)) {
 | 
	
		
			
				|  |  | -                    currentCourseScheduleComplaints = complainsGroupByStudent.get(studentPayment.getUserId());
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                if (!CollectionUtils.isEmpty(currentCourseScheduleComplaints)) {
 | 
	
		
			
				|  |  | -                    Double temp = currentCourseScheduleComplaints.get(0).getStudentLiabilityRatio();
 | 
	
		
			
				|  |  | -                    if (Objects.isNull(temp)) {
 | 
	
		
			
				|  |  | -                        temp = 0.0;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    studentLiabilityRatio = new BigDecimal(temp).divide(percent,CommonConstants.DECIMAL_PLACE,BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | -                    studentLiabilityRatio = new BigDecimal(1);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                //当前课程学生实际缴费
 | 
	
		
			
				|  |  | -                BigDecimal actualPrice = studentExpectPrice.multiply(studentLiabilityRatio);
 | 
	
		
			
				|  |  | -                //当前课程学生应退费用
 | 
	
		
			
				|  |  | -                BigDecimal returnPrice = studentExpectPrice.subtract(actualPrice);
 | 
	
		
			
				|  |  | -                //更新学生结算信息
 | 
	
		
			
				|  |  | -                studentPayment.setActualPrice(actualPrice);
 | 
	
		
			
				|  |  | -                studentPayment.setSettlementTime(now);
 | 
	
		
			
				|  |  | -                courseScheduleStudentPaymentDao.update(studentPayment);
 | 
	
		
			
				|  |  | -                updateStudentPayments.add(studentPayment);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//                if(returnPrice.compareTo(zero)!=0){
 | 
	
		
			
				|  |  | -//                    //生成学生账户资金变动记录
 | 
	
		
			
				|  |  | -//                    sysUserCashAccountService.updateBalance(studentPayment.getUserId(), returnPrice);
 | 
	
		
			
				|  |  | -//                    SysUserCashAccount studentCashAccount = sysUserCashAccountService.get(studentPayment.getUserId().intValue());
 | 
	
		
			
				|  |  | -//                    SysUserCashAccountDetail studentAccountDetail = new SysUserCashAccountDetail();
 | 
	
		
			
				|  |  | -//                    studentAccountDetail.setUserId(studentPayment.getUserId());
 | 
	
		
			
				|  |  | -//                    studentAccountDetail.setType(PlatformCashAccountDetailTypeEnum.REFUNDS);
 | 
	
		
			
				|  |  | -//                    studentAccountDetail.setStatus(DealStatusEnum.SUCCESS);
 | 
	
		
			
				|  |  | -//                    studentAccountDetail.setAmount(returnPrice);
 | 
	
		
			
				|  |  | -//                    studentAccountDetail.setBalance(studentCashAccount.getBalance());
 | 
	
		
			
				|  |  | -//                    studentAccountDetail.setAttribute(courseScheduleTeacherSalary.getCourseScheduleId().toString());
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//                    userCashAccountDetails.add(studentAccountDetail);
 | 
	
		
			
				|  |  | -//                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  | -//        if(!CollectionUtils.isEmpty(userCashAccountDetails)){
 | 
	
		
			
				|  |  | -//            sysUserCashAccountDetailDao.batchInsert(userCashAccountDetails);
 | 
	
		
			
				|  |  | -//        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
	
		
			
				|  | @@ -555,7 +408,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |          Map<Long, Long> courseNormalStudentsMap = new HashMap<>();
 | 
	
		
			
				|  |  |          if(!CollectionUtils.isEmpty(studentAttendances)){
 | 
	
		
			
				|  |  |              courseNormalStudentsMap =studentAttendances.stream()
 | 
	
		
			
				|  |  | -                    .filter(studentAttendance -> StudentAttendanceStatusEnum.NORMAL.equals(studentAttendance.getStatus()))
 | 
	
		
			
				|  |  | +//                    .filter(studentAttendance -> StudentAttendanceStatusEnum.NORMAL.equals(studentAttendance.getStatus()))
 | 
	
		
			
				|  |  |                      .collect(Collectors.groupingBy(StudentAttendance::getCourseScheduleId, Collectors.counting()));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -671,7 +524,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            BigDecimal finalSalary = teacherSalary.subtract(deductCost);
 | 
	
		
			
				|  |  | +            BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //更新教师结算信息
 | 
	
		
			
				|  |  |              courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
 |