Przeglądaj źródła

Merge branch 'master_saas' into test_saas

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantInfoDao.java
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
yonge 3 lat temu
rodzic
commit
748dcfa816

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantContractTemplateDao.java

@@ -22,4 +22,6 @@ public interface TenantContractTemplateDao extends BaseDAO<Integer, TenantContra
 	TenantContractTemplate queryLatestContractTemplate(@Param("owner") String owner, @Param("type") String type, @Param("tenantId") Integer tenantId);
 	TenantContractTemplate queryLatestContractTemplate(@Param("owner") String owner, @Param("type") String type, @Param("tenantId") Integer tenantId);
 	
 	
 	int disableContract(@Param("owner") String owner, @Param("type") String type, @Param("tenantId") Integer tenantId);
 	int disableContract(@Param("owner") String owner, @Param("type") String type, @Param("tenantId") Integer tenantId);
+	
+	Integer queryMaxVersion();
 }
 }

+ 7 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantInfoDao.java

@@ -1,16 +1,19 @@
 package com.ym.mec.biz.dal.dao;
 package com.ym.mec.biz.dal.dao;
 
 
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Param;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.biz.dal.entity.TenantInfo;
 import com.ym.mec.biz.dal.entity.TenantInfo;
 import com.ym.mec.biz.dal.entity.TenantProductSumm;
 import com.ym.mec.biz.dal.entity.TenantProductSumm;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-import java.util.Map;
 
 
 public interface TenantInfoDao extends BaseMapper<TenantInfo> {
 public interface TenantInfoDao extends BaseMapper<TenantInfo> {
+	
+	TenantInfo getLocked(Integer tenantId);
 
 
     <T> IPage<T> queryPage(Page<T> page, @Param("param") Map<String, Object> param);
     <T> IPage<T> queryPage(Page<T> page, @Param("param") Map<String, Object> param);
 
 

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Teacher.java

@@ -119,6 +119,8 @@ public class Teacher extends SysUser {
 	private Integer lectureNum;
 	private Integer lectureNum;
 	
 	
 	private String memo;
 	private String memo;
+	
+	private String contractUrl;
 
 
 	private BigDecimal operatingIndex;
 	private BigDecimal operatingIndex;
 	private BigDecimal serviceIndex;
 	private BigDecimal serviceIndex;
@@ -390,6 +392,14 @@ public class Teacher extends SysUser {
 		this.memo = memo;
 		this.memo = memo;
 	}
 	}
 
 
+	public String getContractUrl() {
+		return contractUrl;
+	}
+
+	public void setContractUrl(String contractUrl) {
+		this.contractUrl = contractUrl;
+	}
+
 	@Override
 	@Override
 	public String toString() {
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 		return ToStringBuilder.reflectionToString(this);

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantContractTemplateService.java

@@ -38,4 +38,8 @@ public interface TenantContractTemplateService extends BaseService<Integer, Tena
 	 */
 	 */
 	TenantContractTemplate queryLatestContractTemplate(Integer tenantId, String owner, String type);
 	TenantContractTemplate queryLatestContractTemplate(Integer tenantId, String owner, String type);
 	
 	
+	boolean createContractTemplate(TenantContractTemplate tenantContractTemplate);
+	
+	boolean updateContractTempalte(TenantContractTemplate tenantContractTemplate);
+	
 }
 }

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java

@@ -915,7 +915,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
         }
         }
 		
 		
         // 查询最新协议模板
         // 查询最新协议模板
-		TenantContractTemplate tenantContractTemplate = tenantContractTemplateService.queryLatestContractTemplate(TenantContextHolder.getTenantId(), null, null);
+		TenantContractTemplate tenantContractTemplate = tenantContractTemplateService.queryLatestContractTemplate(user.getTenantId(), null, null);
 		if(tenantContractTemplate == null){
 		if(tenantContractTemplate == null){
 			logger.error("最新协议模板查询失败");
 			logger.error("最新协议模板查询失败");
 			return;
 			return;
@@ -1078,7 +1078,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			}
 			}
 		}
 		}
 		
 		
-		TenantContractTemplate tenantContractTemplate = tenantContractTemplateService.queryLatestContractTemplate(TenantContextHolder.getTenantId(), null, null);
+		TenantContractTemplate tenantContractTemplate = tenantContractTemplateService.queryLatestContractTemplate(studentInfo.getTenantId(), null, null);
 		if(tenantContractTemplate == null){
 		if(tenantContractTemplate == null){
 			throw new BizException("最新协议模板查询失败");
 			throw new BizException("最新协议模板查询失败");
 		}
 		}

+ 1322 - 1325
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -1,15 +1,12 @@
 package com.ym.mec.biz.service.impl;
 package com.ym.mec.biz.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 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.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 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.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange;
 import com.ym.mec.biz.dal.entity.*;
 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.PayUserType;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType;
 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.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.date.DateUtil;
-import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -35,16 +31,11 @@ import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.util.*;
 import java.util.*;
-import java.util.Map.Entry;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Executors;
 import java.util.function.Consumer;
 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 java.util.stream.Collectors;
 
 
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.SCHOOL;
 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
 @Service
 public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentCalender> implements MusicGroupPaymentCalenderService {
 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
 //		if(musicGroupPaymentBaseCalender.getCalenderActivityList() == null
 //				&& musicGroupPaymentBaseCalender.getCalenderMember() == null
 //				&& musicGroupPaymentBaseCalender.getCalenderMember() == null
@@ -246,1165 +243,1165 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 //				&& musicGroupPaymentBaseCalender.getMusicRepair() == null){
 //				&& musicGroupPaymentBaseCalender.getMusicRepair() == null){
 //			throw new BizException("请选择一个缴费项目");
 //			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){
 //		if(paymentCalender.getMemberRankSettingId() != null){
 //			MemberRankSetting memberRankSetting = memberRankSettingDao.get(paymentCalender.getMemberRankSettingId());
 //			MemberRankSetting memberRankSetting = memberRankSettingDao.get(paymentCalender.getMemberRankSettingId());
 //			if(memberRankSetting != null){
 //			if(memberRankSetting != null){
 //				paymentCalender.setMemberRankSettingName(memberRankSetting.getName());
 //				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
     @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) {
     public String merge1(MusicGroupPaymentBaseCalender musicGroupPaymentBaseCalender) {
-		del(musicGroupPaymentBaseCalender.getCalenderId());
-		return create1(musicGroupPaymentBaseCalender);
+        del(musicGroupPaymentBaseCalender.getCalenderId());
+        return create1(musicGroupPaymentBaseCalender);
     }
     }
 
 
     @Override
     @Override
     public MusicGroupPaymentCalender getMusicGroupRegCalender(String musicGroupId) {
     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
     @Override
     public MusicGroupPaymentCalender getApplyCalenderByMusicId(String musicGroupId) {
     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
     @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){
 //		if(calender.getIsGiveMusicNetwork() && musicGroupStudentFee != null){
 //			//赠送网管课
 //			//赠送网管课
 //			musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1);
 //			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.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;
+    }
 
 
 }
 }

+ 41 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantContractTemplateServiceImpl.java

@@ -11,6 +11,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import com.ym.mec.biz.dal.dao.TenantContractTemplateDao;
 import com.ym.mec.biz.dal.dao.TenantContractTemplateDao;
+import com.ym.mec.biz.dal.dao.TenantInfoDao;
 import com.ym.mec.biz.dal.dto.TenantContractTemplateDto;
 import com.ym.mec.biz.dal.dto.TenantContractTemplateDto;
 import com.ym.mec.biz.dal.entity.TenantContractTemplate;
 import com.ym.mec.biz.dal.entity.TenantContractTemplate;
 import com.ym.mec.biz.service.TenantContractTemplateService;
 import com.ym.mec.biz.service.TenantContractTemplateService;
@@ -26,6 +27,9 @@ public class TenantContractTemplateServiceImpl extends BaseServiceImpl<Integer,
 	
 	
 	@Autowired
 	@Autowired
 	private TenantContractTemplateDao tenantContractTemplateDao;
 	private TenantContractTemplateDao tenantContractTemplateDao;
+	
+	@Autowired
+	private TenantInfoDao tenantInfoDao;
 
 
 	@Override
 	@Override
 	public BaseDAO<Integer, TenantContractTemplate> getDAO() {
 	public BaseDAO<Integer, TenantContractTemplate> getDAO() {
@@ -88,10 +92,44 @@ public class TenantContractTemplateServiceImpl extends BaseServiceImpl<Integer,
 	public TenantContractTemplate queryLatestContractTemplate(Integer tenantId, String owner, String type) {
 	public TenantContractTemplate queryLatestContractTemplate(Integer tenantId, String owner, String type) {
 		TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.queryLatestContractTemplate(owner, type, tenantId);
 		TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.queryLatestContractTemplate(owner, type, tenantId);
 		
 		
-		if(tenantContractTemplate == null){
-			throw new BizException("未查询到协议模板");
-		}
 		return tenantContractTemplate;
 		return tenantContractTemplate;
 	}
 	}
+
+	@Override
+	@Transactional
+	public boolean createContractTemplate(TenantContractTemplate tenantContractTemplate) {
+		
+		Integer tenantId = tenantContractTemplate.getTenantId();
+		tenantInfoDao.getLocked(tenantId);
+		
+		Integer maxVersion = tenantContractTemplateDao.queryMaxVersion();
+		int version = maxVersion == null ? 1 : maxVersion + 1;
+		
+		tenantContractTemplate.setVersion(version);
+		Date date = new Date();
+		tenantContractTemplate.setCreateTime(date);
+		tenantContractTemplate.setUpdateTime(date);
+		insert(tenantContractTemplate);
+		
+		return true;
+	}
+
+	@Override
+	@Transactional
+	public boolean updateContractTempalte(TenantContractTemplate tenantContractTemplate) {
+		
+		Integer tenantId = tenantContractTemplate.getTenantId();
+		tenantInfoDao.getLocked(tenantId);
+		
+		Integer maxVersion = tenantContractTemplateDao.queryMaxVersion();
+		int version = maxVersion == null ? 1 : maxVersion + 1;
+		
+		tenantContractTemplate.setVersion(version);
+		Date date = new Date();
+		tenantContractTemplate.setUpdateTime(date);
+		
+		update(tenantContractTemplate);
+		return true;
+	}
 	
 	
 }
 }

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -9,6 +9,7 @@ import com.ym.mec.auth.api.entity.SysRole;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.SysUserType;
 import com.ym.mec.auth.api.enums.SysUserType;
 import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.TenantContractTemplateDao;
 import com.ym.mec.biz.dal.dao.TenantInfoDao;
 import com.ym.mec.biz.dal.dao.TenantInfoDao;
 import com.ym.mec.biz.dal.dto.TenantConfigDto;
 import com.ym.mec.biz.dal.dto.TenantConfigDto;
 import com.ym.mec.biz.dal.dto.TenantInfoDto;
 import com.ym.mec.biz.dal.dto.TenantInfoDto;
@@ -116,6 +117,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     private TenantPreJoinService tenantPreJoinService;
     private TenantPreJoinService tenantPreJoinService;
     @Autowired
     @Autowired
     private TenantContractRecordService tenantContractRecordService;
     private TenantContractRecordService tenantContractRecordService;
+    @Autowired
+    private TenantContractTemplateDao tenantContractTemplateDao;
 
 
     @Value("${contract.baseDir:/var/pdf}")
     @Value("${contract.baseDir:/var/pdf}")
     private String contractBaseDir;
     private String contractBaseDir;
@@ -195,6 +198,26 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
                 .map(this::getById)
                 .map(this::getById)
                 .orElseThrow(() -> new BizException("未找到该机构信息,机构信息不能为空!"));
                 .orElseThrow(() -> new BizException("未找到该机构信息,机构信息不能为空!"));
 
 
+        Integer tenantId = tenantInfo.getId();
+
+        //是否修改了机构名称或机构编码
+        if (!StringUtils.equals(dto.getTsignName(), tenantInfo.getTsignName()) || !StringUtils.equals(dto.getTsignCode(), tenantInfo.getTsignCode())) {
+            //升级机构协议版本号
+            TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.queryLatestContractTemplate(null, null, tenantId);
+            if (tenantContractTemplate != null) {
+                baseMapper.getLocked(tenantId);
+
+                Integer maxVersion = tenantContractTemplateDao.queryMaxVersion();
+                int version = maxVersion == null ? 1 : maxVersion + 1;
+
+                tenantContractTemplate.setVersion(version);
+                Date date = new Date();
+                tenantContractTemplate.setUpdateTime(date);
+
+                tenantContractTemplateDao.update(tenantContractTemplate);
+            }
+        }
+
         //机构状态 1已缴费,并且 机构注册的手机号与本次修改后的手机号不同,就证明本次修改了手机号 则需要修改机构的账号信息
         //机构状态 1已缴费,并且 机构注册的手机号与本次修改后的手机号不同,就证明本次修改了手机号 则需要修改机构的账号信息
         if (1 == tenantInfo.getPayState() && !Objects.equals(tenantInfo.getPhone(), dto.getPhone())) {
         if (1 == tenantInfo.getPayState() && !Objects.equals(tenantInfo.getPhone(), dto.getPhone())) {
             //校验修改后的手机号是否是唯一
             //校验修改后的手机号是否是唯一
@@ -631,6 +654,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
      * @return 协议地址
      * @return 协议地址
      */
      */
     private String getContractAndUpLoad(Integer tenantId, TenantContractRecordEnum en, Integer val) {
     private String getContractAndUpLoad(Integer tenantId, TenantContractRecordEnum en, Integer val) {
+        RBucket<Object> bucket = redissonClient.getBucket("getContractAndUpLoad:" + tenantId + ":" + en.getType());
+        if (!bucket.trySet(tenantId, 30, TimeUnit.SECONDS)) {
+            return null;
+        }
         Date now = new Date();
         Date now = new Date();
         //创建PDF本次缓存地址
         //创建PDF本次缓存地址
         String srcPdfPath = contractBaseDir + lexiaoyaContract + DateUtils.formatDate(now, "yyyyMMddHHmmss") + "/" + tenantId + "_" + java.time.LocalDateTime.now().getSecond() + ".pdf";
         String srcPdfPath = contractBaseDir + lexiaoyaContract + DateUtils.formatDate(now, "yyyyMMddHHmmss") + "/" + tenantId + "_" + java.time.LocalDateTime.now().getSecond() + ".pdf";
@@ -780,6 +807,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         //生成协议并上传得到地址
         //生成协议并上传得到地址
         TenantContractRecordEnum renew = TenantContractRecordEnum.RENEW;
         TenantContractRecordEnum renew = TenantContractRecordEnum.RENEW;
         String contractPath = getContractAndUpLoad(tenantId, renew, val);
         String contractPath = getContractAndUpLoad(tenantId, renew, val);
+        if (StringUtils.isBlank(contractPath)) {
+            return;
+        }
         //写入协议记录
         //写入协议记录
         tenantContractRecordService.insertContractRecord(tenantId, contractPath, renew);
         tenantContractRecordService.insertContractRecord(tenantId, contractPath, renew);
 
 
@@ -957,6 +987,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         //生成协议并上传得到地址
         //生成协议并上传得到地址
         TenantContractRecordEnum open = TenantContractRecordEnum.OPEN;
         TenantContractRecordEnum open = TenantContractRecordEnum.OPEN;
         String contractPath = getContractAndUpLoad(tenantId, open, null);
         String contractPath = getContractAndUpLoad(tenantId, open, null);
+        if (StringUtils.isBlank(contractPath)) {
+            return;
+        }
         //写入协议记录
         //写入协议记录
         tenantContractRecordService.insertContractRecord(tenantId, contractPath, open);
         tenantContractRecordService.insertContractRecord(tenantId, contractPath, open);
     }
     }

+ 3 - 1
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -56,6 +56,7 @@
         <result column="subject_name_" property="splitSubjectName"/>
         <result column="subject_name_" property="splitSubjectName"/>
         <result column="id_card_no_" property="idCardNo"/>
         <result column="id_card_no_" property="idCardNo"/>
         <result column="is_settlement_salary_" property="isSettlementSalary"/>
         <result column="is_settlement_salary_" property="isSettlementSalary"/>
+        <result column="contract_url_" property="contractUrl"/>
         <result column="tenant_id_" property="tenantId"/>
         <result column="tenant_id_" property="tenantId"/>
     </resultMap>
     </resultMap>
     
     
@@ -375,9 +376,10 @@
     <!-- 分页查询 -->
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="Teacher" parameterType="map">
     <select id="queryPage" resultMap="Teacher" parameterType="map">
         SELECT t.id_,su.real_name_,su.lock_flag_,t.subject_id_,su.phone_,t.organ_id_ teacher_organ_id_,t.organ_id_,t.is_support_extra_practice_lesson_,
         SELECT t.id_,su.real_name_,su.lock_flag_,t.subject_id_,su.phone_,t.organ_id_ teacher_organ_id_,t.organ_id_,t.is_support_extra_practice_lesson_,
-        t.job_nature_,t.demission_date_,t.formal_staff_date_,t.is_probation_period_,t.memo_,GROUP_CONCAT(s.name_) subject_name_,su.del_flag_,t.is_settlement_salary_
+        t.job_nature_,t.demission_date_,t.formal_staff_date_,t.is_probation_period_,t.memo_,GROUP_CONCAT(s.name_) subject_name_,su.del_flag_,t.is_settlement_salary_,tc.url_ contract_url_
         FROM teacher t
         FROM teacher t
         LEFT JOIN sys_user su ON t.id_ = su.id_
         LEFT JOIN sys_user su ON t.id_ = su.id_
+        left join teacher_contracts tc on tc.user_id_ = t.id_
         LEFT JOIN `subject` s ON FIND_IN_SET(s.id_,t.subject_id_)
         LEFT JOIN `subject` s ON FIND_IN_SET(s.id_,t.subject_id_)
         <include refid="queryPageMap"/>
         <include refid="queryPageMap"/>
         GROUP BY t.id_
         GROUP BY t.id_

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/TenantContractTemplateMapper.xml

@@ -99,6 +99,7 @@
 		parameterType="map">
 		parameterType="map">
 		SELECT tct.*,u.real_name_ latest_operator_ FROM tenant_contract_template tct left join sys_user u on tct.modify_by_ = u.id_ 
 		SELECT tct.*,u.real_name_ latest_operator_ FROM tenant_contract_template tct left join sys_user u on tct.modify_by_ = u.id_ 
 		<where>
 		<where>
+			tct.tenant_id_ = #{tenantId}
 			<if test="status != null">
 			<if test="status != null">
 				and tct.status_ = #{status}
 				and tct.status_ = #{status}
 			</if>
 			</if>
@@ -148,4 +149,8 @@
 			and owner_ = #{owner}
 			and owner_ = #{owner}
 		</if>
 		</if>
 	</update>
 	</update>
+	
+	<select id="queryMaxVersion" resultType="java.lang.Integer">
+		SELECT max(version_) FROM tenant_contract_template 
+	</select>
 </mapper>
 </mapper>

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml

@@ -62,6 +62,10 @@
         <result column="expiry_count_" jdbcType="INTEGER" property="expiryCount"/>
         <result column="expiry_count_" jdbcType="INTEGER" property="expiryCount"/>
         <result column="expiry_unit_" jdbcType="VARCHAR" property="expiryUnit"/>
         <result column="expiry_unit_" jdbcType="VARCHAR" property="expiryUnit"/>
     </resultMap>
     </resultMap>
+    
+    <select id="getLocked" resultMap="BaseResultMap">
+    	select * from tenant_info WHERE id_ = #{tenantId} for update
+    </select>
 
 
     <select id="queryPage" parameterType="map" resultMap="TenantInfoInfoResult">
     <select id="queryPage" parameterType="map" resultMap="TenantInfoInfoResult">
         SELECT a.`id_`,
         SELECT a.`id_`,

+ 1 - 1
mec-common/common-core/pom.xml

@@ -13,7 +13,7 @@
 	<url>http://maven.apache.org</url>
 	<url>http://maven.apache.org</url>
 	<properties>
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <mybatis-plus.version>3.0.3</mybatis-plus.version>
+        <mybatis-plus.version>3.0.7.1</mybatis-plus.version>
 	</properties>
 	</properties>
 
 
 	<dependencies>
 	<dependencies>

+ 18 - 7
mec-web/src/main/java/com/ym/mec/web/controller/TenantContractTemplateController.java

@@ -4,9 +4,8 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 
 
-import java.util.Date;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -51,20 +50,32 @@ public class TenantContractTemplateController extends BaseController {
 		return succeed(tenantContractTemplateService.get(id));
 		return succeed(tenantContractTemplateService.get(id));
 	}
 	}
 
 
+	@ApiOperation("查询最新启用的协议模板")
+	@GetMapping(value = "/queryLatestContractTemplate")
+	@PreAuthorize("@pcs.hasPermissions('tenantContractTemplate/queryLatestContractTemplate')")
+	public HttpResponseResult<TenantContractTemplate> queryLatestContractTemplate() {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+
+		if (sysUser == null || sysUser.getId() == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return succeed(tenantContractTemplateService.queryLatestContractTemplate(sysUser.getTenantId(), null, null));
+	}
+
 	@ApiOperation("新增")
 	@ApiOperation("新增")
 	@PostMapping(value = "/add", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 	@PostMapping(value = "/add", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 	@PreAuthorize("@pcs.hasPermissions('tenantContractTemplate/add')")
 	@PreAuthorize("@pcs.hasPermissions('tenantContractTemplate/add')")
 	public Object add(TenantContractTemplate tenantContractTemplate) {
 	public Object add(TenantContractTemplate tenantContractTemplate) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-		Date date = new Date();
+        
+        if(sysUser == null || sysUser.getId() == null){
+        	return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
 		
 		
 		tenantContractTemplate.setStatus(false);
 		tenantContractTemplate.setStatus(false);
-		tenantContractTemplate.setCreateTime(date);
-		tenantContractTemplate.setUpdateTime(date);
 		tenantContractTemplate.setModifyBy(sysUser.getId());
 		tenantContractTemplate.setModifyBy(sysUser.getId());
 		tenantContractTemplate.setTenantId(TenantContextHolder.getTenantId());
 		tenantContractTemplate.setTenantId(TenantContextHolder.getTenantId());
-		tenantContractTemplate.setVersion(1);
-		tenantContractTemplateService.insert(tenantContractTemplate);
+		tenantContractTemplateService.createContractTemplate(tenantContractTemplate);
 		return succeed();
 		return succeed();
 	}
 	}