|  | @@ -65,6 +65,10 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
 | 
	
		
			
				|  |  |      private ChargeTypeSubjectMapperDao chargeTypeSubjectMapperDao;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private StudentMusicCourseFeeService studentMusicCourseFeeService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MemberFeeSettingService memberFeeSettingService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicGroupPaymentCalenderMemberDao musicGroupPaymentCalenderMemberDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public BaseDAO<Long, StudentPaymentOrderDetail> getDAO() {
 | 
	
	
		
			
				|  | @@ -658,7 +662,7 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //缴费项目详情
 | 
	
		
			
				|  |  | -        musicGroupPaymentCalenderDetailService.addCalenderDetail(studentPaymentOrder);
 | 
	
		
			
				|  |  | +        MusicGroupPaymentCalenderDetail paymentCalenderDetail = musicGroupPaymentCalenderDetailService.addCalenderDetail(studentPaymentOrder);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          List<OrderDetailTypeEnum> detailTypeEnums = allDetails.stream().map(StudentPaymentOrderDetail::getType).collect(Collectors.toList());
 | 
	
		
			
				|  |  |          //销售订单详情
 | 
	
	
		
			
				|  | @@ -701,14 +705,20 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
 | 
	
		
			
				|  |  |                  repair.setStudentInstrumentId(studentInstrumentId);
 | 
	
		
			
				|  |  |                  studentPaymentOrderDetailDao.update(repair);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            //如果是免费团,那么要处理乐器溢出的课程费用
 | 
	
		
			
				|  |  | -            CourseViewTypeEnum courseViewType = musicGroup.getCourseViewType();
 | 
	
		
			
				|  |  | -            Integer subjectId = studentRegistration.getActualSubjectId();
 | 
	
		
			
				|  |  | -            ChargeTypeSubjectMapper chargeType = chargeTypeSubjectMapperDao.findByViewTypeANdSubject(courseViewType,subjectId,musicGroup.getTenantId());
 | 
	
		
			
				|  |  | -            if(Objects.nonNull(chargeType) && chargeType.getFee() != null && musical.getPrice().compareTo(BigDecimal.ZERO) > 0
 | 
	
		
			
				|  |  | -                    && chargeType.getFee().compareTo(musical.getPrice()) < 0){
 | 
	
		
			
				|  |  | -                studentMusicCourseFeeService.addExpectPrice(studentRegistration.getUserId(),
 | 
	
		
			
				|  |  | -                        musicGroup.getId(),musical.getPrice().subtract(chargeType.getFee()));
 | 
	
		
			
				|  |  | +            if(studentPaymentOrder.getType() == OrderTypeEnum.APPLY){
 | 
	
		
			
				|  |  | +                //如果是免费团,那么要处理乐器溢出的课程费用
 | 
	
		
			
				|  |  | +                CourseViewTypeEnum courseViewType = musicGroup.getCourseViewType();
 | 
	
		
			
				|  |  | +                Integer subjectId = studentRegistration.getActualSubjectId();
 | 
	
		
			
				|  |  | +                ChargeTypeSubjectMapper chargeType = chargeTypeSubjectMapperDao.findByViewTypeANdSubject(courseViewType,subjectId,musicGroup.getTenantId());
 | 
	
		
			
				|  |  | +                if(Objects.nonNull(chargeType) && chargeType.getFee() != null && musical.getPrice().compareTo(BigDecimal.ZERO) > 0
 | 
	
		
			
				|  |  | +                        && chargeType.getFee().compareTo(musical.getPrice()) < 0){
 | 
	
		
			
				|  |  | +                    BigDecimal musicalFee = musical.getPrice().subtract(chargeType.getFee());
 | 
	
		
			
				|  |  | +                    studentMusicCourseFeeService.addExpectPrice(studentRegistration.getUserId(),
 | 
	
		
			
				|  |  | +                            musicGroup.getId(),musicalFee);
 | 
	
		
			
				|  |  | +                    //设置缴费项目详情乐器和课费
 | 
	
		
			
				|  |  | +                    paymentCalenderDetail.setExpectAmount(chargeType.getFee());
 | 
	
		
			
				|  |  | +                    paymentCalenderDetail.setActualAmount(musicalFee);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -716,12 +726,24 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
 | 
	
		
			
				|  |  |          if (detailTypeEnums.contains(CLOUD_TEACHER)) {
 | 
	
		
			
				|  |  |              if(studentPaymentOrder.getType() == OrderTypeEnum.APPLY){
 | 
	
		
			
				|  |  |                  studentRegistration.setHasCloudTeacher(1);
 | 
	
		
			
				|  |  | +                //如果是报名订单,要处理云教练费用、以及溢出课费
 | 
	
		
			
				|  |  | +                if(musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){
 | 
	
		
			
				|  |  | +                    //获取云教练溢出费用
 | 
	
		
			
				|  |  | +                    MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberDao.findByCalenderId(paymentCalenderDetail.getMusicGroupPaymentCalenderId());
 | 
	
		
			
				|  |  | +                    BigDecimal courseIncome = memberFeeSettingService.getAmount(musicGroup.getOrganId(), 1, calenderMember.getPeriod(),
 | 
	
		
			
				|  |  | +                            calenderMember.getNum(), MemberFeeSettingServiceImpl::getIncome);
 | 
	
		
			
				|  |  | +                    if(calenderMember.getActualAmount().compareTo(courseIncome) > 0){
 | 
	
		
			
				|  |  | +                        paymentCalenderDetail.setExpectMemberAmount(courseIncome);
 | 
	
		
			
				|  |  | +                        paymentCalenderDetail.setActualAmount(calenderMember.getActualAmount().subtract(courseIncome));
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              BigDecimal cloudTeacherFee = allDetails.stream().filter(o -> o.getType() == CLOUD_TEACHER)
 | 
	
		
			
				|  |  |                      .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
 | 
	
		
			
				|  |  |                      .reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  |              cloudTeacherOrderService.addOrderDetail2CloudTeacher(studentPaymentOrder, cloudTeacherFee);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalenderDetailService.update(paymentCalenderDetail);
 | 
	
		
			
				|  |  |          studentRegistrationDao.update(studentRegistration);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 |