Browse Source

Merge branch 'origin_master' of http://git.dayaedu.com/yonge/mec into origin_master

yonge 4 years ago
parent
commit
5e39f45d08
22 changed files with 447 additions and 216 deletions
  1. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  3. 1 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  4. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  5. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DelRegisterDto.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexBaseMonthData.java
  7. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupStudentClassAdjust.java
  8. 1 2
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  9. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  10. 22 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  11. 91 36
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  12. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  13. 220 133
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  14. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  15. 0 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  16. 5 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  17. 7 12
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  18. 4 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml
  19. 6 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupStudentClassAdjustMapper.xml
  20. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  21. 0 7
      mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  22. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -791,7 +791,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      *
      * @return
      */
-    Integer getMusicGroupHighClassNumBySubject(@Param("musicGroupId") String musicGroupId, @Param("subjectIds") String subjectIds, @Param("type") ClassGroupTypeEnum type);
+    Integer getMusicGroupHighClassNumBySubject(@Param("musicGroupId") String musicGroupId, @Param("type") ClassGroupTypeEnum type);
 
     /**
      * count班级数量

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -1749,4 +1749,11 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return
      */
     List<CourseSchedule> findCoursesByClassGroupIdAndCourseIds(@Param("classGroupId") Long classGroupId, @Param("allLockCourseIds") List<Long> allLockCourseIds);
+
+    /**
+     * 获取班级总剩余时长
+     * @param masterClassGroupId
+     * @return
+     */
+    Integer queryTotalCourseTimes(Integer masterClassGroupId);
 }

+ 1 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -40,22 +40,18 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
      * @author Joburgess
      * @date 2021/1/7 0007
      * @param startMonth:
-     * @param endMonth:
      * @return java.util.List<com.ym.mec.biz.dal.dto.IndexBaseMonthDto>
      */
-    List<IndexBaseMonthData> getStudentSignUpData(@Param("startMonth") String startMonth,
-                                                  @Param("endMonth") String endMonth);
+    List<IndexBaseMonthData> getStudentSignUpData(@Param("startMonth") String startMonth);
 
     /**
      * @describe 统计作业布置数据
      * @author Joburgess
      * @date 2021/1/7 0007
      * @param startMonth:
-     * @param endMonth:
      * @return java.util.List<com.ym.mec.biz.dal.dto.IndexBaseMonthDto>
      */
     List<IndexBaseMonthData> getHomeworkDate(@Param("startMonth") String startMonth,
-                                             @Param("endMonth") String endMonth,
                                              @Param("type") String type);
 
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -423,4 +423,11 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     List<StudentRegistration> queryByUserIdsAndMusicGroupId(@Param("studentIds") String studentIds, @Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 批量删除注册信息
+     * @param ids
+     * @return
+     */
+    int batchDelete(@Param("ids") List<Long> ids);
 }

+ 30 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DelRegisterDto.java

@@ -0,0 +1,30 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+public class DelRegisterDto {
+
+    @ApiModelProperty(value = "乐团id", required = true)
+    private String musicGroupId;
+
+    @ApiModelProperty(value = "用户ids", required = true)
+    private List<Integer> userIds;
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public List<Integer> getUserIds() {
+        return userIds;
+    }
+
+    public void setUserIds(List<Integer> userIds) {
+        this.userIds = userIds;
+    }
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexBaseMonthData.java

@@ -34,6 +34,17 @@ public class IndexBaseMonthData {
 
 	private Date updateTime;
 
+	public IndexBaseMonthData() {
+	}
+
+	public IndexBaseMonthData(Date month, Integer organId) {
+		this.month = month;
+		this.organId = organId;
+		this.totalNum = BigDecimal.ZERO;
+		this.activateNum = BigDecimal.ZERO;
+		this.percent = BigDecimal.ZERO;
+	}
+
 	public Long getId() {
 		return id;
 	}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupStudentClassAdjust.java

@@ -28,6 +28,9 @@ public class MusicGroupStudentClassAdjust {
 	@ApiModelProperty(value = "班级可排课时长", required = false)
 	private String classCourseMinute;
 
+	@ApiModelProperty(value = "主班剩余总时长", required = false)
+	private Integer masterClassCourseTimes;
+
 	@ApiModelProperty(value = "老师选择的每种类型的排课时长", required = false)
 	private String defaultCourseTypeMinute;
 
@@ -55,6 +58,14 @@ public class MusicGroupStudentClassAdjust {
 
 	private Date updateTime;
 
+	public Integer getMasterClassCourseTimes() {
+		return masterClassCourseTimes;
+	}
+
+	public void setMasterClassCourseTimes(Integer masterClassCourseTimes) {
+		this.masterClassCourseTimes = masterClassCourseTimes;
+	}
+
 	public Integer getMasterClassGroupId() {
 		return masterClassGroupId;
 	}

+ 1 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java

@@ -501,10 +501,9 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * 获取基础技能班/线上基础技能班数量和容许最大数量
      * @param musicGroupId
      * @param type
-     * @param subjectIds
      * @return
      */
-    HighClassGroupNumDto getSubjectMaxHighClassGroupNum(String musicGroupId,ClassGroupTypeEnum type,String subjectIds);
+    HighClassGroupNumDto getSubjectMaxHighClassGroupNum(String musicGroupId,ClassGroupTypeEnum type);
 
     /**
      * 进行中乐团-修改-班级详情-班级合并-获取学员需要补交的费用以及需要退还的课程余额

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java

@@ -336,4 +336,12 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
      */
     Boolean delReg(Long id);
 
+
+    /**
+     * 批量删除报名的学生
+     * @param userIds
+     * @return
+     */
+    Boolean batchDelRegs(String musicGroupId,List<Integer> userIds);
+
 }

+ 22 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -217,11 +217,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         //基础技能班和线上基础技能班,可分班原则为声部人数/6向上取整
         if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) || classGroup.getType().equals(ClassGroupTypeEnum.HIGH)) {
-            String subjectIds = classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) ? classGroup.getMemo() : classGroup.getSubjectIdList();
-            HighClassGroupNumDto highClassGroupNumDto = getSubjectMaxHighClassGroupNum(classGroup.getMusicGroupId(), classGroup.getType(), subjectIds);
+            HighClassGroupNumDto highClassGroupNumDto = getSubjectMaxHighClassGroupNum(classGroup.getMusicGroupId(), classGroup.getType());
             if (highClassGroupNumDto.getNowHighClassGroupNum() >= highClassGroupNumDto.getMaxHighClassGroupNum()) {
                 String errMsg = classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) ? "线上基础技能班" : "基础技能班";
-                throw new BizException("此乐团所选声部," + errMsg + "数量不能大于" + highClassGroupNumDto.getMaxHighClassGroupNum());
+                throw new BizException("此乐团," + errMsg + "数量不能大于" + highClassGroupNumDto.getMaxHighClassGroupNum());
             }
         }
 
@@ -3553,18 +3552,27 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
-    public HighClassGroupNumDto getSubjectMaxHighClassGroupNum(String musicGroupId, ClassGroupTypeEnum type, String subjectIds) {
+    public HighClassGroupNumDto getSubjectMaxHighClassGroupNum(String musicGroupId, ClassGroupTypeEnum type) {
         //基础技能班和线上基础技能班,可分班原则为声部人数/6向上取整
-        String[] subjectIdArr = subjectIds.split(",");
-        List<String> subjectIdList = Arrays.asList(subjectIdArr);
-        if (subjectIdList.contains("14") || subjectIdList.contains("15")) {
-            subjectIds += ",14,15";
-        }
+        List<StudentRegistration> musicGroupStudents = studentRegistrationDao.findMusicGroupStudent(musicGroupId, null);
+        Map<Integer, List<StudentRegistration>> regMap = musicGroupStudents.stream().collect(Collectors.groupingBy(StudentRegistration::getActualSubjectId));
+        int maxClassGroupNum = 0;
+        int otherSubjectRegNum = 0;
+        for (Map.Entry<Integer, List<StudentRegistration>> regEntry : regMap.entrySet()) {
+            //上低音号、长号 合并计算
+            if (regEntry.getKey().equals(14) || regEntry.getKey().equals(15)) {
+                otherSubjectRegNum += regEntry.getValue().size();
+            }
+            int classNum = regEntry.getValue().size() / 6;
+            classNum += (regEntry.getValue().size() % 6) > 0 ? 1 : 0;
+            maxClassGroupNum += classNum;
+        }
+        maxClassGroupNum += otherSubjectRegNum / 6;
+        maxClassGroupNum += (otherSubjectRegNum % 6) > 0 ? 1 : 0;
+
         HighClassGroupNumDto highClassGroupNumDto = new HighClassGroupNumDto();
-        int nowClassGroupNum = classGroupDao.getMusicGroupHighClassNumBySubject(musicGroupId, subjectIds, type);
-        int subjectStudentNum = studentRegistrationDao.getMusicGroupSubjectStudentNum(musicGroupId, subjectIds);
-        int maxClassGroupNum = subjectStudentNum / 6;
-        maxClassGroupNum += (subjectStudentNum % 6) > 0 ? 1 : 0;
+        int nowClassGroupNum = classGroupDao.getMusicGroupHighClassNumBySubject(musicGroupId, type);
+
         highClassGroupNumDto.setNowHighClassGroupNum(nowClassGroupNum);
         highClassGroupNumDto.setMaxHighClassGroupNum(maxClassGroupNum);
         return highClassGroupNumDto;
@@ -3739,6 +3747,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         musicGroupStudentClassAdjust.setOperatorId(sysUser.getId());
         musicGroupStudentClassAdjust.setClassGroupIds(JSON.toJSONString(classGroupIds));
         musicGroupStudentClassAdjust.setStudentIds(JSON.toJSONString(studentIds));
+        musicGroupStudentClassAdjust.setMasterClassCourseTimes(courseScheduleDao.queryTotalCourseTimes(masterClassGroupId));
         if (classGroupStudents != null && classGroupStudents.size() > 0) {
             musicGroupStudentClassAdjust.setClassGroupStudents(JSON.toJSONString(mergeClassSplitClassAffirmDto.getClassGroupStudents()));
         }

+ 91 - 36
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -1,6 +1,8 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dto.IndexBaseDto;
+import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.enums.IndexDataType;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -11,9 +13,12 @@ import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.service.IndexBaseMonthDataService;
 import com.ym.mec.biz.dal.dao.IndexBaseMonthDataDao;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -22,6 +27,15 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 	
 	@Autowired
 	private IndexBaseMonthDataDao indexBaseMonthDataDao;
+	@Autowired
+	private OrganizationDao organizationDao;
+
+	private static ThreadLocal<Set<Integer>> organIds = new ThreadLocal<Set<Integer>>(){
+		@Override
+		protected Set<Integer> initialValue() {
+			return new HashSet<>();
+		}
+	};
 
 	@Override
 	public BaseDAO<Long, IndexBaseMonthData> getDAO() {
@@ -46,7 +60,6 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			dataTypes = Arrays.stream(dataTypesStr.split(",")).collect(Collectors.toSet());
 		}
 
-
 		List<IndexBaseMonthData> indexBaseDatas = indexBaseMonthDataDao.getIndexBaseData(organIds, dataTypes, startMonth, endMonth);
 		if(CollectionUtils.isEmpty(indexBaseDatas)){
 			return result;
@@ -63,56 +76,98 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public Map<String, List<IndexBaseDto>> indexBaseDataTask(String startMonth, String endMonth) {
 		Map<String, List<IndexBaseDto>> result = new HashMap<>();
 
-		if(StringUtils.isBlank(startMonth)){
-			LocalDateTime nowDateTime = LocalDateTime.now();
-			startMonth = nowDateTime.getYear() + "-01";
-			endMonth = null;
+		DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM");
+		LocalDate nowDate = LocalDate.now();
+		LocalDate startDate = nowDate.withMonth(1).withDayOfMonth(1);
+		LocalDate endDate = nowDate.withDayOfMonth(1);
+		if(StringUtils.isNotBlank(startMonth)){
+			startDate = LocalDate.parse(startMonth+"-01", DateUtil.dateFormatter);
+		}
+
+		if(StringUtils.isNotBlank(endMonth)){
+			endDate = LocalDate.parse(endMonth+"-01", DateUtil.dateFormatter);
 		}
 
-		countUserSignUpDate(startMonth, endMonth);
+		List<Organization> allOrgans = organizationDao.findAllOrgans();
+		Set<Integer> organIds = allOrgans.stream().map(Organization::getId).collect(Collectors.toSet());
+		this.organIds.get().clear();
+		this.organIds.get().addAll(organIds);
+
+		while (startDate.compareTo(endDate)<=0){
+			countUserSignUpData(df.format(startDate));
+			countHomeworkData(startMonth);
 
-		countHomeworkDate(startMonth, endMonth);
+			startDate = startDate.plusMonths(1);
+		}
 
 		return result;
 	}
 
-	private void countUserSignUpDate(String startMonth, String endMonth){
-		List<IndexBaseMonthData> dataList = indexBaseMonthDataDao.getStudentSignUpData(startMonth, endMonth);
-		if(CollectionUtils.isEmpty(dataList)){
-			return;
+	/**
+	 * @describe 处理并保存每月数据
+	 * @author Joburgess
+	 * @date 2021/1/11 0011
+	 * @return void
+	 */
+	private void saveData(List<IndexBaseMonthData> dataList, String startMonth, IndexDataType indexDataType){
+		startMonth = startMonth+"-01";
+		Date date = DateUtil.stringToDate(startMonth, "yyyy-MM-dd");
+		if(Objects.isNull(dataList)){
+			dataList = new ArrayList<>();
 		}
-		Set<String> months = dataList.stream().map(s -> DateUtil.dateToString(s.getMonth(), "yyyy-MM-dd")).collect(Collectors.toSet());
-		indexBaseMonthDataDao.deleteWithMonthAndType(months, IndexDataType.ACTIVATION_RATE);
-		indexBaseMonthDataDao.batchInsertWithDataType(dataList, IndexDataType.ACTIVATION_RATE);
+		Set<Integer> hasOrganIds = dataList.stream().map(IndexBaseMonthData::getOrganId).collect(Collectors.toSet());
+		for (Integer organId : this.organIds.get()) {
+			if(hasOrganIds.contains(organId)){
+				continue;
+			}
+			dataList.add(new IndexBaseMonthData(date, organId));
+		}
+		indexBaseMonthDataDao.deleteWithMonthAndType(Arrays.asList(startMonth), indexDataType);
+		indexBaseMonthDataDao.batchInsertWithDataType(dataList, indexDataType);
 	}
 
-	private void countHomeworkDate(String startMonth, String endMonth){
-		List<IndexBaseMonthData> dataList = indexBaseMonthDataDao.getHomeworkDate(startMonth, endMonth, null);
-		if(CollectionUtils.isEmpty(dataList)){
-			return;
-		}
-		Set<String> months = dataList.stream().map(s -> DateUtil.dateToString(s.getMonth(), "yyyy-MM-dd")).collect(Collectors.toSet());
-		indexBaseMonthDataDao.deleteWithMonthAndType(months, IndexDataType.HOMEWORK_CREATE_RATE);
-		indexBaseMonthDataDao.batchInsertWithDataType(dataList, IndexDataType.HOMEWORK_CREATE_RATE);
+	/**
+	 * @describe 激活率
+	 * @author Joburgess
+	 * @date 2021/1/11 0011
+	 * @param startMonth:
+	 * @return void
+	 */
+	private void countUserSignUpData(String startMonth){
+		List<IndexBaseMonthData> dataList = indexBaseMonthDataDao.getStudentSignUpData(startMonth);
+		saveData(dataList, startMonth, IndexDataType.ACTIVATION_RATE);
+	}
 
-		List<IndexBaseMonthData> dataList1 = indexBaseMonthDataDao.getHomeworkDate(startMonth, endMonth, "submit");
-		if(CollectionUtils.isEmpty(dataList1)){
-			return;
-		}
-		Set<String> months1 = dataList1.stream().map(s -> DateUtil.dateToString(s.getMonth(), "yyyy-MM-dd")).collect(Collectors.toSet());
-		indexBaseMonthDataDao.deleteWithMonthAndType(months1, IndexDataType.HOMEWORK_SUBMIT_RATE);
-		indexBaseMonthDataDao.batchInsertWithDataType(dataList1, IndexDataType.HOMEWORK_SUBMIT_RATE);
+	/**
+	 * @describe 作业数据
+	 * @author Joburgess
+	 * @date 2021/1/11 0011
+	 * @param startMonth:
+	 * @return void
+	 */
+	private void countHomeworkData(String startMonth){
+		List<IndexBaseMonthData> dataList = indexBaseMonthDataDao.getHomeworkDate(startMonth, null);
+		saveData(dataList, startMonth, IndexDataType.HOMEWORK_CREATE_RATE);
+
+		List<IndexBaseMonthData> dataList1 = indexBaseMonthDataDao.getHomeworkDate(startMonth, "submit");
+		saveData(dataList1, startMonth, IndexDataType.HOMEWORK_SUBMIT_RATE);
+
+		List<IndexBaseMonthData> dataList2 = indexBaseMonthDataDao.getHomeworkDate(startMonth, "comment");
+		saveData(dataList2, startMonth, IndexDataType.HOMEWORK_COMMENT_RATE);
+	}
 
+	/**
+	 * @describe 统计合作单位数据
+	 * @author Joburgess
+	 * @date 2021/1/11 0011
+	 * @param startMonth:
+	 * @return void
+	 */
+	private void countSchoolData(String startMonth){
 
-		List<IndexBaseMonthData> dataList2 = indexBaseMonthDataDao.getHomeworkDate(startMonth, endMonth, "comment");
-		if(CollectionUtils.isEmpty(dataList2)){
-			return;
-		}
-		Set<String> months2 = dataList2.stream().map(s -> DateUtil.dateToString(s.getMonth(), "yyyy-MM-dd")).collect(Collectors.toSet());
-		indexBaseMonthDataDao.deleteWithMonthAndType(months2, IndexDataType.HOMEWORK_COMMENT_RATE);
-		indexBaseMonthDataDao.batchInsertWithDataType(dataList2, IndexDataType.HOMEWORK_COMMENT_RATE);
 	}
 }

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -230,6 +230,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 						}
 					}
 				}
+			}else if(paymentType == SPAN_GROUP_CLASS_ADJUST){
+				status = musicGroupPaymentCalenderDto.getStatus();
 			}
 		}
 
@@ -1158,7 +1160,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 					continue;
 				}
 				//如果乐团还在审核中
-				if(musicGroup.getStatus() == MusicGroupStatusEnum.DRAFT || musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT|| musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT_FAILED){
+				if(musicGroup.getStatus() == MusicGroupStatusEnum.DRAFT || musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT|| musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT_FAILED || musicGroup.getStatus() == MusicGroupStatusEnum.CLOSE){
 					continue;
 				}
 				// “未开始”更新至“进行中”

+ 220 - 133
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -1,9 +1,5 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
-import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
-import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
-
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -20,6 +16,7 @@ import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
+import com.ym.mec.auth.api.enums.CertificateTypeEnum;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -34,7 +31,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
-import com.ym.mec.auth.api.enums.CertificateTypeEnum;
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.GoodsDao;
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
@@ -115,6 +111,8 @@ import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.biz.service.SysUserCashAccountDetailService;
 import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.entity.ImGroupMember;
+import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.entity.ImResult;
 import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.exception.BizException;
@@ -126,6 +124,10 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
+import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
+
 @Service
 public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, StudentRegistration> implements StudentRegistrationService {
 
@@ -650,133 +652,192 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-	public Integer insertStudent(StudentAddDto studentAddDto) throws Exception {
-		StudentRegistration studentRegistration = studentAddDto.getStudentRegistration();
-		if (studentRegistration == null) {
-			throw new BizException("参数校验失败");
-		}
-		/*
-		 * if(studentAddDto.getSignClassId() == null && studentAddDto.getMixClassId() == null){ throw new BizException("参数校验失败: 单技班或合奏班必填一项"); }
-		 */
-		Date date = new Date();
-		String musicGroupId = studentRegistration.getMusicGroupId();
-
-		studentRegistration.setCreateTime(date);
-		studentRegistration.setUpdateTime(date);
-
-		StudentRegistration phoneAndMusicGroupId = studentRegistrationDao.getByPhoneAndMusicGroupId(musicGroupId, studentRegistration.getParentsPhone());
-		if (phoneAndMusicGroupId != null && phoneAndMusicGroupId.getMusicGroupStatus() != StudentMusicGroupStatusEnum.QUIT
-				&& phoneAndMusicGroupId.getMusicGroupStatus() != StudentMusicGroupStatusEnum.APPLY) {
-			throw new BizException("该学员已存在");
-		} else {
-			SysUser sysUser = studentRegistrationDao.getSysUserByPhone(studentRegistration.getParentsPhone());
-			MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
-			Integer userId;
-			if (sysUser == null) {
-				// 新增user
-				sysUser = new SysUser();
-				sysUser.setPhone(studentRegistration.getParentsPhone());
-				sysUser.setRealName(studentRegistration.getParentsName());
-				sysUser.setUsername(studentRegistration.getName());
-				sysUser.setGender(studentRegistration.getGender());
-				sysUser.setUserType("STUDENT");
-				sysUser.setIdCardNo(studentRegistration.getIdCardNo());
-				sysUser.setOrganId(musicGroup.getOrganId());
-				sysUser.setBirthdate(studentRegistration.getBirthdate());
-				teacherDao.addSysUser(sysUser);
-				userId = sysUser.getId();
-				studentDao.insert(new Student(userId, studentRegistration.getSubjectId().toString()));
-				// 添加用户现金账户
-				sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
-				// 添加用户电子签章账户
-				// contractService.register(userId, sysUser.getRealName(), sysUser.getIdCardNo(), sysUser.getPhone());
-				ImResult register = imFeignService.register(new ImUserModel(userId.toString(), sysUser.getUsername(), null));
-				sysUser.setImToken(register.getToken());
-				teacherDao.updateUser(sysUser);
-			} else {
-				if (StringUtils.isNotEmpty(sysUser.getUsername())) {
-					if (!sysUser.getUsername().equals(studentRegistration.getName())) {
-						throw new BizException("操作失败:账户已被注册");
-					}
-				}
-				if (!sysUser.getUserType().contains("STUDENT")) {
-					sysUser.setUserType(sysUser.getUserType() + ",STUDENT");
-				}
-				sysUser.setPhone(studentRegistration.getParentsPhone());
-				sysUser.setRealName(studentRegistration.getParentsName());
-				sysUser.setUsername(studentRegistration.getName());
-				sysUser.setGender(studentRegistration.getGender());
-				sysUser.setOrganId(musicGroup.getOrganId());
-				sysUser.setBirthdate(studentRegistration.getBirthdate());
-				teacherDao.updateUser(sysUser);
-				userId = sysUser.getId();
-				Student student = studentDao.get(userId);
-				if (student == null) {
-					studentDao.insert(new Student(userId, studentRegistration.getSubjectId().toString()));
-				} else if (StringUtils.isEmpty(student.getSubjectIdList())) {
-					student.setSubjectIdList(studentRegistration.getSubjectId().toString());
-					student.setUpdateTime(date);
-					studentDao.update(student);
-				} else if (StringUtils.isNotEmpty(student.getSubjectIdList())) {
-					String[] split = student.getSubjectIdList().split(",");
-					List<String> list = new ArrayList<>(Arrays.asList(split));
-					if (!list.contains(studentRegistration.getSubjectId().toString())) {
-						list.add(studentRegistration.getSubjectId().toString());
-						student.setSubjectIdList(StringUtils.join(list, ","));
-						student.setUpdateTime(date);
-						studentDao.update(student);
-					}
-				}
-			}
-			MusicGroupStudentFee studentFeeDaoByUser = musicGroupStudentFeeDao.findByUser(userId, musicGroupId);
-			if (studentFeeDaoByUser != null) {
-				throw new BizException("该学员已存在");
-			}
-			studentRegistration.setActualSubjectId(studentRegistration.getSubjectId());
-			studentRegistration.setUserId(userId);
-			studentRegistration.setPaymentStatus(PaymentStatusEnum.OPEN);
-			studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.APPLY);
-			studentRegistration.setTemporaryCourseFee(studentAddDto.getTemporaryCourseFee());
-			// 学生报名表
-			Set<Integer> roleIds = new HashSet<>(1);
-			roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
-
-			sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()),
-					MessageTypeEnum.BACKSTAGE_MUSIC_GROUP_ADD_STUDENT, "", musicGroup.getName(), studentRegistration.getName());
-			// 增加报名学生数
-			musicGroupSubjectPlanService.addApplyStudentNum(musicGroupId, studentRegistration.getSubjectId(), 1);
-
-			MusicGroupStudentFee musicGroupStudentFee = new MusicGroupStudentFee(musicGroupId, userId, studentRegistration.getSubjectId(),
-					studentAddDto.getCourseFee(), null, studentAddDto.getTemporaryCourseFee(), null);
-
-			/*
-			 * if (musicGroup.getFeeType() != null && musicGroup.getFeeType() != MusicGroupPaymentCalender.FeeType.OFFLINE &&
-			 * musicGroupStudentFee.getTemporaryCourseFee().doubleValue() * 100 == 0) {
-			 * musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1); }
-			 */
-			musicGroupStudentFeeDao.insert(musicGroupStudentFee);
-			// musicGroupStudentFeeDao.insert(new MusicGroupStudentFee(musicGroupId,
-			// userId, studentRegistration.getSubjectId(), studentAddDto.getCourseFee(),
-			// nextPaymentDate, studentAddDto.getTemporaryCourseFee(), paymentStatus));
-			// 当前学员是否以前存在过当前乐团
-			if (phoneAndMusicGroupId != null) {
-				studentRegistration.setId(phoneAndMusicGroupId.getId());
-				studentRegistrationDao.update(studentRegistration);
-			} else {
-				studentRegistrationDao.insertBasic(studentRegistration);
-			}
-			studentRegistrationDao.updateCurrentClass(studentRegistration);
-			if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
-				Map<Integer, String> receivers = new HashMap<>(1);
-				receivers.put(studentRegistration.getUserId(), studentRegistration.getParentsPhone());
-				String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL) + musicGroupId;
-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_MUSIC_GROUP_ADD_STUDENT, receivers,
-						null, 0, null, "", studentRegistration.getParentsName(), studentRegistration.getName(), musicGroup.getName(),
-						HttpUtil.getSortUrl(studentApplyUrl));
-			}
-			return userId;
-		}
-	}
+    public Integer insertStudent(StudentAddDto studentAddDto) throws Exception {
+        StudentRegistration studentRegistration = studentAddDto.getStudentRegistration();
+        if (studentRegistration == null) {
+            throw new BizException("参数校验失败");
+        }
+        /*if(studentAddDto.getSignClassId() == null && studentAddDto.getMixClassId() == null){
+            throw new BizException("参数校验失败: 单技班或合奏班必填一项");
+        }*/
+        Date date = new Date();
+        String musicGroupId = studentRegistration.getMusicGroupId();
+        
+        studentRegistration.setCreateTime(date);
+        studentRegistration.setUpdateTime(date);
+
+        StudentRegistration phoneAndMusicGroupId = studentRegistrationDao.getByPhoneAndMusicGroupId(musicGroupId, studentRegistration.getParentsPhone());
+        if (phoneAndMusicGroupId != null && phoneAndMusicGroupId.getMusicGroupStatus() != StudentMusicGroupStatusEnum.QUIT && phoneAndMusicGroupId.getMusicGroupStatus() != StudentMusicGroupStatusEnum.APPLY) {
+            throw new BizException("该学员已存在");
+        } else {
+            SysUser sysUser = studentRegistrationDao.getSysUserByPhone(studentRegistration.getParentsPhone());
+            MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+            Integer userId;
+            if (sysUser == null) {
+                //新增user
+                sysUser = new SysUser();
+                sysUser.setPhone(studentRegistration.getParentsPhone());
+                sysUser.setRealName(studentRegistration.getParentsName());
+                sysUser.setUsername(studentRegistration.getName());
+                sysUser.setGender(studentRegistration.getGender());
+                sysUser.setUserType("STUDENT");
+                sysUser.setIdCardNo(studentRegistration.getIdCardNo());
+                sysUser.setOrganId(musicGroup.getOrganId());
+                sysUser.setBirthdate(studentRegistration.getBirthdate());
+                teacherDao.addSysUser(sysUser);
+                userId = sysUser.getId();
+                studentDao.insert(new Student(userId, studentRegistration.getSubjectId().toString()));
+                //添加用户现金账户
+                sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
+                //添加用户电子签章账户
+//                contractService.register(userId, sysUser.getRealName(), sysUser.getIdCardNo(), sysUser.getPhone());
+                ImResult register = imFeignService.register(new ImUserModel(userId.toString(), sysUser.getUsername(), null));
+                sysUser.setImToken(register.getToken());
+                teacherDao.updateUser(sysUser);
+            } else {
+                if (StringUtils.isNotEmpty(sysUser.getUsername())) {
+                    if (!sysUser.getUsername().equals(studentRegistration.getName())) {
+                        throw new BizException("操作失败:账户已被注册");
+                    }
+                }
+                if (!sysUser.getUserType().contains("STUDENT")) {
+                    sysUser.setUserType(sysUser.getUserType() + ",STUDENT");
+                }
+                sysUser.setPhone(studentRegistration.getParentsPhone());
+                sysUser.setRealName(studentRegistration.getParentsName());
+                sysUser.setUsername(studentRegistration.getName());
+                sysUser.setGender(studentRegistration.getGender());
+                sysUser.setOrganId(musicGroup.getOrganId());
+                sysUser.setBirthdate(studentRegistration.getBirthdate());
+                teacherDao.updateUser(sysUser);
+                userId = sysUser.getId();
+                Student student = studentDao.get(userId);
+                if (student == null) {
+                    studentDao.insert(new Student(userId, studentRegistration.getSubjectId().toString()));
+                } else if (StringUtils.isEmpty(student.getSubjectIdList())) {
+                    student.setSubjectIdList(studentRegistration.getSubjectId().toString());
+                    student.setUpdateTime(date);
+                    studentDao.update(student);
+                } else if (StringUtils.isNotEmpty(student.getSubjectIdList())) {
+                    String[] split = student.getSubjectIdList().split(",");
+                    List<String> list = new ArrayList<>(Arrays.asList(split));
+                    if (!list.contains(studentRegistration.getSubjectId().toString())) {
+                        list.add(studentRegistration.getSubjectId().toString());
+                        student.setSubjectIdList(StringUtils.join(list, ","));
+                        student.setUpdateTime(date);
+                        studentDao.update(student);
+                    }
+                }
+            }
+            MusicGroupStudentFee studentFeeDaoByUser = musicGroupStudentFeeDao.findByUser(userId, musicGroupId);
+            if (studentFeeDaoByUser != null) {
+                throw new BizException("该学员已存在");
+            }
+            studentRegistration.setActualSubjectId(studentRegistration.getSubjectId());
+            studentRegistration.setUserId(userId);
+            studentRegistration.setPaymentStatus(PaymentStatusEnum.OPEN);
+            studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.APPLY);
+            studentRegistration.setTemporaryCourseFee(studentAddDto.getTemporaryCourseFee());
+            //学生报名表
+            Set<Integer> roleIds = new HashSet<>(1);
+            roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
+
+            sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_MUSIC_GROUP_ADD_STUDENT, "", musicGroup.getName(), studentRegistration.getName());
+            //增加报名学生数
+            musicGroupSubjectPlanService.addApplyStudentNum(musicGroupId, studentRegistration.getSubjectId(), 1);
+            //添加班级关联
+            addStudents(studentAddDto, userId);
+            //保存乐团学生费用表
+            if (studentAddDto.getCourseFee() == null) {
+                MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, studentRegistration.getActualSubjectId());
+                studentAddDto.setCourseFee(musicOneSubjectClassPlan.getFee());
+            }
+//            Date nextPaymentDate = musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null, null);
+
+            StudentPaymentOrder waitPayOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.WAIT_PAY);
+
+            if (waitPayOrder != null) {
+                waitPayOrder.setStatus(DealStatusEnum.CLOSE);
+                studentPaymentOrderService.update(waitPayOrder);
+            }
+            //生成订单
+            StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+            studentPaymentOrder.setUserId(userId);
+            studentPaymentOrder.setGroupType(GroupType.MUSIC);
+            studentPaymentOrder.setType(OrderTypeEnum.APPLY);
+            studentPaymentOrder.setStatus(DealStatusEnum.WAIT_PAY);
+            studentPaymentOrder.setMusicGroupId(musicGroupId);
+            studentPaymentOrder.setClassGroupId(studentAddDto.getSignClassId());
+            studentPaymentOrder.setOrganId(musicGroup.getOrganId());
+            studentPaymentOrder.setRoutingOrganId(musicGroup.getOrganId());
+
+            //生成订单明细
+            List<StudentPaymentOrderDetail> studentPaymentOrderDetails = studentAddDto.getStudentPaymentOrderDetails();
+            if (studentPaymentOrderDetails == null) {
+                studentPaymentOrderDetails = new ArrayList<>();
+            } else {
+                studentPaymentOrderDetails.forEach(e -> {
+                    if (e.getPrice() == null) {
+                        throw new BizException("请补全订单信息");
+                    }
+                });
+            }
+            StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
+            studentPaymentOrderDetail.setPrice(studentAddDto.getTemporaryCourseFee() == null ? BigDecimal.ZERO : studentAddDto.getTemporaryCourseFee());
+            studentPaymentOrderDetail.setType(OrderDetailTypeEnum.COURSE);
+            studentPaymentOrderDetails.add(studentPaymentOrderDetail);
+            //汇总金额
+
+            BigDecimal reduce = studentPaymentOrderDetails.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            MusicGroupStudentFee.PaymentStatus paymentStatus = MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
+            if (reduce.compareTo(BigDecimal.ZERO) == 0) {
+                paymentStatus = PAID_COMPLETED;
+                studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
+                studentRegistration.setPaymentStatus(YES);
+                studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
+                studentPaymentOrder.setActualAmount(reduce);
+                studentPaymentOrder.setPayTime(date);
+            }
+            MusicGroupStudentFee musicGroupStudentFee = new MusicGroupStudentFee(musicGroupId,
+                    userId, studentRegistration.getSubjectId(), studentAddDto.getCourseFee(),
+                    null, studentAddDto.getTemporaryCourseFee(), paymentStatus);
+
+            /*if (musicGroup.getFeeType() != null && musicGroup.getFeeType() != MusicGroupPaymentCalender.FeeType.OFFLINE && musicGroupStudentFee.getTemporaryCourseFee().doubleValue() * 100 == 0) {
+                musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1);
+            }*/
+            musicGroupStudentFeeDao.insert(musicGroupStudentFee);
+//            musicGroupStudentFeeDao.insert(new MusicGroupStudentFee(musicGroupId,
+//                    userId, studentRegistration.getSubjectId(), studentAddDto.getCourseFee(),
+//                    nextPaymentDate, studentAddDto.getTemporaryCourseFee(), paymentStatus));
+            musicGroupStudentFeeDao.updateCalender(userId, musicGroupId);
+            studentPaymentOrder.setExpectAmount(reduce);
+            //当前学员是否以前存在过当前乐团
+            if (phoneAndMusicGroupId != null) {
+                studentRegistration.setId(phoneAndMusicGroupId.getId());
+                studentRegistrationDao.update(studentRegistration);
+            } else {
+                studentRegistrationDao.insertBasic(studentRegistration);
+            }
+            studentRegistrationDao.updateCurrentClass(studentRegistration);
+            studentPaymentOrderService.insert(studentPaymentOrder);
+            studentPaymentOrderDetails.forEach(e -> {
+                e.setPaymentOrderId(studentPaymentOrder.getId());
+            });
+            studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetails);
+            if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
+                Map<Integer, String> receivers = new HashMap<>(1);
+                receivers.put(studentRegistration.getUserId(), studentRegistration.getParentsPhone());
+                if (reduce.compareTo(BigDecimal.ZERO) == 0) {
+                    sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_MUSIC_GROUP_ADD_STUDENT_FREE,
+                            receivers, null, 0, null, "", studentRegistration.getParentsName(), studentRegistration.getName(), musicGroup.getName());
+                } else {
+                    String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL) + musicGroupId;
+                    sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_MUSIC_GROUP_ADD_STUDENT, receivers, null, 0, null, "", studentRegistration.getParentsName(), studentRegistration.getName(), musicGroup.getName(), HttpUtil.getSortUrl(studentApplyUrl));
+                }
+            }
+            return userId;
+        }
+    }
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
@@ -825,7 +886,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 registration = studentRegistration;
 
                 //增加报名学生数
-                musicGroupSubjectPlanService.addApplyStudentNum(newMusicGroupId, studentRegistration.getActualSubjectId(), 1);
+                musicGroupSubjectPlanService.addApplyStudentNum(newMusicGroupId, studentRegistration.getSubjectId(), 1);
                 //新增Fee表
                 MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(studentRegistration.getUserId(),newMusicGroupId);
                 if(musicGroupStudentFee == null){
@@ -1552,4 +1613,30 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }
         return true;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean batchDelRegs(String musicGroupId, List<Integer> userIds) {
+        List<StudentRegistration> registrations = studentRegistrationDao.findStudentListByUserIdList(musicGroupId, userIds);
+        if (registrations.size() <= 0) {
+            throw new BizException("删除的学员不存在,请核查");
+        }
+        Map<Integer, List<StudentRegistration>> regMap = registrations.stream().collect(Collectors.groupingBy(StudentRegistration::getSubjectId));
+        //更新声部信息
+        for (Map.Entry<Integer, List<StudentRegistration>> regEntry : regMap.entrySet()) {
+            MusicGroupSubjectPlan subjectPlan = musicGroupSubjectPlanDao.findSubjectPlan(musicGroupId, regEntry.getKey());
+            subjectPlan.setApplyStudentNum(subjectPlan.getApplyStudentNum() - regEntry.getValue().size());
+            int updateNum = musicGroupSubjectPlanDao.update(subjectPlan);
+            if (updateNum <= 0) {
+                throw new BizException("声部信息更新失败");
+            }
+        }
+        //删除注册信息
+        List<Long> ids = registrations.stream().map(StudentRegistration::getId).collect(Collectors.toList());
+        int delNum = studentRegistrationDao.batchDelete(ids);
+        if (delNum <= 0) {
+            throw new BizException("学员删除失败");
+        }
+        return true;
+    }
 }

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

@@ -2910,6 +2910,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			classGroupDao.update(classGroup);
 
 			try {
+				imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), classGroup.getName(), vipGroup.getName(), null, null, GroupType.VIP.getCode());
 				imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
 			} catch (Exception e) {
 				e.printStackTrace();
@@ -3091,6 +3092,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		studentDao.updateStudentServiceTag(null, studentIds, YesOrNoEnum.YES.getCode());
 
 		try {
+			imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), classGroup.getName(), vipGroup.getName(), null, null, GroupType.VIP.getCode());
 			imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
 		} catch (Exception e) {
 			e.printStackTrace();

+ 0 - 1
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -1401,7 +1401,6 @@
     <select id="getMusicGroupHighClassNumBySubject" resultType="int">
         SELECT COUNT(*) FROM class_group WHERE music_group_id_=#{musicGroupId}
         AND type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} AND del_flag_ = '0'
-        AND INTE_ARRAY(subject_id_list_,#{subjectIds})
     </select>
 
     <sql id="queryClassGroupPageSql">

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

@@ -3503,4 +3503,9 @@
         </foreach>
         ORDER BY class_date_,start_class_time_ ASC
     </select>
+    <select id="queryTotalCourseTimes" resultType="java.lang.Integer">
+        SELECT SUM(ROUND((UNIX_TIMESTAMP(CONCAT(cs.class_date_,' ',cs.end_class_time_)) - UNIX_TIMESTAMP(CONCAT(cs.class_date_,' ',cs.start_class_time_)))/60))
+        FROM course_schedule cs
+        WHERE cs.class_group_id_ = #{classGroupId} AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW()
+    </select>
 </mapper>

+ 7 - 12
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -139,28 +139,26 @@
 	<select id="getStudentSignUpData" resultMap="IndexBaseMonthData">
 		SELECT
 			organ_id_,
-			CONCAT(DATE_FORMAT( create_time_, '%Y-%m' ), '-01') month_,
+			CONCAT( #{startMonth}, '-01' ) month_,
 			COUNT( id_ ) total_num_,
 			COUNT(CASE WHEN password_ IS NOT NULL THEN id_ ELSE NULL END) activate_num_,
 			TRUNCATE(COUNT(CASE WHEN password_ IS NOT NULL THEN id_ ELSE NULL END)/COUNT( id_ )*100, 2) percent_
 		FROM sys_user
 		WHERE
 			del_flag_=0
+		  	AND organ_id_ IS NOT NULL
 			AND user_type_ LIKE '%STUDENT%'
 			<if test="startMonth!=null and startMonth!=''">
-				AND DATE_FORMAT(create_time_, '%Y-%m')&gt;=#{startMonth}
+				AND DATE_FORMAT(create_time_, '%Y-%m')=#{startMonth}
 			</if>
-			<if test="endMonth!=null and endMonth!=''">
-				AND DATE_FORMAT(create_time_, '%Y-%m')&lt;=#{endMonth}
-			</if>
-		GROUP BY organ_id_,month_
+		GROUP BY organ_id_
 		ORDER BY organ_id_,month_;
 	</select>
 
 	<select id="getHomeworkDate" resultMap="IndexBaseMonthData">
 		SELECT
 			su.organ_id_,
-			CONCAT(DATE_FORMAT(sees.monday_, '%Y-%m'), '-01') month_,
+			CONCAT( #{startMonth}, '-01' ) month_,
 			<choose>
 				<when test="type == 'submit'">
 					SUM(sees.expect_exercises_num_) total_num_,
@@ -183,12 +181,9 @@
 		WHERE su.del_flag_=0
 			AND su.organ_id_ IS NOT NULL
 			<if test="startMonth!=null and startMonth!=''">
-				AND DATE_FORMAT(sees.monday_, '%Y-%m')&gt;=#{startMonth}
-			</if>
-			<if test="endMonth!=null and endMonth!=''">
-				AND DATE_FORMAT(sees.monday_, '%Y-%m')&lt;=#{endMonth}
+				AND DATE_FORMAT(sees.monday_, '%Y-%m')=#{startMonth}
 			</if>
-		GROUP BY su.organ_id_,month_
+		GROUP BY su.organ_id_
 		ORDER BY su.organ_id_,month_
 	</select>
 </mapper>

+ 4 - 2
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml

@@ -465,12 +465,14 @@
         SELECT mgpc.batch_no_,MAX(mgpc.music_group_id_) music_group_id_
         ,MAX(mgpc.create_time_) create_time_,MAX(mgpc.payment_type_) payment_type_,MAX(mgpc.operator_) operator_,
         MAX(mgpc.pay_user_type_) pay_user_type_,MAX(mgpc.memo_) memo_,MAX(mgpc.audit_memo_) audit_memo_,MAX(mgpc.status_) status_,
-        SUM(mgpccs.course_total_minuties_) course_total_minuties_,
-        SUM(mgpccs.course_original_price_) course_original_price_,SUM(mgpccs.course_current_price_) course_current_price_,
+        CASE WHEN MAX(mgpc.payment_type_) = 'SPAN_GROUP_CLASS_ADJUST' THEN MAX(mgsca.master_class_course_times_) ELSE SUM(mgpccs.course_total_minuties_) END course_total_minuties_,
+        CASE WHEN MAX(mgpc.payment_type_) = 'SPAN_GROUP_CLASS_ADJUST' THEN MAX(mgpc.payment_amount_) ELSE SUM(mgpccs.course_original_price_) END course_original_price_,
+        SUM(mgpccs.course_current_price_) course_current_price_,
         MAX(mg.name_) music_group_name_,MAX(mg.organ_id_) organ_id_,MAX(mgpc.payment_pattern_)payment_pattern_
         FROM music_group_payment_calender mgpc
         LEFT JOIN music_group mg ON mg.id_ = mgpc.music_group_id_
         LEFT JOIN music_group_payment_calender_course_settings mgpccs ON mgpc.id_ = mgpccs.music_group_payment_calender_id_
+        LEFT JOIN music_group_student_class_adjust mgsca ON  mgsca.batch_no_ = mgpc.batch_no_
         <include refid="MusicGroupPaymentCalenderAuditDtoSql"/>
         GROUP BY mgpc.batch_no_
         ORDER BY create_time_ DESC

+ 6 - 2
mec-biz/src/main/resources/config/mybatis/MusicGroupStudentClassAdjustMapper.xml

@@ -14,6 +14,7 @@
 		<result column="class_group_ids_" property="classGroupIds" />
 		<result column="student_ids_" property="studentIds" />
 		<result column="class_course_minute_" property="classCourseMinute" />
+		<result column="master_class_course_times_" property="masterClassCourseTimes" />
 		<result column="default_course_type_minute_" property="defaultCourseTypeMinute" />
 		<result column="all_lock_course_ids_" property="allLockCourseIds" />
 		<result column="sub_lock_course_ids_" property="subLockCourseIds" />
@@ -39,15 +40,18 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupStudentClassAdjust" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO music_group_student_class_adjust (music_group_id_,batch_no_,new_class_group_json_,
 		class_group_ids_,student_ids_,class_course_minute_,all_lock_course_ids_,sub_lock_course_ids_,
-		operator_id_,student_payment_ids_,class_group_students_,default_course_type_minute_,master_class_group_id_,create_time_,update_time_)
+		operator_id_,student_payment_ids_,class_group_students_,default_course_type_minute_,master_class_group_id_,master_class_course_times_,create_time_,update_time_)
 		VALUES(#{musicGroupId},#{batchNo},#{newClassGroupJson},#{classGroupIds},#{studentIds},
 		#{classCourseMinute},#{allLockCourseIds},#{subLockCourseIds},#{operatorId},#{studentPaymentIds},#{classGroupStudents},
-			   #{defaultCourseTypeMinute},#{masterClassGroupId},NOW(),NOW())
+			   #{defaultCourseTypeMinute},#{masterClassGroupId},#{masterClassCourseTimes},NOW(),NOW())
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupStudentClassAdjust">
 		UPDATE music_group_student_class_adjust <set>
+		<if test="masterClassCourseTimes != null">
+			master_class_course_times_ = #{masterClassCourseTimes},
+		</if>
 		<if test="masterClassGroupId != null">
 			master_class_group_id_ = #{masterClassGroupId},
 		</if>

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

@@ -162,7 +162,7 @@
             </if>
             <if test="temporaryCourseFee != null">#{temporaryCourseFee},</if>
             <if test="surplusCourseFee != null">#{surplusCourseFee},</if>
-            <if test="createTime!=null">#{createTime},</if>
+            <if test="createTime!=null">NOW(),</if>
             <if test="updateTime!=null">NOW(),</if>
         </trim>
     </insert>

+ 0 - 7
mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java

@@ -419,11 +419,4 @@ public class ClassGroupController extends BaseController {
 //        return succeed(classGroupService.findClassCourseMinuteMap(classGroupIds));
 //    }
 
-    @ApiOperation(value = "获取乐团声部现有及容许的最大班级数量")
-    @PostMapping("/getSubjectNowAndMaxHighClassGroupNum")
-    @PreAuthorize("@pcs.hasPermissions('classGroup/getSubjectNowAndMaxHighClassGroupNum')")
-    public HttpResponseResult<HighClassGroupNumDto> getSubjectNowAndMaxHighClassGroupNum(String musicGroupId, ClassGroupTypeEnum type, String subjectIds) {
-        return succeed(classGroupService.getSubjectMaxHighClassGroupNum(musicGroupId, type, subjectIds));
-    }
-
 }

+ 9 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java

@@ -2,6 +2,7 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
+import com.ym.mec.biz.dal.dto.DelRegisterDto;
 import com.ym.mec.biz.dal.dto.MusicGroupSubjectGoodsAndInfoDto;
 import com.ym.mec.biz.dal.dto.StudentAddDto;
 import com.ym.mec.biz.dal.entity.*;
@@ -191,4 +192,12 @@ public class StudentRegistrationController extends BaseController {
         return succeed(studentRegistrationService.delReg(id));
     }
 
+
+    @ApiOperation(value = "批量删除报名的学生")
+    @PostMapping("/batchDel")
+    @PreAuthorize("@pcs.hasPermissions('studentRegistration/batchDel')")
+    public HttpResponseResult<Boolean> batchDel(@RequestBody DelRegisterDto delRegisterDto) {
+        return succeed(studentRegistrationService.batchDelRegs(delRegisterDto.getMusicGroupId(),delRegisterDto.getUserIds()));
+    }
+
 }