浏览代码

Merge remote-tracking branch 'origin/master'

zouxuan 4 年之前
父节点
当前提交
d1f2939870
共有 18 个文件被更改,包括 304 次插入139 次删除
  1. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 1 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  3. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  4. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DelRegisterDto.java
  5. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexBaseMonthData.java
  6. 1 2
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  7. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  8. 21 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  9. 91 36
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  11. 61 40
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  12. 46 20
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  13. 0 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  14. 7 12
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  15. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  16. 8 0
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  17. 0 7
      mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  18. 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班级数量

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

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

+ 21 - 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;

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

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

@@ -1160,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;
 				}
 				// “未开始”更新至“进行中”

+ 61 - 40
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -402,8 +402,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPaymentOrder.setVersion(0);
         BigDecimal balance = BigDecimal.ZERO;
         if (sporadicPayDto.getUseBalancePayment() && amount.compareTo(BigDecimal.ZERO) > 0) {
-            if (chargeInfo.getChargeType().getCode().equals(9)||chargeInfo.getChargeType().getCode().equals(13)) {
-                throw new BizException(chargeInfo.getChargeType().getMsg()+"不支持余额支付");
+            if (chargeInfo.getChargeType().getCode().equals(9) || chargeInfo.getChargeType().getCode().equals(13)) {
+                throw new BizException(chargeInfo.getChargeType().getMsg() + "不支持余额支付");
             }
             SysUserCashAccount userCashAccount = sysUserCashAccountService.get(userId);
 
@@ -919,22 +919,47 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         String musicGroupId = subFeeSettingDto.getMusicGroupId();
         //乐团状态是否正确
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
-        if (musicGroup != null) {
-            if (subFeeSettingDto.getMusicGroupStatus() == null) {
-                throw new BizException("参数校验异常");
-            }
-            if (musicGroup.getStatus() == MusicGroupStatusEnum.DRAFT || musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT_FAILED) {
-                musicGroup.setStatus(subFeeSettingDto.getMusicGroupStatus());
-                musicGroup.setUpdateTime(new Date());
-                musicGroupDao.update(musicGroup);
-            }
-            //记录日志信息
-            musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "修改乐团计划声部、乐器", sysUser.getId(), JSONObject.toJSONString(subFeeSettingDto)));
-            //删除原有的乐团声部规划
-            musicGroupSubjectPlanDao.delByMusicGroupId(musicGroupId);
-            //删除原有的声部商品组合
-            musicGroupSubjectGoodsGroupDao.delByMusicGroupId(subFeeSettingDto.getMusicGroupId());
-            //如果是进行中,补充缴费信息
+        if (musicGroup == null) {
+            throw new BizException("乐团信息不存在");
+        }
+        if (subFeeSettingDto.getMusicGroupStatus() == null) {
+            throw new BizException("参数校验异常");
+        }
+        //声部存在学生不容许删除声部
+        List<StudentRegistration> registrations = studentRegistrationDao.findClassGroupStu(musicGroupId, null);
+        Map<Integer, List<StudentRegistration>> regMap = registrations.stream().collect(Collectors.groupingBy(StudentRegistration::getActualSubjectId));
+        List<MusicGroupSubjectPlan> musicGroupSubjectPlans = subFeeSettingDto.getMusicGroupSubjectPlans();
+        List<Integer> waringSubjectIds = new ArrayList<>();
+        regMap.forEach((subjectId, regs) -> {
+            boolean hasSubject = false;
+            for (MusicGroupSubjectPlan musicGroupSubjectPlan : musicGroupSubjectPlans) {
+                if (musicGroupSubjectPlan.getSubjectId().equals(subjectId)) {
+                    hasSubject = true;
+                    musicGroupSubjectPlan.setApplyStudentNum(regs.size());
+                }
+            }
+            if (!hasSubject) {
+                waringSubjectIds.add(subjectId);
+            }
+        });
+        if (waringSubjectIds.size() > 0) {
+            List<Subject> waringSubjects = subjectDao.findBySubjectIds(waringSubjectIds);
+            String waringSubjectStr  = waringSubjects.stream().map(Subject::getName).collect(Collectors.joining(","));
+            throw new BizException(waringSubjectStr+"存在学生,不能删除");
+        }
+
+        if (musicGroup.getStatus() == MusicGroupStatusEnum.DRAFT || musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT_FAILED) {
+            musicGroup.setStatus(subFeeSettingDto.getMusicGroupStatus());
+            musicGroup.setUpdateTime(new Date());
+            musicGroupDao.update(musicGroup);
+        }
+        //记录日志信息
+        musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "修改乐团计划声部、乐器", sysUser.getId(), JSONObject.toJSONString(subFeeSettingDto)));
+        //删除原有的乐团声部规划
+        musicGroupSubjectPlanDao.delByMusicGroupId(musicGroupId);
+        //删除原有的声部商品组合
+        musicGroupSubjectGoodsGroupDao.delByMusicGroupId(subFeeSettingDto.getMusicGroupId());
+        //如果是进行中,补充缴费信息
 //            if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
 //                List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
 //                if(musicGroupStudentFees != null && musicGroupStudentFees.size() > 0){
@@ -942,30 +967,26 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 //                    musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,nextPaymentDate,"PAID_COMPLETED");
 //                }
 //            }
-            List<MusicGroupSubjectPlan> musicGroupSubjectPlans = subFeeSettingDto.getMusicGroupSubjectPlans();
-            if (musicGroupSubjectPlans != null && musicGroupSubjectPlans.size() > 0) {
-                musicGroupSubjectPlans.forEach(e -> {
-                    //修改课程费用
-                    musicGroupStudentFeeDao.updateCourseFee(musicGroupId, e.getSubjectId(), e.getFee());
-                });
-                musicGroupSubjectPlanDao.batchAdd(musicGroupSubjectPlans, musicGroupId);
-            }
-            if (subFeeSettingDto.getMusicGroupSubjectGoodsGroups() != null && subFeeSettingDto.getMusicGroupSubjectGoodsGroups().size() > 0) {
-                for (MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup : subFeeSettingDto.getMusicGroupSubjectGoodsGroups()) {
-                    if (musicGroupSubjectGoodsGroup.getType().equals(GoodsType.INSTRUMENT) && (musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson() == null
-                            || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().isEmpty()
-                            || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().equals("{}"))) {
-                        throw new BizException(musicGroupSubjectGoodsGroup.getName() + " 请选择提供方式");
-                    }
-                    if (musicGroupSubjectGoodsGroup.getGroupRemissionCourseFee() == null) {
-                        musicGroupSubjectGoodsGroup.setGroupRemissionCourseFee(0);
-                    }
+        if (musicGroupSubjectPlans != null && musicGroupSubjectPlans.size() > 0) {
+            musicGroupSubjectPlans.forEach(e -> {
+                //修改课程费用
+                musicGroupStudentFeeDao.updateCourseFee(musicGroupId, e.getSubjectId(), e.getFee());
+            });
+            musicGroupSubjectPlanDao.batchAdd(musicGroupSubjectPlans, musicGroupId);
+        }
+        if (subFeeSettingDto.getMusicGroupSubjectGoodsGroups() != null && subFeeSettingDto.getMusicGroupSubjectGoodsGroups().size() > 0) {
+            for (MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup : subFeeSettingDto.getMusicGroupSubjectGoodsGroups()) {
+                if (musicGroupSubjectGoodsGroup.getType().equals(GoodsType.INSTRUMENT) && (musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson() == null
+                        || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().isEmpty()
+                        || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().equals("{}"))) {
+                    throw new BizException(musicGroupSubjectGoodsGroup.getName() + " 请选择提供方式");
+                }
+                if (musicGroupSubjectGoodsGroup.getGroupRemissionCourseFee() == null) {
+                    musicGroupSubjectGoodsGroup.setGroupRemissionCourseFee(0);
                 }
-
-                musicGroupSubjectGoodsGroupDao.batchInsert(subFeeSettingDto.getMusicGroupSubjectGoodsGroups(), musicGroupId);
             }
-        } else {
-            throw new BizException("乐团信息不存在");
+
+            musicGroupSubjectGoodsGroupDao.batchInsert(subFeeSettingDto.getMusicGroupSubjectGoodsGroups(), musicGroupId);
         }
     }
 

+ 46 - 20
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -662,7 +662,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }*/
         Date date = new Date();
         String musicGroupId = studentRegistration.getMusicGroupId();
-        
+
         studentRegistration.setCreateTime(date);
         studentRegistration.setUpdateTime(date);
 
@@ -841,24 +841,24 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    public void insertStudent(String studentIds,String oldMusicGroupId,String newMusicGroupId,BigDecimal masterTotalPrice){
-        if(oldMusicGroupId == newMusicGroupId){
+    public void insertStudent(String studentIds, String oldMusicGroupId, String newMusicGroupId, BigDecimal masterTotalPrice) {
+        if (oldMusicGroupId == newMusicGroupId) {
             return;
         }
         SysUser sysUser1 = sysUserFeignService.queryUserInfo();
         //获取旧乐团学员注册信息
-        List<StudentRegistration> studentRegistrations = studentRegistrationDao.queryByUserIdsAndMusicGroupId(studentIds,oldMusicGroupId);
+        List<StudentRegistration> studentRegistrations = studentRegistrationDao.queryByUserIdsAndMusicGroupId(studentIds, oldMusicGroupId);
         List<StudentCourseFeeDetail> studentCourseFeeDetails = new ArrayList<>();
         BigDecimal amount = BigDecimal.ZERO;
         for (StudentRegistration studentRegistration : studentRegistrations) {
             //记录课程余额消费日志
-            if(studentRegistration.getSurplusCourseFee().doubleValue() > 0d && masterTotalPrice.doubleValue() > 0d){
+            if (studentRegistration.getSurplusCourseFee().doubleValue() > 0d && masterTotalPrice.doubleValue() > 0d) {
                 StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
-                if(studentRegistration.getSurplusCourseFee().doubleValue() > masterTotalPrice.doubleValue()){
+                if (studentRegistration.getSurplusCourseFee().doubleValue() > masterTotalPrice.doubleValue()) {
                     amount = masterTotalPrice;
                     studentCourseFeeDetail.setAmount(masterTotalPrice.negate());
                     studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().subtract(masterTotalPrice));
-                }else {
+                } else {
                     amount = studentRegistration.getSurplusCourseFee();
                     studentCourseFeeDetail.setAmount(studentRegistration.getSurplusCourseFee().negate());
                     studentCourseFeeDetail.setSurplusCourseFee(BigDecimal.ZERO);
@@ -877,7 +877,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 //修改剩余课程余额
                 registration.setSurplusCourseFee(registration.getSurplusCourseFee().add(amount));
                 studentRegistrationDao.update(registration);
-            }else {
+            } else {
                 //生成学员乐团注册表
                 studentRegistration.setOrganId(musicGroupDao.get(newMusicGroupId).getOrganId());
                 studentRegistration.setSurplusCourseFee(amount);
@@ -888,16 +888,16 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 //增加报名学生数
                 musicGroupSubjectPlanService.addApplyStudentNum(newMusicGroupId, studentRegistration.getSubjectId(), 1);
                 //新增Fee表
-                MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(studentRegistration.getUserId(),newMusicGroupId);
-                if(musicGroupStudentFee == null){
+                MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(studentRegistration.getUserId(), newMusicGroupId);
+                if (musicGroupStudentFee == null) {
                     musicGroupStudentFee = new MusicGroupStudentFee(newMusicGroupId,
-                            studentRegistration.getUserId(), studentRegistration.getSubjectId(),BigDecimal.ZERO,
-                            null, studentRegistration.getTemporaryCourseFee(), studentRegistration.getPaymentStatus()==YES?PAID_COMPLETED:NON_PAYMENT);
+                            studentRegistration.getUserId(), studentRegistration.getSubjectId(), BigDecimal.ZERO,
+                            null, studentRegistration.getTemporaryCourseFee(), studentRegistration.getPaymentStatus() == YES ? PAID_COMPLETED : NON_PAYMENT);
                     musicGroupStudentFeeDao.insert(musicGroupStudentFee);
                 }
             }
             //主班新增余额日志
-            if(amount.doubleValue() != 0d && masterTotalPrice.doubleValue() > 0d){
+            if (amount.doubleValue() != 0d && masterTotalPrice.doubleValue() > 0d) {
                 StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
                 studentCourseFeeDetail.setAmount(amount);
                 studentCourseFeeDetail.setSurplusCourseFee(registration.getSurplusCourseFee());
@@ -907,7 +907,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 studentCourseFeeDetails.add(studentCourseFeeDetail);
             }
         }
-        if(studentCourseFeeDetails.size() > 0){
+        if (studentCourseFeeDetails.size() > 0) {
             studentCourseFeeDetailDao.batchInsert(studentCourseFeeDetails);
         }
     }
@@ -1395,7 +1395,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Override
     @Transactional
     public StudentRegistration updateStudent(StudentRegistration studentRegistration) {
-        if(StringUtils.isBlank(studentRegistration.getCertificateType())){
+        if (StringUtils.isBlank(studentRegistration.getCertificateType())) {
             studentRegistration.setCertificateType(CertificateTypeEnum.IDENTITY.getCode());
         }
         StudentRegistration student = get(studentRegistration.getId());
@@ -1407,7 +1407,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         update(student);
         studentRegistrationDao.updateUser(student.getUserId(), student.getParentsName(), student.getIdCardNo(), studentRegistration.getCertificateType());
         // 添加用户电子签章账户
-        if(CertificateTypeEnum.IDENTITY.getCode().equals(studentRegistration.getCertificateType())){
+        if (CertificateTypeEnum.IDENTITY.getCode().equals(studentRegistration.getCertificateType())) {
             contractService.register(student.getUserId(), student.getParentsName(), student.getIdCardNo(), student.getParentsPhone());
         }
         return student;
@@ -1595,10 +1595,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         return amount;
     }
 
-	@Override
-	public List<StudentMusicGroupDto> queryStudentMusicGroupInfo(Integer userId) {
-		return studentRegistrationDao.queryStudentMusicGroupInfo(userId);
-	}
+    @Override
+    public List<StudentMusicGroupDto> queryStudentMusicGroupInfo(Integer userId) {
+        return studentRegistrationDao.queryStudentMusicGroupInfo(userId);
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -1613,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;
+    }
 }

+ 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">

+ 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>

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

@@ -865,6 +865,6 @@
     </select>
 
     <select id="getAdaPayOrdersByTime" resultMap="StudentPaymentOrder"><![CDATA[
-        SELECT * FROM student_payment_order WHERE create_time_ >= #{startTime} AND create_time_ <= #{endTime} AND payment_channel_='ADAPAY' AND status_ ='SUCCESS']]>
+        SELECT * FROM student_payment_order WHERE pay_time_ >= #{startTime} AND pay_time_ <= #{endTime} AND payment_channel_='ADAPAY' AND status_ ='SUCCESS']]>
     </select>
 </mapper>

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

@@ -743,4 +743,12 @@
         LEFT JOIN sys_user su ON su.id_ = sr.user_id_
         WHERE sr.music_group_id_ = #{musicGroupId} AND FIND_IN_SET(sr.user_id_,#{studentIds}) AND sr.music_group_status_ != 'QUIT'
     </select>
+
+    <!-- 批量删除信息 -->
+    <delete id="batchDelete">
+        DELETE FROM student_registration WHERE id_ IN
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </delete>
 </mapper>

+ 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()));
+    }
+
 }