| 
					
				 | 
			
			
				@@ -1,15 +1,12 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.ym.mec.biz.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.baomidou.mybatisplus.core.toolkit.support.Property; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.auth.api.client.SysUserFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.auth.api.entity.SysUser; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.auth.api.entity.SysUserRole; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.dao.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.dto.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.entity.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -27,7 +24,6 @@ import com.ym.mec.common.service.impl.BaseServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.thirdparty.message.MessageSenderPluginContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.util.collection.MapUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.util.date.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.apache.commons.beanutils.BeanUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -35,16 +31,11 @@ import org.springframework.transaction.annotation.Isolation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.math.BigDecimal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.math.BigInteger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Map.Entry; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.concurrent.CompletableFuture; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.concurrent.ExecutorService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.concurrent.Executors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.function.Consumer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.function.Function; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.function.Predicate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.function.Supplier; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.SCHOOL; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -57,188 +48,194 @@ import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.ORGAN_MANAGER; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentCalender> implements MusicGroupPaymentCalenderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupStudentFeeDao musicGroupStudentFeeDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupPaymentCalenderCourseSettingsServiceImpl musicGroupPaymentCalenderCourseSettingsService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupSchoolTermCourseDetailDao musicGroupSchoolTermCourseDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupSchoolTermStudentCourseDetailDao musicGroupSchoolTermStudentCourseDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private IdGeneratorService idGeneratorService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private ClassGroupService classGroupService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupDao musicGroupDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private ClassGroupDao classGroupDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private CourseScheduleDao courseScheduleDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private TeacherAttendanceDao teacherAttendanceDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupBuildLogDao musicGroupBuildLogDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private SysConfigDao sysConfigDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private OrganizationDao organizationDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private SysMessageService sysMessageService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private SendSeoMessageSource sendSeoMessageSource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private SysUserFeignService sysUserFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private ImGroupMemberService imGroupMemberService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private ImUserFriendService imUserFriendService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private ClassGroupStudentMapperDao classGroupStudentMapperDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupStudentClassAdjustDao musicGroupStudentClassAdjustDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupPaymentCalenderDetailService musicGroupPaymentCalenderDetailService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupPaymentCalenderStudentDetailDao musicGroupPaymentCalenderStudentDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private StudentRegistrationDao studentRegistrationDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private GroupEventSource groupEventSource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private StudentPaymentOrderDao studentPaymentOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MemberRankPrivilegesService memberRankPrivilegesService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private CloudTeacherOrderDao cloudTeacherOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupPaymentCalenderActivityServiceImpl musicGroupPaymentCalenderActivityService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupPaymentCalenderMemberServiceImpl musicGroupPaymentCalenderMemberService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicGroupPaymentCalenderRepairServiceImpl musicGroupPaymentCalenderRepairService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private StudentDao studentDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private ActivityUserMapperService activityUserMapperService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public BaseDAO<Long, MusicGroupPaymentCalender> getDAO() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return musicGroupPaymentCalenderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public String create(MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		PaymentType paymentType = musicGroupPaymentCalenderDto.getPaymentType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(paymentType != SPAN_GROUP_CLASS_ADJUST){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("操作失败:该入口不支持{}",paymentType.getDesc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentDateRange> musicGroupPaymentDateRangeList = musicGroupPaymentCalenderDto.getMusicGroupPaymentDateRangeList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(musicGroupPaymentDateRangeList.size() > 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("创建缴费失败:不支持多周期缴费"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String musicGroupId = musicGroupPaymentCalenderDto.getMusicGroupId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroup musicGroup = musicGroupDao.getLocked(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroup == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("乐团查询失败,请检查参数"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (sysUser == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("请登录"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 所有缴费项目已完成排课才能创建下一个缴费项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String organBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,musicGroupPaymentCalenderDto.getIgnoreBatchNoList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (StringUtils.isNoneBlank(organBatchNo)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(StringUtils.isEmpty(musicGroupPaymentCalenderDto.getBatchNo()) || !musicGroupPaymentCalenderDto.getBatchNo().equals(organBatchNo)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		PaymentCalenderStatusEnum status = musicGroupPaymentCalenderDto.getStatus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String batchNo = idGeneratorService.generatorId() + ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentDateRange musicGroupPaymentDateRange = musicGroupPaymentDateRangeList.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalender musicGroupPaymentCalender = new MusicGroupPaymentCalender(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setAttribute1(musicGroupPaymentCalenderDto.getAttribute1()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setAttribute2(musicGroupPaymentCalenderDto.getAttribute2()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setDeadlinePaymentDate(musicGroupPaymentDateRange.getDeadlinePaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setMemo(musicGroupPaymentCalenderDto.getMemo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setMusicGroupId(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setMusicGroupOrganizationCourseSettingId(musicGroupPaymentCalenderDto.getMusicGroupOrganizationCourseSettingId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setOriginalTotalAmount(calenderStudentDetails.stream().map(e->e.getCourseOriginalPrice()).reduce(BigDecimal.ZERO,BigDecimal::add)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setCurrentTotalAmount(calenderStudentDetails.stream().map(e->e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO,BigDecimal::add)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setPaymentType(paymentType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setPayUserType(musicGroupPaymentCalenderDto.getPayUserType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setStartPaymentDate(musicGroupPaymentDateRange.getStartPaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setStudentIds(musicGroupPaymentCalenderDto.getStudentIds()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setOperator(sysUser.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setOrganId(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroupPaymentCalender.getStatus() != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (date.after(musicGroupPaymentCalender.getStartPaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} else if (date.after(musicGroupPaymentCalender.getDeadlinePaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OVER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 设置批次号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDto.setBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDao.insert(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//如果是跨团班级合并,保存用户缴费详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//记录学员缴费详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderStudentDetailDao.batchInsert(musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails(),musicGroupPaymentCalender.getBatchNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroupPaymentCalender.getStatus() != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//如果是跨团班级合并,添加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentCalenderDetailService.batchAdd(musicGroupPaymentCalender,musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender,true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (status == AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 如果是审核中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Organization organization = organizationDao.get(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sendSeoMessageSource.sendSeoMessage(musicGroup.getOrganId(),new SysUserRoleEnum[]{ORGAN_MANAGER}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					null,null,MessageTypeEnum.BACKSTAGE_PAYMENT_CALENDER_AUDIT,organization.getName(), musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return batchNo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public <T> void checkObjectNull(T t, Consumer consumer){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(t == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			consumer.accept(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public String create1(MusicGroupPaymentBaseCalender musicGroupPaymentBaseCalender) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		checkObjectNull(musicGroupPaymentBaseCalender, o -> {throw new BizException("参数校验异常");}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String musicGroupId = musicGroupPaymentBaseCalender.getMusicGroupId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroup musicGroup = musicGroupDao.getLocked(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		checkObjectNull(musicGroup, o -> {throw new BizException("乐团查询失败,请检查参数");}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		checkObjectNull(sysUser, o -> {throw new BizException("请登录");}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupStudentFeeDao musicGroupStudentFeeDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupPaymentCalenderCourseSettingsServiceImpl musicGroupPaymentCalenderCourseSettingsService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupSchoolTermCourseDetailDao musicGroupSchoolTermCourseDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupSchoolTermStudentCourseDetailDao musicGroupSchoolTermStudentCourseDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IdGeneratorService idGeneratorService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ClassGroupService classGroupService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupDao musicGroupDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ClassGroupDao classGroupDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private CourseScheduleDao courseScheduleDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private TeacherAttendanceDao teacherAttendanceDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupBuildLogDao musicGroupBuildLogDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SysConfigDao sysConfigDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private OrganizationDao organizationDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SysMessageService sysMessageService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SendSeoMessageSource sendSeoMessageSource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SysUserFeignService sysUserFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ImGroupMemberService imGroupMemberService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ImUserFriendService imUserFriendService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ClassGroupStudentMapperDao classGroupStudentMapperDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupStudentClassAdjustDao musicGroupStudentClassAdjustDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupPaymentCalenderDetailService musicGroupPaymentCalenderDetailService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupPaymentCalenderStudentDetailDao musicGroupPaymentCalenderStudentDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private StudentRegistrationDao studentRegistrationDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private GroupEventSource groupEventSource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private StudentPaymentOrderDao studentPaymentOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MemberRankPrivilegesService memberRankPrivilegesService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private CloudTeacherOrderDao cloudTeacherOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupPaymentCalenderActivityServiceImpl musicGroupPaymentCalenderActivityService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupPaymentCalenderMemberServiceImpl musicGroupPaymentCalenderMemberService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupPaymentCalenderRepairServiceImpl musicGroupPaymentCalenderRepairService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private StudentDao studentDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ActivityUserMapperService activityUserMapperService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BaseDAO<Long, MusicGroupPaymentCalender> getDAO() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return musicGroupPaymentCalenderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public String create(MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PaymentType paymentType = musicGroupPaymentCalenderDto.getPaymentType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (paymentType != SPAN_GROUP_CLASS_ADJUST) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("操作失败:该入口不支持{}", paymentType.getDesc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentDateRange> musicGroupPaymentDateRangeList = musicGroupPaymentCalenderDto.getMusicGroupPaymentDateRangeList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentDateRangeList.size() > 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("创建缴费失败:不支持多周期缴费"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String musicGroupId = musicGroupPaymentCalenderDto.getMusicGroupId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroup musicGroup = musicGroupDao.getLocked(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroup == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("乐团查询失败,请检查参数"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (sysUser == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("请登录"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 所有缴费项目已完成排课才能创建下一个缴费项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String organBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null, musicGroupPaymentCalenderDto.getIgnoreBatchNoList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNoneBlank(organBatchNo)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StringUtils.isEmpty(musicGroupPaymentCalenderDto.getBatchNo()) || !musicGroupPaymentCalenderDto.getBatchNo().equals(organBatchNo)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PaymentCalenderStatusEnum status = musicGroupPaymentCalenderDto.getStatus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String batchNo = idGeneratorService.generatorId() + ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentDateRange musicGroupPaymentDateRange = musicGroupPaymentDateRangeList.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalender musicGroupPaymentCalender = new MusicGroupPaymentCalender(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setAttribute1(musicGroupPaymentCalenderDto.getAttribute1()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setAttribute2(musicGroupPaymentCalenderDto.getAttribute2()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setDeadlinePaymentDate(musicGroupPaymentDateRange.getDeadlinePaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setMemo(musicGroupPaymentCalenderDto.getMemo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setMusicGroupId(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setMusicGroupOrganizationCourseSettingId(musicGroupPaymentCalenderDto.getMusicGroupOrganizationCourseSettingId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setOriginalTotalAmount(calenderStudentDetails.stream().map(e -> e.getCourseOriginalPrice()).reduce(BigDecimal.ZERO, BigDecimal::add)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setCurrentTotalAmount(calenderStudentDetails.stream().map(e -> e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO, BigDecimal::add)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setPaymentType(paymentType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setPayUserType(musicGroupPaymentCalenderDto.getPayUserType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setStartPaymentDate(musicGroupPaymentDateRange.getStartPaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setStudentIds(musicGroupPaymentCalenderDto.getStudentIds()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setOperator(sysUser.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setOrganId(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalender.getStatus() != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (date.after(musicGroupPaymentCalender.getStartPaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (date.after(musicGroupPaymentCalender.getDeadlinePaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OVER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 设置批次号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDto.setBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDao.insert(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果是跨团班级合并,保存用户缴费详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //记录学员缴费详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderStudentDetailDao.batchInsert(musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails(), musicGroupPaymentCalender.getBatchNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalender.getStatus() != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //如果是跨团班级合并,添加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentCalenderDetailService.batchAdd(musicGroupPaymentCalender, musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (status == AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 如果是审核中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Organization organization = organizationDao.get(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sendSeoMessageSource.sendSeoMessage(musicGroup.getOrganId(), new SysUserRoleEnum[]{ORGAN_MANAGER}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    null, null, MessageTypeEnum.BACKSTAGE_PAYMENT_CALENDER_AUDIT, organization.getName(), musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return batchNo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public <T> void checkObjectNull(T t, Consumer consumer) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (t == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            consumer.accept(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public String create1(MusicGroupPaymentBaseCalender musicGroupPaymentBaseCalender) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        checkObjectNull(musicGroupPaymentBaseCalender, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("参数校验异常"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String musicGroupId = musicGroupPaymentBaseCalender.getMusicGroupId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroup musicGroup = musicGroupDao.getLocked(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        checkObjectNull(musicGroup, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("乐团查询失败,请检查参数"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        checkObjectNull(sysUser, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("请登录"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //		if(musicGroupPaymentBaseCalender.getCalenderActivityList() == null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //				&& musicGroupPaymentBaseCalender.getCalenderMember() == null 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -246,1165 +243,1165 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //				&& musicGroupPaymentBaseCalender.getMusicRepair() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //			throw new BizException("请选择一个缴费项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS && musicGroup.getStatus() != MusicGroupStatusEnum.PRE_BUILD_FEE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("创建缴费失败:已存在缴费项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 所有缴费项目已完成排课才能创建下一个缴费项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (StringUtils.isNoneBlank(orignBatchNo)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 不是进行中,只能创建一次缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<MusicGroupPaymentCalender> list = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (list.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				throw new BizException("创建失败,已经存在缴费信息"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//进行中加学员拓展信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		CalenderAddStudent calenderAddStudent = musicGroupPaymentBaseCalender.getCalenderAddStudent(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalender musicGroupPaymentCalender = new MusicGroupPaymentCalender(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//判断缴费项目类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(musicGroup.getStatus() == MusicGroupStatusEnum.PRE_BUILD_FEE){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentBaseCalender.setPaymentType(MUSIC_APPLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(calenderAddStudent != null && calenderAddStudent.getStudentIds() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentBaseCalender.setPaymentType(ADD_STUDENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//预计缴费人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setAttribute1(calenderAddStudent.getClassGroupIds()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setStudentIds(calenderAddStudent.getStudentIds().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setExpectNum(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//校验是否可以加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				checkAddStudent(calenderAddStudent,musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(musicGroupPaymentBaseCalender.getMusicGroupOrganizationCourseSettingId() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroupPaymentBaseCalender.setPaymentType(MUSIC_RENEW); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroupPaymentBaseCalender.setPaymentType(ADD_COURSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentBaseCalender.setMusicGroup(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//计算缴费项目原价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal courseOriginalAmount = musicGroupPaymentCalenderCourseSettingsService.getOriginalAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal memberOriginalAmount = musicGroupPaymentCalenderMemberService.getOriginalAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal repairOriginalAmount = musicGroupPaymentCalenderRepairService.getOriginalAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal activityOriginalAmount = musicGroupPaymentCalenderActivityService.getOriginalAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal originalTotalAmount = courseOriginalAmount.add(memberOriginalAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.add(activityOriginalAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.add(repairOriginalAmount).setScale(0, BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//计算缴费项目总金额(前端录入) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal courseActualAmount = musicGroupPaymentCalenderCourseSettingsService.getActualAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal memberActualAmount = musicGroupPaymentCalenderMemberService.getActualAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal repairActualAmount = musicGroupPaymentCalenderRepairService.getActualAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal activityActualAmount = musicGroupPaymentCalenderActivityService.getActualAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal actualTotalAmount = courseActualAmount.add(memberActualAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.add(repairActualAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.add(activityActualAmount).setScale(0, BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		PaymentCalenderStatusEnum status; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroupPaymentBaseCalender.getPayUserType() == SCHOOL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			status = AUDITING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//计算项目原现价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			BigDecimal courseCurrentAmount = musicGroupPaymentCalenderCourseSettingsService.getCurrentAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			BigDecimal memberCurrentAmount = musicGroupPaymentCalenderMemberService.getCurrentAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			BigDecimal repairCurrentAmount = musicGroupPaymentCalenderRepairService.getCurrentAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			BigDecimal activityCurrentAmount = musicGroupPaymentCalenderActivityService.getCurrentAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			BigDecimal currentTotalAmount = courseCurrentAmount.add(memberCurrentAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					.add(repairCurrentAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					.add(activityCurrentAmount).setScale(0, BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			status = actualTotalAmount.compareTo(currentTotalAmount) == 0 ? NO:AUDITING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setDeadlinePaymentDate(musicGroupPaymentBaseCalender.getDeadlinePaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setMemo(musicGroupPaymentBaseCalender.getMemo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setMusicGroupId(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setMusicGroupOrganizationCourseSettingId(musicGroupPaymentBaseCalender.getMusicGroupOrganizationCourseSettingId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setPayUserType(musicGroupPaymentBaseCalender.getPayUserType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setStartPaymentDate(musicGroupPaymentBaseCalender.getStartPaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setOperator(sysUser.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setPaymentType(musicGroupPaymentBaseCalender.getPaymentType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setCurrentTotalAmount(actualTotalAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setOriginalTotalAmount(originalTotalAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setOrganId(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroupPaymentCalender.getStatus() != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (date.after(musicGroupPaymentCalender.getStartPaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} else if (date.after(musicGroupPaymentCalender.getDeadlinePaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OVER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 设置批次号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String batchNo = idGeneratorService.generatorId() + ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDao.insert(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Long calenderId = musicGroupPaymentCalender.getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//保存会员缴费信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentBaseCalender.getCalenderMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(calenderMember != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			calenderMember = musicGroupPaymentCalenderMemberService.initBean(calenderMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			calenderMember.setOriginalAmount(memberOriginalAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			calenderMember.setCalenderId(calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (musicGroupPaymentBaseCalender.getPayUserType() == SCHOOL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				calenderMember.setActualAmount(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentCalenderMemberService.insert(calenderMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//保存乐保缴费信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalenderRepair musicRepair = musicGroupPaymentBaseCalender.getMusicRepair(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(musicRepair != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicRepair.setOriginalAmount(repairOriginalAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicRepair.setCalenderId(calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (musicGroupPaymentBaseCalender.getPayUserType() == SCHOOL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicRepair.setActualAmount(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentCalenderRepairService.insert(musicRepair); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//保存活动缴费信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalenderActivity> calenderActivityList = musicGroupPaymentBaseCalender.getCalenderActivityList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(calenderActivityList != null && calenderActivityList.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentCalenderActivityService.initBean(calenderActivityList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (musicGroupPaymentBaseCalender.getPayUserType() == SCHOOL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				calenderActivityList.forEach(e->e.setActualAmount(BigDecimal.ZERO)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentCalenderActivityService.batchInsert(musicGroupPaymentBaseCalender,calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//保存课程费用列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setMusicGroupPaymentCalenderCourseSettingsList(musicGroupPaymentBaseCalender.getMusicGroupPaymentCalenderCourseSettingsList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderCourseSettingsService.batchInsert(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 如果是报名,需要修改乐团状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroupPaymentBaseCalender.getPaymentType() == MUSIC_APPLY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (status != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroup.setStatus(MusicGroupStatusEnum.APPLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 记录操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "报名缴费项目创建成功(创建缴费中 -> 报名中)", sysUser.getId(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroup.setStatus(MusicGroupStatusEnum.FEE_AUDIT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 记录操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "报名缴费项目创建成功(创建缴费 -> 费用审核中)", sysUser.getId(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroup.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupDao.update(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (status == AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 如果是审核中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Organization organization = organizationDao.get(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sendSeoMessageSource.sendSeoMessage(musicGroup.getOrganId(),new SysUserRoleEnum[]{ORGAN_MANAGER}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					null,null,MessageTypeEnum.BACKSTAGE_PAYMENT_CALENDER_AUDIT,organization.getName(), musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (musicGroupPaymentCalender.getPaymentType() == PaymentType.ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				addStudent(musicGroupPaymentCalender, musicGroupPaymentCalender.getMusicGroupPaymentCalenderCourseSettingsList(),musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender,true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 学生加到班级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				classGroupService.addStudentToClassGroupAndCourseArranging(calenderAddStudent.getStudentIds(), calenderAddStudent.getClassGroupIds(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						batchNo, musicGroupPaymentBaseCalender.getMusicGroupPaymentCalenderCourseSettingsList(),musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				ExecutorService executor = Executors.newFixedThreadPool(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				CompletableFuture.runAsync(()->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				},executor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				executor.shutdown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return batchNo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//校验缴费项目进行中加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void checkAddStudent(CalenderAddStudent calenderAddStudent,MusicGroup musicGroup){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//获取缴费状态在审核中或者已拒绝的缴费项目的学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Integer userId = calenderAddStudent.getStudentIds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//该学员是否在其他的会员团 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			boolean hasMemberGroup = studentRegistrationDao.checkHasMemberGroup(musicGroup.getId(),userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(hasMemberGroup){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				throw new BizException("操作失败:学员已在其他系统收费乐团中,不可报名该乐团请联系教务老师"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroup.getId(),null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(StringUtils.isNotEmpty(studentIds)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(studentIds.contains(userId.toString())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				throw new BizException("创建缴费失败:所选学员有待审核或已拒绝的缴费项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = musicGroupPaymentCalenderDetailDao.queryNotPaymentStudentByUserIdAndMusicGroupId(userId, musicGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(musicGroupPaymentCalenderDetailList != null && musicGroupPaymentCalenderDetailList.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("创建缴费失败:已存在缴费项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public Map<String, Object> getCalenderDetail(Map<String, Object> result,Long calenderId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//课程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		result.put("course", musicGroupPaymentCalenderCourseSettingsService.queryCalenderCourseSettings(calenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//乐保 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		result.put("repair",musicGroupPaymentCalenderRepairService.findByCalenderId(calenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.findByCalenderId(calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//会员信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		result.put("member",calenderMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//活动相关信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		result.put("activity",musicGroupPaymentCalenderActivityService.findByCalenderId(calenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(calenderMember != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			result.put("memberPrivilegesItemList", memberRankPrivilegesService.queryByMemberRankId(calenderMember.getMemberRankSettingId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public Map<String, Object> getDetail(Long id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Map<String, Object> result = new HashMap<>(10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//获取缴费项目详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//统计预计缴费人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Map<Long, Long> expectNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countExpectNum(id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(expectNumMap != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			calender.setExpectNum(expectNumMap.get(id) == null ? 0 : expectNumMap.get(id).intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//统计实际缴费人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Map<Long, Long> actualNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countActualNum(id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(actualNumMap != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			calender.setActualNum(actualNumMap.get(id) == null ? 0 : actualNumMap.get(id).intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(calender.getOrganId() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Organization organization = organizationDao.get(calender.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			calender.setOrganName(organization.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (StringUtils.isNotEmpty(calender.getMusicGroupId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			calender.setMusicGroupName(musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		result.put("calender", calender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//汇总收款金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal sumActualAmount = musicGroupPaymentCalenderDetailDao.sumActualAmount(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		result.put("sumActualAmount", sumActualAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//进行中加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(calender.getPaymentType() == ADD_STUDENT){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			String studentIds = calender.getStudentIds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(StringUtils.isNotEmpty(studentIds)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				SysUser sysUser = studentDao.getUser(Integer.parseInt(studentIds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				result.put("phone",sysUser.getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				result.put("username",sysUser.getUsername()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//获取跨团合班学员缴费详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		result.put("musicMerger",musicGroupPaymentCalenderStudentDetailDao.findByBatchNo(calender.getBatchNo())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return getCalenderDetail(result,id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public String merge(MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String batchNo = musicGroupPaymentCalenderDto.getBatchNo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(musicGroupPaymentCalenderList == null || musicGroupPaymentCalenderList.size() == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("[批次号]参数错误"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		PaymentCalenderStatusEnum status = musicGroupPaymentCalenderList.get(0).getStatus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(status != PaymentCalenderStatusEnum.REJECT && status != PaymentCalenderStatusEnum.DRAFT){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("{}的缴费状态不允许修改",status.getDesc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		PaymentType paymentType = musicGroupPaymentCalenderDto.getPaymentType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(paymentType != SPAN_GROUP_CLASS_ADJUST){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("操作失败:该入口不支持{}",paymentType.getDesc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentDateRange> musicGroupPaymentDateRangeList = musicGroupPaymentCalenderDto.getMusicGroupPaymentDateRangeList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(musicGroupPaymentDateRangeList.size() > 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("创建缴费失败:不支持多周期缴费"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String musicGroupId = musicGroupPaymentCalenderDto.getMusicGroupId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroup musicGroup = musicGroupDao.getLocked(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroup == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("乐团查询失败,请检查参数"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (sysUser == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("请登录"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<Long> calenderIds = musicGroupPaymentCalenderList.stream().map(MusicGroupPaymentCalender :: getId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//删除原来数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDao.delByIds(calenderIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderCourseSettingsService.deleteByMusicGroupPaymentCalenderId(calenderIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		status = PaymentCalenderStatusEnum.NO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupStudentClassAdjust adjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//获取默认的学员缴费详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<Integer> studentIdList = JSON.parseArray(adjust.getStudentIds(), Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//获取欠费学员列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroup.getId(), studentIdList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(noPaymentUserIds.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("操作失败:有欠费的学员不允许创建缴费"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//获取缴费状态在审核中或者已拒绝的缴费项目的学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroupId,batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(StringUtils.isNotEmpty(studentIds)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (Integer integer : studentIdList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(studentIds.contains(integer.toString())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalenderStudentDetail> musicGroupPaymentCalenderStudentDetails = classGroupService.queryStudentPaymentCalenders(adjust.getMasterClassGroupId(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				adjust.getClassGroupStudents(),studentIdList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		boolean containsAll = musicGroupPaymentCalenderStudentDetails.containsAll(calenderStudentDetails); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(!containsAll){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			status = AUDITING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//删除之前的记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderStudentDetailDao.delByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//保存现有记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderStudentDetailDao.batchInsert(calenderStudentDetails,batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentDateRange musicGroupPaymentDateRange = musicGroupPaymentDateRangeList.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalender musicGroupPaymentCalender = new MusicGroupPaymentCalender(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setAttribute1(musicGroupPaymentCalenderDto.getAttribute1()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setAttribute2(musicGroupPaymentCalenderDto.getAttribute2()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setDeadlinePaymentDate(musicGroupPaymentDateRange.getDeadlinePaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setMemo(musicGroupPaymentCalenderDto.getMemo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setMusicGroupId(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setMusicGroupOrganizationCourseSettingId(musicGroupPaymentCalenderDto.getMusicGroupOrganizationCourseSettingId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setOriginalTotalAmount(calenderStudentDetails.stream().map(e->e.getCourseOriginalPrice()).reduce(BigDecimal.ZERO,BigDecimal::add)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setCurrentTotalAmount(calenderStudentDetails.stream().map(e->e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO,BigDecimal::add)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setPaymentType(paymentType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setPayUserType(musicGroupPaymentCalenderDto.getPayUserType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setStartPaymentDate(musicGroupPaymentDateRange.getStartPaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setStudentIds(musicGroupPaymentCalenderDto.getStudentIds()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setOperator(sysUser.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setOrganId(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroupPaymentCalender.getStatus() != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (date.after(musicGroupPaymentCalender.getStartPaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} else if (date.after(musicGroupPaymentCalender.getDeadlinePaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OVER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 设置批次号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDto.setBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDao.insert(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalenderCourseSettings> currentMusicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalender 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.getMusicGroupPaymentCalenderCourseSettingsList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroupPaymentCalender.getStatus() != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 如果是进行中加学生 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (musicGroupPaymentCalender.getPaymentType() == PaymentType.ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				addStudent(musicGroupPaymentCalender, currentMusicGroupPaymentCalenderCourseSettings,musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}else if(musicGroupPaymentCalender.getPaymentType() == SPAN_GROUP_CLASS_ADJUST){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//如果是跨团班级合并,添加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalenderDetailService.batchAdd(musicGroupPaymentCalender,musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender,true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (status == AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 如果是审核中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Organization organization = organizationDao.get(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sendSeoMessageSource.sendSeoMessage(musicGroup.getOrganId(),new SysUserRoleEnum[]{ORGAN_MANAGER}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					null,null,MessageTypeEnum.BACKSTAGE_PAYMENT_CALENDER_AUDIT,organization.getName(), musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//删除和解冻班级,课程信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<Map> classGroupStudents = JSON.parseArray(adjust.getClassGroupStudents(),Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<Long> courseIds = JSON.parseArray(adjust.getSubLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<Long> allLockCourseIds = JSON.parseArray(adjust.getAllLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroupService.spanGroupClassAdjustPass(adjust.getMasterClassGroupId() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					,studentIdList,courseIds,classGroupStudents,allLockCourseIds,batchNo,adjust.getMasterTotalPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return batchNo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void updateNoPaymentAndZeroPaymentStatus(MusicGroupPaymentCalender musicGroupPaymentCalender,Boolean updateFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			int j = musicGroupPaymentCalenderDetailDao.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(j > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setActualNum((musicGroupPaymentCalender.getActualNum()==null?0:musicGroupPaymentCalender.getActualNum()) + j); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(updateFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public boolean makesureSchoolePaid(Long id, String memo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderDao.get(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(musicGroupPaymentCalender == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("查询缴费信息失败"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(musicGroupPaymentCalender.getPayUserType() != PayUserType.SCHOOL){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("只有学校缴费才能确认缴费状态"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.PAID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setMemo(memo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalender.setUpdateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void addStudent(MusicGroupPaymentCalender musicGroupPaymentCalender, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						   List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettingsList, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						   MusicGroup musicGroup){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//如果是进行中加学生 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String studentIdStr = musicGroupPaymentCalender.getStudentIds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (StringUtils.isNoneBlank(studentIdStr)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//当前乐团是否有预排课计划 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			MusicGroupSchoolTermCourseDetail termCourseDetail = musicGroupSchoolTermCourseDetailDao.findByCourseDateAndMusicGroupId(musicGroup.getId(), null, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = new ArrayList<MusicGroupPaymentStudentCourseDetail>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<MusicGroupPaymentCalenderActivity> calenderActivities = musicGroupPaymentCalenderActivityService.findByCalenderId(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.findByCalenderId(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (String studentId : studentIdStr.split(",")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(termCourseDetail != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					//是否已经预排部分课程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseListByMusicGroupId(musicGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if(courseSchedules.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						throw new BizException("操作失败:该乐团存在预排课课程,请优先完成预排课"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						MusicGroupSchoolTermStudentCourseDetail studentCourseDetail = new MusicGroupSchoolTermStudentCourseDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						studentCourseDetail.setMusicGroupSchoolTermCourseDetailId(termCourseDetail.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						studentCourseDetail.setUserId(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						studentCourseDetail.setMemberCourseMinutes(termCourseDetail.getTotalCourseTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupSchoolTermStudentCourseDetailDao.insert(studentCourseDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 学生加到calenderDetail 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalenderDetail.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalenderDetail.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalenderDetail.setUserId(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalenderDetailDao.insert(musicGroupPaymentCalenderDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//如果是0元那么更新fee表和studentRegistration表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					// 添加会员有效时长 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if(calenderMember != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						cloudTeacherOrder.setLevel(calenderMember.getMemberRankSettingId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						cloudTeacherOrder.setOrganId(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						cloudTeacherOrder.setType(calenderMember.getPeriod()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						cloudTeacherOrder.setStudentId(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						cloudTeacherOrder.setOrderId(musicGroup.getOrganId().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						cloudTeacherOrder.setTime(calenderMember.getNum().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						cloudTeacherOrder.setAmount(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						cloudTeacherOrder.setStatus(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						cloudTeacherOrder.setRemark("进行中乐团0元加学生"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						cloudTeacherOrder.setMusicGroupId(musicGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						cloudTeacherOrderDao.insert(cloudTeacherOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					//添加小课包 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					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(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							activityUserMapper.setUserId(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							activityUserMapper.setTeacherId(student.getTeacherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if("网管课".equals(calenderActivity.getCategoryName())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								activityUserMapper.setPracticeFlag(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								activityUserMapper.setVipFlag(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							activityUserMapperList.add(activityUserMapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						activityUserMapperService.batchInsert(activityUserMapperList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					//如果是进行中加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(Integer.parseInt(studentId), musicGroupPaymentCalender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					studentRegistration.setPaymentStatus(YES); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					studentRegistrationDao.update(studentRegistration); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					//统计变更学员数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					groupEventSource.musicGroupStudentChangeEvent(musicGroupPaymentCalender.getMusicGroupId(), StudentMusicGroupStatusEnum.NORMAL, new ArrayList<>(Arrays.asList(Integer.parseInt(studentId)))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(musicGroupPaymentCalenderCourseSettingsList != null && musicGroupPaymentCalenderCourseSettingsList.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					// 学生加课程明细 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					for(MusicGroupPaymentCalenderCourseSettings courseSettings : musicGroupPaymentCalenderCourseSettingsList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if (courseSettings.getIsStudentOptional() == true) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetail = new MusicGroupPaymentStudentCourseDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetail.setCourseType(courseSettings.getCourseType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetail.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetail.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSettings.getCourseTotalMinuties()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetail.setCourseOriginalPrice(courseSettings.getCourseOriginalPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(courseSettings.getCourseCurrentPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetail.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(courseSettings.getCourseTotalMinuties()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetail.setUserId(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentStudentCourseDetailList.add(musicGroupPaymentStudentCourseDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(musicGroupPaymentStudentCourseDetailList.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetailList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void autoUpdateMusicGroupStudentFeeStatus() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String format = DateUtil.format(date, DateUtil.DEFAULT_PATTERN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 获取距离缴费开启指定天数后的缴费明细 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String configValue = sysConfigDao.findConfigValue("push_payment_detail"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Map<Long, Long> maps = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.queryCalenderByDay(configValue, format)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (maps != null && maps.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Set<Long> calenderId = maps.keySet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<CalenderPushDto> calenderPushDtos = musicGroupPaymentCalenderDao.getCalenderPushDto(calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<Long, List<CalenderPushDto>> collect = calenderPushDtos.stream().collect(Collectors.groupingBy(CalenderPushDto::getCalenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			calenderId.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				CalenderPushDto calenderPushDto = collect.get(e).get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Map<Integer, String> receivers = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				receivers.put(calenderPushDto.getTeacherId(), calenderPushDto.getTeacherPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_DETAIL, receivers, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						null, null, calenderPushDto.getMusicGroupName(), calenderPushDto.getPaymentValidStartDate(), calenderPushDto.getPaymentValidEndDate(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						maps.get(e)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Map<Integer, String> receivers1 = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				receivers1.put(calenderPushDto.getTeacherId(), calenderPushDto.getTeacherId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_DETAIL, receivers1, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						null, "SYSTEM", calenderPushDto.getMusicGroupName(), calenderPushDto.getPaymentValidStartDate(), calenderPushDto.getPaymentValidEndDate(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						maps.get(e)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 获取离截止还有指定时间的缴费项,并发送推送消息给指定老师 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String configValue1 = sysConfigDao.findConfigValue("push_create_payment_calender"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<Long> calenderIds = musicGroupPaymentCalenderDao.queryEndIds(configValue1, format,null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (calenderIds != null && calenderIds.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<CalenderPushDto> calenderPushDtos = musicGroupPaymentCalenderDao.getCalenderPushDto(calenderIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<Long, List<CalenderPushDto>> collect = calenderPushDtos.stream().collect(Collectors.groupingBy(CalenderPushDto::getCalenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			calenderIds.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				CalenderPushDto calenderPushDto = collect.get(e).get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Map<Integer, String> receivers = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				receivers.put(calenderPushDto.getTeacherId(), calenderPushDto.getTeacherPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_CREATE, receivers, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						null, null, calenderPushDto.getMusicGroupName(), calenderPushDto.getPaymentValidStartDate(), calenderPushDto.getPaymentValidEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Map<Integer, String> receivers1 = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				receivers1.put(calenderPushDto.getTeacherId(), calenderPushDto.getTeacherId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_CREATE, receivers1, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						null, "SYSTEM", calenderPushDto.getMusicGroupName(), calenderPushDto.getPaymentValidStartDate(), calenderPushDto.getPaymentValidEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 乐团报名到期,提醒教务老师创建缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<CalenderPushDto> calenderPushDtos = musicGroupPaymentCalenderDao.getMusicCalenderPushDto(configValue1, format); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (calenderPushDtos != null && calenderPushDtos.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			calenderPushDtos.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Map<Integer, String> receivers = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				receivers.put(e.getTeacherId(), e.getTeacherPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_CREATE, receivers, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						null, null, e.getMusicGroupName(), e.getPaymentValidStartDate(), e.getPaymentValidEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Map<Integer, String> receivers1 = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				receivers1.put(e.getTeacherId(), e.getTeacherId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_CREATE, receivers1, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						null, "SYSTEM", e.getMusicGroupName(), e.getPaymentValidStartDate(), e.getPaymentValidEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public PageInfo<MusicGroupPaymentCalenderAuditDto> auditList(MusicGroupPaymentCalenderQueryInfo queryInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		PageInfo<MusicGroupPaymentCalenderAuditDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Map<String, Object> params = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MapUtil.populateMap(params, queryInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalenderAuditDto> dataList = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		int count = musicGroupPaymentCalenderDao.countAuditList(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (count > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			pageInfo.setTotal(count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			params.put("offset", pageInfo.getOffset()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			dataList = musicGroupPaymentCalenderDao.queryAuditList(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<Integer> collect = dataList.stream().map(e -> e.getOrganId()).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			collect.removeAll(Collections.singleton(null)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<Integer, String> organNameMap = getMap("organization", "id_", "name_", collect,queryInfo.getTenantId(), Integer.class, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<Integer> operatorIds = dataList.stream().map(e -> e.getOperator()).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			operatorIds.removeAll(Collections.singleton(null)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<Integer, String> realNameMap = getMap("sys_user", "id_", "real_name_", operatorIds,queryInfo.getTenantId(), Integer.class, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			dataList.forEach(e->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				e.setOrganName(organNameMap.get(e.getOrganId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				e.setOperatorName(realNameMap.get(e.getOperator())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (count == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			dataList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		pageInfo.setRows(dataList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return pageInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public MusicGroupPaymentCalenderAuditDetailDto auditListDetail(String batchNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalenderAuditDetailDto calenderAuditDetailDto = new MusicGroupPaymentCalenderAuditDetailDto(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalenderAuditDto auditDto = musicGroupPaymentCalenderDao.getAuditDetail(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		calenderAuditDetailDto.setAuditDto(auditDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//获取缴费周期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalender> groupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(groupPaymentCalenders == null || groupPaymentCalenders.size() == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("缴费项目异常,请联系管理员"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		calenderAuditDetailDto.setMusicGroupPaymentCalenders(groupPaymentCalenders); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalender paymentCalender = groupPaymentCalenders.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS && musicGroup.getStatus() != MusicGroupStatusEnum.PRE_BUILD_FEE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("创建缴费失败:已存在缴费项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 所有缴费项目已完成排课才能创建下一个缴费项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNoneBlank(orignBatchNo)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 不是进行中,只能创建一次缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MusicGroupPaymentCalender> list = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (list.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BizException("创建失败,已经存在缴费信息"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //进行中加学员拓展信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CalenderAddStudent calenderAddStudent = musicGroupPaymentBaseCalender.getCalenderAddStudent(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalender musicGroupPaymentCalender = new MusicGroupPaymentCalender(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //判断缴费项目类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroup.getStatus() == MusicGroupStatusEnum.PRE_BUILD_FEE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentBaseCalender.setPaymentType(MUSIC_APPLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (calenderAddStudent != null && calenderAddStudent.getStudentIds() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentBaseCalender.setPaymentType(ADD_STUDENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //预计缴费人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setAttribute1(calenderAddStudent.getClassGroupIds()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setStudentIds(calenderAddStudent.getStudentIds().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setExpectNum(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //校验是否可以加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                checkAddStudent(calenderAddStudent, musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (musicGroupPaymentBaseCalender.getMusicGroupOrganizationCourseSettingId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroupPaymentBaseCalender.setPaymentType(MUSIC_RENEW); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroupPaymentBaseCalender.setPaymentType(ADD_COURSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentBaseCalender.setMusicGroup(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //计算缴费项目原价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal courseOriginalAmount = musicGroupPaymentCalenderCourseSettingsService.getOriginalAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal memberOriginalAmount = musicGroupPaymentCalenderMemberService.getOriginalAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal repairOriginalAmount = musicGroupPaymentCalenderRepairService.getOriginalAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal activityOriginalAmount = musicGroupPaymentCalenderActivityService.getOriginalAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal originalTotalAmount = courseOriginalAmount.add(memberOriginalAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .add(activityOriginalAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .add(repairOriginalAmount).setScale(0, BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //计算缴费项目总金额(前端录入) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal courseActualAmount = musicGroupPaymentCalenderCourseSettingsService.getActualAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal memberActualAmount = musicGroupPaymentCalenderMemberService.getActualAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal repairActualAmount = musicGroupPaymentCalenderRepairService.getActualAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal activityActualAmount = musicGroupPaymentCalenderActivityService.getActualAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal actualTotalAmount = courseActualAmount.add(memberActualAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .add(repairActualAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .add(activityActualAmount).setScale(0, BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PaymentCalenderStatusEnum status; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentBaseCalender.getPayUserType() == SCHOOL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            status = AUDITING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //计算项目原现价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal courseCurrentAmount = musicGroupPaymentCalenderCourseSettingsService.getCurrentAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal memberCurrentAmount = musicGroupPaymentCalenderMemberService.getCurrentAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal repairCurrentAmount = musicGroupPaymentCalenderRepairService.getCurrentAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal activityCurrentAmount = musicGroupPaymentCalenderActivityService.getCurrentAmount(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal currentTotalAmount = courseCurrentAmount.add(memberCurrentAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .add(repairCurrentAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .add(activityCurrentAmount).setScale(0, BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            status = actualTotalAmount.compareTo(currentTotalAmount) == 0 ? NO : AUDITING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setDeadlinePaymentDate(musicGroupPaymentBaseCalender.getDeadlinePaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setMemo(musicGroupPaymentBaseCalender.getMemo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setMusicGroupId(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setMusicGroupOrganizationCourseSettingId(musicGroupPaymentBaseCalender.getMusicGroupOrganizationCourseSettingId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setPayUserType(musicGroupPaymentBaseCalender.getPayUserType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setStartPaymentDate(musicGroupPaymentBaseCalender.getStartPaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setOperator(sysUser.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setPaymentType(musicGroupPaymentBaseCalender.getPaymentType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setCurrentTotalAmount(actualTotalAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setOriginalTotalAmount(originalTotalAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setOrganId(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalender.getStatus() != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (date.after(musicGroupPaymentCalender.getStartPaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (date.after(musicGroupPaymentCalender.getDeadlinePaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OVER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 设置批次号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String batchNo = idGeneratorService.generatorId() + ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDao.insert(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Long calenderId = musicGroupPaymentCalender.getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //保存会员缴费信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentBaseCalender.getCalenderMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (calenderMember != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calenderMember = musicGroupPaymentCalenderMemberService.initBean(calenderMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calenderMember.setOriginalAmount(memberOriginalAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calenderMember.setCalenderId(calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (musicGroupPaymentBaseCalender.getPayUserType() == SCHOOL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                calenderMember.setActualAmount(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentCalenderMemberService.insert(calenderMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //保存乐保缴费信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalenderRepair musicRepair = musicGroupPaymentBaseCalender.getMusicRepair(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicRepair != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicRepair.setOriginalAmount(repairOriginalAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicRepair.setCalenderId(calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (musicGroupPaymentBaseCalender.getPayUserType() == SCHOOL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicRepair.setActualAmount(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentCalenderRepairService.insert(musicRepair); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //保存活动缴费信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalenderActivity> calenderActivityList = musicGroupPaymentBaseCalender.getCalenderActivityList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (calenderActivityList != null && calenderActivityList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentCalenderActivityService.initBean(calenderActivityList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (musicGroupPaymentBaseCalender.getPayUserType() == SCHOOL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                calenderActivityList.forEach(e -> e.setActualAmount(BigDecimal.ZERO)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentCalenderActivityService.batchInsert(musicGroupPaymentBaseCalender, calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //保存课程费用列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setMusicGroupPaymentCalenderCourseSettingsList(musicGroupPaymentBaseCalender.getMusicGroupPaymentCalenderCourseSettingsList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderCourseSettingsService.batchInsert(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 如果是报名,需要修改乐团状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentBaseCalender.getPaymentType() == MUSIC_APPLY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (status != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroup.setStatus(MusicGroupStatusEnum.APPLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 记录操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "报名缴费项目创建成功(创建缴费中 -> 报名中)", sysUser.getId(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroup.setStatus(MusicGroupStatusEnum.FEE_AUDIT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 记录操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "报名缴费项目创建成功(创建缴费 -> 费用审核中)", sysUser.getId(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroup.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupDao.update(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (status == AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 如果是审核中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Organization organization = organizationDao.get(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sendSeoMessageSource.sendSeoMessage(musicGroup.getOrganId(), new SysUserRoleEnum[]{ORGAN_MANAGER}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    null, null, MessageTypeEnum.BACKSTAGE_PAYMENT_CALENDER_AUDIT, organization.getName(), musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (musicGroupPaymentCalender.getPaymentType() == PaymentType.ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                addStudent(musicGroupPaymentCalender, musicGroupPaymentCalender.getMusicGroupPaymentCalenderCourseSettingsList(), musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 学生加到班级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                classGroupService.addStudentToClassGroupAndCourseArranging(calenderAddStudent.getStudentIds(), calenderAddStudent.getClassGroupIds(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        batchNo, musicGroupPaymentBaseCalender.getMusicGroupPaymentCalenderCourseSettingsList(), musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ExecutorService executor = Executors.newFixedThreadPool(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CompletableFuture.runAsync(() -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }, executor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                executor.shutdown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return batchNo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //校验缴费项目进行中加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void checkAddStudent(CalenderAddStudent calenderAddStudent, MusicGroup musicGroup) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取缴费状态在审核中或者已拒绝的缴费项目的学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer userId = calenderAddStudent.getStudentIds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //该学员是否在其他的会员团 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            boolean hasMemberGroup = studentRegistrationDao.checkHasMemberGroup(musicGroup.getId(), userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (hasMemberGroup) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BizException("操作失败:学员已在其他系统收费乐团中,不可报名该乐团请联系教务老师"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroup.getId(), null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotEmpty(studentIds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (studentIds.contains(userId.toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BizException("创建缴费失败:所选学员有待审核或已拒绝的缴费项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = musicGroupPaymentCalenderDetailDao.queryNotPaymentStudentByUserIdAndMusicGroupId(userId, musicGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalenderDetailList != null && musicGroupPaymentCalenderDetailList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("创建缴费失败:已存在缴费项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Map<String, Object> getCalenderDetail(Map<String, Object> result, Long calenderId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //课程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result.put("course", musicGroupPaymentCalenderCourseSettingsService.queryCalenderCourseSettings(calenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //乐保 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result.put("repair", musicGroupPaymentCalenderRepairService.findByCalenderId(calenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.findByCalenderId(calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //会员信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result.put("member", calenderMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //活动相关信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result.put("activity", musicGroupPaymentCalenderActivityService.findByCalenderId(calenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (calenderMember != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result.put("memberPrivilegesItemList", memberRankPrivilegesService.queryByMemberRankId(calenderMember.getMemberRankSettingId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Map<String, Object> getDetail(Long id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Object> result = new HashMap<>(10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取缴费项目详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //统计预计缴费人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, Long> expectNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countExpectNum(id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (expectNumMap != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calender.setExpectNum(expectNumMap.get(id) == null ? 0 : expectNumMap.get(id).intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //统计实际缴费人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, Long> actualNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countActualNum(id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (actualNumMap != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calender.setActualNum(actualNumMap.get(id) == null ? 0 : actualNumMap.get(id).intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (calender.getOrganId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Organization organization = organizationDao.get(calender.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calender.setOrganName(organization.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotEmpty(calender.getMusicGroupId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calender.setMusicGroupName(musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result.put("calender", calender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //汇总收款金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal sumActualAmount = musicGroupPaymentCalenderDetailDao.sumActualAmount(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result.put("sumActualAmount", sumActualAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //进行中加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (calender.getPaymentType() == ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String studentIds = calender.getStudentIds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StringUtils.isNotEmpty(studentIds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SysUser sysUser = studentDao.getUser(Integer.parseInt(studentIds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                result.put("phone", sysUser.getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                result.put("username", sysUser.getUsername()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取跨团合班学员缴费详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result.put("musicMerger", musicGroupPaymentCalenderStudentDetailDao.findByBatchNo(calender.getBatchNo())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return getCalenderDetail(result, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public String merge(MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String batchNo = musicGroupPaymentCalenderDto.getBatchNo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalenderList == null || musicGroupPaymentCalenderList.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("[批次号]参数错误"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PaymentCalenderStatusEnum status = musicGroupPaymentCalenderList.get(0).getStatus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (status != PaymentCalenderStatusEnum.REJECT && status != PaymentCalenderStatusEnum.DRAFT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("{}的缴费状态不允许修改", status.getDesc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PaymentType paymentType = musicGroupPaymentCalenderDto.getPaymentType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (paymentType != SPAN_GROUP_CLASS_ADJUST) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("操作失败:该入口不支持{}", paymentType.getDesc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentDateRange> musicGroupPaymentDateRangeList = musicGroupPaymentCalenderDto.getMusicGroupPaymentDateRangeList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentDateRangeList.size() > 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("创建缴费失败:不支持多周期缴费"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String musicGroupId = musicGroupPaymentCalenderDto.getMusicGroupId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroup musicGroup = musicGroupDao.getLocked(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroup == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("乐团查询失败,请检查参数"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (sysUser == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("请登录"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> calenderIds = musicGroupPaymentCalenderList.stream().map(MusicGroupPaymentCalender::getId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //删除原来数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDao.delByIds(calenderIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderCourseSettingsService.deleteByMusicGroupPaymentCalenderId(calenderIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        status = PaymentCalenderStatusEnum.NO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupStudentClassAdjust adjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取默认的学员缴费详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Integer> studentIdList = JSON.parseArray(adjust.getStudentIds(), Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取欠费学员列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroup.getId(), studentIdList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (noPaymentUserIds.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("操作失败:有欠费的学员不允许创建缴费"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取缴费状态在审核中或者已拒绝的缴费项目的学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroupId, batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotEmpty(studentIds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Integer integer : studentIdList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (studentIds.contains(integer.toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalenderStudentDetail> musicGroupPaymentCalenderStudentDetails = classGroupService.queryStudentPaymentCalenders(adjust.getMasterClassGroupId(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                adjust.getClassGroupStudents(), studentIdList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        boolean containsAll = musicGroupPaymentCalenderStudentDetails.containsAll(calenderStudentDetails); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!containsAll) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            status = AUDITING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //删除之前的记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderStudentDetailDao.delByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //保存现有记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderStudentDetailDao.batchInsert(calenderStudentDetails, batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentDateRange musicGroupPaymentDateRange = musicGroupPaymentDateRangeList.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalender musicGroupPaymentCalender = new MusicGroupPaymentCalender(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setAttribute1(musicGroupPaymentCalenderDto.getAttribute1()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setAttribute2(musicGroupPaymentCalenderDto.getAttribute2()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setDeadlinePaymentDate(musicGroupPaymentDateRange.getDeadlinePaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setMemo(musicGroupPaymentCalenderDto.getMemo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setMusicGroupId(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setMusicGroupOrganizationCourseSettingId(musicGroupPaymentCalenderDto.getMusicGroupOrganizationCourseSettingId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setOriginalTotalAmount(calenderStudentDetails.stream().map(e -> e.getCourseOriginalPrice()).reduce(BigDecimal.ZERO, BigDecimal::add)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setCurrentTotalAmount(calenderStudentDetails.stream().map(e -> e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO, BigDecimal::add)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setPaymentType(paymentType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setPayUserType(musicGroupPaymentCalenderDto.getPayUserType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setStartPaymentDate(musicGroupPaymentDateRange.getStartPaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setStudentIds(musicGroupPaymentCalenderDto.getStudentIds()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setOperator(sysUser.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setOrganId(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalender.getStatus() != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (date.after(musicGroupPaymentCalender.getStartPaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (date.after(musicGroupPaymentCalender.getDeadlinePaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OVER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 设置批次号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDto.setBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDao.insert(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalenderCourseSettings> currentMusicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalender 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .getMusicGroupPaymentCalenderCourseSettingsList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalender.getStatus() != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 如果是进行中加学生 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (musicGroupPaymentCalender.getPaymentType() == PaymentType.ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                addStudent(musicGroupPaymentCalender, currentMusicGroupPaymentCalenderCourseSettings, musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (musicGroupPaymentCalender.getPaymentType() == SPAN_GROUP_CLASS_ADJUST) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //如果是跨团班级合并,添加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalenderDetailService.batchAdd(musicGroupPaymentCalender, musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (status == AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 如果是审核中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Organization organization = organizationDao.get(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sendSeoMessageSource.sendSeoMessage(musicGroup.getOrganId(), new SysUserRoleEnum[]{ORGAN_MANAGER}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    null, null, MessageTypeEnum.BACKSTAGE_PAYMENT_CALENDER_AUDIT, organization.getName(), musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //删除和解冻班级,课程信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Map> classGroupStudents = JSON.parseArray(adjust.getClassGroupStudents(), Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> courseIds = JSON.parseArray(adjust.getSubLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> allLockCourseIds = JSON.parseArray(adjust.getAllLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            classGroupService.spanGroupClassAdjustPass(adjust.getMasterClassGroupId() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    , studentIdList, courseIds, classGroupStudents, allLockCourseIds, batchNo, adjust.getMasterTotalPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return batchNo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void updateNoPaymentAndZeroPaymentStatus(MusicGroupPaymentCalender musicGroupPaymentCalender, Boolean updateFlag) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int j = musicGroupPaymentCalenderDetailDao.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (j > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setActualNum((musicGroupPaymentCalender.getActualNum() == null ? 0 : musicGroupPaymentCalender.getActualNum()) + j); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (updateFlag) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean makesureSchoolePaid(Long id, String memo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderDao.get(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalender == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("查询缴费信息失败"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalender.getPayUserType() != PayUserType.SCHOOL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("只有学校缴费才能确认缴费状态"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.PAID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setMemo(memo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalender.setUpdateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void addStudent(MusicGroupPaymentCalender musicGroupPaymentCalender, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettingsList, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           MusicGroup musicGroup) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果是进行中加学生 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String studentIdStr = musicGroupPaymentCalender.getStudentIds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNoneBlank(studentIdStr)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //当前乐团是否有预排课计划 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MusicGroupSchoolTermCourseDetail termCourseDetail = musicGroupSchoolTermCourseDetailDao.findByCourseDateAndMusicGroupId(musicGroup.getId(), null, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = new ArrayList<MusicGroupPaymentStudentCourseDetail>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MusicGroupPaymentCalenderActivity> calenderActivities = musicGroupPaymentCalenderActivityService.findByCalenderId(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.findByCalenderId(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (String studentId : studentIdStr.split(",")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (termCourseDetail != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //是否已经预排部分课程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseListByMusicGroupId(musicGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (courseSchedules.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        throw new BizException("操作失败:该乐团存在预排课课程,请优先完成预排课"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        MusicGroupSchoolTermStudentCourseDetail studentCourseDetail = new MusicGroupSchoolTermStudentCourseDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        studentCourseDetail.setMusicGroupSchoolTermCourseDetailId(termCourseDetail.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        studentCourseDetail.setUserId(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        studentCourseDetail.setMemberCourseMinutes(termCourseDetail.getTotalCourseTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupSchoolTermStudentCourseDetailDao.insert(studentCourseDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 学生加到calenderDetail 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalenderDetail.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalenderDetail.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalenderDetail.setUserId(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalenderDetailDao.insert(musicGroupPaymentCalenderDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //如果是0元那么更新fee表和studentRegistration表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 添加会员有效时长 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (calenderMember != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cloudTeacherOrder.setLevel(calenderMember.getMemberRankSettingId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cloudTeacherOrder.setOrganId(musicGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cloudTeacherOrder.setType(calenderMember.getPeriod()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cloudTeacherOrder.setStudentId(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cloudTeacherOrder.setOrderId(musicGroup.getOrganId().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cloudTeacherOrder.setTime(calenderMember.getNum().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cloudTeacherOrder.setAmount(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cloudTeacherOrder.setStatus(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cloudTeacherOrder.setRemark("进行中乐团0元加学生"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cloudTeacherOrder.setMusicGroupId(musicGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cloudTeacherOrderDao.insert(cloudTeacherOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //添加小课包 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    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(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            activityUserMapper.setUserId(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            activityUserMapper.setTeacherId(student.getTeacherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if ("网管课".equals(calenderActivity.getCategoryName())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                activityUserMapper.setPracticeFlag(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                activityUserMapper.setVipFlag(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            activityUserMapperList.add(activityUserMapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        activityUserMapperService.batchInsert(activityUserMapperList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //如果是进行中加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(Integer.parseInt(studentId), musicGroupPaymentCalender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    studentRegistration.setPaymentStatus(YES); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    studentRegistrationDao.update(studentRegistration); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //统计变更学员数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    groupEventSource.musicGroupStudentChangeEvent(musicGroupPaymentCalender.getMusicGroupId(), StudentMusicGroupStatusEnum.NORMAL, new ArrayList<>(Arrays.asList(Integer.parseInt(studentId)))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (musicGroupPaymentCalenderCourseSettingsList != null && musicGroupPaymentCalenderCourseSettingsList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 学生加课程明细 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (MusicGroupPaymentCalenderCourseSettings courseSettings : musicGroupPaymentCalenderCourseSettingsList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (courseSettings.getIsStudentOptional() == true) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetail = new MusicGroupPaymentStudentCourseDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetail.setCourseType(courseSettings.getCourseType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetail.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetail.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSettings.getCourseTotalMinuties()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetail.setCourseOriginalPrice(courseSettings.getCourseOriginalPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(courseSettings.getCourseCurrentPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetail.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(courseSettings.getCourseTotalMinuties()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetail.setUserId(Integer.parseInt(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentStudentCourseDetailList.add(musicGroupPaymentStudentCourseDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (musicGroupPaymentStudentCourseDetailList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetailList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void autoUpdateMusicGroupStudentFeeStatus() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String format = DateUtil.format(date, DateUtil.DEFAULT_PATTERN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 获取距离缴费开启指定天数后的缴费明细 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String configValue = sysConfigDao.findConfigValue("push_payment_detail"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, Long> maps = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.queryCalenderByDay(configValue, format)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (maps != null && maps.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Set<Long> calenderId = maps.keySet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<CalenderPushDto> calenderPushDtos = musicGroupPaymentCalenderDao.getCalenderPushDto(calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Long, List<CalenderPushDto>> collect = calenderPushDtos.stream().collect(Collectors.groupingBy(CalenderPushDto::getCalenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calenderId.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CalenderPushDto calenderPushDto = collect.get(e).get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<Integer, String> receivers = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                receivers.put(calenderPushDto.getTeacherId(), calenderPushDto.getTeacherPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_DETAIL, receivers, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        null, null, calenderPushDto.getMusicGroupName(), calenderPushDto.getPaymentValidStartDate(), calenderPushDto.getPaymentValidEndDate(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        maps.get(e)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<Integer, String> receivers1 = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                receivers1.put(calenderPushDto.getTeacherId(), calenderPushDto.getTeacherId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_DETAIL, receivers1, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        null, "SYSTEM", calenderPushDto.getMusicGroupName(), calenderPushDto.getPaymentValidStartDate(), calenderPushDto.getPaymentValidEndDate(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        maps.get(e)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 获取离截止还有指定时间的缴费项,并发送推送消息给指定老师 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String configValue1 = sysConfigDao.findConfigValue("push_create_payment_calender"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> calenderIds = musicGroupPaymentCalenderDao.queryEndIds(configValue1, format, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (calenderIds != null && calenderIds.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<CalenderPushDto> calenderPushDtos = musicGroupPaymentCalenderDao.getCalenderPushDto(calenderIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Long, List<CalenderPushDto>> collect = calenderPushDtos.stream().collect(Collectors.groupingBy(CalenderPushDto::getCalenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calenderIds.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CalenderPushDto calenderPushDto = collect.get(e).get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<Integer, String> receivers = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                receivers.put(calenderPushDto.getTeacherId(), calenderPushDto.getTeacherPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_CREATE, receivers, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        null, null, calenderPushDto.getMusicGroupName(), calenderPushDto.getPaymentValidStartDate(), calenderPushDto.getPaymentValidEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<Integer, String> receivers1 = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                receivers1.put(calenderPushDto.getTeacherId(), calenderPushDto.getTeacherId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_CREATE, receivers1, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        null, "SYSTEM", calenderPushDto.getMusicGroupName(), calenderPushDto.getPaymentValidStartDate(), calenderPushDto.getPaymentValidEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 乐团报名到期,提醒教务老师创建缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CalenderPushDto> calenderPushDtos = musicGroupPaymentCalenderDao.getMusicCalenderPushDto(configValue1, format); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (calenderPushDtos != null && calenderPushDtos.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calenderPushDtos.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<Integer, String> receivers = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                receivers.put(e.getTeacherId(), e.getTeacherPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_CREATE, receivers, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        null, null, e.getMusicGroupName(), e.getPaymentValidStartDate(), e.getPaymentValidEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<Integer, String> receivers1 = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                receivers1.put(e.getTeacherId(), e.getTeacherId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SYSTEM_SMS_PUSH_PAYMENT_CREATE, receivers1, null, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        null, "SYSTEM", e.getMusicGroupName(), e.getPaymentValidStartDate(), e.getPaymentValidEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public PageInfo<MusicGroupPaymentCalenderAuditDto> auditList(MusicGroupPaymentCalenderQueryInfo queryInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PageInfo<MusicGroupPaymentCalenderAuditDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Object> params = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MapUtil.populateMap(params, queryInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalenderAuditDto> dataList = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int count = musicGroupPaymentCalenderDao.countAuditList(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (count > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pageInfo.setTotal(count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            params.put("offset", pageInfo.getOffset()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dataList = musicGroupPaymentCalenderDao.queryAuditList(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Integer> collect = dataList.stream().map(e -> e.getOrganId()).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            collect.removeAll(Collections.singleton(null)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Integer, String> organNameMap = getMap("organization", "id_", "name_", collect, queryInfo.getTenantId(), Integer.class, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Integer> operatorIds = dataList.stream().map(e -> e.getOperator()).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            operatorIds.removeAll(Collections.singleton(null)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Integer, String> realNameMap = getMap("sys_user", "id_", "real_name_", operatorIds, queryInfo.getTenantId(), Integer.class, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dataList.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                e.setOrganName(organNameMap.get(e.getOrganId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                e.setOperatorName(realNameMap.get(e.getOperator())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (count == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dataList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pageInfo.setRows(dataList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return pageInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public MusicGroupPaymentCalenderAuditDetailDto auditListDetail(String batchNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalenderAuditDetailDto calenderAuditDetailDto = new MusicGroupPaymentCalenderAuditDetailDto(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalenderAuditDto auditDto = musicGroupPaymentCalenderDao.getAuditDetail(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calenderAuditDetailDto.setAuditDto(auditDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取缴费周期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalender> groupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (groupPaymentCalenders == null || groupPaymentCalenders.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("缴费项目异常,请联系管理员"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calenderAuditDetailDto.setMusicGroupPaymentCalenders(groupPaymentCalenders); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalender paymentCalender = groupPaymentCalenders.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //		if(paymentCalender.getMemberRankSettingId() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //			MemberRankSetting memberRankSetting = memberRankSettingDao.get(paymentCalender.getMemberRankSettingId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //			if(memberRankSetting != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //				paymentCalender.setMemberRankSettingName(memberRankSetting.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(paymentCalender.getPaymentType() == ADD_STUDENT){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				String studentIds = groupPaymentCalenders.get(0).getStudentIds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(StringUtils.isNotEmpty(studentIds)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(studentIds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					calenderAuditDetailDto.setPhone(sysUser.getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					calenderAuditDetailDto.setUsername(sysUser.getUsername()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}catch (Exception e){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//获取收费标准 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		calenderAuditDetailDto.setMusicGroupPaymentCalenderCourseSettings(musicGroupPaymentCalenderCourseSettingsService.queryCalenderCourseSettingsByBatchNo(batchNo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//获取跨团合班学员缴费详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		calenderAuditDetailDto.setMusicGroupPaymentCalenderStudentDetails(musicGroupPaymentCalenderStudentDetailDao.findByBatchNo(batchNo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return calenderAuditDetailDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//审核通过后自动排课 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void autoClassGroupAdjust(MusicGroupStudentClassAdjust musicGroupStudentClassAdjust){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(musicGroupStudentClassAdjust.getBatchNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(musicGroupPaymentCalender.getStatus() == AUDITING || musicGroupPaymentCalender.getStatus() == REJECT){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<ClassGroup4MixDto> classGroup4MixDtos = JSON.parseArray(musicGroupStudentClassAdjust.getNewClassGroupJson(), ClassGroup4MixDto.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String musicGroupId = musicGroupPaymentCalenders.get(0).getMusicGroupId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroup musicGroup = musicGroupDao.get(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (MusicGroupPaymentCalender calender : musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//缴费项目添加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			int[] ints = Arrays.stream(calender.getStudentIds().split(",")).mapToInt(Integer::parseInt).toArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Set<Integer> list2 = Arrays.stream(ints).boxed().collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentCalenderDetailService.batchAdd(calender.getId(),list2,musicGroup,false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//每种课程类型单独排课 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ClassGroup classGroup = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroup4MixDto.setClassGroup(classGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroup4MixDto.setMusicGroupStudentClassAdjustId(musicGroupStudentClassAdjust.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroup4MixDto.setClassCourseMinute(musicGroupStudentClassAdjust.getClassCourseMinute()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroup = classGroupService.classGroupAdjust2(classGroup4MixDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//排课完成后删除所选课程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<Long> courseIds = JSON.parseArray(musicGroupStudentClassAdjust.getSubLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<Integer> studentIds = JSON.parseArray(musicGroupStudentClassAdjust.getStudentIds(), Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds,studentIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//解冻课程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<Long> allCourseIds = JSON.parseArray(musicGroupStudentClassAdjust.getAllLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		courseScheduleDao.batchUpdateLockByCourseIds(allCourseIds,0,null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//解冻班级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<Integer> classGroupIds = JSON.parseArray(musicGroupStudentClassAdjust.getClassGroupIds(), Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds,0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//删除班级学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupStudentClassAdjustDao.update(musicGroupStudentClassAdjust); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String classGroupStudents = musicGroupStudentClassAdjust.getClassGroupStudents(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(StringUtils.isNotEmpty(classGroupStudents)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<Map> maps = JSON.parseArray(classGroupStudents, Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (Map<Integer, String> classGroupStudent : maps) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Set<Integer> integers = classGroupStudent.keySet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				for (Integer integer : integers) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					List<Integer> collect = Arrays.asList(classGroupStudent.get(integer).split(",")).stream().map(e -> Integer.parseInt(e)).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					//学员退出群聊 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					imGroupMemberService.quit(integer.longValue(),collect); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					classGroupStudentMapperDao.deleteByClassGroupIdAndStudents(integer,classGroupStudent.get(integer)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//获取没有学员的课程列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<Long> delCourseIds = courseScheduleDao.findNoStudentCourseIds(courseIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(delCourseIds != null && delCourseIds.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//删除课程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			courseScheduleDao.deleteCourseSchedulesByClassGroupIds(delCourseIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//删除教师考勤 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			teacherAttendanceDao.batchDeleteByCourseSchedules(delCourseIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//删除教师课酬 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(delCourseIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		classGroupService.batchUpdateTeacherSalary(classGroupIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		imUserFriendService.refreshGroupImUserFriend(musicGroupId,GroupType.MUSIC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void auditPass(String batchNs,String auditMemo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String[] split = batchNs.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (String batchNo : split) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(musicGroupPaymentCalenders == null || musicGroupPaymentCalenders.size() == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				throw new BizException("缴费项目不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			MusicGroupPaymentCalender calender = musicGroupPaymentCalenders.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//如果是报名项目,将乐团改为审核中,缴费项目修改状态,审核状态改为审核通过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(musicGroupPaymentCalender.getPayUserType() == SCHOOL){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if(musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.PAID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}else if (date.after(musicGroupPaymentCalender.getStartPaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}else if (date.after(musicGroupPaymentCalender.getDeadlinePaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OVER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setAuditMemo(auditMemo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (musicGroupPaymentCalender.getPaymentType() == PaymentType.ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroupPaymentCalender.setExpectNum(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalenderCourseSettingsService.queryCalenderCourseSettings(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					addStudent(musicGroupPaymentCalender,musicGroupPaymentCalenderCourseSettings,musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(calender.getPaymentType() == ADD_STUDENT || calender.getPaymentType() == SPAN_GROUP_CLASS_ADJUST){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 所有缴费项目已完成排课才能创建下一个缴费项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<String> batchNoList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				batchNoList.add(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(calender.getMusicGroupId(), null, null,batchNoList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (StringUtils.isNoneBlank(orignBatchNo)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					throw new BizException("{} 存在未排课的缴费项目,请先完成排课再操作",musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<Integer> userIds = Arrays.stream(calender.getStudentIds().split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//获取欠费学员列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(calender.getMusicGroupId(),userIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(noPaymentUserIds.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					throw new BizException("{} 有欠费的学员不允许创建缴费",musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//获取缴费状态在审核中或者已拒绝的缴费项目的学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(calender.getMusicGroupId(),batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(StringUtils.isNotEmpty(studentIds)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					for (Integer integer : userIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if(studentIds.contains(integer.toString())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							throw new BizException("{} 的 {} 缴费项目,所选学员有待审核或已拒绝的缴费项目",musicGroup.getName(),calender.getPaymentType().getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//如果是报名,并且所有的报名都审核通过,需要修改乐团状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (calender.getPaymentType() == MUSIC_APPLY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//统计乐团还在审核中或者审核被拒的缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				int count = musicGroupPaymentCalenderDao.countAuditReject(calender.getMusicGroupId(),calender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(count == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroup.setStatus(MusicGroupStatusEnum.APPLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroup.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroupDao.update(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if(sysUser == null || sysUser.getId() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						throw new BizException("请重新登录"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					//记录操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroup.getId(), "报名缴费项目通过(费用审核中 -> 报名中)", sysUser.getId(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} else if (calender.getPaymentType() == ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 学生加到班级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				String classGroupIdStr = calender.getAttribute1(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (StringUtils.isNotBlank(classGroupIdStr)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					classGroupService.addStudentToClassGroupAndCourseArranging(Integer.parseInt(calender.getStudentIds()), classGroupIdStr, batchNo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							musicGroupPaymentCalenderCourseSettingsService.queryCalenderCourseSettingsByBatchNo(batchNo),musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				MusicGroupStudentClassAdjust musicGroupStudentClassAdjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(musicGroupStudentClassAdjust != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					//如果是合班缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					autoClassGroupAdjust(musicGroupStudentClassAdjust); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}else if(calender.getPaymentType() == SPAN_GROUP_CLASS_ADJUST){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//删除和解冻班级,课程信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				MusicGroupStudentClassAdjust adjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<Map> classGroupStudents = JSON.parseArray(adjust.getClassGroupStudents(),Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<Integer> studentIds = JSON.parseArray(adjust.getStudentIds(), Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<Long> courseIds = JSON.parseArray(adjust.getSubLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<Long> allLockCourseIds = JSON.parseArray(adjust.getAllLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//如果是跨团班级合并,添加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalenderDetailService.batchAdd(calender,musicGroupPaymentCalenderStudentDetailDao.findByBatchNo(batchNo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				classGroupService.spanGroupClassAdjustPass(adjust.getMasterClassGroupId() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						,studentIds,courseIds,classGroupStudents,allLockCourseIds,batchNo,adjust.getMasterTotalPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender,false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenders); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (calender.getPaymentType() == ADD_STUDENT){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				imUserFriendService.refreshGroupImUserFriend(calender.getMusicGroupId(),GroupType.MUSIC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void auditRefuse(String batchNs,String auditMemo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(sysUser == null || sysUser.getId() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("请重新登录"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String[] split = batchNs.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (String batchNo : split) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(musicGroupPaymentCalenders == null || musicGroupPaymentCalenders.size() == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				throw new BizException("缴费项目不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.REJECT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalender.setAuditMemo(auditMemo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			MusicGroupPaymentCalender calender = musicGroupPaymentCalenders.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//如果是报名,并且所有的报名都审核通过,需要修改乐团状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (calender.getPaymentType() == MUSIC_APPLY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroup.setStatus(MusicGroupStatusEnum.PRE_BUILD_FEE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroup.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupDao.update(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//记录操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroup.getId(), "报名缴费项目失败(费用审核中 -> 审核拒绝)", sysUser.getId(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenders); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//推送待续费通知 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void pushWaitRenewMessage(Long calenderId,MusicGroup musicGroup,Set<Integer> studentIds){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(studentIds == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			studentIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentStudentIds(calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (studentIds.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			StringBuffer memo = new StringBuffer("4?").append(baseUrl).append("/#/musicGroupRenew?calenderId=").append(calenderId).append("&id=").append(musicGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<Integer, String> push = new HashMap<>(studentIds.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			studentIds.forEach(e->push.put(e,e.toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 发送续费通知 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					null, 0, memo.toString(), "STUDENT", musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//获取未缴费且不是0元的学员列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<Integer,String> studentMaps = MapUtil.convertMybatisMap(musicGroupPaymentCalenderDetailDao.queryNoPaymentAndNotZeroStudent(calenderId,studentIds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(studentMaps.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_WAIT_RENEW_MESSAGE, studentMaps, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						null, 0, memo.toString(), null, musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void revoke(String batchNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalender> calenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(calenders.size() == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("缴费批次不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		calenders.forEach(e->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(e.getPaymentType() == ADD_STUDENT || e.getPaymentType() == SPAN_GROUP_CLASS_ADJUST){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				throw new BizException("{} 的缴费项目不允许撤回",e.getStatus().getDesc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(e.getStatus() != AUDITING){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				throw new BizException("{} 的缴费状态不允许撤回",e.getStatus().getDesc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(e.getPaymentType() == MUSIC_APPLY){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//如果是报名,并且所有的报名都审核通过,需要修改乐团状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				MusicGroup musicGroup = musicGroupDao.get(e.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroup.setStatus(MusicGroupStatusEnum.PRE_BUILD_FEE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroup.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupDao.update(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//记录操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroup.getId(), "报名缴费项目撤回(费用审核中 -> 撤回)", sysUser.getId(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			e.setStatus(DRAFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDao.batchUpdate(calenders); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public List<MusicGroupPaymentCalender> findByBatchNo(String batchNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public PageInfo<MusicGroupPaymentCalenderResultDto> queryCalenderPage(MusicGroupPaymentCalenderQueryInfo queryInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		PageInfo<MusicGroupPaymentCalenderResultDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Map<String, Object> params = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MapUtil.populateMap(params, queryInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalenderResultDto> dataList = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		int count = musicGroupPaymentCalenderDao.countCalender(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (count > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			pageInfo.setTotal(count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			params.put("offset", pageInfo.getOffset()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			dataList = musicGroupPaymentCalenderDao.queryCalenderPage(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Set<Integer> organIdList = dataList.stream().map(e -> e.getOrganId()).collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<Integer, String> organNameMap = getMap("organization", "id_", "name_", organIdList,queryInfo.getTenantId(), Integer.class, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<Integer> operatorIds = dataList.stream().map(e -> e.getOperator()).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			operatorIds.removeAll(Collections.singleton(null)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<Integer, String> realNameMap = getMap("sys_user", "id_", "real_name_", operatorIds,queryInfo.getTenantId(), Integer.class, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			dataList.forEach(e->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				e.setOrganName(organNameMap.get(e.getOrganId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				e.setOperatorName(realNameMap.get(e.getOperator())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (count == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			dataList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		pageInfo.setRows(dataList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return pageInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (paymentCalender.getPaymentType() == ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String studentIds = groupPaymentCalenders.get(0).getStudentIds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (StringUtils.isNotEmpty(studentIds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(studentIds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    calenderAuditDetailDto.setPhone(sysUser.getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    calenderAuditDetailDto.setUsername(sysUser.getUsername()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取收费标准 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calenderAuditDetailDto.setMusicGroupPaymentCalenderCourseSettings(musicGroupPaymentCalenderCourseSettingsService.queryCalenderCourseSettingsByBatchNo(batchNo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取跨团合班学员缴费详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calenderAuditDetailDto.setMusicGroupPaymentCalenderStudentDetails(musicGroupPaymentCalenderStudentDetailDao.findByBatchNo(batchNo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return calenderAuditDetailDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //审核通过后自动排课 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void autoClassGroupAdjust(MusicGroupStudentClassAdjust musicGroupStudentClassAdjust) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(musicGroupStudentClassAdjust.getBatchNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (musicGroupPaymentCalender.getStatus() == AUDITING || musicGroupPaymentCalender.getStatus() == REJECT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ClassGroup4MixDto> classGroup4MixDtos = JSON.parseArray(musicGroupStudentClassAdjust.getNewClassGroupJson(), ClassGroup4MixDto.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String musicGroupId = musicGroupPaymentCalenders.get(0).getMusicGroupId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroup musicGroup = musicGroupDao.get(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (MusicGroupPaymentCalender calender : musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //缴费项目添加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int[] ints = Arrays.stream(calender.getStudentIds().split(",")).mapToInt(Integer::parseInt).toArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Set<Integer> list2 = Arrays.stream(ints).boxed().collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentCalenderDetailService.batchAdd(calender.getId(), list2, musicGroup, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //每种课程类型单独排课 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ClassGroup classGroup = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            classGroup4MixDto.setClassGroup(classGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            classGroup4MixDto.setMusicGroupStudentClassAdjustId(musicGroupStudentClassAdjust.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            classGroup4MixDto.setClassCourseMinute(musicGroupStudentClassAdjust.getClassCourseMinute()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            classGroup = classGroupService.classGroupAdjust2(classGroup4MixDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //排课完成后删除所选课程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> courseIds = JSON.parseArray(musicGroupStudentClassAdjust.getSubLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Integer> studentIds = JSON.parseArray(musicGroupStudentClassAdjust.getStudentIds(), Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds, studentIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //解冻课程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> allCourseIds = JSON.parseArray(musicGroupStudentClassAdjust.getAllLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        courseScheduleDao.batchUpdateLockByCourseIds(allCourseIds, 0, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //解冻班级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Integer> classGroupIds = JSON.parseArray(musicGroupStudentClassAdjust.getClassGroupIds(), Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //删除班级学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupStudentClassAdjustDao.update(musicGroupStudentClassAdjust); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String classGroupStudents = musicGroupStudentClassAdjust.getClassGroupStudents(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotEmpty(classGroupStudents)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Map> maps = JSON.parseArray(classGroupStudents, Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Map<Integer, String> classGroupStudent : maps) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Set<Integer> integers = classGroupStudent.keySet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (Integer integer : integers) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<Integer> collect = Arrays.asList(classGroupStudent.get(integer).split(",")).stream().map(e -> Integer.parseInt(e)).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //学员退出群聊 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMemberService.quit(integer.longValue(), collect); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    classGroupStudentMapperDao.deleteByClassGroupIdAndStudents(integer, classGroupStudent.get(integer)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取没有学员的课程列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> delCourseIds = courseScheduleDao.findNoStudentCourseIds(courseIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (delCourseIds != null && delCourseIds.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //删除课程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            courseScheduleDao.deleteCourseSchedulesByClassGroupIds(delCourseIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //删除教师考勤 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            teacherAttendanceDao.batchDeleteByCourseSchedules(delCourseIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //删除教师课酬 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(delCourseIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        classGroupService.batchUpdateTeacherSalary(classGroupIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void auditPass(String batchNs, String auditMemo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String[] split = batchNs.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (String batchNo : split) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (musicGroupPaymentCalenders == null || musicGroupPaymentCalenders.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BizException("缴费项目不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MusicGroupPaymentCalender calender = musicGroupPaymentCalenders.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //如果是报名项目,将乐团改为审核中,缴费项目修改状态,审核状态改为审核通过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (musicGroupPaymentCalender.getPayUserType() == SCHOOL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.PAID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (date.after(musicGroupPaymentCalender.getStartPaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (date.after(musicGroupPaymentCalender.getDeadlinePaymentDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.OVER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setAuditMemo(auditMemo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (musicGroupPaymentCalender.getPaymentType() == PaymentType.ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroupPaymentCalender.setExpectNum(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalenderCourseSettingsService.queryCalenderCourseSettings(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    addStudent(musicGroupPaymentCalender, musicGroupPaymentCalenderCourseSettings, musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (calender.getPaymentType() == ADD_STUDENT || calender.getPaymentType() == SPAN_GROUP_CLASS_ADJUST) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 所有缴费项目已完成排课才能创建下一个缴费项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<String> batchNoList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                batchNoList.add(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(calender.getMusicGroupId(), null, null, batchNoList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (StringUtils.isNoneBlank(orignBatchNo)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw new BizException("{} 存在未排课的缴费项目,请先完成排课再操作", musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<Integer> userIds = Arrays.stream(calender.getStudentIds().split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //获取欠费学员列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(calender.getMusicGroupId(), userIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (noPaymentUserIds.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw new BizException("{} 有欠费的学员不允许创建缴费", musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //获取缴费状态在审核中或者已拒绝的缴费项目的学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(calender.getMusicGroupId(), batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (StringUtils.isNotEmpty(studentIds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (Integer integer : userIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (studentIds.contains(integer.toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            throw new BizException("{} 的 {} 缴费项目,所选学员有待审核或已拒绝的缴费项目", musicGroup.getName(), calender.getPaymentType().getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //如果是报名,并且所有的报名都审核通过,需要修改乐团状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (calender.getPaymentType() == MUSIC_APPLY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //统计乐团还在审核中或者审核被拒的缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                int count = musicGroupPaymentCalenderDao.countAuditReject(calender.getMusicGroupId(), calender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (count == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroup.setStatus(MusicGroupStatusEnum.APPLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroup.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroupDao.update(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (sysUser == null || sysUser.getId() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        throw new BizException("请重新登录"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //记录操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroup.getId(), "报名缴费项目通过(费用审核中 -> 报名中)", sysUser.getId(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (calender.getPaymentType() == ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 学生加到班级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String classGroupIdStr = calender.getAttribute1(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (StringUtils.isNotBlank(classGroupIdStr)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    classGroupService.addStudentToClassGroupAndCourseArranging(Integer.parseInt(calender.getStudentIds()), classGroupIdStr, batchNo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            musicGroupPaymentCalenderCourseSettingsService.queryCalenderCourseSettingsByBatchNo(batchNo), musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MusicGroupStudentClassAdjust musicGroupStudentClassAdjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (musicGroupStudentClassAdjust != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //如果是合班缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    autoClassGroupAdjust(musicGroupStudentClassAdjust); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (calender.getPaymentType() == SPAN_GROUP_CLASS_ADJUST) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //删除和解冻班级,课程信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MusicGroupStudentClassAdjust adjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<Map> classGroupStudents = JSON.parseArray(adjust.getClassGroupStudents(), Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<Integer> studentIds = JSON.parseArray(adjust.getStudentIds(), Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<Long> courseIds = JSON.parseArray(adjust.getSubLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<Long> allLockCourseIds = JSON.parseArray(adjust.getAllLockCourseIds(), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //如果是跨团班级合并,添加学员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalenderDetailService.batchAdd(calender, musicGroupPaymentCalenderStudentDetailDao.findByBatchNo(batchNo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                classGroupService.spanGroupClassAdjustPass(adjust.getMasterClassGroupId() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        , studentIds, courseIds, classGroupStudents, allLockCourseIds, batchNo, adjust.getMasterTotalPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenders); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (calender.getPaymentType() == ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imUserFriendService.refreshGroupImUserFriend(calender.getMusicGroupId(), GroupType.MUSIC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void auditRefuse(String batchNs, String auditMemo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (sysUser == null || sysUser.getId() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("请重新登录"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String[] split = batchNs.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (String batchNo : split) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (musicGroupPaymentCalenders == null || musicGroupPaymentCalenders.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BizException("缴费项目不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setStatus(PaymentCalenderStatusEnum.REJECT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalender.setAuditMemo(auditMemo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MusicGroupPaymentCalender calender = musicGroupPaymentCalenders.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //如果是报名,并且所有的报名都审核通过,需要修改乐团状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (calender.getPaymentType() == MUSIC_APPLY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroup.setStatus(MusicGroupStatusEnum.PRE_BUILD_FEE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroup.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupDao.update(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //记录操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroup.getId(), "报名缴费项目失败(费用审核中 -> 审核拒绝)", sysUser.getId(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenders); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //推送待续费通知 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void pushWaitRenewMessage(Long calenderId, MusicGroup musicGroup, Set<Integer> studentIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (studentIds == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            studentIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentStudentIds(calenderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (studentIds.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            StringBuffer memo = new StringBuffer("4?").append(baseUrl).append("/#/musicGroupRenew?calenderId=").append(calenderId).append("&id=").append(musicGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Integer, String> push = new HashMap<>(studentIds.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            studentIds.forEach(e -> push.put(e, e.toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 发送续费通知 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    null, 0, memo.toString(), "STUDENT", musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //获取未缴费且不是0元的学员列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Integer, String> studentMaps = MapUtil.convertMybatisMap(musicGroupPaymentCalenderDetailDao.queryNoPaymentAndNotZeroStudent(calenderId, studentIds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (studentMaps.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_WAIT_RENEW_MESSAGE, studentMaps, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        null, 0, memo.toString(), null, musicGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void revoke(String batchNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalender> calenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (calenders.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("缴费批次不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calenders.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (e.getPaymentType() == ADD_STUDENT || e.getPaymentType() == SPAN_GROUP_CLASS_ADJUST) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BizException("{} 的缴费项目不允许撤回", e.getStatus().getDesc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (e.getStatus() != AUDITING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BizException("{} 的缴费状态不允许撤回", e.getStatus().getDesc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (e.getPaymentType() == MUSIC_APPLY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //如果是报名,并且所有的报名都审核通过,需要修改乐团状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MusicGroup musicGroup = musicGroupDao.get(e.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroup.setStatus(MusicGroupStatusEnum.PRE_BUILD_FEE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroup.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupDao.update(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //记录操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroup.getId(), "报名缴费项目撤回(费用审核中 -> 撤回)", sysUser.getId(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.setStatus(DRAFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDao.batchUpdate(calenders); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<MusicGroupPaymentCalender> findByBatchNo(String batchNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public PageInfo<MusicGroupPaymentCalenderResultDto> queryCalenderPage(MusicGroupPaymentCalenderQueryInfo queryInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PageInfo<MusicGroupPaymentCalenderResultDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Object> params = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MapUtil.populateMap(params, queryInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalenderResultDto> dataList = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int count = musicGroupPaymentCalenderDao.countCalender(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (count > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pageInfo.setTotal(count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            params.put("offset", pageInfo.getOffset()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dataList = musicGroupPaymentCalenderDao.queryCalenderPage(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Set<Integer> organIdList = dataList.stream().map(e -> e.getOrganId()).collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Integer, String> organNameMap = getMap("organization", "id_", "name_", organIdList, queryInfo.getTenantId(), Integer.class, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Integer> operatorIds = dataList.stream().map(e -> e.getOperator()).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            operatorIds.removeAll(Collections.singleton(null)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Integer, String> realNameMap = getMap("sys_user", "id_", "real_name_", operatorIds, queryInfo.getTenantId(), Integer.class, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dataList.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                e.setOrganName(organNameMap.get(e.getOrganId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                e.setOperatorName(realNameMap.get(e.getOperator())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (count == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dataList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pageInfo.setRows(dataList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return pageInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public String merge1(MusicGroupPaymentBaseCalender musicGroupPaymentBaseCalender) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		del(musicGroupPaymentBaseCalender.getCalenderId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return create1(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        del(musicGroupPaymentBaseCalender.getCalenderId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return create1(musicGroupPaymentBaseCalender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public MusicGroupPaymentCalender getMusicGroupRegCalender(String musicGroupId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return musicGroupPaymentCalenderDao.getMusicGroupRegCalender(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return musicGroupPaymentCalenderDao.getMusicGroupRegCalender(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private BigDecimal getActualAmount(MusicGroupPaymentCalenderBase baseCalender){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(baseCalender != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return baseCalender.getActualAmount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return BigDecimal.ZERO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public BigDecimal getRepairAmount(Long calenderId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return getActualAmount(musicGroupPaymentCalenderRepairService.findByCalenderId(calenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public BigDecimal getMemberAmount(Long calenderId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return getActualAmount(musicGroupPaymentCalenderMemberService.findByCalenderId(calenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public BigDecimal getActivityAmount(List<Long> buyCalenderActivityIdList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalenderActivity> activityList = musicGroupPaymentCalenderActivityService.findByIds(buyCalenderActivityIdList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return activityList.stream().map(e->e.getActualAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private BigDecimal getActualAmount(MusicGroupPaymentCalenderBase baseCalender) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (baseCalender != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return baseCalender.getActualAmount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return BigDecimal.ZERO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BigDecimal getRepairAmount(Long calenderId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return getActualAmount(musicGroupPaymentCalenderRepairService.findByCalenderId(calenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BigDecimal getMemberAmount(Long calenderId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return getActualAmount(musicGroupPaymentCalenderMemberService.findByCalenderId(calenderId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BigDecimal getActivityAmount(List<Long> buyCalenderActivityIdList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalenderActivity> activityList = musicGroupPaymentCalenderActivityService.findByIds(buyCalenderActivityIdList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return activityList.stream().map(e -> e.getActualAmount()).reduce(BigDecimal.ZERO, BigDecimal::add); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public MusicGroupPaymentCalender getApplyCalenderByMusicId(String musicGroupId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return musicGroupPaymentCalenderDao.findByMusicGroupRegCalender(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return musicGroupPaymentCalenderDao.findByMusicGroupRegCalender(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean autoUpdateMusicGroupPaymentCalenderStatus() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<PaymentCalenderStatusEnum> statusList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        statusList.add(PaymentCalenderStatusEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        statusList.add(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.queryByPaymentStatus(null, statusList, PayUserType.STUDENT.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalender> updateMusicGroupPaymentCalenderList = new ArrayList<MusicGroupPaymentCalender>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (MusicGroupPaymentCalender mgpc : musicGroupPaymentCalenderList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (mgpc.getDeadlinePaymentDate() != null && date.after(mgpc.getDeadlinePaymentDate()) && mgpc.getStatus() == PaymentCalenderStatusEnum.OPEN) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // “进行中”更新至“已结束” 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mgpc.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mgpc.setStatus(PaymentCalenderStatusEnum.OVER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.updateNoPaymentAndZeroPaymentStatus(mgpc, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                updateMusicGroupPaymentCalenderList.add(mgpc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //如果是进行中加学员,将报名表状态改为NORMAL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (mgpc.getPaymentType() == MusicGroupPaymentCalender.PaymentType.ADD_STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    studentRegistrationDao.updatePaymentStatusByClaenderId(mgpc.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (mgpc.getStartPaymentDate() != null && date.after(mgpc.getStartPaymentDate()) && mgpc.getStatus() == PaymentCalenderStatusEnum.NO) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MusicGroup musicGroup = musicGroupDao.get(mgpc.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (musicGroup == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //如果乐团还在审核中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (musicGroup.getStatus() == MusicGroupStatusEnum.DRAFT || musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT || musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT_FAILED || musicGroup.getStatus() == MusicGroupStatusEnum.CLOSE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // “未开始”更新至“进行中” 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mgpc.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mgpc.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.updateNoPaymentAndZeroPaymentStatus(mgpc, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                updateMusicGroupPaymentCalenderList.add(mgpc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (mgpc.getPayUserType() == STUDENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //推送待续费通知 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pushWaitRenewMessage(mgpc.getId(), musicGroup, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (updateMusicGroupPaymentCalenderList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentCalenderDao.batchUpdate(updateMusicGroupPaymentCalenderList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void batchInsert(List<MusicGroupPaymentCalender> musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalenders != null && musicGroupPaymentCalenders.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentCalenderDao.delByGroupId(musicGroupPaymentCalenders.get(0).getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            musicGroupPaymentCalenders.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupPaymentCalenderDao.insert(e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void del(Long id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (id == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("参数校验失败"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.getForLock(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (calender == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("缴费信息不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //缴费项目中没有学生即可删除缴费项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = musicGroupPaymentCalenderDetailDao.queryByCalenderId(id, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroupPaymentCalenderDetailList != null && musicGroupPaymentCalenderDetailList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("操作失败:缴费项目中已存在学员"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupStudentClassAdjust byBatchNo = musicGroupStudentClassAdjustDao.findByBatchNo(calender.getBatchNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (byBatchNo != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("操作失败:班级调整的缴费项目不支持"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (calender.getPaymentType() == PaymentType.MUSIC_APPLY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 是否存在缴费中的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<StudentPaymentOrder> studentPaymentOrderList = studentPaymentOrderDao.queryByDealStatus(calender.getMusicGroupId(), OrderTypeEnum.APPLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    DealStatusEnum.ING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (studentPaymentOrderList != null && studentPaymentOrderList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BizException("操作失败:存在缴费中的学生"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDao.delete(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDetailDao.deleteByCalenderId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentStudentCourseDetailDao.deleteByMusicGroupPaymentCalenderId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderActivityService.delByCalenderId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderMemberService.deleteByCalenderId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderRepairService.deleteByCalenderId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> calenderIds = new ArrayList<Long>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calenderIds.add(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderCourseSettingsService.deleteByMusicGroupPaymentCalenderId(calenderIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果乐团是“费用审核”,则需要修改状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (musicGroup != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (musicGroup.getStatus() == MusicGroupStatusEnum.FEE_AUDIT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroup.setStatus(MusicGroupStatusEnum.PRE_BUILD_FEE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroup.setUpdateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicGroupDao.update(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean deleteByBatchNo(String batchNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(batchNo)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("参数错误"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenderList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            del(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public boolean autoUpdateMusicGroupPaymentCalenderStatus() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<PaymentCalenderStatusEnum> statusList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		statusList.add(PaymentCalenderStatusEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		statusList.add(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.queryByPaymentStatus(null, statusList,PayUserType.STUDENT.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalender> updateMusicGroupPaymentCalenderList = new ArrayList<MusicGroupPaymentCalender>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (MusicGroupPaymentCalender mgpc : musicGroupPaymentCalenderList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (mgpc.getDeadlinePaymentDate() != null && date.after(mgpc.getDeadlinePaymentDate()) && mgpc.getStatus() == PaymentCalenderStatusEnum.OPEN) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// “进行中”更新至“已结束” 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				mgpc.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				mgpc.setStatus(PaymentCalenderStatusEnum.OVER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.updateNoPaymentAndZeroPaymentStatus(mgpc,false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				updateMusicGroupPaymentCalenderList.add(mgpc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//如果是进行中加学员,将报名表状态改为NORMAL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(mgpc.getPaymentType() == MusicGroupPaymentCalender.PaymentType.ADD_STUDENT){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					studentRegistrationDao.updatePaymentStatusByClaenderId(mgpc.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} else if (mgpc.getStartPaymentDate() != null && date.after(mgpc.getStartPaymentDate()) && mgpc.getStatus() == PaymentCalenderStatusEnum.NO) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				MusicGroup musicGroup = musicGroupDao.get(mgpc.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(musicGroup == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//如果乐团还在审核中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(musicGroup.getStatus() == MusicGroupStatusEnum.DRAFT || musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT|| musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT_FAILED || musicGroup.getStatus() == MusicGroupStatusEnum.CLOSE){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// “未开始”更新至“进行中” 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				mgpc.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				mgpc.setStatus(PaymentCalenderStatusEnum.OPEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//将0元未缴费学员缴费状态更新为已缴费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.updateNoPaymentAndZeroPaymentStatus(mgpc,false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				updateMusicGroupPaymentCalenderList.add(mgpc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(mgpc.getPayUserType() == STUDENT){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					//推送待续费通知 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					pushWaitRenewMessage(mgpc.getId(),musicGroup,null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (updateMusicGroupPaymentCalenderList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentCalenderDao.batchUpdate(updateMusicGroupPaymentCalenderList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void batchInsert(List<MusicGroupPaymentCalender> musicGroupPaymentCalenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroupPaymentCalenders != null && musicGroupPaymentCalenders.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentCalenderDao.delByGroupId(musicGroupPaymentCalenders.get(0).getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			musicGroupPaymentCalenders.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupPaymentCalenderDao.insert(e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void del(Long id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (id == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("参数校验失败"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.getForLock(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (calender == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("缴费信息不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//缴费项目中没有学生即可删除缴费项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = musicGroupPaymentCalenderDetailDao.queryByCalenderId(id, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (musicGroupPaymentCalenderDetailList != null && musicGroupPaymentCalenderDetailList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("操作失败:缴费项目中已存在学员"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupStudentClassAdjust byBatchNo = musicGroupStudentClassAdjustDao.findByBatchNo(calender.getBatchNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(byBatchNo != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("操作失败:班级调整的缴费项目不支持"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (calender.getPaymentType() == PaymentType.MUSIC_APPLY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 是否存在缴费中的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<StudentPaymentOrder> studentPaymentOrderList = studentPaymentOrderDao.queryByDealStatus(calender.getMusicGroupId(), OrderTypeEnum.APPLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					DealStatusEnum.ING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (studentPaymentOrderList != null && studentPaymentOrderList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				throw new BizException("操作失败:存在缴费中的学生"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDao.delete(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDetailDao.deleteByCalenderId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentStudentCourseDetailDao.deleteByMusicGroupPaymentCalenderId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderActivityService.delByCalenderId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderMemberService.deleteByCalenderId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderRepairService.deleteByCalenderId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<Long> calenderIds = new ArrayList<Long>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		calenderIds.add(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderCourseSettingsService.deleteByMusicGroupPaymentCalenderId(calenderIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//如果乐团是“费用审核”,则需要修改状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(musicGroup != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(musicGroup.getStatus() == MusicGroupStatusEnum.FEE_AUDIT){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroup.setStatus(MusicGroupStatusEnum.PRE_BUILD_FEE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroup.setUpdateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				musicGroupDao.update(musicGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public boolean deleteByBatchNo(String batchNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(StringUtils.isBlank(batchNo)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("参数错误"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByBatchNo(batchNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for(MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenderList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			del(musicGroupPaymentCalender.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public MusicGroupPaymentCalender findByMusicGroupRegCalender(String musicGroupId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return musicGroupPaymentCalenderDao.findByMusicGroupRegCalender(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public MusicGroupStudentFee updateCalender(Long calenderDetailId,Integer userId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalenderDetail calenderDetail = musicGroupPaymentCalenderDetailDao.get(calenderDetailId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupPaymentCalender calender = this.get(calenderDetail.getMusicGroupPaymentCalenderId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(userId, calender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public MusicGroupPaymentCalender findByMusicGroupRegCalender(String musicGroupId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return musicGroupPaymentCalenderDao.findByMusicGroupRegCalender(musicGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public MusicGroupStudentFee updateCalender(Long calenderDetailId, Integer userId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalenderDetail calenderDetail = musicGroupPaymentCalenderDetailDao.get(calenderDetailId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupPaymentCalender calender = this.get(calenderDetail.getMusicGroupPaymentCalenderId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(userId, calender.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //		if(calender.getIsGiveMusicNetwork() && musicGroupStudentFee != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //			//赠送网管课 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //			musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//更新学生的缴费记录状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		calenderDetail.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //更新学生的缴费记录状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calenderDetail.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //		calenderDetail.setActualAmount(calenderDetail.getExpectAmount().add(calenderDetail.getExpectMemberAmount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		calenderDetail.setPayTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		calenderDetail.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDetailDao.update(calenderDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//更新实际缴费人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Integer actualNum = calender.getActualNum() == null ? 0 : calender.getActualNum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		calender.setActualNum(actualNum + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		calender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musicGroupPaymentCalenderDao.update(calender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return musicGroupStudentFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calenderDetail.setPayTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calenderDetail.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDetailDao.update(calenderDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //更新实际缴费人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer actualNum = calender.getActualNum() == null ? 0 : calender.getActualNum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calender.setActualNum(actualNum + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calender.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicGroupPaymentCalenderDao.update(calender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return musicGroupStudentFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |