|  | @@ -32,544 +32,544 @@ import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.NON_P
 | 
	
		
			
				|  |  |  import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  | -public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentCalenderDetail>  implements MusicGroupPaymentCalenderDetailService {
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private MusicGroupPaymentCalenderCourseSettingsDao musicGroupPaymentCalenderCourseSettingsDao;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private MusicGroupDao musicGroupDao;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private SysConfigDao sysConfigDao;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private ActivityUserMapperService activityUserMapperService;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private SysMessageService sysMessageService;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private MusicGroupPaymentCalenderMemberService musicGroupPaymentCalenderMemberService;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private MusicGroupPaymentCalenderActivityService musicGroupPaymentCalenderActivityService;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private CloudTeacherOrderService cloudTeacherOrderService;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private StudentPaymentOrderDao studentPaymentOrderDao;
 | 
	
		
			
				|  |  | -	@Autowired
 | 
	
		
			
				|  |  | -	private StudentDao studentDao;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	public BaseDAO<Long, MusicGroupPaymentCalenderDetail> getDAO() {
 | 
	
		
			
				|  |  | -		return musicGroupPaymentCalenderDetailDao;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	@Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | -	public String openPayment(String ids, Date startPaymentDate, Date deadlinePaymentDate) {
 | 
	
		
			
				|  |  | -		if(StringUtils.isEmpty(ids)){
 | 
	
		
			
				|  |  | -			throw new BizException("参数校验失败");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		//获取可开启缴费列表
 | 
	
		
			
				|  |  | -		List<MusicGroupPaymentCalenderDetail> calenderDetails = musicGroupPaymentCalenderDetailDao.queryCanOpenList(ids);
 | 
	
		
			
				|  |  | -		if(calenderDetails.size() == 0){
 | 
	
		
			
				|  |  | -			return "操作失败:所选学员已开启缴费,或已完成缴费";
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		int length = ids.split(",").length;
 | 
	
		
			
				|  |  | -		Date date = new Date();
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -		Long calenderId = calenderDetails.get(0).getMusicGroupPaymentCalenderId();
 | 
	
		
			
				|  |  | -		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderService.get(calenderId);
 | 
	
		
			
				|  |  | -		calenderDetails.forEach(e->{
 | 
	
		
			
				|  |  | -			e.setUpdateTime(date);
 | 
	
		
			
				|  |  | -			e.setOpen(1);
 | 
	
		
			
				|  |  | -			e.setStartPaymentDate(startPaymentDate);
 | 
	
		
			
				|  |  | -			e.setDeadlinePaymentDate(deadlinePaymentDate);
 | 
	
		
			
				|  |  | -		});
 | 
	
		
			
				|  |  | -		musicGroupPaymentCalenderDetailDao.batchUpdate(calenderDetails);
 | 
	
		
			
				|  |  | -		Set<Integer> studentIds = calenderDetails.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | -		//推送消息
 | 
	
		
			
				|  |  | -		if (calender.getPayUserType() == STUDENT && studentIds.size() > 0) {
 | 
	
		
			
				|  |  | -			Map<Integer, String> push = new HashMap<>();
 | 
	
		
			
				|  |  | -			for (Integer userId : studentIds) {
 | 
	
		
			
				|  |  | -				push.put(userId, userId + "");
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId());
 | 
	
		
			
				|  |  | -			String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
 | 
	
		
			
				|  |  | -			String memo = "4?" + baseUrl + "/#/musicGroupRenew?calenderId="+calender.getId()+"&id=" + calender.getMusicGroupId();
 | 
	
		
			
				|  |  | -			// 发送续费通知
 | 
	
		
			
				|  |  | -			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push,
 | 
	
		
			
				|  |  | -					null, 0, memo,"STUDENT",musicGroup.getName());
 | 
	
		
			
				|  |  | -			//获取未缴费且不是0元的学员列表
 | 
	
		
			
				|  |  | -			Map<Integer,String> studentMaps = MapUtil.convertMybatisMap(musicGroupPaymentCalenderDetailDao.queryNoPaymentAndNotZeroStudent(calender.getId(),studentIds));
 | 
	
		
			
				|  |  | -			if(studentMaps.size() > 0){
 | 
	
		
			
				|  |  | -				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_WAIT_RENEW_MESSAGE, studentMaps,
 | 
	
		
			
				|  |  | -						null, 0, memo, null, musicGroup.getName());
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		StringBuffer append = new StringBuffer("操作成功: 成功开启缴费").append(studentIds.size()).append("条,失败").append(length - studentIds.size()).append("条");
 | 
	
		
			
				|  |  | -		return append.toString();
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	public List<SimpleUserDto> findMusicGroupStudentWithSubject(String musicGroupId, Integer subjectId) {
 | 
	
		
			
				|  |  | -		if(Objects.isNull(musicGroupId)){
 | 
	
		
			
				|  |  | -			throw new BizException("请指定乐团");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		return musicGroupPaymentCalenderDetailDao.findMusicGroupStudentWithSubject(musicGroupId, subjectId);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	public void refreshUserMusicGroupPaymentStatusTask() {
 | 
	
		
			
				|  |  | -		musicGroupPaymentCalenderDetailDao.refreshUserMusicGroupPaymentStatusTask();
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	@Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | -	public void batchAdd(MusicGroupPaymentCalender musicGroupPaymentCalender,List<MusicGroupPaymentCalenderStudentDetail> musicGroupPaymentCalenderStudentDetails) {
 | 
	
		
			
				|  |  | -		Map<Integer, List<MusicGroupPaymentCalenderStudentDetail>> collect = musicGroupPaymentCalenderStudentDetails.stream().collect(Collectors.groupingBy(e -> e.getUserId()));
 | 
	
		
			
				|  |  | -		MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
 | 
	
		
			
				|  |  | -		Long musicGroupPaymentCalenderId = musicGroupPaymentCalender.getId();
 | 
	
		
			
				|  |  | -		for (Integer studentId : collect.keySet()) {
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
 | 
	
		
			
				|  |  | -			List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = collect.get(studentId);
 | 
	
		
			
				|  |  | -			BigDecimal totalPrice = calenderStudentDetails.stream().map(e->e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | +public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentCalenderDetail> implements MusicGroupPaymentCalenderDetailService {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicGroupPaymentCalenderCourseSettingsDao musicGroupPaymentCalenderCourseSettingsDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicGroupDao musicGroupDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SysConfigDao sysConfigDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private ActivityUserMapperService activityUserMapperService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SysMessageService sysMessageService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicGroupPaymentCalenderMemberService musicGroupPaymentCalenderMemberService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicGroupPaymentCalenderActivityService musicGroupPaymentCalenderActivityService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private CloudTeacherOrderService cloudTeacherOrderService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private StudentPaymentOrderDao studentPaymentOrderDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private StudentDao studentDao;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public BaseDAO<Long, MusicGroupPaymentCalenderDetail> getDAO() {
 | 
	
		
			
				|  |  | +        return musicGroupPaymentCalenderDetailDao;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public String openPayment(String ids, Date startPaymentDate, Date deadlinePaymentDate) {
 | 
	
		
			
				|  |  | +        if (StringUtils.isEmpty(ids)) {
 | 
	
		
			
				|  |  | +            throw new BizException("参数校验失败");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //获取可开启缴费列表
 | 
	
		
			
				|  |  | +        List<MusicGroupPaymentCalenderDetail> calenderDetails = musicGroupPaymentCalenderDetailDao.queryCanOpenList(ids);
 | 
	
		
			
				|  |  | +        if (calenderDetails.size() == 0) {
 | 
	
		
			
				|  |  | +            return "操作失败:所选学员已开启缴费,或已完成缴费";
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        int length = ids.split(",").length;
 | 
	
		
			
				|  |  | +        Date date = new Date();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Long calenderId = calenderDetails.get(0).getMusicGroupPaymentCalenderId();
 | 
	
		
			
				|  |  | +        MusicGroupPaymentCalender calender = musicGroupPaymentCalenderService.get(calenderId);
 | 
	
		
			
				|  |  | +        calenderDetails.forEach(e -> {
 | 
	
		
			
				|  |  | +            e.setUpdateTime(date);
 | 
	
		
			
				|  |  | +            e.setOpen(1);
 | 
	
		
			
				|  |  | +            e.setStartPaymentDate(startPaymentDate);
 | 
	
		
			
				|  |  | +            e.setDeadlinePaymentDate(deadlinePaymentDate);
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalenderDetailDao.batchUpdate(calenderDetails);
 | 
	
		
			
				|  |  | +        Set<Integer> studentIds = calenderDetails.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | +        //推送消息
 | 
	
		
			
				|  |  | +        if (calender.getPayUserType() == STUDENT && studentIds.size() > 0) {
 | 
	
		
			
				|  |  | +            Map<Integer, String> push = new HashMap<>();
 | 
	
		
			
				|  |  | +            for (Integer userId : studentIds) {
 | 
	
		
			
				|  |  | +                push.put(userId, userId + "");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId());
 | 
	
		
			
				|  |  | +            String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
 | 
	
		
			
				|  |  | +            String memo = "4?" + baseUrl + "/#/musicGroupRenew?calenderId=" + calender.getId() + "&id=" + calender.getMusicGroupId();
 | 
	
		
			
				|  |  | +            // 发送续费通知
 | 
	
		
			
				|  |  | +            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push,
 | 
	
		
			
				|  |  | +                    null, 0, memo, "STUDENT", musicGroup.getName());
 | 
	
		
			
				|  |  | +            //获取未缴费且不是0元的学员列表
 | 
	
		
			
				|  |  | +            Map<Integer, String> studentMaps = MapUtil.convertMybatisMap(musicGroupPaymentCalenderDetailDao.queryNoPaymentAndNotZeroStudent(calender.getId(), studentIds));
 | 
	
		
			
				|  |  | +            if (studentMaps.size() > 0) {
 | 
	
		
			
				|  |  | +                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_WAIT_RENEW_MESSAGE, studentMaps,
 | 
	
		
			
				|  |  | +                        null, 0, memo, null, musicGroup.getName());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        StringBuffer append = new StringBuffer("操作成功: 成功开启缴费").append(studentIds.size()).append("条,失败").append(length - studentIds.size()).append("条");
 | 
	
		
			
				|  |  | +        return append.toString();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public List<SimpleUserDto> findMusicGroupStudentWithSubject(String musicGroupId, Integer subjectId) {
 | 
	
		
			
				|  |  | +        if (Objects.isNull(musicGroupId)) {
 | 
	
		
			
				|  |  | +            throw new BizException("请指定乐团");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return musicGroupPaymentCalenderDetailDao.findMusicGroupStudentWithSubject(musicGroupId, subjectId);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public void refreshUserMusicGroupPaymentStatusTask() {
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalenderDetailDao.refreshUserMusicGroupPaymentStatusTask();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void batchAdd(MusicGroupPaymentCalender musicGroupPaymentCalender, List<MusicGroupPaymentCalenderStudentDetail> musicGroupPaymentCalenderStudentDetails) {
 | 
	
		
			
				|  |  | +        Map<Integer, List<MusicGroupPaymentCalenderStudentDetail>> collect = musicGroupPaymentCalenderStudentDetails.stream().collect(Collectors.groupingBy(e -> e.getUserId()));
 | 
	
		
			
				|  |  | +        MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
 | 
	
		
			
				|  |  | +        Long musicGroupPaymentCalenderId = musicGroupPaymentCalender.getId();
 | 
	
		
			
				|  |  | +        for (Integer studentId : collect.keySet()) {
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
 | 
	
		
			
				|  |  | +            List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = collect.get(studentId);
 | 
	
		
			
				|  |  | +            BigDecimal totalPrice = calenderStudentDetails.stream().map(e -> e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  |  //			musicGroupPaymentCalenderDetail.setExpectAmount(totalPrice);
 | 
	
		
			
				|  |  | -			if(musicGroupPaymentCalender.getStatus() != AUDITING){
 | 
	
		
			
				|  |  | -				if (totalPrice.doubleValue() == 0d) {
 | 
	
		
			
				|  |  | -					musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
 | 
	
		
			
				|  |  | -					musicGroupPaymentCalender.setActualNum(musicGroupPaymentCalender.getActualNum() + 1);
 | 
	
		
			
				|  |  | +            if (musicGroupPaymentCalender.getStatus() != AUDITING) {
 | 
	
		
			
				|  |  | +                if (totalPrice.doubleValue() == 0d) {
 | 
	
		
			
				|  |  | +                    musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
 | 
	
		
			
				|  |  | +                    musicGroupPaymentCalender.setActualNum(musicGroupPaymentCalender.getActualNum() + 1);
 | 
	
		
			
				|  |  |  //					musicGroupPaymentCalenderDetail.setActualAmount(totalPrice);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setMusicGroupId(musicGroupPaymentCalender.getMusicGroupId());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setUserId(studentId);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetailDao.insert(musicGroupPaymentCalenderDetail);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		musicGroupPaymentCalender.setExpectNum(collect.keySet().size());
 | 
	
		
			
				|  |  | -		musicGroupPaymentCalenderService.update(musicGroupPaymentCalender);
 | 
	
		
			
				|  |  | -		//给学员推送缴费通知
 | 
	
		
			
				|  |  | -		if(musicGroupPaymentCalender.getStatus() == PaymentCalenderStatusEnum.OPEN){
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderService.pushWaitRenewMessage(musicGroupPaymentCalenderId,musicGroupDao.get(musicGroupPaymentCalender.getMusicGroupId()),collect.keySet());
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	@Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | -	public void batchAdd(String batchNo, Set<Integer> userIdList) {
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -		List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
 | 
	
		
			
				|  |  | -		if(musicGroupPaymentCalenderList == null || musicGroupPaymentCalenderList.size() == 0){
 | 
	
		
			
				|  |  | -			throw new BizException("操作失败:缴费项目不存在");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderList.get(0);
 | 
	
		
			
				|  |  | -		String musicGroupId = musicGroupPaymentCalender.getMusicGroupId();
 | 
	
		
			
				|  |  | -		// 所有缴费项目已完成排课才能创建下一个缴费项目
 | 
	
		
			
				|  |  | -		List<String> batchNoList = new ArrayList<>();
 | 
	
		
			
				|  |  | -		batchNoList.add(batchNo);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setMusicGroupId(musicGroupPaymentCalender.getMusicGroupId());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setUserId(studentId);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetailDao.insert(musicGroupPaymentCalenderDetail);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalender.setExpectNum(collect.keySet().size());
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalenderService.update(musicGroupPaymentCalender);
 | 
	
		
			
				|  |  | +        //给学员推送缴费通知
 | 
	
		
			
				|  |  | +        if (musicGroupPaymentCalender.getStatus() == PaymentCalenderStatusEnum.OPEN) {
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderService.pushWaitRenewMessage(musicGroupPaymentCalenderId, musicGroupDao.get(musicGroupPaymentCalender.getMusicGroupId()), collect.keySet());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void batchAdd(String batchNo, Set<Integer> userIdList) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
 | 
	
		
			
				|  |  | +        if (musicGroupPaymentCalenderList == null || musicGroupPaymentCalenderList.size() == 0) {
 | 
	
		
			
				|  |  | +            throw new BizException("操作失败:缴费项目不存在");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderList.get(0);
 | 
	
		
			
				|  |  | +        String musicGroupId = musicGroupPaymentCalender.getMusicGroupId();
 | 
	
		
			
				|  |  | +        // 所有缴费项目已完成排课才能创建下一个缴费项目
 | 
	
		
			
				|  |  | +        List<String> batchNoList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        batchNoList.add(batchNo);
 | 
	
		
			
				|  |  |  		/*String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,batchNoList);
 | 
	
		
			
				|  |  |  		if (StringUtils.isNoneBlank(orignBatchNo)) {
 | 
	
		
			
				|  |  |  			throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作");
 | 
	
		
			
				|  |  |  		}*/
 | 
	
		
			
				|  |  | -		//获取欠费学员列表
 | 
	
		
			
				|  |  | -		List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroupId, new ArrayList<>(userIdList),null);
 | 
	
		
			
				|  |  | -		if(noPaymentUserIds.size() > 0){
 | 
	
		
			
				|  |  | -			throw new BizException("操作失败:有欠费的学员不允许创建缴费");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		//获取缴费状态在审核中或者已拒绝的缴费项目的学员
 | 
	
		
			
				|  |  | -		String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroupId,batchNo);
 | 
	
		
			
				|  |  | -		if(StringUtils.isNotEmpty(studentIds)){
 | 
	
		
			
				|  |  | -			for (Integer integer : userIdList) {
 | 
	
		
			
				|  |  | -				if(studentIds.contains(integer.toString())){
 | 
	
		
			
				|  |  | -					throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		Long musicGroupPaymentCalenderId = musicGroupPaymentCalender.getId();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if(musicGroupPaymentCalender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.MUSIC_APPLY){
 | 
	
		
			
				|  |  | -			throw new BizException("操作失败:报名缴费项不允许添加学员");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		if (musicGroupPaymentCalender.getStatus() == PaymentCalenderStatusEnum.AUDITING
 | 
	
		
			
				|  |  | -				|| musicGroupPaymentCalender.getStatus() == PaymentCalenderStatusEnum.REJECT) {
 | 
	
		
			
				|  |  | -			throw new BizException("当前缴费状态不能添加学生");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		//判断学生是否已存在
 | 
	
		
			
				|  |  | -		Set<Integer> userList = musicGroupPaymentCalenderDetailDao.queryStudentIds(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | -		if(Collections.disjoint(userList, userIdList) == false){
 | 
	
		
			
				|  |  | -			throw new BizException("操作失败:包含已存在的学员");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -		List<MusicGroupPaymentCalenderCourseSettings> courseSettingsList = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalender(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -		if (courseSettingsList != null && courseSettingsList.size() > 0) {
 | 
	
		
			
				|  |  | -			List<StudentSubTotalCourseTimesDto> studentCourseTypeDtos = musicGroupPaymentStudentCourseDetailDao.queryStudentSubTotalCourseTimes(musicGroupId);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			Set<String> courseTypes = new HashSet<String>();
 | 
	
		
			
				|  |  | -			for (StudentSubTotalCourseTimesDto dto : studentCourseTypeDtos) {
 | 
	
		
			
				|  |  | -				if (userIdList.contains(dto.getUserId())) {
 | 
	
		
			
				|  |  | -					courseTypes.addAll(dto.getMapDtos().stream().filter(t -> t.getValue() > 0).map(t -> t.getKey()).collect(Collectors.toSet()));
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			for (MusicGroupPaymentCalenderCourseSettings mgpccs : courseSettingsList) {
 | 
	
		
			
				|  |  | -				if (courseTypes.contains(mgpccs.getCourseType().name())) {
 | 
	
		
			
				|  |  | -					throw new BizException("操作失败:存在未排完的[{}]", mgpccs.getCourseType().getMsg());
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		Date date = new Date();
 | 
	
		
			
				|  |  | -		MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
 | 
	
		
			
				|  |  | -		Map<Integer,Long> userMap = new HashMap<>();
 | 
	
		
			
				|  |  | -		List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = new ArrayList<MusicGroupPaymentCalenderDetail>();
 | 
	
		
			
				|  |  | -		//创建缴费明细
 | 
	
		
			
				|  |  | -		MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		List<MusicGroupPaymentCalenderActivity> calenderActivities = musicGroupPaymentCalenderActivityService.findByCalenderId(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | -		MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.findByCalenderId(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | -		for(Integer studentId : userIdList){
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setCreateTime(date);
 | 
	
		
			
				|  |  | -			if (musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0) {
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
 | 
	
		
			
				|  |  | -			} else {
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setUpdateTime(date);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setUserId(studentId);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetailList.add(musicGroupPaymentCalenderDetail);
 | 
	
		
			
				|  |  | -			if (musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0) {
 | 
	
		
			
				|  |  | -				// 添加会员
 | 
	
		
			
				|  |  | -				if(calenderMember != null){
 | 
	
		
			
				|  |  | -					CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
 | 
	
		
			
				|  |  | -					cloudTeacherOrder.setOrganId(musicGroup.getOrganId());
 | 
	
		
			
				|  |  | -					cloudTeacherOrder.setType(calenderMember.getPeriod());
 | 
	
		
			
				|  |  | -					cloudTeacherOrder.setAmount(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | -					cloudTeacherOrder.setStudentId(studentId);
 | 
	
		
			
				|  |  | -					cloudTeacherOrder.setLevel(calenderMember.getMemberRankSettingId());
 | 
	
		
			
				|  |  | -					cloudTeacherOrder.setTime(calenderMember.getNum().intValue());
 | 
	
		
			
				|  |  | -					cloudTeacherOrder.setStatus(1);
 | 
	
		
			
				|  |  | -					cloudTeacherOrder.setRemark("缴费项目0元新增学员");
 | 
	
		
			
				|  |  | -					cloudTeacherOrder.setMusicGroupId(musicGroupId);
 | 
	
		
			
				|  |  | -					cloudTeacherOrderService.save(cloudTeacherOrder,calenderMember.getAutoActivationFlag());
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				//添加小课包
 | 
	
		
			
				|  |  | -				if(calenderActivities != null && calenderActivities.size() > 0){
 | 
	
		
			
				|  |  | -					List<ActivityUserMapper> activityUserMapperList = new ArrayList<>();
 | 
	
		
			
				|  |  | -					for (MusicGroupPaymentCalenderActivity calenderActivity : calenderActivities) {
 | 
	
		
			
				|  |  | -						ActivityUserMapper activityUserMapper = new ActivityUserMapper();
 | 
	
		
			
				|  |  | -						activityUserMapper.setActualPrice(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | -						activityUserMapper.setActivityId(calenderActivity.getActivityId());
 | 
	
		
			
				|  |  | -						Student student = studentDao.get(studentId);
 | 
	
		
			
				|  |  | -						activityUserMapper.setUserId(studentId);
 | 
	
		
			
				|  |  | -						activityUserMapper.setTeacherId(student.getTeacherId());
 | 
	
		
			
				|  |  | -						if("网管课".equals(calenderActivity.getCategoryName())){
 | 
	
		
			
				|  |  | -							activityUserMapper.setPracticeFlag(1);
 | 
	
		
			
				|  |  | -						}else {
 | 
	
		
			
				|  |  | -							activityUserMapper.setVipFlag(1);
 | 
	
		
			
				|  |  | -						}
 | 
	
		
			
				|  |  | -						activityUserMapperList.add(activityUserMapper);
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -					activityUserMapperService.batchInsert(activityUserMapperList);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if (musicGroupPaymentCalenderDetailList.size() > 0) {
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetailDao.batchInsert(musicGroupPaymentCalenderDetailList);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetailList.stream().forEach(e-> userMap.put(e.getUserId(),e.getId()));
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		//更新预计缴费人数
 | 
	
		
			
				|  |  | -		musicGroupPaymentCalender.setExpectNum(musicGroupPaymentCalender.getExpectNum() + userIdList.size());
 | 
	
		
			
				|  |  | -		musicGroupPaymentCalender.setUpdateTime(date);
 | 
	
		
			
				|  |  | -		if (musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0) {
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalender.setActualNum(musicGroupPaymentCalender.getActualNum() + userIdList.size());
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		musicGroupPaymentCalenderService.update(musicGroupPaymentCalender);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		//创建学生课排课分钟数
 | 
	
		
			
				|  |  | -		if(courseSettingsList != null && courseSettingsList.size() > 0){
 | 
	
		
			
				|  |  | -			List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = new ArrayList<>();
 | 
	
		
			
				|  |  | -			MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = null;
 | 
	
		
			
				|  |  | -			for(Integer studentId : userIdList){
 | 
	
		
			
				|  |  | -				for(MusicGroupPaymentCalenderCourseSettings courseSettings : courseSettingsList){
 | 
	
		
			
				|  |  | -					if (courseSettings.getCourseTotalMinuties() == null || courseSettings.getCourseTotalMinuties() == 0) {
 | 
	
		
			
				|  |  | -						continue;
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetail = new MusicGroupPaymentStudentCourseDetail();
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetail.setCourseType(courseSettings.getCourseType());
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetail.setCreateTime(date);
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderDetailId(userMap.get(studentId));
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSettings.getCourseTotalMinuties());
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetail.setCourseOriginalPrice(courseSettings.getCourseOriginalPrice());
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(courseSettings.getCourseCurrentPrice());
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetail.setUpdateTime(date);
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(0);
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetail.setUserId(studentId);
 | 
	
		
			
				|  |  | -					musicGroupPaymentStudentCourseDetailList.add(musicGroupPaymentStudentCourseDetail);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			if(musicGroupPaymentStudentCourseDetailList.size() > 0){
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetailList);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		//给学员推送缴费通知
 | 
	
		
			
				|  |  | -		if (musicGroupPaymentCalender.getPayUserType() == STUDENT && musicGroupPaymentCalender.getStatus() == PaymentCalenderStatusEnum.OPEN) {
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderService.pushWaitRenewMessage(musicGroupPaymentCalender.getId(),
 | 
	
		
			
				|  |  | -					musicGroupDao.get(musicGroupPaymentCalender.getMusicGroupId()),userIdList);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	public List<FeeStudentDto> queryFeeStudents(String musicGroupId,String search,Integer subjectId) {
 | 
	
		
			
				|  |  | -		return musicGroupStudentFeeDao.queryFeeStudents(musicGroupId,search,subjectId);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	@Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | -	public void batchDel(String musicGroupPaymentCalenderDetailIds) {
 | 
	
		
			
				|  |  | -		List<MusicGroupPaymentCalenderDetail> details = musicGroupPaymentCalenderDetailDao.queryListByIds(musicGroupPaymentCalenderDetailIds);
 | 
	
		
			
				|  |  | -		if(details == null || details.size() == 0){
 | 
	
		
			
				|  |  | -			throw new BizException("删除失败: 数据不可为空");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		Long musicGroupPaymentCalenderId = details.get(0).getMusicGroupPaymentCalenderId();
 | 
	
		
			
				|  |  | -		MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderDao.get(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -		if(musicGroupPaymentCalender == null){
 | 
	
		
			
				|  |  | -			throw new BizException("查询缴费项目失败[{}]", musicGroupPaymentCalender);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -		long count = 0;
 | 
	
		
			
				|  |  | -		if (musicGroupPaymentCalender.getPayUserType() == STUDENT) {
 | 
	
		
			
				|  |  | -			// 是否已缴费
 | 
	
		
			
				|  |  | -			count = details.stream().filter(e -> e.getPaymentStatus() != NON_PAYMENT).count();
 | 
	
		
			
				|  |  | -			if (count > 0) {
 | 
	
		
			
				|  |  | -				throw new BizException("删除失败: 存在已缴费的学员");
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		List<Long> musicGroupPaymentCalenderDetailIdList = new ArrayList<Long>();
 | 
	
		
			
				|  |  | -		for(String s : musicGroupPaymentCalenderDetailIds.split(",")){
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetailIdList.add(Long.parseLong(s));
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		//是否已排课
 | 
	
		
			
				|  |  | -		List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = musicGroupPaymentStudentCourseDetailDao.queryByMusicGroupPaymentStudentCourseDetailId(musicGroupPaymentCalenderDetailIdList);
 | 
	
		
			
				|  |  | -		count = musicGroupPaymentStudentCourseDetailList.stream().filter(e -> e.getUsedCourseMinutes() > 0).count();
 | 
	
		
			
				|  |  | -		if(count > 0){
 | 
	
		
			
				|  |  | -			throw new BizException("删除失败:存在已排课的学员");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -		int currentNum = musicGroupPaymentCalender.getExpectNum() - details.size();
 | 
	
		
			
				|  |  | -		musicGroupPaymentCalender.setExpectNum(currentNum < 0 ? 0 : currentNum);
 | 
	
		
			
				|  |  | -		musicGroupPaymentCalender.setUpdateTime(new Date());
 | 
	
		
			
				|  |  | -		musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		musicGroupPaymentCalenderDetailDao.batchDel(musicGroupPaymentCalenderDetailIds);
 | 
	
		
			
				|  |  | -		musicGroupPaymentStudentCourseDetailDao.deleteByMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetailIdList);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	public PageInfo<MusicArrearageStudentDto> queryArrearageStudents(ArrearageStudentsQueryInfo queryInfo) {
 | 
	
		
			
				|  |  | -		PageInfo<MusicArrearageStudentDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 | 
	
		
			
				|  |  | -		Map<String, Object> params = new HashMap<>();
 | 
	
		
			
				|  |  | -		MapUtil.populateMap(params, queryInfo);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		List<MusicArrearageStudentDto> dataList = null;
 | 
	
		
			
				|  |  | -		int count = musicGroupPaymentCalenderDetailDao.countArrearageStudents(params);
 | 
	
		
			
				|  |  | -		if (count > 0) {
 | 
	
		
			
				|  |  | -			pageInfo.setTotal(count);
 | 
	
		
			
				|  |  | -			params.put("offset", pageInfo.getOffset());
 | 
	
		
			
				|  |  | -			dataList = musicGroupPaymentCalenderDetailDao.queryArrearageStudents(params);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		if (count == 0) {
 | 
	
		
			
				|  |  | -			dataList = new ArrayList<>();
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		pageInfo.setRows(dataList);
 | 
	
		
			
				|  |  | -		return pageInfo;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	public List<MusicGroup> getNoPaymentStudentMusicGroups(String organIdsStr) {
 | 
	
		
			
				|  |  | -		Set<Integer> organIds = null;
 | 
	
		
			
				|  |  | -		if(StringUtils.isNotBlank(organIdsStr)){
 | 
	
		
			
				|  |  | -			organIds = Arrays.stream(organIdsStr.split(",")).map(Integer::new).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		return musicGroupPaymentCalenderDetailDao.getNoPaymentStudentMusicGroups(organIds, TenantContextHolder.getTenantId());
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	public void pushWaitRenewMessage(Long calenderId, String studentIds) {
 | 
	
		
			
				|  |  | -		List<MusicGroupPaymentCalenderDetail> calenderDetails = musicGroupPaymentCalenderDetailDao.queryNoPaymentCanPushByCalenderId(calenderId,studentIds);
 | 
	
		
			
				|  |  | -		if(calenderDetails == null || calenderDetails.size() == 0){
 | 
	
		
			
				|  |  | -			throw new BizException("发送失败:没有可以发送缴费提醒的学员");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		Set<Integer> studentIdList = calenderDetails.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | -		MusicGroupPaymentCalender paymentCalender = musicGroupPaymentCalenderDao.get(calenderId);
 | 
	
		
			
				|  |  | -		//未缴费
 | 
	
		
			
				|  |  | -		Map<Integer,String> studentMaps = MapUtil.convertMybatisMap(musicGroupPaymentCalenderDetailDao.queryNoPaymentAndNotZeroStudent(calenderId,studentIdList));
 | 
	
		
			
				|  |  | -		MusicGroup musicGroup = musicGroupDao.get(paymentCalender.getMusicGroupId());
 | 
	
		
			
				|  |  | -		String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
 | 
	
		
			
				|  |  | -		String memo = "4?" + baseUrl + "/#/musicGroupRenew?calenderId="+calenderId+"&id=" + musicGroup.getId();
 | 
	
		
			
				|  |  | -		Map<Integer, String> push = new HashMap<>();
 | 
	
		
			
				|  |  | -		for (Integer userId : studentIdList) {
 | 
	
		
			
				|  |  | -			push.put(userId, userId.toString());
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		// 发送续费通知
 | 
	
		
			
				|  |  | -		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push,
 | 
	
		
			
				|  |  | -				null, 0, memo, "STUDENT", musicGroup.getName());
 | 
	
		
			
				|  |  | -		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_WAIT_RENEW_MESSAGE, studentMaps,
 | 
	
		
			
				|  |  | -				null, 0, memo, null, musicGroup.getName());
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +        //获取欠费学员列表
 | 
	
		
			
				|  |  | +        List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroupId, new ArrayList<>(userIdList), null);
 | 
	
		
			
				|  |  | +        if (noPaymentUserIds.size() > 0) {
 | 
	
		
			
				|  |  | +            throw new BizException("操作失败:有欠费的学员不允许创建缴费");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //获取缴费状态在审核中或者已拒绝的缴费项目的学员
 | 
	
		
			
				|  |  | +        String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroupId, batchNo);
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotEmpty(studentIds)) {
 | 
	
		
			
				|  |  | +            for (Integer integer : userIdList) {
 | 
	
		
			
				|  |  | +                if (studentIds.contains(integer.toString())) {
 | 
	
		
			
				|  |  | +                    throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Long musicGroupPaymentCalenderId = musicGroupPaymentCalender.getId();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (musicGroupPaymentCalender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.MUSIC_APPLY) {
 | 
	
		
			
				|  |  | +            throw new BizException("操作失败:报名缴费项不允许添加学员");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (musicGroupPaymentCalender.getStatus() == PaymentCalenderStatusEnum.AUDITING
 | 
	
		
			
				|  |  | +                || musicGroupPaymentCalender.getStatus() == PaymentCalenderStatusEnum.REJECT) {
 | 
	
		
			
				|  |  | +            throw new BizException("当前缴费状态不能添加学生");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //判断学生是否已存在
 | 
	
		
			
				|  |  | +        Set<Integer> userList = musicGroupPaymentCalenderDetailDao.queryStudentIds(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | +        if (Collections.disjoint(userList, userIdList) == false) {
 | 
	
		
			
				|  |  | +            throw new BizException("操作失败:包含已存在的学员");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<MusicGroupPaymentCalenderCourseSettings> courseSettingsList = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalender(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (courseSettingsList != null && courseSettingsList.size() > 0) {
 | 
	
		
			
				|  |  | +            List<StudentSubTotalCourseTimesDto> studentCourseTypeDtos = musicGroupPaymentStudentCourseDetailDao.queryStudentSubTotalCourseTimes(musicGroupId);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            Set<String> courseTypes = new HashSet<String>();
 | 
	
		
			
				|  |  | +            for (StudentSubTotalCourseTimesDto dto : studentCourseTypeDtos) {
 | 
	
		
			
				|  |  | +                if (userIdList.contains(dto.getUserId())) {
 | 
	
		
			
				|  |  | +                    courseTypes.addAll(dto.getMapDtos().stream().filter(t -> t.getValue() > 0).map(t -> t.getKey()).collect(Collectors.toSet()));
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            for (MusicGroupPaymentCalenderCourseSettings mgpccs : courseSettingsList) {
 | 
	
		
			
				|  |  | +                if (courseTypes.contains(mgpccs.getCourseType().name())) {
 | 
	
		
			
				|  |  | +                    throw new BizException("操作失败:存在未排完的[{}]", mgpccs.getCourseType().getMsg());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Date date = new Date();
 | 
	
		
			
				|  |  | +        MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
 | 
	
		
			
				|  |  | +        Map<Integer, Long> userMap = new HashMap<>();
 | 
	
		
			
				|  |  | +        List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = new ArrayList<MusicGroupPaymentCalenderDetail>();
 | 
	
		
			
				|  |  | +        //创建缴费明细
 | 
	
		
			
				|  |  | +        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<MusicGroupPaymentCalenderActivity> calenderActivities = musicGroupPaymentCalenderActivityService.findByCalenderId(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | +        MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.findByCalenderId(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | +        for (Integer studentId : userIdList) {
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setCreateTime(date);
 | 
	
		
			
				|  |  | +            if (musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0) {
 | 
	
		
			
				|  |  | +                musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setUpdateTime(date);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setUserId(studentId);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetailList.add(musicGroupPaymentCalenderDetail);
 | 
	
		
			
				|  |  | +            if (musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0) {
 | 
	
		
			
				|  |  | +                // 添加会员
 | 
	
		
			
				|  |  | +                if (calenderMember != null) {
 | 
	
		
			
				|  |  | +                    CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
 | 
	
		
			
				|  |  | +                    cloudTeacherOrder.setOrganId(musicGroup.getOrganId());
 | 
	
		
			
				|  |  | +                    cloudTeacherOrder.setType(calenderMember.getPeriod());
 | 
	
		
			
				|  |  | +                    cloudTeacherOrder.setAmount(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +                    cloudTeacherOrder.setStudentId(studentId);
 | 
	
		
			
				|  |  | +                    cloudTeacherOrder.setLevel(calenderMember.getMemberRankSettingId());
 | 
	
		
			
				|  |  | +                    cloudTeacherOrder.setTime(calenderMember.getNum().intValue());
 | 
	
		
			
				|  |  | +                    cloudTeacherOrder.setStatus(1);
 | 
	
		
			
				|  |  | +                    cloudTeacherOrder.setRemark("缴费项目0元新增学员");
 | 
	
		
			
				|  |  | +                    cloudTeacherOrder.setMusicGroupId(musicGroupId);
 | 
	
		
			
				|  |  | +                    cloudTeacherOrderService.save(cloudTeacherOrder, calenderMember.getAutoActivationFlag());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                //添加小课包
 | 
	
		
			
				|  |  | +                if (calenderActivities != null && calenderActivities.size() > 0) {
 | 
	
		
			
				|  |  | +                    List<ActivityUserMapper> activityUserMapperList = new ArrayList<>();
 | 
	
		
			
				|  |  | +                    for (MusicGroupPaymentCalenderActivity calenderActivity : calenderActivities) {
 | 
	
		
			
				|  |  | +                        ActivityUserMapper activityUserMapper = new ActivityUserMapper();
 | 
	
		
			
				|  |  | +                        activityUserMapper.setActualPrice(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +                        activityUserMapper.setActivityId(calenderActivity.getActivityId());
 | 
	
		
			
				|  |  | +                        Student student = studentDao.get(studentId);
 | 
	
		
			
				|  |  | +                        activityUserMapper.setUserId(studentId);
 | 
	
		
			
				|  |  | +                        activityUserMapper.setTeacherId(student.getTeacherId());
 | 
	
		
			
				|  |  | +                        if ("网管课".equals(calenderActivity.getCategoryName())) {
 | 
	
		
			
				|  |  | +                            activityUserMapper.setPracticeFlag(1);
 | 
	
		
			
				|  |  | +                        } else {
 | 
	
		
			
				|  |  | +                            activityUserMapper.setVipFlag(1);
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        activityUserMapperList.add(activityUserMapper);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    activityUserMapperService.batchInsert(activityUserMapperList);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (musicGroupPaymentCalenderDetailList.size() > 0) {
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetailDao.batchInsert(musicGroupPaymentCalenderDetailList);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetailList.stream().forEach(e -> userMap.put(e.getUserId(), e.getId()));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //更新预计缴费人数
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalender.setExpectNum(musicGroupPaymentCalender.getExpectNum() + userIdList.size());
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalender.setUpdateTime(date);
 | 
	
		
			
				|  |  | +        if (musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0) {
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalender.setActualNum(musicGroupPaymentCalender.getActualNum() + userIdList.size());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalenderService.update(musicGroupPaymentCalender);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //创建学生课排课分钟数
 | 
	
		
			
				|  |  | +        if (courseSettingsList != null && courseSettingsList.size() > 0) {
 | 
	
		
			
				|  |  | +            List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = new ArrayList<>();
 | 
	
		
			
				|  |  | +            MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = null;
 | 
	
		
			
				|  |  | +            for (Integer studentId : userIdList) {
 | 
	
		
			
				|  |  | +                for (MusicGroupPaymentCalenderCourseSettings courseSettings : courseSettingsList) {
 | 
	
		
			
				|  |  | +                    if (courseSettings.getCourseTotalMinuties() == null || courseSettings.getCourseTotalMinuties() == 0) {
 | 
	
		
			
				|  |  | +                        continue;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetail = new MusicGroupPaymentStudentCourseDetail();
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetail.setCourseType(courseSettings.getCourseType());
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetail.setCreateTime(date);
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderDetailId(userMap.get(studentId));
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSettings.getCourseTotalMinuties());
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetail.setCourseOriginalPrice(courseSettings.getCourseOriginalPrice());
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(courseSettings.getCourseCurrentPrice());
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetail.setUpdateTime(date);
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(0);
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetail.setUserId(studentId);
 | 
	
		
			
				|  |  | +                    musicGroupPaymentStudentCourseDetailList.add(musicGroupPaymentStudentCourseDetail);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (musicGroupPaymentStudentCourseDetailList.size() > 0) {
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetailList);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //给学员推送缴费通知
 | 
	
		
			
				|  |  | +        if (musicGroupPaymentCalender.getPayUserType() == STUDENT && musicGroupPaymentCalender.getStatus() == PaymentCalenderStatusEnum.OPEN) {
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderService.pushWaitRenewMessage(musicGroupPaymentCalender.getId(),
 | 
	
		
			
				|  |  | +                    musicGroupDao.get(musicGroupPaymentCalender.getMusicGroupId()), userIdList);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public List<FeeStudentDto> queryFeeStudents(String musicGroupId, String search, Integer subjectId) {
 | 
	
		
			
				|  |  | +        return musicGroupStudentFeeDao.queryFeeStudents(musicGroupId, search, subjectId);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void batchDel(String musicGroupPaymentCalenderDetailIds) {
 | 
	
		
			
				|  |  | +        List<MusicGroupPaymentCalenderDetail> details = musicGroupPaymentCalenderDetailDao.queryListByIds(musicGroupPaymentCalenderDetailIds);
 | 
	
		
			
				|  |  | +        if (details == null || details.size() == 0) {
 | 
	
		
			
				|  |  | +            throw new BizException("删除失败: 数据不可为空");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Long musicGroupPaymentCalenderId = details.get(0).getMusicGroupPaymentCalenderId();
 | 
	
		
			
				|  |  | +        MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderDao.get(musicGroupPaymentCalenderId);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (musicGroupPaymentCalender == null) {
 | 
	
		
			
				|  |  | +            throw new BizException("查询缴费项目失败[{}]", musicGroupPaymentCalender);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        long count = 0;
 | 
	
		
			
				|  |  | +        if (musicGroupPaymentCalender.getPayUserType() == STUDENT) {
 | 
	
		
			
				|  |  | +            // 是否已缴费
 | 
	
		
			
				|  |  | +            count = details.stream().filter(e -> e.getPaymentStatus() != NON_PAYMENT).count();
 | 
	
		
			
				|  |  | +            if (count > 0) {
 | 
	
		
			
				|  |  | +                throw new BizException("删除失败: 存在已缴费的学员");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        List<Long> musicGroupPaymentCalenderDetailIdList = new ArrayList<Long>();
 | 
	
		
			
				|  |  | +        for (String s : musicGroupPaymentCalenderDetailIds.split(",")) {
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetailIdList.add(Long.parseLong(s));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //是否已排课
 | 
	
		
			
				|  |  | +        List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = musicGroupPaymentStudentCourseDetailDao.queryByMusicGroupPaymentStudentCourseDetailId(musicGroupPaymentCalenderDetailIdList);
 | 
	
		
			
				|  |  | +        count = musicGroupPaymentStudentCourseDetailList.stream().filter(e -> e.getUsedCourseMinutes() > 0).count();
 | 
	
		
			
				|  |  | +        if (count > 0) {
 | 
	
		
			
				|  |  | +            throw new BizException("删除失败:存在已排课的学员");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        int currentNum = musicGroupPaymentCalender.getExpectNum() - details.size();
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalender.setExpectNum(currentNum < 0 ? 0 : currentNum);
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalender.setUpdateTime(new Date());
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        musicGroupPaymentCalenderDetailDao.batchDel(musicGroupPaymentCalenderDetailIds);
 | 
	
		
			
				|  |  | +        musicGroupPaymentStudentCourseDetailDao.deleteByMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetailIdList);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public PageInfo<MusicArrearageStudentDto> queryArrearageStudents(ArrearageStudentsQueryInfo queryInfo) {
 | 
	
		
			
				|  |  | +        PageInfo<MusicArrearageStudentDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 | 
	
		
			
				|  |  | +        Map<String, Object> params = new HashMap<>();
 | 
	
		
			
				|  |  | +        MapUtil.populateMap(params, queryInfo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<MusicArrearageStudentDto> dataList = null;
 | 
	
		
			
				|  |  | +        int count = musicGroupPaymentCalenderDetailDao.countArrearageStudents(params);
 | 
	
		
			
				|  |  | +        if (count > 0) {
 | 
	
		
			
				|  |  | +            pageInfo.setTotal(count);
 | 
	
		
			
				|  |  | +            params.put("offset", pageInfo.getOffset());
 | 
	
		
			
				|  |  | +            dataList = musicGroupPaymentCalenderDetailDao.queryArrearageStudents(params);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (count == 0) {
 | 
	
		
			
				|  |  | +            dataList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        pageInfo.setRows(dataList);
 | 
	
		
			
				|  |  | +        return pageInfo;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public List<MusicGroup> getNoPaymentStudentMusicGroups(String organIdsStr) {
 | 
	
		
			
				|  |  | +        Set<Integer> organIds = null;
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(organIdsStr)) {
 | 
	
		
			
				|  |  | +            organIds = Arrays.stream(organIdsStr.split(",")).map(Integer::new).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return musicGroupPaymentCalenderDetailDao.getNoPaymentStudentMusicGroups(organIds, TenantContextHolder.getTenantId());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public void pushWaitRenewMessage(Long calenderId, String studentIds) {
 | 
	
		
			
				|  |  | +        List<MusicGroupPaymentCalenderDetail> calenderDetails = musicGroupPaymentCalenderDetailDao.queryNoPaymentCanPushByCalenderId(calenderId, studentIds);
 | 
	
		
			
				|  |  | +        if (calenderDetails == null || calenderDetails.size() == 0) {
 | 
	
		
			
				|  |  | +            throw new BizException("发送失败:没有可以发送缴费提醒的学员");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Set<Integer> studentIdList = calenderDetails.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | +        MusicGroupPaymentCalender paymentCalender = musicGroupPaymentCalenderDao.get(calenderId);
 | 
	
		
			
				|  |  | +        //未缴费
 | 
	
		
			
				|  |  | +        Map<Integer, String> studentMaps = MapUtil.convertMybatisMap(musicGroupPaymentCalenderDetailDao.queryNoPaymentAndNotZeroStudent(calenderId, studentIdList));
 | 
	
		
			
				|  |  | +        MusicGroup musicGroup = musicGroupDao.get(paymentCalender.getMusicGroupId());
 | 
	
		
			
				|  |  | +        String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
 | 
	
		
			
				|  |  | +        String memo = "4?" + baseUrl + "/#/musicGroupRenew?calenderId=" + calenderId + "&id=" + musicGroup.getId();
 | 
	
		
			
				|  |  | +        Map<Integer, String> push = new HashMap<>();
 | 
	
		
			
				|  |  | +        for (Integer userId : studentIdList) {
 | 
	
		
			
				|  |  | +            push.put(userId, userId.toString());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // 发送续费通知
 | 
	
		
			
				|  |  | +        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push,
 | 
	
		
			
				|  |  | +                null, 0, memo, "STUDENT", musicGroup.getName());
 | 
	
		
			
				|  |  | +        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_WAIT_RENEW_MESSAGE, studentMaps,
 | 
	
		
			
				|  |  | +                null, 0, memo, null, musicGroup.getName());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public PageInfo<MusicGroupPaymentCalenderDetailDto> queryDetailPage(MusicCalenderDetailQueryInfo queryInfo) {
 | 
	
		
			
				|  |  | -		PageInfo<MusicGroupPaymentCalenderDetailDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 | 
	
		
			
				|  |  | -		Map<String, Object> params = new HashMap<String, Object>();
 | 
	
		
			
				|  |  | -		MapUtil.populateMap(params, queryInfo);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		List<MusicGroupPaymentCalenderDetailDto> dataList = null;
 | 
	
		
			
				|  |  | -		int count = musicGroupPaymentCalenderDetailDao.countDetailPage(params);
 | 
	
		
			
				|  |  | -		if (count > 0) {
 | 
	
		
			
				|  |  | -			pageInfo.setTotal(count);
 | 
	
		
			
				|  |  | -			params.put("offset", pageInfo.getOffset());
 | 
	
		
			
				|  |  | -			dataList = musicGroupPaymentCalenderDetailDao.queryDetailPage(params);
 | 
	
		
			
				|  |  | -			List<StudentPaymentOrderDetail> orderDetail = studentPaymentOrderDetailDao.findByCalenderId(dataList.get(0).getMusicGroupPaymentCalenderId());
 | 
	
		
			
				|  |  | -			Map<Integer, List<StudentPaymentOrderDetail>> orderDetailMap = orderDetail.stream().collect(Collectors.groupingBy(StudentPaymentOrderDetail::getUserId));
 | 
	
		
			
				|  |  | -			for (MusicGroupPaymentCalenderDetailDto row : dataList) {
 | 
	
		
			
				|  |  | -				List<StudentPaymentOrderDetail> orderDetailList = orderDetailMap.get(row.getUserId());
 | 
	
		
			
				|  |  | -				if(orderDetailList != null && orderDetailList.size() > 0){
 | 
	
		
			
				|  |  | -					BigDecimal totalAmount = orderDetailList.stream().map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | -					//辅件
 | 
	
		
			
				|  |  | -					BigDecimal accessoriesAmount = orderDetailList.stream().filter(e -> e.getType() == OrderDetailTypeEnum.ACCESSORIES).map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | -					row.setAccessoriesAmount(accessoriesAmount);
 | 
	
		
			
				|  |  | -					//会员金额
 | 
	
		
			
				|  |  | -					BigDecimal cloudAmount = orderDetailList.stream().filter(e -> e.getType() == OrderDetailTypeEnum.CLOUD_TEACHER || e.getType() == OrderDetailTypeEnum.CLOUD_TEACHER_PLUS).map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | -					row.setCloudAmount(cloudAmount);
 | 
	
		
			
				|  |  | -					//乐器
 | 
	
		
			
				|  |  | -					BigDecimal musicalAmount = orderDetailList.stream().filter(e -> e.getType() == OrderDetailTypeEnum.MUSICAL).map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | -					row.setMusicalAmount(musicalAmount);
 | 
	
		
			
				|  |  | -					//乐保
 | 
	
		
			
				|  |  | -					BigDecimal maintenanceAmount = orderDetailList.stream().filter(e -> e.getType() == OrderDetailTypeEnum.MAINTENANCE).map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | -					row.setMaintenanceAmount(maintenanceAmount);
 | 
	
		
			
				|  |  | -					//活动
 | 
	
		
			
				|  |  | -					BigDecimal activityAmount = orderDetailList.stream().filter(e -> e.getType() == OrderDetailTypeEnum.PRACTICE || e.getType() == OrderDetailTypeEnum.VIP).map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | -					row.setActivityAmount(activityAmount);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -					totalAmount = totalAmount.subtract(accessoriesAmount).subtract(cloudAmount).subtract(musicalAmount).subtract(maintenanceAmount).subtract(activityAmount);
 | 
	
		
			
				|  |  | -					row.setCourseAmount(totalAmount);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		if (count == 0) {
 | 
	
		
			
				|  |  | -			dataList = new ArrayList<>();
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		pageInfo.setRows(dataList);
 | 
	
		
			
				|  |  | -		return pageInfo;
 | 
	
		
			
				|  |  | +        PageInfo<MusicGroupPaymentCalenderDetailDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 | 
	
		
			
				|  |  | +        Map<String, Object> params = new HashMap<String, Object>();
 | 
	
		
			
				|  |  | +        MapUtil.populateMap(params, queryInfo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<MusicGroupPaymentCalenderDetailDto> dataList = null;
 | 
	
		
			
				|  |  | +        int count = musicGroupPaymentCalenderDetailDao.countDetailPage(params);
 | 
	
		
			
				|  |  | +        if (count > 0) {
 | 
	
		
			
				|  |  | +            pageInfo.setTotal(count);
 | 
	
		
			
				|  |  | +            params.put("offset", pageInfo.getOffset());
 | 
	
		
			
				|  |  | +            dataList = musicGroupPaymentCalenderDetailDao.queryDetailPage(params);
 | 
	
		
			
				|  |  | +            List<StudentPaymentOrderDetail> orderDetail = studentPaymentOrderDetailDao.findByCalenderId(dataList.get(0).getMusicGroupPaymentCalenderId());
 | 
	
		
			
				|  |  | +            Map<Integer, List<StudentPaymentOrderDetail>> orderDetailMap = orderDetail.stream().collect(Collectors.groupingBy(StudentPaymentOrderDetail::getUserId));
 | 
	
		
			
				|  |  | +            for (MusicGroupPaymentCalenderDetailDto row : dataList) {
 | 
	
		
			
				|  |  | +                List<StudentPaymentOrderDetail> orderDetailList = orderDetailMap.get(row.getUserId());
 | 
	
		
			
				|  |  | +                if (orderDetailList != null && orderDetailList.size() > 0) {
 | 
	
		
			
				|  |  | +                    BigDecimal totalAmount = orderDetailList.stream().map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | +                    //辅件
 | 
	
		
			
				|  |  | +                    BigDecimal accessoriesAmount = orderDetailList.stream().filter(e -> e.getType() == OrderDetailTypeEnum.ACCESSORIES).map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | +                    row.setAccessoriesAmount(accessoriesAmount);
 | 
	
		
			
				|  |  | +                    //会员金额
 | 
	
		
			
				|  |  | +                    BigDecimal cloudAmount = orderDetailList.stream().filter(e -> e.getType() == OrderDetailTypeEnum.CLOUD_TEACHER || e.getType() == OrderDetailTypeEnum.CLOUD_TEACHER_PLUS).map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | +                    row.setCloudAmount(cloudAmount);
 | 
	
		
			
				|  |  | +                    //乐器
 | 
	
		
			
				|  |  | +                    BigDecimal musicalAmount = orderDetailList.stream().filter(e -> e.getType() == OrderDetailTypeEnum.MUSICAL).map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | +                    row.setMusicalAmount(musicalAmount);
 | 
	
		
			
				|  |  | +                    //乐保
 | 
	
		
			
				|  |  | +                    BigDecimal maintenanceAmount = orderDetailList.stream().filter(e -> e.getType() == OrderDetailTypeEnum.MAINTENANCE).map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | +                    row.setMaintenanceAmount(maintenanceAmount);
 | 
	
		
			
				|  |  | +                    //活动
 | 
	
		
			
				|  |  | +                    BigDecimal activityAmount = orderDetailList.stream().filter(e -> e.getType() == OrderDetailTypeEnum.PRACTICE || e.getType() == OrderDetailTypeEnum.VIP).map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | +                    row.setActivityAmount(activityAmount);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    totalAmount = totalAmount.subtract(accessoriesAmount).subtract(cloudAmount).subtract(musicalAmount).subtract(maintenanceAmount).subtract(activityAmount);
 | 
	
		
			
				|  |  | +                    row.setCourseAmount(totalAmount);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (count == 0) {
 | 
	
		
			
				|  |  | +            dataList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        pageInfo.setRows(dataList);
 | 
	
		
			
				|  |  | +        return pageInfo;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | -	@Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public void addCalenderDetail(StudentPaymentOrder studentPaymentOrder, StudentRegistration studentRegistration) {
 | 
	
		
			
				|  |  | -		Date nowDate = new Date();
 | 
	
		
			
				|  |  | -		Integer tenantId = studentPaymentOrder.getTenantId();
 | 
	
		
			
				|  |  | -		//缴费详情 calender detail
 | 
	
		
			
				|  |  | -		MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderService.get(studentPaymentOrder.getCalenderId());
 | 
	
		
			
				|  |  | -		Long currentPaymentCalenderId = studentPaymentOrder.getCalenderId();
 | 
	
		
			
				|  |  | -		//查询缴费项目关联的订单
 | 
	
		
			
				|  |  | -		List<StudentPaymentOrder> orderList = studentPaymentOrderDao.findByCalenderId(currentPaymentCalenderId,studentPaymentOrder.getUserId());
 | 
	
		
			
				|  |  | -		if(orderList.size() == 1){
 | 
	
		
			
				|  |  | -			// 更新实际缴费人数
 | 
	
		
			
				|  |  | -			if (musicGroupPaymentCalender.getActualNum() == null) {
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalender.setActualNum(1);
 | 
	
		
			
				|  |  | -			} else {
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalender.setActualNum(musicGroupPaymentCalender.getActualNum() + 1);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			if(musicGroupPaymentCalender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.MUSIC_APPLY){
 | 
	
		
			
				|  |  | -				if (musicGroupPaymentCalender.getExpectNum() == null) {
 | 
	
		
			
				|  |  | -					musicGroupPaymentCalender.setExpectNum(1);
 | 
	
		
			
				|  |  | -				} else {
 | 
	
		
			
				|  |  | -					musicGroupPaymentCalender.setExpectNum(musicGroupPaymentCalender.getExpectNum() + 1);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalender.setUpdateTime(nowDate);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = musicGroupPaymentCalenderDetailDao.findByCalenderIdAndUserId(currentPaymentCalenderId,studentPaymentOrder.getUserId());
 | 
	
		
			
				|  |  | -		if(musicGroupPaymentCalenderDetail == null){
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setTenantId(tenantId);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setUserId(studentPaymentOrder.getUserId());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setPaymentStatus(PAID_COMPLETED);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setPayTime(nowDate);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setPaymentOrderId(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setUseInCourse(0);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setOpen(1);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setUserStatus(null);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setCreateTime(nowDate);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setUpdateTime(nowDate);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetailDao.insert(musicGroupPaymentCalenderDetail);
 | 
	
		
			
				|  |  | -		}else {
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setPaymentStatus(PAID_COMPLETED);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setPayTime(nowDate);
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetail.setPaymentOrderId(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  | -			musicGroupPaymentCalenderDetailDao.update(musicGroupPaymentCalenderDetail);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		//续费项目加学员时就生成了课程时长,报名项目在缴费成功后才需要添加课程时长
 | 
	
		
			
				|  |  | -		if(musicGroupPaymentCalender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.MUSIC_APPLY){
 | 
	
		
			
				|  |  | -			List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = new ArrayList<>();
 | 
	
		
			
				|  |  | -			List<String> orderDetailTypes = studentPaymentOrderDetailDao.getOrderDetailType(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  | -			List<MusicGroupPaymentCalenderCourseSettings> courseSettingsList = musicGroupPaymentCalenderCourseSettingsDao
 | 
	
		
			
				|  |  | -					.getWithPaymentCalender(musicGroupPaymentCalender.getId());
 | 
	
		
			
				|  |  | -			for (MusicGroupPaymentCalenderCourseSettings courseSetting : courseSettingsList) {
 | 
	
		
			
				|  |  | -				if (musicGroupPaymentCalender.getPayUserType().equals(MusicGroupPaymentCalender.PayUserType.STUDENT)
 | 
	
		
			
				|  |  | -						&& !orderDetailTypes.contains(courseSetting.getCourseType().getCode())) {
 | 
	
		
			
				|  |  | -					continue;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				if (courseSetting.getCourseTotalMinuties() == null || courseSetting.getCourseTotalMinuties() == 0) {
 | 
	
		
			
				|  |  | -					continue;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = new MusicGroupPaymentStudentCourseDetail();
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetail.getId());
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetail.setUserId(studentPaymentOrder.getUserId());
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetail.setCourseType(courseSetting.getCourseType());
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSetting.getCourseTotalMinuties());
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetail.setCourseOriginalPrice(courseSetting.getCourseOriginalPrice());
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(courseSetting.getCourseCurrentPrice());
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(0);
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetail.setCreateTime(nowDate);
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetail.setUpdateTime(nowDate);
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetail.setTenantId(tenantId);
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetails.add(musicGroupPaymentStudentCourseDetail);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			if (musicGroupPaymentStudentCourseDetails.size() > 0) {
 | 
	
		
			
				|  |  | -				musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetails);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +        Date nowDate = new Date();
 | 
	
		
			
				|  |  | +        Integer tenantId = studentPaymentOrder.getTenantId();
 | 
	
		
			
				|  |  | +        //缴费详情 calender detail
 | 
	
		
			
				|  |  | +        MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderService.get(studentPaymentOrder.getCalenderId());
 | 
	
		
			
				|  |  | +        Long currentPaymentCalenderId = studentPaymentOrder.getCalenderId();
 | 
	
		
			
				|  |  | +        //查询缴费项目关联的订单
 | 
	
		
			
				|  |  | +        List<StudentPaymentOrder> orderList = studentPaymentOrderDao.findByCalenderId(currentPaymentCalenderId, studentPaymentOrder.getUserId());
 | 
	
		
			
				|  |  | +        if (orderList.size() == 1) {
 | 
	
		
			
				|  |  | +            // 更新实际缴费人数
 | 
	
		
			
				|  |  | +            if (musicGroupPaymentCalender.getActualNum() == null) {
 | 
	
		
			
				|  |  | +                musicGroupPaymentCalender.setActualNum(1);
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                musicGroupPaymentCalender.setActualNum(musicGroupPaymentCalender.getActualNum() + 1);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (musicGroupPaymentCalender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.MUSIC_APPLY) {
 | 
	
		
			
				|  |  | +                if (musicGroupPaymentCalender.getExpectNum() == null) {
 | 
	
		
			
				|  |  | +                    musicGroupPaymentCalender.setExpectNum(1);
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    musicGroupPaymentCalender.setExpectNum(musicGroupPaymentCalender.getExpectNum() + 1);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalender.setUpdateTime(nowDate);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = musicGroupPaymentCalenderDetailDao.findByCalenderIdAndUserId(currentPaymentCalenderId, studentPaymentOrder.getUserId());
 | 
	
		
			
				|  |  | +        if (musicGroupPaymentCalenderDetail == null) {
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setTenantId(tenantId);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setUserId(studentPaymentOrder.getUserId());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setPaymentStatus(PAID_COMPLETED);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setPayTime(nowDate);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setPaymentOrderId(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setUseInCourse(0);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setOpen(1);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setUserStatus(null);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setCreateTime(nowDate);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setUpdateTime(nowDate);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetailDao.insert(musicGroupPaymentCalenderDetail);
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setPaymentStatus(PAID_COMPLETED);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setPayTime(nowDate);
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetail.setPaymentOrderId(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  | +            musicGroupPaymentCalenderDetailDao.update(musicGroupPaymentCalenderDetail);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //续费项目加学员时就生成了课程时长,报名项目在缴费成功后才需要添加课程时长
 | 
	
		
			
				|  |  | +        if (musicGroupPaymentCalender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.MUSIC_APPLY) {
 | 
	
		
			
				|  |  | +            List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = new ArrayList<>();
 | 
	
		
			
				|  |  | +            List<String> orderDetailTypes = studentPaymentOrderDetailDao.getOrderDetailType(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  | +            List<MusicGroupPaymentCalenderCourseSettings> courseSettingsList = musicGroupPaymentCalenderCourseSettingsDao
 | 
	
		
			
				|  |  | +                    .getWithPaymentCalender(musicGroupPaymentCalender.getId());
 | 
	
		
			
				|  |  | +            for (MusicGroupPaymentCalenderCourseSettings courseSetting : courseSettingsList) {
 | 
	
		
			
				|  |  | +                if (musicGroupPaymentCalender.getPayUserType().equals(MusicGroupPaymentCalender.PayUserType.STUDENT)
 | 
	
		
			
				|  |  | +                        && !orderDetailTypes.contains(courseSetting.getCourseType().getCode())) {
 | 
	
		
			
				|  |  | +                    continue;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (courseSetting.getCourseTotalMinuties() == null || courseSetting.getCourseTotalMinuties() == 0) {
 | 
	
		
			
				|  |  | +                    continue;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = new MusicGroupPaymentStudentCourseDetail();
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetail.getId());
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetail.setUserId(studentPaymentOrder.getUserId());
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetail.setCourseType(courseSetting.getCourseType());
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSetting.getCourseTotalMinuties());
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetail.setCourseOriginalPrice(courseSetting.getCourseOriginalPrice());
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(courseSetting.getCourseCurrentPrice());
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(0);
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetail.setCreateTime(nowDate);
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetail.setUpdateTime(nowDate);
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetail.setTenantId(tenantId);
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetails.add(musicGroupPaymentStudentCourseDetail);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (musicGroupPaymentStudentCourseDetails.size() > 0) {
 | 
	
		
			
				|  |  | +                musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetails);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |