|  | @@ -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;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 |