Browse Source

Merge remote-tracking branch 'origin/test' into test

周箭河 4 years ago
parent
commit
9918a8f9a3
25 changed files with 370 additions and 45 deletions
  1. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  2. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  3. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDao.java
  4. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroup4MixDto.java
  5. 57 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseTimeDto.java
  6. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexErrInfoDto.java
  7. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java
  8. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupQueryInfo.java
  9. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  10. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  11. 76 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  12. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  13. 9 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  14. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  15. 25 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  16. 41 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  17. 11 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  18. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  19. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultVipGroupSalaryServiceImpl.java
  20. 10 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  21. 1 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  22. 23 1
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  23. 25 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  24. 8 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml
  25. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
+import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
@@ -148,6 +149,8 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
 
     int queryErrInspection(@Param("organIds") Set<Integer> organIds, @Param("startTime") String startTime);
 
+    IndexErrInfoDto getNoClassMusicGroupStudentInfo(@Param("organIds") Set<Integer> organIds);
+
     int countNoPaymentStudentNum(@Param("organIds") Set<Integer> organIds);
     List<String> getNoPaymentMusicGroup(@Param("organIds") Set<Integer> organIds);
 

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

@@ -375,4 +375,6 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      * @return
      */
     List<MusicGroup> getMusicGroupByIds(@Param("ids") List<String> ids);
+
+    List<String> getNoClassStudentMusicGroupIds(@Param("organIds") List<Integer> organIds);
 }

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

@@ -337,4 +337,11 @@ public interface MusicGroupPaymentCalenderDao extends BaseDAO<Long, MusicGroupPa
      * @return
      */
     List<MusicGroupPaymentCalender> getMusicGroupCalenderBatchNoByIds(@Param("ids") List<String> ids);
+
+    /**
+     * 获取缴费状态在审核中或者已拒绝的缴费项目的学员
+     * @param musicGroupId
+     * @return
+     */
+    String queryCalenderStudentIds(@Param("musicGroupId") String musicGroupId, @Param("batchNo") String batchNo);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroup4MixDto.java

@@ -70,6 +70,17 @@ public class ClassGroup4MixDto implements Cloneable{
     @ApiModelProperty(value = "是否允许0课酬")
     private Boolean allowZeroSalary = false;
 
+    @ApiModelProperty(value = "确认生成课程")
+    private Boolean confirmGenerate;
+
+    public Boolean getConfirmGenerate() {
+        return confirmGenerate;
+    }
+
+    public void setConfirmGenerate(Boolean confirmGenerate) {
+        this.confirmGenerate = confirmGenerate;
+    }
+
     public Boolean getAllowZeroSalary() {
         return allowZeroSalary;
     }

+ 57 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseTimeDto.java

@@ -3,6 +3,8 @@ package com.ym.mec.biz.dal.dto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.Date;
+
 public class CourseTimeDto {
 
 
@@ -12,12 +14,35 @@ public class CourseTimeDto {
     @ApiModelProperty(value = "排课星期几")
     private Integer dayOfWeek;
 
+    @ApiModelProperty(value = "开始排课日期,如果有值,则单独循环")
+    private Date startDate;
+
+    @ApiModelProperty(value = "结束排课日期")
+    private Date endDate;
+
     @ApiModelProperty(value = "上课开始时间")
     private String startClassTime;
 
     @ApiModelProperty(value = "上课结束时间")
     private String endClassTime;
 
+    @ApiModelProperty(value = "预计排课次数")
+    private int expectCourseNum;
+
+    @ApiModelProperty(value = "已生成课程数量")
+    private int courseNum;
+
+    @ApiModelProperty(value = "是否跳过节假日 true-跳过 false-不跳过", required = true)
+    private Boolean isHoliday = false;
+
+    public Boolean getHoliday() {
+        return isHoliday;
+    }
+
+    public void setHoliday(Boolean holiday) {
+        isHoliday = holiday;
+    }
+
     public CourseSchedule.CourseScheduleType getCourseType() {
         return courseType;
     }
@@ -26,6 +51,22 @@ public class CourseTimeDto {
         this.courseType = courseType;
     }
 
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(Date startDate) {
+        this.startDate = startDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
     public Integer getDayOfWeek() {
         return dayOfWeek;
     }
@@ -49,4 +90,20 @@ public class CourseTimeDto {
     public void setEndClassTime(String endClassTime) {
         this.endClassTime = endClassTime;
     }
+
+    public int getExpectCourseNum() {
+        return expectCourseNum;
+    }
+
+    public void setExpectCourseNum(int expectCourseNum) {
+        this.expectCourseNum = expectCourseNum;
+    }
+
+    public int getCourseNum() {
+        return courseNum;
+    }
+
+    public void setCourseNum(int courseNum) {
+        this.courseNum = courseNum;
+    }
 }

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

@@ -17,6 +17,8 @@ public class IndexErrInfoDto<T> {
 
     private int num = 0;
 
+    private int num2 = 0;
+
     private List<T> result;
 
     public IndexErrInfoDto() {
@@ -62,6 +64,14 @@ public class IndexErrInfoDto<T> {
         this.num = num;
     }
 
+    public int getNum2() {
+        return num2;
+    }
+
+    public void setNum2(int num2) {
+        this.num2 = num2;
+    }
+
     public List<T> getResult() {
         return result;
     }

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java

@@ -10,6 +10,7 @@ public enum IndexErrorType implements BaseEnum<String, IndexErrorType> {
     MUSIC_PATROL("MUSIC_PATROL", "乐团巡查"),
     HIGH_CLASS_STUDENT_LESS_THAN_THREE("HIGH_CLASS_STUDENT_LESS_THAN_THREE", "基础技能班学员数量异常"),
     MUSIC_PATROL_ITEM("MUSIC_PATROL_ITEM", "乐团巡查事项异常"),
+    NO_CLASS_MUSIC_GROUP_STUDENT_INFO("NO_CLASS_MUSIC_GROUP_STUDENT_INFO", "当前有{}个乐团共{}名学员未加入任何班级"),
 
     STUDENT_INFO("STUDENT_INFO", "学员处理"),
     STUDENT_NOT_PAYMENT("STUDENT_NOT_PAYMENT", "未缴费学员数"),

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupQueryInfo.java

@@ -4,6 +4,8 @@ import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.List;
+
 public class MusicGroupQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "所属分部编号",required = false)
@@ -26,6 +28,26 @@ public class MusicGroupQueryInfo extends QueryInfo {
 
     private MusicGroupStatusEnum status;
 
+    private Boolean noClassStudentMusicGroup;
+
+    private List<String> musicGroupIds;
+
+    public List<String> getMusicGroupIds() {
+        return musicGroupIds;
+    }
+
+    public void setMusicGroupIds(List<String> musicGroupIds) {
+        this.musicGroupIds = musicGroupIds;
+    }
+
+    public Boolean getNoClassStudentMusicGroup() {
+        return noClassStudentMusicGroup;
+    }
+
+    public void setNoClassStudentMusicGroup(Boolean noClassStudentMusicGroup) {
+        this.noClassStudentMusicGroup = noClassStudentMusicGroup;
+    }
+
     public MusicGroupStatusEnum getStatus() {
         return status;
     }

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -225,6 +225,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @Date: 2019/9/23
 	 * 课时调整
 	 */
+	@Deprecated
 	void classStartDateAdjust(List<CourseSchedule> newCourseSchedules);
 
 	/**

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

@@ -167,7 +167,8 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @return java.util.Map
      */
     <K extends VipGroup> Map<String, BigDecimal> countVipGroupPredictFee(K vipGroup,
-                                                     Integer teacherId);
+                                                                         Integer teacherId,
+                                                                         Long courseId);
 
     /**
      * @describe 计算vip课程购买总价,及老师课酬-只是学生人数统计方式不同
@@ -177,6 +178,7 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @param teacherId: 要计算课酬的老师的编号
      * @return java.util.Map
      */
+    @Deprecated
     <K extends VipGroup> Map<String, BigDecimal> countVipGroupCoursePredictFee(K vipGroup,
                                                                          Integer teacherId,
                                                                                Long courseId);

+ 76 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -168,6 +168,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
     @Autowired
     private MusicGroupStudentClassAdjustDao musicGroupStudentClassAdjustDao;
+    @Autowired
+    private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao;
 
     @Override
     public BaseDAO<Integer, ClassGroup> getDAO() {
@@ -2292,6 +2294,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             throw new BizException("班级不存在");
         }
 
+        Boolean confirmGenerate = false;
+        if(Objects.nonNull(classGroup4MixDtos.get(0).getConfirmGenerate())){
+            confirmGenerate = classGroup4MixDtos.get(0).getConfirmGenerate();
+        }
+
         TeachModeEnum teachMode = TeachModeEnum.OFFLINE;
         if (classGroup.getType().equals(HIGH_ONLINE) || classGroup.getType().equals(ClassGroupTypeEnum.MUSIC_NETWORK)) {
             teachMode = TeachModeEnum.ONLINE;
@@ -2409,6 +2416,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 throw new BizException("{}课程类型剩余课程时长不足", classGroup4MixDto.getCourseType().getMsg());
             }
 
+            int totalCourseTimes = 0;
+            int generateCourseTimes = 0;
+            if(!CollectionUtils.isEmpty(classGroup4MixDto.getCourseTimeDtoList())){
+                totalCourseTimes = classGroup4MixDto.getCourseTimeDtoList().stream().mapToInt(CourseTimeDto::getExpectCourseNum).reduce(0, Integer::sum);
+            }
+
             Set<String> holidayDays = new HashSet<>();
             if (classGroup4MixDto.getHoliday()) {
                 SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
@@ -2419,17 +2432,36 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
             WhileNode:
             while (true) {
-                if (classGroup4MixDto.getHoliday() && holidayDays.contains(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
-                    now = now.plusDays(1);
-                    continue;
-                }
                 int dayOfWeek = now.getDayOfWeek().getValue();
                 for (CourseTimeDto courseTimeDto : classGroup4MixDto.getCourseTimeDtoList()) {
                     if (courseTimeDto.getDayOfWeek() < 1 || courseTimeDto.getDayOfWeek() > 7) {
                         throw new BizException("排课循环周期错误,请核查");
                     }
+                    if(Objects.isNull(courseTimeDto.getStartDate())||Objects.isNull(courseTimeDto.getEndDate())){
+                        throw new BizException("排课循环周期错误,请核查");
+                    }
+
+                    //跳过节假日
+                    if (courseTimeDto.getHoliday() && holidayDays.contains(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
+                        continue;
+                    }
+
                     if (!courseTimeDto.getDayOfWeek().equals(dayOfWeek)) continue;
 
+                    Date classDate = DateConvertor.toDate(now);
+
+                    if(courseTimeDto.getStartDate().compareTo(classDate)>0
+                            ||courseTimeDto.getEndDate().compareTo(classDate)<0
+                            ||courseTimeDto.getExpectCourseNum()<=courseTimeDto.getCourseNum()){
+                        if(courseTimeDto.getEndDate().compareTo(classDate)<0&&courseTimeDto.getExpectCourseNum()>courseTimeDto.getCourseNum()){
+                            throw new BizException("在指定的排课时间段内({}-{})无法完成预计课时数的排课", DateUtil.dateToString(courseTimeDto.getStartDate(), "yyyy.MM.dd"), DateUtil.dateToString(courseTimeDto.getEndDate(), "yyyy.MM.dd"));
+                        }
+                        if(totalCourseTimes<=generateCourseTimes){
+                            break WhileNode;
+                        }
+                        continue;
+                    }
+
                     //课时长度
                     long classCourseDuration = Duration.between(LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + courseTimeDto.getStartClassTime() + ":00", formatter),
                             LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + courseTimeDto.getEndClassTime() + ":00", formatter))
@@ -2437,11 +2469,17 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
                     totalCourseDuration += classCourseDuration;
 
-                    if (totalCourseDuration > totalMinutes) {
+//                    if (totalCourseDuration > totalMinutes) {
+//                        break WhileNode;
+//                    }
+
+                    courseTimeDto.setCourseNum(courseTimeDto.getCourseNum()+1);
+                    generateCourseTimes+=1;
+
+                    if(totalCourseTimes<generateCourseTimes){
                         break WhileNode;
                     }
 
-                    Date classDate = DateConvertor.toDate(now);
                     String startClassTime = DateUtil.getDate(classDate) + " " + courseTimeDto.getStartClassTime() + ":00";
                     String endClassTime = DateUtil.getDate(classDate) + " " + courseTimeDto.getEndClassTime() + ":00";
 
@@ -2451,6 +2489,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     courseSchedule.setStatus(CourseStatusEnum.NOT_START);
                     courseSchedule.setClassDate(classDate);
                     courseSchedule.setStartClassTime(DateUtil.stringToDate(startClassTime));
+                    if(date.compareTo(courseSchedule.getStartClassTime())>0){
+                        throw new BizException("课程开始时间不得早于当前时间");
+                    }
                     courseSchedule.setEndClassTime(DateUtil.stringToDate(endClassTime));
                     courseSchedule.setCreateTime(date);
                     courseSchedule.setUpdateTime(date);
@@ -2495,6 +2536,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         courseScheduleService.checkNewCourseSchedules(courseScheduleList, false, false);
 
+        if(!confirmGenerate){
+            return BaseController.failed(HttpStatus.PARTIAL_CONTENT, courseScheduleList, "");
+        }
+
         //老师结算表
         if (courseScheduleTeacherSalaryList.size() > 0) {
             courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
@@ -3483,9 +3528,24 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (CollectionUtils.isEmpty(studentIds)) {
             throw new BizException("学员列表不可为空");
         }
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
 
         MusicGroup musicGroup = musicGroupDao.findByClassGroupId(classGroupIds.get(0));
+        //获取欠费学员列表
+        List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroup.getId(), new ArrayList<>(studentIds));
+        if(noPaymentUserIds.size() > 0){
+            throw new BizException("操作失败:有欠费的学员不允许创建缴费");
+        }
+        //获取缴费状态在审核中或者已拒绝的缴费项目的学员
+        String studentId = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroup.getId(),null);
+        if(StringUtils.isNotEmpty(studentId)){
+            for (Integer integer : studentIds) {
+                if(studentId.contains(integer.toString())){
+                    throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
+                }
+            }
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+
         //生成缴费记录,同一个批次
         MusicGroupPaymentCalender.PaymentCalenderStatusEnum status = null;
         List<MusicGroupPaymentCalenderDto> paymentCalenderDtos = mergeClassSplitClassAffirmDto.getMusicGroupPaymentCalenderDtos();
@@ -3870,6 +3930,15 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 studentIds);
         //创建缴费项目
         MusicGroup musicGroup = musicGroupDao.findByClassGroupId(masterClassGroupId);
+        //获取缴费状态在审核中或者已拒绝的缴费项目的学员
+        String studentId = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroup.getId(),null);
+        if(StringUtils.isNotEmpty(studentId)){
+            for (Integer integer : studentIds) {
+                if(studentId.contains(integer.toString())){
+                    throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
+                }
+            }
+        }
         BigDecimal masterTotalPrice = getMasterTotalPrice(masterClassGroupId);
         //是否有需要审核的缴费项目
         List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = paymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails();

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

@@ -3367,7 +3367,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					if (newCourseSchedule.getGroupType() == GroupType.MUSIC) {
 						courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, newCourseSchedule, ts);
 					} else if (newCourseSchedule.getGroupType() == GroupType.VIP) {
-						Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, teacherId);
+						Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, teacherId, ts.getCourseScheduleId());
 
 						BigDecimal teacherSalary=null;
 
@@ -3581,7 +3581,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
                     BigDecimal onlineTeacherSalary = new BigDecimal(0), offlineTeacherSalary = new BigDecimal(0);
 
-					Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(byCourseSchedule, newCourseSchedule.getActualTeacherId());
+					Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(byCourseSchedule, newCourseSchedule.getActualTeacherId(), newCourseSchedule.getId());
 
                     List<CourseSchedule> courseSchedules = new ArrayList<>();
                     courseSchedules.add(newCourseSchedule);

+ 9 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -841,13 +841,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         BigDecimal onlineTeacherSalary=BigDecimal.ZERO,
                 offlineTeacherSalary=BigDecimal.ZERO;
 
-        Map<String, BigDecimal> salary = vipGroupService.countVipGroupPredictFee(vipGroup, vipGroup.getUserId());
-
-        if(Objects.nonNull(salary)){
-            onlineTeacherSalary=salary.get("onlineTeacherSalary");
-            offlineTeacherSalary=salary.get("offlineTeacherSalary");
-        }
-
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByGroupWithNotStart(vipGroupId.toString(), GroupType.VIP.getCode());
         if(!CollectionUtils.isEmpty(courseScheduleTeacherSalaries)){
             List<Long> courseIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
@@ -855,6 +848,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             Map<Integer, String> coureTeachModeMap = MapUtil.convertIntegerMap(teachModeById);
             for(int i=0;i<courseScheduleTeacherSalaries.size();i++){
                 String courseType = coureTeachModeMap.get(courseScheduleTeacherSalaries.get(i).getCourseScheduleId());
+
+                Map<String, BigDecimal> salary = vipGroupService.countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), courseScheduleTeacherSalaries.get(i).getCourseScheduleId());
+
+                if(Objects.nonNull(salary)){
+                    onlineTeacherSalary=salary.get("onlineTeacherSalary");
+                    offlineTeacherSalary=salary.get("offlineTeacherSalary");
+                }
+
                 if(courseType.equals(TeachModeEnum.ONLINE.getCode())){
                     courseScheduleTeacherSalaries.get(i).setExpectSalary(onlineTeacherSalary);
                 }else if(courseType.equals(TeachModeEnum.OFFLINE.getCode())){
@@ -1289,7 +1290,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     private void createVipGroupCourseTeacherSalaries(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
         VipGroup vipGroup = vipGroupService.get(Long.valueOf(courseSchedule.getMusicGroupId()));
         for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
-            Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupCoursePredictFee(vipGroup, courseSchedule.getActualTeacherId(), courseSchedule.getId());
+            Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, courseSchedule.getActualTeacherId(), courseSchedule.getId());
             courseScheduleTeacherSalary.setExpectSalary(courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary"));
         }
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -299,6 +299,10 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			int errInspection = indexBaseMonthDataDao.queryErrInspection(organIds,startTime);
 			oneChild.add(new IndexErrInfoDto(IndexErrorType.MUSIC_PATROL_ITEM, IndexErrorType.MUSIC_PATROL_ITEM.getMsg(),errInspection, null));
 
+			IndexErrInfoDto noClassMusicGroupStudentInfo = indexBaseMonthDataDao.getNoClassMusicGroupStudentInfo(organIds);
+			noClassMusicGroupStudentInfo.setDesc(IndexErrorType.NO_CLASS_MUSIC_GROUP_STUDENT_INFO.getMsg());
+			oneChild.add(noClassMusicGroupStudentInfo);
+
 			one.setNum(oneChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
 			one.setResult(oneChild);
 			all.add(one);
@@ -441,6 +445,12 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				flag1 = true;
 			}
 		}
+		if(!flag1){
+			IndexErrInfoDto noClassMusicGroupStudentInfo = indexBaseMonthDataDao.getNoClassMusicGroupStudentInfo(organIds);
+			if(Objects.nonNull(noClassMusicGroupStudentInfo) && noClassMusicGroupStudentInfo.getNum() > 0){
+				flag1 = true;
+			}
+		}
 		resultMap.put("musicPatrol",flag1);
 		boolean flag2 = false;
 		if(!flag2){

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

@@ -425,7 +425,31 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 	public void batchAdd(String batchNo, Set<Integer> userIdList) {
 		
 		List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
-		
+		if(musicGroupPaymentCalenderList == null || musicGroupPaymentCalenderList.size() == 0){
+			throw new BizException("操作失败:缴费项目不存在");
+		}
+		String musicGroupId = musicGroupPaymentCalenderList.get(0).getMusicGroupId();
+		// 所有缴费项目已完成排课才能创建下一个缴费项目
+		List<String> batchNoList = new ArrayList<>();
+		batchNoList.add(batchNo);
+		String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,batchNoList);
+		if (StringUtils.isNoneBlank(orignBatchNo)) {
+			throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作");
+		}
+		//获取欠费学员列表
+		List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroupId, new ArrayList<>(userIdList));
+		if(noPaymentUserIds.size() > 0){
+			throw new BizException("操作失败:有欠费的学员不允许创建缴费");
+		}
+		//获取缴费状态在审核中或者已拒绝的缴费项目的学员
+		String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroupId,batchNo);
+		if(StringUtils.isNotEmpty(studentIds)){
+			for (Integer integer : userIdList) {
+				if(studentIds.contains(integer.toString())){
+					throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
+				}
+			}
+		}
 		List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = new ArrayList<MusicGroupPaymentStudentCourseDetail>();
 		
 		Long musicGroupPaymentCalenderId = null;

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

@@ -598,9 +598,24 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			}else if(paymentType == SPAN_GROUP_CLASS_ADJUST){
 				MusicGroupStudentClassAdjust adjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo);
 				//获取默认的学员缴费详情
-				List<Integer> studentIds = JSON.parseArray(adjust.getStudentIds(), Integer.class);
+				List<Integer> studentIdList = JSON.parseArray(adjust.getStudentIds(), Integer.class);
+				//获取欠费学员列表
+				List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroup.getId(), studentIdList);
+				if(noPaymentUserIds.size() > 0){
+					throw new BizException("操作失败:有欠费的学员不允许创建缴费");
+				}
+				//获取缴费状态在审核中或者已拒绝的缴费项目的学员
+				String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroupId,batchNo);
+				if(StringUtils.isNotEmpty(studentIds)){
+					for (Integer integer : studentIdList) {
+						if(studentIds.contains(integer.toString())){
+							throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
+						}
+					}
+				}
+
 				List<MusicGroupPaymentCalenderStudentDetail> musicGroupPaymentCalenderStudentDetails = classGroupService.queryStudentPaymentCalenders(adjust.getMasterClassGroupId(),
-						adjust.getClassGroupStudents(),studentIds);
+						adjust.getClassGroupStudents(),studentIdList);
 				List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails();
 
 				boolean containsAll = musicGroupPaymentCalenderStudentDetails.containsAll(calenderStudentDetails);
@@ -735,7 +750,6 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			// 设置批次号
 			musicGroupPaymentCalender.setBatchNo(batchNo);
 			musicGroupPaymentCalenderDao.insert(musicGroupPaymentCalender);
-
 			List<MusicGroupPaymentCalenderCourseSettings> currentMusicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalender
 					.getMusicGroupPaymentCalenderCourseSettingsList();
 
@@ -1130,6 +1144,30 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 				}
 			}
 			MusicGroupPaymentCalender calender = musicGroupPaymentCalenders.get(0);
+			if(calender.getPaymentType() == ADD_STUDENT || calender.getPaymentType() == SPAN_GROUP_CLASS_ADJUST){
+				// 所有缴费项目已完成排课才能创建下一个缴费项目
+				List<String> batchNoList = new ArrayList<>();
+				batchNoList.add(batchNo);
+				String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(calender.getMusicGroupId(), null, null,batchNoList);
+				if (StringUtils.isNoneBlank(orignBatchNo)) {
+					throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作");
+				}
+				List<Integer> userIds = Arrays.stream(calender.getStudentIds().split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
+				//获取欠费学员列表
+				List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(calender.getMusicGroupId(),userIds);
+				if(noPaymentUserIds.size() > 0){
+					throw new BizException("操作失败:有欠费的学员不允许创建缴费");
+				}
+				//获取缴费状态在审核中或者已拒绝的缴费项目的学员
+				String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(calender.getMusicGroupId(),batchNo);
+				if(StringUtils.isNotEmpty(studentIds)){
+					for (Integer integer : userIds) {
+						if(studentIds.contains(integer.toString())){
+							throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
+						}
+					}
+				}
+			}
 			//如果是报名,并且所有的报名都审核通过,需要修改乐团状态
 			if (calender.getPaymentType() == MUSIC_APPLY) {
 				//统计乐团还在审核中或者审核被拒的缴费

+ 11 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -6,15 +6,7 @@ import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
@@ -2342,6 +2334,16 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //获取用户权限列表
         List<Integer> roles = employeeDao.queryUserRole(sysUser.getId());
         PageInfo<MusicGroup> musicGroupPageInfo;
+
+        List<Integer> organIds = new ArrayList<>();
+        if(StringUtils.isNotBlank(queryInfo.getOrganId())){
+            organIds = Arrays.stream(queryInfo.getOrganId().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
+        }
+
+        if(Objects.nonNull(queryInfo.getNoClassStudentMusicGroup())){
+            List<String> noClassStudentMusicGroupIds = musicGroupDao.getNoClassStudentMusicGroupIds(organIds);
+            queryInfo.setMusicGroupIds(noClassStudentMusicGroupIds);
+        }
         if (roles != null && roles.size() == 1 && roles.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
             //只有教务老师权限
             /*String musicGroupIds = musicGroupDao.queryEducationalMusicGroupId(sysUser.getId());

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -770,6 +770,12 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void insertStudent(String studentIds, String oldMusicGroupId, String newMusicGroupId, Map<Integer, List<MusicGroupPaymentCalenderStudentDetail>> collect) {
+        //获取欠费学员列表
+        List<Integer> studentIdList = Arrays.asList(studentIds.split(",")).stream().mapToInt(idStr -> Integer.valueOf(idStr)).boxed().collect(Collectors.toList());
+        List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(newMusicGroupId,studentIdList);
+        if(noPaymentUserIds.size() > 0){
+            throw new BizException("操作失败:有欠费的学员不允许创建缴费");
+        }
         SysUser sysUser1 = sysUserFeignService.queryUserInfo();
         //获取旧乐团学员注册信息
         List<StudentRegistration> studentRegistrations = studentRegistrationDao.queryByUserIdsAndMusicGroupId(studentIds, oldMusicGroupId);

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultVipGroupSalaryServiceImpl.java

@@ -164,11 +164,11 @@ public class TeacherDefaultVipGroupSalaryServiceImpl extends BaseServiceImpl<Lon
 							TeacherDefaultVipGroupSalary origTdms = map.get(vipGroup.getVipGroupCategoryId());
 							if (tdms != null && origTdms != null) {
 								Map<String, BigDecimal> teachModeSalaryMap = new HashMap<>();
-								if(vipGroupCategory.getMusicTheory()){
-									teachModeSalaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, ts.getUserId());
-								}else{
-									teachModeSalaryMap = vipGroupService.countVipGroupCoursePredictFee(vipGroup, ts.getUserId(), ts.getCourseScheduleId());
-								}
+//								if(vipGroupCategory.getMusicTheory()){
+									teachModeSalaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, ts.getUserId(), ts.getCourseScheduleId());
+//								}else{
+//									teachModeSalaryMap = vipGroupService.countVipGroupCoursePredictFee(vipGroup, ts.getUserId(), ts.getCourseScheduleId());
+//								}
 								if(TeachModeEnum.ONLINE.equals(ts.getCourseSchedule().getTeachMode())&&teachModeSalaryMap.containsKey("onlineTeacherSalary")){
 									ts.setExpectSalary(teachModeSalaryMap.get("onlineTeacherSalary"));
 								}else if(TeachModeEnum.OFFLINE.equals(ts.getCourseSchedule().getTeachMode())&&teachModeSalaryMap.containsKey("offlineTeacherSalary")){

+ 10 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -293,7 +293,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		//计算课程相关费用信息
 		Map<String, BigDecimal> costInfo = countVipGroupPredictFee(vipGroupApplyBaseInfoDto,
-				vipGroupApplyBaseInfoDto.getUserId());
+				vipGroupApplyBaseInfoDto.getUserId(), null);
 
         vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.PASS);
 
@@ -967,7 +967,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
     @Override
     public <K extends VipGroup> Map<String,BigDecimal> countVipGroupPredictFee(K vipGroup,
-																			   Integer teacherId){
+																			   Integer teacherId,
+																			   Long courseId){
 
 		if(Objects.isNull(teacherId)){
 			throw new BizException("请指定教师");
@@ -998,7 +999,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		Map<String,BigDecimal> results=new HashMap<>(1);
 
 		int normalStudentNum = 0;
-		if(Objects.nonNull(vipGroup.getId())){
+		if(Objects.nonNull(courseId)){
+			normalStudentNum = courseScheduleStudentPaymentDao.countStudentNum(courseId.intValue());
+		}
+		if(normalStudentNum<=0&&Objects.nonNull(vipGroup.getId())){
 			normalStudentNum = classGroupStudentMapperDao.countGroupNormalStudentNum(GroupType.VIP, vipGroup.getId().toString());
 		}
 
@@ -2113,7 +2117,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
 			}
 
-			Map<String, BigDecimal> salaryMap = countVipGroupPredictFee(vipGroup, vipGroup.getUserId());
+			Map<String, BigDecimal> salaryMap = countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), null);
 
 			//创建老师单节课课酬信息
 			courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(vipGroup,
@@ -2765,7 +2769,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		courseScheduleService.batchAddCourseSchedule(vipGroupApplyDto.getCourseSchedules());
 
-		Map<String, BigDecimal> map = countVipGroupPredictFee(vipGroup, vipGroup.getUserId());
+		Map<String, BigDecimal> map = countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), null);
 
 		BigDecimal teacherSalary=BigDecimal.ZERO;
 
@@ -2886,7 +2890,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			if(courseNum==0){
 				courseScheduleService.batchAddCourseSchedule(courseSchedules);
 
-				Map<String, BigDecimal> salaryMap = countVipGroupPredictFee(vipGroup, vipGroup.getUserId());
+				Map<String, BigDecimal> salaryMap = countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), null);
 
 				//创建老师单节课课酬信息
 				courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(vipGroup,

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

@@ -2554,7 +2554,7 @@
             AND ta.teacher_id_ = cs.actual_teacher_id_
             AND cs.status_ = 'OVER'
             AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0)))
-            AND (ta.dispose_content_ IS NOT NULL OR (ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL))
+            AND ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL
             AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
         </if>
         <if test="searchType == 'NO_ATTENDANCE'">

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

@@ -747,7 +747,7 @@
 		WHERE ta.teacher_id_ = cs.actual_teacher_id_
 		AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND cs.class_date_ >= '2021-02-01'
 		AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0)))
-		AND (ta.dispose_content_ IS NOT NULL OR (ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL))
+		AND ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL
 		AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
 		<if test="organIds != null and organIds.size()>0">
 			AND cs.organ_id_ IN
@@ -838,6 +838,28 @@
 			</foreach>
 		</if>
 	</select>
+
+	<select id="getNoClassMusicGroupStudentInfo" resultType="com.ym.mec.biz.dal.entity.IndexErrInfoDto">
+		SELECT
+			'NO_CLASS_MUSIC_GROUP_STUDENT_INFO' errorType,
+			COUNT( DISTINCT sr.music_group_id_ ) num,
+			COUNT( DISTINCT sr.user_id_ ) num2
+		FROM
+			student_registration sr
+				LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+				LEFT JOIN class_group_student_mapper cgsm ON cgsm.group_type_='MUSIC' AND cgsm.music_group_id_=sr.music_group_id_ AND cgsm.user_id_=sr.user_id_
+		WHERE
+			sr.music_group_status_ = 'NORMAL'
+			AND mg.status_ = 'PROGRESS'
+			AND cgsm.id_ IS NULL
+			<if test="organIds!=null and organIds.size()>0">
+				AND mg.organ_id_ IN
+				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+					#{organId}
+				</foreach>
+			</if>
+	</select>
+
 	<select id="getFinancePayData"  resultMap="IndexBaseMonthData">
 		SELECT SUM(fe.amount_) total_num_,SUM(fe.amount_) activate_num_,SUM(fe.amount_) percent_,fe.organ_id_,#{dayStr} month_ FROM financial_expenditure fe
 		WHERE DATE_FORMAT(fe.create_time_,'%Y-%m-%d') = #{dayStr}

+ 25 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -218,6 +218,12 @@
             <if test="musicGroupId != null">
                 AND FIND_IN_SET(id_,#{musicGroupId})
             </if>
+            <if test="musicGroupIds!=null and musicGroupIds.size()>0">
+                AND id_ IN
+                <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
+                    #{musicGroupId}
+                </foreach>
+            </if>
         </where>
     </sql>
 
@@ -685,4 +691,23 @@
             #{id}
         </foreach>
     </select>
+
+    <select id="getNoClassStudentMusicGroupIds" resultType="java.lang.String">
+        SELECT
+            DISTINCT sr.music_group_id_
+        FROM
+            student_registration sr
+            LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+            LEFT JOIN class_group_student_mapper cgsm ON cgsm.group_type_='MUSIC' AND cgsm.music_group_id_=sr.music_group_id_ AND cgsm.user_id_=sr.user_id_
+        WHERE
+            sr.music_group_status_ = 'NORMAL'
+            AND mg.status_ = 'PROGRESS'
+            AND cgsm.id_ IS NULL
+            <if test="organIds!=null and organIds.size()>0">
+                AND mg.organ_id_ IN
+                <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+                    #{organId}
+                </foreach>
+            </if>
+    </select>
 </mapper>

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

@@ -602,4 +602,12 @@
         AND batch_no_ IS NOT NULL
         GROUP BY music_group_id_,batch_no_
     </select>
+    <select id="queryCalenderStudentIds" resultType="java.lang.String">
+        SELECT GROUP_CONCAT(DISTINCT student_ids_) FROM music_group_payment_calender
+        WHERE status_ IN ('AUDITING','REJECT') AND music_group_id_ = #{musicGroupId}
+        <if test="batchNo != null and batchNo != ''">
+            AND batch_no_ != #{batchNo}
+        </if>
+
+    </select>
 </mapper>

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java

@@ -366,7 +366,7 @@ public class VipGroupManageController extends BaseController {
     @PostMapping("/getVipGroupCostCount")
     @PreAuthorize("@pcs.hasPermissions('vipGroupManage/getVipGroupCostCount')")
     public Object getVipGroupCostCount(@RequestBody VipGroupApplyBaseInfoDto vipGroup){
-        Map results = vipGroupService.countVipGroupPredictFee(vipGroup,vipGroup.getUserId());
+        Map results = vipGroupService.countVipGroupPredictFee(vipGroup,vipGroup.getUserId(), null);
         return succeed(results);
     }