|  | @@ -21,6 +21,7 @@ import com.yonge.cooleshow.biz.dal.entity.*;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.enums.CourseGroupEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.enums.TeacherSalaryEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.service.*;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.support.PageUtil;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 | 
	
	
		
			
				|  | @@ -41,6 +42,7 @@ import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import java.math.BigDecimal;
 | 
	
		
			
				|  |  | +import java.math.RoundingMode;
 | 
	
		
			
				|  |  |  import java.time.LocalDate;
 | 
	
		
			
				|  |  |  import java.time.temporal.TemporalAdjusters;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
	
		
			
				|  | @@ -75,6 +77,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 | 
	
		
			
				|  |  |      private CourseGroupService courseGroupService;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public CourseScheduleDao getDao() {
 | 
	
	
		
			
				|  | @@ -799,7 +803,29 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 | 
	
		
			
				|  |  |          pageInfo.setAsc(" cs.start_time_");
 | 
	
		
			
				|  |  |          return PageUtil.pageInfo(baseMapper.queryStudentLiveCourse(pageInfo, param));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 计算课堂每节课价格
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param totalCourseNum 总课程数
 | 
	
		
			
				|  |  | +     * @param totalRatePrice 总金额
 | 
	
		
			
				|  |  | +     * @return key 课堂数 value 课酬
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private Map<Integer, BigDecimal> getCourseAveragePrice(Integer totalCourseNum, BigDecimal totalRatePrice) {
 | 
	
		
			
				|  |  | +        //每节课的单价 四舍五入
 | 
	
		
			
				|  |  | +        BigDecimal singerSalary = totalRatePrice.divide(BigDecimal.valueOf(totalCourseNum), 2, RoundingMode.HALF_UP);
 | 
	
		
			
				|  |  | +        //单价累计总额
 | 
	
		
			
				|  |  | +        BigDecimal cumulativeAmount = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +        Map<Integer, BigDecimal> map = new HashMap<>();
 | 
	
		
			
				|  |  | +        for (int i = 1; i <= totalCourseNum; i++) {
 | 
	
		
			
				|  |  | +            //最后一节课,直接用总课酬减去累计总额
 | 
	
		
			
				|  |  | +            if (i == totalCourseNum) {
 | 
	
		
			
				|  |  | +                singerSalary = totalRatePrice.subtract(cumulativeAmount);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            cumulativeAmount = cumulativeAmount.add(singerSalary);
 | 
	
		
			
				|  |  | +            map.put(i, singerSalary);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return map;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * @Description: 学生购买陪练课
 | 
	
		
			
				|  |  |       * @Author: cy
 | 
	
	
		
			
				|  | @@ -826,7 +852,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 | 
	
		
			
				|  |  |          baseMapper.addCourseGroup(scheduleDto);
 | 
	
		
			
				|  |  |          Long groupId = scheduleDto.getGroupId();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        BigDecimal unitPrice = scheduleDto.getUnitPrice();
 | 
	
		
			
				|  |  | +        //获取每节课购买的价格
 | 
	
		
			
				|  |  | +        Map<Integer, BigDecimal> courseAveragePrice = getCourseAveragePrice(scheduleDto.getCourseNum(), scheduleDto.getCoursePrice());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          List<CourseScheduleDate> classTime = scheduleDto.getClassTime();
 | 
	
		
			
				|  |  |          for (int i = 0; i < classTime.size(); i++) {
 | 
	
		
			
				|  |  |              CourseScheduleDate date = classTime.get(i);
 | 
	
	
		
			
				|  | @@ -851,9 +879,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 | 
	
		
			
				|  |  |              payment.setCourseGroupId(groupId);
 | 
	
		
			
				|  |  |              payment.setCourseType(CourseScheduleEnum.PRACTICE.getCode());
 | 
	
		
			
				|  |  |              payment.setOrderNo(orderNo);
 | 
	
		
			
				|  |  | -            payment.setOriginalPrice(unitPrice);
 | 
	
		
			
				|  |  | -            payment.setExpectPrice(unitPrice);
 | 
	
		
			
				|  |  | -            payment.setActualPrice(unitPrice);
 | 
	
		
			
				|  |  | +            payment.setOriginalPrice(courseAveragePrice.get(i+1));
 | 
	
		
			
				|  |  | +            payment.setExpectPrice(courseAveragePrice.get(i+1));
 | 
	
		
			
				|  |  | +            payment.setActualPrice(courseAveragePrice.get(i+1));
 | 
	
		
			
				|  |  |              //写入course_schedule_student_payment
 | 
	
		
			
				|  |  |              courseScheduleStudentPaymentService.save(payment);
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -878,8 +906,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 | 
	
		
			
				|  |  |      public void buyPracticeCourseSuccess(UserOrderDetailVo orderParam) {
 | 
	
		
			
				|  |  |          log.info("学生购买陪练课-成功-回调,请求参数:{}", JSON.toJSONString(orderParam));
 | 
	
		
			
				|  |  |          String orderNo = orderParam.getOrderNo();
 | 
	
		
			
				|  |  | -        List<CourseScheduleStudentPayment> paymentList = paymentDao.selectList(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
 | 
	
		
			
				|  |  | -                .eq(CourseScheduleStudentPayment::getOrderNo, orderNo));
 | 
	
		
			
				|  |  | +        List<CourseScheduleStudentPaymentVo> paymentList = paymentDao.selectPaymentList(orderNo);
 | 
	
		
			
				|  |  |          if (paymentList.isEmpty()) {
 | 
	
		
			
				|  |  |              throw new BizException("订单不存在!");
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -887,6 +914,26 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 | 
	
		
			
				|  |  |          //course_schedule中lock_改为0
 | 
	
		
			
				|  |  |          List<Long> scheduleIds = paymentList.stream().map(CourseScheduleStudentPayment::getCourseId).collect(Collectors.toList());
 | 
	
		
			
				|  |  |          baseMapper.updateLock(scheduleIds);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //写course_schedule_teacher_salary
 | 
	
		
			
				|  |  | +        Date now = new Date();
 | 
	
		
			
				|  |  | +        List<CourseScheduleTeacherSalary> teacherSalaryList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        for (CourseScheduleStudentPaymentVo payment : paymentList) {
 | 
	
		
			
				|  |  | +            CourseScheduleTeacherSalary teacherSalary = new CourseScheduleTeacherSalary();
 | 
	
		
			
				|  |  | +            teacherSalary.setTeacherId(payment.getTeacherId());
 | 
	
		
			
				|  |  | +            teacherSalary.setStudentId(payment.getUserId());
 | 
	
		
			
				|  |  | +            teacherSalary.setCourseScheduleId(payment.getCourseId());
 | 
	
		
			
				|  |  | +            teacherSalary.setCourseGroupType(payment.getCourseType());
 | 
	
		
			
				|  |  | +            teacherSalary.setCourseGroupId(payment.getCourseGroupId());
 | 
	
		
			
				|  |  | +            teacherSalary.setClassNum(payment.getClassNum());
 | 
	
		
			
				|  |  | +            teacherSalary.setExpectSalary(payment.getExpectPrice());
 | 
	
		
			
				|  |  | +            teacherSalary.setActualSalary(payment.getActualPrice());
 | 
	
		
			
				|  |  | +            teacherSalary.setReduceSalary(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +            teacherSalary.setStatus(TeacherSalaryEnum.NOT_START.getCode());
 | 
	
		
			
				|  |  | +            teacherSalaryList.add(teacherSalary);
 | 
	
		
			
				|  |  | +            teacherSalary.setCreateTime(now);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        courseScheduleTeacherSalaryService.getDao().insertBatch(teacherSalaryList);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
	
		
			
				|  | @@ -937,5 +984,4 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 | 
	
		
			
				|  |  |          homePage.setVideoList(baseMapper.selectVideo());
 | 
	
		
			
				|  |  |          return homePage;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +}
 |