Bladeren bron

Merge remote-tracking branch 'origin/master'

周箭河 5 jaren geleden
bovenliggende
commit
ba96cf8996
33 gewijzigde bestanden met toevoegingen van 1050 en 64 verwijderingen
  1. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  3. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  4. 34 19
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDao.java
  5. 32 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDetailDao.java
  6. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  7. 22 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderDetail.java
  8. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Student.java
  9. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicCalenderDetailQueryInfo.java
  10. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupQueryInfo.java
  11. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java
  12. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java
  13. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  14. 22 1
      mec-biz/src/main/java/com/ym/mec/biz/service/OnlineMusicGroupService.java
  15. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  16. 71 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  17. 62 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  18. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  19. 327 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OnlineMusicGroupServiceImpl.java
  20. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  21. 23 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  22. 6 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  23. 24 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  24. 81 5
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  25. 52 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml
  26. 5 0
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  27. 4 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  28. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  29. 19 0
      mec-task/src/main/java/com/ym/mec/task/jobs/UpdateMusicGroupPaymentCalenderStatusTask.java
  30. 12 8
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java
  31. 20 2
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java
  32. 10 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java
  33. 77 19
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduOnlineMusicGroupController.java

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

@@ -1281,6 +1281,10 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<CourseSchedule> findUserCourses2(@Param("userId") Integer userId,
                                           @Param("teacherIds") List<Integer> teacherIds);
 
+
+    List<CourseSchedule> findUserCourses3(@Param("studentId") Integer studentId,
+                                          @Param("teacherIds") List<Integer> teacherIds);
+
     /**
      * @param userId:
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -263,4 +263,13 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      * @return java.util.List<java.util.Map<java.lang.Long,java.math.BigDecimal>>
      */
     List<Map<Long, BigDecimal>> findCoursePayment(@Param("courseScheduleIds") List<Long> courseScheduleIds);
+
+    /**
+     * 获取学员指定课程类型的剩余课时数
+     * @param studentId
+     * @param courseScheduleType
+     * @return
+     */
+    int countStudentNotStartCourseNumWithCourseType(@Param("studentId") Integer studentId,
+                                                    @Param("type")CourseSchedule.CourseScheduleType courseScheduleType);
 }

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

@@ -182,6 +182,14 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     List<MusicGroup> findUserMusicGroups(@Param("userId") Integer userId);
 
     /**
+     * 查询乐团列表
+     * @param params
+     * @return
+     */
+    List<MusicGroup> findMusicGroups(Map<String, Object> params);
+    int countMusicGroups(Map<String, Object> params);
+
+    /**
      * 获取乐团信息
      *
      * @param list

+ 34 - 19
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDao.java

@@ -1,31 +1,46 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
 import com.ym.mec.common.dal.BaseDAO;
+
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 public interface MusicGroupPaymentCalenderDao extends BaseDAO<Long, MusicGroupPaymentCalender> {
 
+	/**
+	 * 根据乐团编号删除乐团缴费周期
+	 * @param musicGroupId
+	 */
+	void delByGroupId(String musicGroupId);
+
+	/**
+	 * 根据乐团编号获取乐团缴费日历
+	 * @param musicGroupId
+	 * @return
+	 */
+	List<MusicGroupPaymentCalender> findByMusicGroupId(String musicGroupId);
+
+	/**
+	 * 批量新增乐团缴费周期
+	 * @param calender
+	 * @param musicGroupId
+	 */
+	void batchAdd(@Param("calender") List<Integer> calender, @Param("musicGroupId") String musicGroupId);
+	
+	/**
+	 * 批量修改
+	 * @param musicGroupPaymentCalenderList
+	 * @return
+	 */
+	int batchUpdate(List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList);
 
-    /**
-     * 根据乐团编号删除乐团缴费周期
-     * @param musicGroupId
-     */
-    void delByGroupId(String musicGroupId);
-
-    /**
-     * 根据乐团编号获取乐团缴费日历
-     * @param musicGroupId
-     * @return
-     */
-    List<MusicGroupPaymentCalender> findByMusicGroupId(String musicGroupId);
-
-    /**
-     * 批量新增乐团缴费周期
-     * @param calender
-     * @param musicGroupId
-     */
-    void batchAdd(@Param("calender") List<Integer> calender,@Param("musicGroupId") String musicGroupId);
+	/**
+	 * 查询指定状态的记录
+	 * @param status
+	 * @return
+	 */
+	List<MusicGroupPaymentCalender> queryByPaymentStatus(List<PaymentStatusEnum> status);
 }

+ 32 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDetailDao.java

@@ -2,8 +2,10 @@ package com.ym.mec.biz.dal.dao;
 
 import java.util.List;
 
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
 
 public interface MusicGroupPaymentCalenderDetailDao extends BaseDAO<Long, MusicGroupPaymentCalenderDetail> {
 
@@ -13,4 +15,34 @@ public interface MusicGroupPaymentCalenderDetailDao extends BaseDAO<Long, MusicG
 	 * @return
 	 */
 	int batchInsert(List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList);
+
+	/**
+	 * 获取列表
+	 * @param ids
+	 * @return
+	 */
+    List<MusicGroupPaymentCalenderDetail> queryListByIds(@Param("ids") String ids);
+
+	/**
+	 * 批量修改
+	 * @param calenderDetails
+	 */
+	void batchUpdate(@Param("calenderDetails") List<MusicGroupPaymentCalenderDetail> calenderDetails);
+
+	/**
+	 * 根据指定的日历编号查询
+	 * @param musicGroupPaymentCalenderId
+	 * @return
+	 */
+	List<MusicGroupPaymentCalenderDetail> queryByCalenderId(Long musicGroupPaymentCalenderId);
+
+	/**
+	 * 根据声部获取乐团下完成缴费的学员
+	 * @param musicGroupId
+	 * @param subjectId
+	 * @return
+	 */
+	List<SimpleUserDto> findMusicGroupStudentWithSubject(@Param("musicGroupId") String musicGroupId,
+														 @Param("subjectId") Integer subjectId);
+
 }

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

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import com.ym.mec.biz.dal.entity.Subject;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.auth.api.entity.SysUser;
@@ -320,4 +321,11 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     List<String> queryStudentMusicGroup(Integer studentId);
 
     String getSubjectIds(Integer userId);
+
+    /**
+     * 获取乐团下所有学员身上的声部列表
+     * @param musicGroupId
+     * @return
+     */
+    List<Subject> findMusicGroupAllStudentSubjects(@Param("musicGroupId") String musicGroupId);
 }

+ 22 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderDetail.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.auth.api.entity.SysUser;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
@@ -38,7 +39,27 @@ public class MusicGroupPaymentCalenderDetail {
 	
 	/**  */
 	private java.util.Date createTime;
-	
+
+	private SysUser sysUser = new SysUser();
+
+	private Student student = new Student();
+
+	public Student getStudent() {
+		return student;
+	}
+
+	public void setStudent(Student student) {
+		this.student = student;
+	}
+
+	public SysUser getSysUser() {
+		return sysUser;
+	}
+
+	public void setSysUser(SysUser sysUser) {
+		this.sysUser = sysUser;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}

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

@@ -13,6 +13,9 @@ public class Student {
 	/**  */
 	private String subjectIdList;
 
+	/**  */
+	private String subjectNames;
+
 	private Integer serviceTag;
 
 	private Integer operatingTag;
@@ -32,6 +35,14 @@ public class Student {
 		this.subjectIdList = subjectIdList;
 	}
 
+	public String getSubjectNames() {
+		return subjectNames;
+	}
+
+	public void setSubjectNames(String subjectNames) {
+		this.subjectNames = subjectNames;
+	}
+
 	public Student(Integer userId) {
 		this.userId = userId;
 	}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicCalenderDetailQueryInfo.java

@@ -9,8 +9,18 @@ public class MusicCalenderDetailQueryInfo extends QueryInfo {
 
 	private PaymentStatusEnum paymentStatus;
 
+	private Integer subjectId;
+
 	private Long id;
 
+	public Integer getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(Integer subjectId) {
+		this.subjectId = subjectId;
+	}
+
 	public Integer getUserId() {
 		return userId;
 	}

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.page;
 
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -20,6 +21,27 @@ public class MusicGroupQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "乐团状态",required = false)
     private String musicGroupStatus;
 
+    @ApiModelProperty(value = "教务老师编号")
+    private Integer educationalTeacherId;
+
+    private MusicGroupStatusEnum status;
+
+    public MusicGroupStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(MusicGroupStatusEnum status) {
+        this.status = status;
+    }
+
+    public Integer getEducationalTeacherId() {
+        return educationalTeacherId;
+    }
+
+    public void setEducationalTeacherId(Integer educationalTeacherId) {
+        this.educationalTeacherId = educationalTeacherId;
+    }
+
     public String getOrganId() {
         return organId;
     }

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java

@@ -1,8 +1,33 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
 import com.ym.mec.common.service.BaseService;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 public interface MusicGroupPaymentCalenderDetailService extends BaseService<Long, MusicGroupPaymentCalenderDetail> {
 
+    /**
+     * 修改学员预计缴费金额
+     * @param actualAmount
+     * @param ids
+     * @return
+     */
+    void updateActualAmount(BigDecimal actualAmount,String ids);
+
+    /**
+     * 开启缴费
+     * @param ids
+     */
+    void openPayment(String ids);
+
+    /**
+     * 根据声部获取乐团下完成缴费的学员
+     * @param musicGroupId
+     * @param subjectId
+     * @return
+     */
+    List<SimpleUserDto> findMusicGroupStudentWithSubject(String musicGroupId,Integer subjectId);
 }

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

@@ -15,6 +15,12 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	 * @return
 	 */
 	boolean create(MusicGroupPaymentCalender musicGroupPaymentCalender);
+	
+	/**
+	 * 自动更新付款日历记录状态
+	 * @return
+	 */
+	boolean autoUpdateMusicGroupPaymentCalenderStatus();
 
 	/**
 	 * 批量新增、修改乐团缴费周期

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -165,6 +165,13 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	PageInfo<MusicGroup> queryMusicGroupPage(MusicGroupQueryInfo queryInfo);
 
 	/**
+	 * 获取乐团列表
+	 * @param queryInfo
+	 * @return
+	 */
+	PageInfo<MusicGroup> findEduTeacherMusicGroups(MusicGroupQueryInfo queryInfo);
+
+	/**
 	 * 修改乐团基本信息
 	 * @param subFeeSettingDto
 	 */

+ 22 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/OnlineMusicGroupService.java

@@ -1,10 +1,13 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.OnlineMusicGroupCourseDto;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.common.page.QueryInfo;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 public interface OnlineMusicGroupService {
 
@@ -12,6 +15,24 @@ public interface OnlineMusicGroupService {
      * 创建线上乐团班级
      * @param onlineMusicGroupCourseInfo
      */
-    void createOnlineMusicClassGroup(OnlineMusicGroupCourseDto onlineMusicGroupCourseInfo);
+    Map<String, Object> createOnlineMusicClassGroup(OnlineMusicGroupCourseDto onlineMusicGroupCourseInfo);
+
+    /**
+     * @describe 获取可以预约的教师
+     * @author Joburgess
+     * @date 2020/2/9
+     * @param studentId: 学生编号
+     * @param subjectId: 声部编号
+     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
+     */
+    List<SimpleUserDto> getEnableApplyTeachers(Integer studentId, Integer subjectId);
+
+    /**
+     * 获取教师空闲时间
+     * @param studentId
+     * @param teacherId
+     * @return
+     */
+    Map getTeacherFreeTimes(Integer studentId, Integer teacherId);
 
 }

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

@@ -235,4 +235,11 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
 	 * @return
 	 */
 	List<StudentRegistration> findMusicGroupStuNoClassType(String musicGroupId, ClassGroupTypeEnum type, Integer subjectId);
+
+	/**
+	 * 获取乐团下所有学员身上的声部列表
+	 * @param musicGroupId
+	 * @return
+	 */
+	List<Subject> findMusicGroupAllStudentSubjects(String musicGroupId);
 }

+ 71 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java

@@ -1,13 +1,26 @@
 package com.ym.mec.biz.service.impl;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderDetailService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PROCESSING;
 
 @Service
 public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentCalenderDetail>  implements MusicGroupPaymentCalenderDetailService {
@@ -19,5 +32,59 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 	public BaseDAO<Long, MusicGroupPaymentCalenderDetail> getDAO() {
 		return musicGroupPaymentCalenderDetailDao;
 	}
-	
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateActualAmount(BigDecimal actualAmount,String ids) {
+		if(actualAmount == null || StringUtils.isEmpty(ids)){
+			throw new BizException("参数校验失败");
+		}
+		String[] split = ids.split(",");
+		//获取缴费列表
+		List<MusicGroupPaymentCalenderDetail> calenderDetails = musicGroupPaymentCalenderDetailDao.queryListByIds(ids);
+		if(calenderDetails.size() == 0){
+			throw new BizException("缴费记录不存在");
+		}
+		Date date = new Date();
+		calenderDetails.forEach(e->{
+			if(e.getPaymentStatus() == null || e.getPaymentStatus() != NON_PAYMENT){
+				throw new BizException("修改失败,缴费状态不匹配");
+			}
+			e.setUpdateTime(date);
+			e.setActualAmount(actualAmount);
+		});
+		musicGroupPaymentCalenderDetailDao.batchUpdate(calenderDetails);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void openPayment(String ids) {
+		if(StringUtils.isEmpty(ids)){
+			throw new BizException("参数校验失败");
+		}
+		//获取缴费列表
+		List<MusicGroupPaymentCalenderDetail> calenderDetails = musicGroupPaymentCalenderDetailDao.queryListByIds(ids);
+		if(calenderDetails.size() == 0){
+			throw new BizException("缴费记录不存在");
+		}
+		Date date = new Date();
+		calenderDetails.forEach(e->{
+			if(e.getPaymentStatus() == null || e.getPaymentStatus() != NON_PAYMENT){
+				throw new BizException("修改失败,缴费状态不匹配");
+			}
+			e.setUpdateTime(date);
+			e.setPaymentStatus(PROCESSING);
+		});
+		musicGroupPaymentCalenderDetailDao.batchUpdate(calenderDetails);
+		Set<Integer> studentIds = calenderDetails.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
+		//推送消息
+	}
+
+	@Override
+	public List<SimpleUserDto> findMusicGroupStudentWithSubject(String musicGroupId, Integer subjectId) {
+		if(Objects.isNull(musicGroupId)){
+			throw new BizException("请指定乐团");
+		}
+		return musicGroupPaymentCalenderDetailDao.findMusicGroupStudentWithSubject(musicGroupId, subjectId);
+	}
 }

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

@@ -48,6 +48,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public boolean create(MusicGroupPaymentCalender musicGroupPaymentCalender) {
+		//判断缴费开始时间、结束时间是否被其他缴费记录占用
+		
 		Date date = new Date();
 		List<MusicGroupStudentFee> list = null;
 
@@ -98,6 +100,65 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	public boolean autoUpdateMusicGroupPaymentCalenderStatus() {
+		Date date = new Date();
+		List<PaymentStatusEnum> statusList = new ArrayList<PaymentStatusEnum>();
+		statusList.add(PaymentStatusEnum.NO);
+		statusList.add(PaymentStatusEnum.OPEN);
+		List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.queryByPaymentStatus(statusList);
+		
+		List<MusicGroupPaymentCalender> updateMusicGroupPaymentCalenderList = new ArrayList<MusicGroupPaymentCalender>();
+
+		MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
+		List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = new ArrayList<MusicGroupPaymentCalenderDetail>();
+		
+		for(MusicGroupPaymentCalender mgpc : musicGroupPaymentCalenderList){
+			
+			if(date.after(mgpc.getDeadlinePaymentDate())){
+				//“进行中”更新至“已结束”
+				mgpc.setUpdateTime(date);
+				mgpc.setPaymentStatus(PaymentStatusEnum.YES);
+				updateMusicGroupPaymentCalenderList.add(mgpc);
+				
+				//学生状态更新已结束
+				
+			} else if (date.after(mgpc.getStartPaymentDate())) {
+				//“未开始”更新至“进行中”
+				mgpc.setUpdateTime(date);
+				mgpc.setPaymentStatus(PaymentStatusEnum.OPEN);
+				updateMusicGroupPaymentCalenderList.add(mgpc);
+				
+				//学生状态更新进行中
+				List<MusicGroupStudentFee> list = musicGroupStudentFeeDao.queryByMusicGroupId(mgpc.getMusicGroupId());
+				
+				// 创建缴费明细
+				for (MusicGroupStudentFee mgsf : list) {
+					musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
+					musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(mgpc.getId());
+					musicGroupPaymentCalenderDetail.setCreateTime(date);
+					musicGroupPaymentCalenderDetail.setExpectAmount(mgsf.getCourseFee());
+					musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
+					musicGroupPaymentCalenderDetail.setUpdateTime(date);
+					musicGroupPaymentCalenderDetail.setUserId(mgsf.getUserId());
+
+					musicGroupPaymentCalenderDetailList.add(musicGroupPaymentCalenderDetail);
+				}
+			}
+		}
+		
+		if(updateMusicGroupPaymentCalenderList.size() > 0){
+			musicGroupPaymentCalenderDao.batchUpdate(updateMusicGroupPaymentCalenderList);
+		}
+
+		if (musicGroupPaymentCalenderDetailList.size() > 0) {
+			musicGroupPaymentCalenderDetailDao.batchInsert(musicGroupPaymentCalenderDetailList);
+		}
+		
+		return true;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void batchInsert(List<MusicGroupPaymentCalender> musicGroupPaymentCalenders) {
 		if (musicGroupPaymentCalenders != null && musicGroupPaymentCalenders.size() > 0) {
 			musicGroupPaymentCalenderDao.delByGroupId(musicGroupPaymentCalenders.get(0).getMusicGroupId());
@@ -166,6 +227,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			throw new BizException("修改失败,缴费状态不匹配");
 		}
 		calender.setStartPaymentDate(startTime);
+		calender.setDeadlinePaymentDate(DateUtil.addDays(startTime,3));
 		calender.setUpdateTime(new Date());
 		musicGroupPaymentCalenderDao.update(calender);
 	}

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -1858,6 +1858,26 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         return musicGroupPageInfo;
     }
 
+    @Override
+    public PageInfo<MusicGroup> findEduTeacherMusicGroups(MusicGroupQueryInfo queryInfo) {
+        PageInfo<MusicGroup> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<MusicGroup> dataList = null;
+        int count = musicGroupDao.countMusicGroups(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = musicGroupDao.findMusicGroups(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
     private void updateTeamTeacher(MusicGroup oldMusicGroup, MusicGroup newMusicGroup) {
         //获取当前乐团所有班级
         List<ClassGroup> classGroups = classGroupDao.findClassGroups(newMusicGroup.getId());

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

@@ -1,13 +1,16 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+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.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.CourseTimeDto;
-import com.ym.mec.biz.dal.dto.OnlineMusicGroupCourseDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.CourseScheduleService;
+import com.ym.mec.biz.service.EduPracticeGroupService;
 import com.ym.mec.biz.service.OnlineMusicGroupService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.common.constant.CommonConstants;
@@ -18,10 +21,14 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
-import java.time.LocalDateTime;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.WeekFields;
 import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -55,10 +62,16 @@ public class OnlineMusicGroupServiceImpl implements OnlineMusicGroupService {
     private TeacherAttendanceDao teacherAttendanceDao;
     @Autowired
     private TeacherDefaultMusicGroupSalaryDao teacherDefaultMusicGroupSalaryDao;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private TeacherFreeTimeDao teacherFreeTimeDao;
+    @Autowired
+    private EduPracticeGroupService eduPracticeGroupService;
 
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.DEFAULT)
     @Override
-    public void createOnlineMusicClassGroup(OnlineMusicGroupCourseDto onlineMusicGroupCourseInfo) {
+    public Map<String, Object> createOnlineMusicClassGroup(OnlineMusicGroupCourseDto onlineMusicGroupCourseInfo) {
         if(Objects.isNull(onlineMusicGroupCourseInfo.getMusicGroupId())){
             throw new BizException("请指定乐团");
         }
@@ -148,7 +161,7 @@ public class OnlineMusicGroupServiceImpl implements OnlineMusicGroupService {
             courseSchedule.setTeachMode(TeachModeEnum.ONLINE);
             courseSchedule.setType(CourseSchedule.CourseScheduleType.MUSIC_NETWORK);
             courseSchedule.setGroupType(GroupType.MUSIC);
-            courseSchedule.setIsLock(1);
+            courseSchedule.setIsLock(0);
             courseSchedule.setOrganId(student.getOrganId());
         }
         courseScheduleDao.batchAddCourseSchedules(courses);
@@ -195,5 +208,314 @@ public class OnlineMusicGroupServiceImpl implements OnlineMusicGroupService {
         courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
         teacherAttendanceDao.batchInsert(teacherAttendances);
 
+        List<String> courseTimes = courses.stream().map(c -> DateUtil.dateToString(c.getStartClassTime(), "yyyy-MM-dd HH:mm:ss")).collect(Collectors.toList());
+
+        Map<String, Object> result=new HashMap<>();
+        result.put("courseTimes", StringUtils.join(courses,","));
+        return result;
+    }
+
+    @Override
+    public List<SimpleUserDto> getEnableApplyTeachers(Integer studentId, Integer subjectId) {
+        if (Objects.isNull(subjectId)) {
+            throw new BizException("请选择声部");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserById(studentId);
+        if (Objects.isNull(sysUser)) {
+            throw new BizException("用户不存在");
+        }
+        if (Objects.isNull(sysUser.getOrganId())) {
+            throw new BizException("未找到用户分部属性");
+        }
+
+        List<Integer> includeTeacherIds = new ArrayList<>();
+        List<ExtendTeacherBasicDto> organAndSubjectTeachers = teacherDao.findTeaTeachersByOrganAndSubject2(sysUser.getOrganId(), subjectId);
+        if (CollectionUtils.isEmpty(organAndSubjectTeachers)) {
+            return new ArrayList<>();
+        }
+
+        List<Integer> allTeacherIds = organAndSubjectTeachers.stream().map(TeacherBasicDto::getId).collect(Collectors.toList());
+
+        List<CourseSchedule> userCourses = courseScheduleDao.findUserCourses2(studentId, allTeacherIds);
+
+        if (!CollectionUtils.isEmpty(userCourses)) {
+            Map<GroupType, List<CourseSchedule>> courseTypeCourseMap = userCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getGroupType));
+
+            List<CourseSchedule> practiceCourses = courseTypeCourseMap.get(GroupType.MUSIC);
+            if (!CollectionUtils.isEmpty(practiceCourses)) {
+                for (CourseSchedule practiceCourse : practiceCourses) {
+                    if (!includeTeacherIds.contains(practiceCourse.getTeacherId())) {
+                        includeTeacherIds.add(practiceCourse.getTeacherId());
+                    }
+                }
+            }
+
+            List<CourseSchedule> vipCourses = courseTypeCourseMap.get(GroupType.VIP);
+            if (!CollectionUtils.isEmpty(vipCourses)) {
+                for (CourseSchedule vipCourse : vipCourses) {
+                    if (!includeTeacherIds.contains(vipCourse.getTeacherId())) {
+                        includeTeacherIds.add(vipCourse.getTeacherId());
+                    }
+                }
+            }
+            List<CourseSchedule> singleCourses = courseTypeCourseMap.get(GroupType.MUSIC);
+            if (!CollectionUtils.isEmpty(singleCourses)) {
+                for (CourseSchedule singleCourse : singleCourses) {
+                    if (!includeTeacherIds.contains(singleCourse.getTeacherId())) {
+                        includeTeacherIds.add(singleCourse.getTeacherId());
+                    }
+                }
+            }
+        }
+
+        for (ExtendTeacherBasicDto organAndSubjectTeacher : organAndSubjectTeachers) {
+            if (!includeTeacherIds.contains(organAndSubjectTeacher.getId())
+                    && 1 == organAndSubjectTeacher.getIsSupportExtraPracticeLesson()) {
+                includeTeacherIds.add(organAndSubjectTeacher.getId());
+            }
+        }
+
+        if (CollectionUtils.isEmpty(new ArrayList<>(includeTeacherIds))) {
+            return new ArrayList<>();
+        }
+
+        List<SimpleUserDto> userInfos = new ArrayList<>();
+        Map<Integer, ExtendTeacherBasicDto> idTeacherMap = organAndSubjectTeachers.stream().collect(Collectors.toMap(ExtendTeacherBasicDto::getId, teacher -> teacher));
+        for (Integer includeTeacherId : includeTeacherIds) {
+            ExtendTeacherBasicDto teacher = idTeacherMap.get(includeTeacherId);
+            SimpleUserDto simpleUserDto=new SimpleUserDto(includeTeacherId, teacher.getRealName());
+            simpleUserDto.setAvatar(teacher.getAvatar());
+            simpleUserDto.setIntroduction(teacher.getIntroduction());
+            simpleUserDto.setSubjectNames(teacher.getSubjectNames());
+            userInfos.add(simpleUserDto);
+        }
+
+        return userInfos;
+    }
+
+    @Override
+    public Map getTeacherFreeTimes(Integer studentId, Integer teacherId) {
+        if (Objects.isNull(teacherId)) {
+            throw new BizException("请选择教师");
+        }
+        SysUser student = sysUserFeignService.queryUserById(studentId);
+        if (Objects.isNull(student)) {
+            throw new BizException("用户不存在");
+        }
+        if (Objects.isNull(student.getOrganId())) {
+            throw new BizException("未找到用户分部属性");
+        }
+        Teacher teacher = teacherDao.get(teacherId);
+        if (Objects.isNull(teacher)) {
+            throw new BizException("教师不存在");
+        }
+        Map result = new HashMap();
+        Set<Integer> disableApplyWeekDay = new HashSet<>();
+
+        //课程时长暂时与网管课共用
+        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
+
+        boolean checkTeacherLeaveDate = true;
+        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
+        if (Objects.isNull(allTeacherLeaveData)) {
+            checkTeacherLeaveDate = false;
+        }
+
+        TeacherFreeTime teacherFreeTime = teacherFreeTimeDao.findTeacherFreeTime(teacherId);
+        JSONObject teacherFreeTimes=new JSONObject();
+        int holiday = 0;
+        if (Objects.nonNull(teacherFreeTime)) {
+            if (Objects.nonNull(teacherFreeTime.getHoliday())) {
+                holiday = teacherFreeTime.getHoliday();
+            }
+            if(StringUtils.isNotBlank(teacherFreeTime.getMonday())){
+                teacherFreeTimes.put(String.valueOf(DayOfWeek.MONDAY.getValue()), JSON.parseArray(teacherFreeTime.getMonday()));
+            }else{
+                disableApplyWeekDay.add(DayOfWeek.MONDAY.getValue());
+            }
+            if(StringUtils.isNotBlank(teacherFreeTime.getTuesday())){
+                teacherFreeTimes.put(String.valueOf(DayOfWeek.TUESDAY.getValue()), JSON.parseArray(teacherFreeTime.getTuesday()));
+            }else{
+                disableApplyWeekDay.add(DayOfWeek.TUESDAY.getValue());
+            }
+            if(StringUtils.isNotBlank(teacherFreeTime.getWednesday())){
+                teacherFreeTimes.put(String.valueOf(DayOfWeek.WEDNESDAY.getValue()), JSON.parseArray(teacherFreeTime.getWednesday()));
+            }else{
+                disableApplyWeekDay.add(DayOfWeek.WEDNESDAY.getValue());
+            }
+            if(StringUtils.isNotBlank(teacherFreeTime.getThursday())){
+                teacherFreeTimes.put(String.valueOf(DayOfWeek.THURSDAY.getValue()), JSON.parseArray(teacherFreeTime.getThursday()));
+            }else{
+                disableApplyWeekDay.add(DayOfWeek.THURSDAY.getValue());
+            }
+            if(StringUtils.isNotBlank(teacherFreeTime.getFriday())){
+                teacherFreeTimes.put(String.valueOf(DayOfWeek.FRIDAY.getValue()), JSON.parseArray(teacherFreeTime.getFriday()));
+            }else{
+                disableApplyWeekDay.add(DayOfWeek.FRIDAY.getValue());
+            }
+            if(StringUtils.isNotBlank(teacherFreeTime.getSaturday())){
+                teacherFreeTimes.put(String.valueOf(DayOfWeek.SATURDAY.getValue()), JSON.parseArray(teacherFreeTime.getSaturday()));
+            }else{
+                disableApplyWeekDay.add(DayOfWeek.SATURDAY.getValue());
+            }
+            if(StringUtils.isNotBlank(teacherFreeTime.getSunday())){
+                teacherFreeTimes.put(String.valueOf(DayOfWeek.SUNDAY.getValue()), JSON.parseArray(teacherFreeTime.getSunday()));
+            }else{
+                disableApplyWeekDay.add(DayOfWeek.SUNDAY.getValue());
+            }
+        }
+
+        DateTimeFormatter ddtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        DateTimeFormatter ddf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
+        WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY, 1);
+        ZoneId zoneId = ZoneId.systemDefault();
+
+        LocalDate startDay = LocalDate.now().plusDays(1);
+        LocalDate endDay = startDay.plusDays(14);
+
+        Map<Integer, List<String>> weekNumApplyTimesMap = eduPracticeGroupService.getEnableApplyDatesWithWeek(startDay.getDayOfWeek().getValue());
+        List<CourseSchedule> allTeacherCourses = courseScheduleDao.findTeacherCoursesWithDateRangeWithoutMusicGroup(teacherId, Date.from(startDay.atStartOfDay(zoneId).toInstant()), Date.from(endDay.atStartOfDay(zoneId).toInstant()));
+        allTeacherCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+
+        JSONObject teacherLeaveData = null;
+        if (checkTeacherLeaveDate) {
+            teacherLeaveData = allTeacherLeaveData.getJSONObject(teacherId.toString());
+        }
+
+        if (Objects.isNull(teacherLeaveData)) {
+            checkTeacherLeaveDate = false;
+        }
+
+        weekNumApplyTimesMap.remove(holiday);
+
+        if (teacherId == 100473) {
+            List<String> timeStrs = weekNumApplyTimesMap.get(DateUtil.calendarWeekNumNormalWeekNumMap.get(Calendar.MONDAY));
+            LocalTime noonStartTime = LocalTime.parse("11:30:00", dtf);
+            LocalTime noonEndTime = LocalTime.parse("14:30:00", dtf);
+            LocalTime nightStartTime = LocalTime.parse("20:30:00", dtf);
+            LocalTime defaultApplyTime;
+            Iterator<String> iterator = timeStrs.iterator();
+            while (iterator.hasNext()) {
+                defaultApplyTime = LocalTime.parse(iterator.next(), dtf);
+                LocalTime defaultApplyEndTime = defaultApplyTime.plusMinutes(practiceCourseMinutes);
+                if (defaultApplyTime.compareTo(noonStartTime) <= 0
+                        && defaultApplyEndTime.compareTo(noonEndTime) >= 0) {
+                    iterator.remove();
+                    continue;
+                }
+                if (defaultApplyEndTime.compareTo(nightStartTime) < 0) {
+                    iterator.remove();
+                    continue;
+                }
+            }
+            weekNumApplyTimesMap.remove(DateUtil.calendarWeekNumNormalWeekNumMap.get(Calendar.SATURDAY));
+            weekNumApplyTimesMap.put(DateUtil.calendarWeekNumNormalWeekNumMap.get(Calendar.MONDAY), timeStrs);
+            weekNumApplyTimesMap.put(DateUtil.calendarWeekNumNormalWeekNumMap.get(Calendar.SUNDAY), timeStrs);
+        } else if (checkTeacherLeaveDate) {
+            for (String dateStr : teacherLeaveData.keySet()) {
+                LocalDate parse = LocalDate.parse(dateStr, ddf);
+                LocalDate tempDate = LocalDate.parse(dateStr, ddf);
+                if (tempDate.compareTo(startDay)<0
+                        ||tempDate.compareTo(tempDate)>=0){
+                    continue;
+                }
+                List<String> applyTimeStrs = weekNumApplyTimesMap.get(parse.getDayOfWeek().getValue());
+                if(CollectionUtils.isEmpty(applyTimeStrs)){
+                    continue;
+                }
+                Iterator<String> iterator = applyTimeStrs.iterator();
+                JSONObject leaveDateData = teacherLeaveData.getJSONObject(dateStr);
+                LocalTime leaveStartTime = LocalDateTime.parse(leaveDateData.getString("leave_start_time"), ddtf).toLocalTime();
+                LocalTime leaveEndTime = LocalDateTime.parse(leaveDateData.getString("leave_end_time"), ddtf).toLocalTime();
+                LocalTime defaultApplyTime;
+                while (iterator.hasNext()) {
+                    defaultApplyTime = LocalTime.parse(iterator.next(), dtf);
+                    LocalTime defaultApplyEndTime = defaultApplyTime.plusMinutes(practiceCourseMinutes);
+                    if (defaultApplyTime.compareTo(leaveEndTime) <= 0
+                            && defaultApplyEndTime.compareTo(leaveStartTime) >= 0) {
+                        iterator.remove();
+                        continue;
+                    }
+                }
+                if(!CollectionUtils.isEmpty(applyTimeStrs)){
+                    weekNumApplyTimesMap.put(parse.getDayOfWeek().getValue(), applyTimeStrs);
+                }else{
+                    weekNumApplyTimesMap.remove(parse.getDayOfWeek().getValue());
+                }
+            }
+        }
+
+        Iterator<Integer> weekNumApplyTimeIterator = weekNumApplyTimesMap.keySet().iterator();
+        while (weekNumApplyTimeIterator.hasNext()) {
+            Integer weekNum=weekNumApplyTimeIterator.next();
+            JSONArray teacherWeekDayFreeTimes = teacherFreeTimes.getJSONArray(String.valueOf(weekNum));
+            if(Objects.nonNull(teacherWeekDayFreeTimes)){
+                List<String> applyTimeStrs = weekNumApplyTimesMap.get(weekNum);
+                if(CollectionUtils.isEmpty(applyTimeStrs)){
+                    continue;
+                }
+                Iterator<String> iterator = applyTimeStrs.iterator();
+                while (iterator.hasNext()) {
+                    LocalTime enableApplyStartTime=LocalTime.parse(iterator.next(), dtf);
+                    LocalTime enableApplyEndTime=enableApplyStartTime.plusMinutes(practiceCourseMinutes);
+                    boolean isInclude=false;
+                    for (Object teacherWeekDayFreeTimeObject : teacherWeekDayFreeTimes) {
+                        JSONObject teacherWeekDayFreeTime=JSONObject.parseObject(teacherWeekDayFreeTimeObject.toString());
+                        LocalTime teacherFreeStartTime=LocalTime.parse(teacherWeekDayFreeTime.getString("startTime"),DateUtil.timeFormatter);
+                        LocalTime teacherFreeEndTime=LocalTime.parse(teacherWeekDayFreeTime.getString("endTime"),DateUtil.timeFormatter);
+                        if(enableApplyEndTime.compareTo(teacherFreeEndTime)<=0
+                                &&enableApplyStartTime.compareTo(teacherFreeStartTime)>=0){
+                            isInclude=true;
+                            break;
+                        }
+                    }
+                    if(!isInclude){
+                        iterator.remove();
+                    }
+                }
+                if(CollectionUtils.isEmpty(applyTimeStrs)){
+                    weekNumApplyTimeIterator.remove();
+                }else{
+                    weekNumApplyTimesMap.put(weekNum,applyTimeStrs);
+                }
+            }else{
+                weekNumApplyTimeIterator.remove();
+            }
+        }
+
+        if (CollectionUtils.isEmpty(allTeacherCourses)) {
+            result.put("teacherFreeDays", weekNumApplyTimesMap);
+            return result;
+        }
+
+        for (CourseSchedule teacherCourse : allTeacherCourses) {
+            LocalDateTime courseStartTime = LocalDateTime.ofInstant(teacherCourse.getStartClassTime().toInstant(), zoneId);
+            LocalDateTime courseEndTime = LocalDateTime.ofInstant(teacherCourse.getEndClassTime().toInstant(), zoneId);
+            List<String> applyTimeStrs = weekNumApplyTimesMap.get(courseStartTime.getDayOfWeek().getValue());
+            if (CollectionUtils.isEmpty(applyTimeStrs)) {
+                continue;
+            }
+            Iterator<String> iterator = applyTimeStrs.iterator();
+            LocalTime defaultApplyTime;
+            while (iterator.hasNext()) {
+                defaultApplyTime = LocalTime.parse(iterator.next(), dtf);
+                LocalTime defaultApplyEndTime = defaultApplyTime.plusMinutes(practiceCourseMinutes);
+                if (defaultApplyTime.compareTo(courseEndTime.toLocalTime()) <= 0
+                        && defaultApplyEndTime.compareTo(courseStartTime.toLocalTime()) >= 0) {
+                    iterator.remove();
+                    continue;
+                }
+            }
+            if(CollectionUtils.isEmpty(applyTimeStrs)){
+                weekNumApplyTimesMap.remove(courseStartTime.getDayOfWeek().getValue());
+            }else{
+                weekNumApplyTimesMap.put(courseStartTime.getDayOfWeek().getValue(), applyTimeStrs);
+            }
+        }
+        result.put("teacherFreeDays", weekNumApplyTimesMap);
+        return result;
     }
 }

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

@@ -1044,4 +1044,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }
         return students;
     }
+
+    @Override
+    public List<Subject> findMusicGroupAllStudentSubjects(String musicGroupId) {
+        return studentRegistrationDao.findMusicGroupAllStudentSubjects(musicGroupId);
+    }
 }

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

@@ -2636,6 +2636,29 @@
         </foreach>
         AND ( cs.del_flag_ != 1 OR cs.del_flag_ IS NULL )
     </select>
+    <select id="findUserCourses3" resultMap="CourseSchedule">
+        SELECT
+        cs.id_,
+        cs.group_type_,
+        cgtm.`user_id_` teacher_id_
+        FROM
+        `class_group_student_mapper` cgsm
+        LEFT JOIN `class_group` cg ON cgsm.`class_group_id_` = cg.`id_`
+        LEFT JOIN `class_group_teacher_mapper` cgtm ON cgtm.`class_group_id_` = cg.`id_`
+        AND cgtm.`teacher_role_` = 'BISHOP'
+        LEFT JOIN `course_schedule` cs ON cs.`class_group_id_` = cg.`id_`
+        WHERE
+        cgsm.user_id_=#{userId}
+        AND cgtm.teacher_role_='BISHOP'
+        AND cgsm.status_ = 'NORMAL'
+        AND cg.group_type_ IN ( 'PRACTICE', 'MUSIC', 'VIP' )
+        AND cs.`id_` IS NOT NULL
+        AND cgtm.user_id_ IN
+        <foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
+            #{teacherId}
+        </foreach>
+        AND ( cs.del_flag_ != 1 OR cs.del_flag_ IS NULL )
+    </select>
     <select id="findUserCoursesWithPay" resultMap="CourseSchedule">
         SELECT
         cs.id_,

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -429,4 +429,10 @@
 		GROUP BY
 			course_schedule_id_
     </select>
+    <select id="countStudentNotStartCourseNumWithCourseType" resultType="int">
+		SELECT COUNT(DISTINCT cssp.course_schedule_id_) FROM course_schedule_student_payment cssp
+		LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_
+		WHERE cssp.user_id_=#{studentId} AND cs.type_= #{courseScheduleType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		AND CONCAT(class_date_, ' ', start_class_time_)&gt;NOW()
+	</select>
 </mapper>

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

@@ -417,4 +417,28 @@
 		</foreach>
 		GROUP BY sr.user_id_
 	</select>
+
+	<sql id="findMusicGroupsCondition">
+		<where>
+			<if test="educationalTeacherId!=null">
+				AND educational_teacher_id_=#{educationalTeacherId}
+			</if>
+			<if test="search!=null">
+				AND (id_=#{search} OR name_ LIKE CONCAT('%', #{search}, '%'))
+			</if>
+			<if test="status!=null">
+				AND status_=#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+		</where>
+	</sql>
+    <select id="findMusicGroups" resultMap="MusicGroup">
+		SELECT * FROM music_group
+		<include refid="findMusicGroupsCondition"/>
+		ORDER BY id_
+		<include refid="global.limit"/>
+	</select>
+	<select id="countMusicGroups" resultType="int">
+		SELECT COUNT(id_) FROM music_group
+		<include refid="findMusicGroupsCondition"/>
+	</select>
 </mapper>

+ 81 - 5
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml

@@ -15,6 +15,12 @@
 		<result column="pay_time_" property="payTime" />
 		<result column="update_time_" property="updateTime" />
 		<result column="create_time_" property="createTime" />
+		<association property="sysUser" javaType="com.ym.mec.auth.api.entity.SysUser">
+			<result column="username_" property="username" />
+		</association>
+		<association property="student" javaType="com.ym.mec.biz.dal.entity.Student">
+			<result column="subject_names_" property="subjectNames" />
+		</association>
 	</resultMap>
 
 	<!-- 根据主键查询一条记录 -->
@@ -85,6 +91,38 @@
 		</set>
 		WHERE id_ = #{id}
 	</update>
+	<update id="batchUpdate">
+		<foreach collection="calenderDetails" item="item" index="index" open="" close="" separator=";">
+			UPDATE music_group_payment_calender_detail
+			<set>
+				<if test="item.userId != null">
+					user_id_ = #{item.userId},
+				</if>
+				<if test="item.userStatus != null">
+					user_status_ = #{item.userStatus},
+				</if>
+				<if test="item.paymentStatus != null">
+					payment_status_ = #{item.paymentStatus},
+				</if>
+				<if test="item.expectAmount != null">
+					expect_amount_ = #{item.expectAmount},
+				</if>
+				<if test="item.updateTime != null">
+					update_time_ = #{item.updateTime},
+				</if>
+				<if test="item.musicGroupPaymentCalenderId != null">
+					music_group_payment_calender_id_ = #{item.musicGroupPaymentCalenderId},
+				</if>
+				<if test="item.actualAmount != null">
+					actual_amount_ = #{item.actualAmount},
+				</if>
+				<if test="item.payTime != null">
+					pay_time_ = #{item.payTime}
+				</if>
+			</set>
+			WHERE id_ = #{item.id}
+		</foreach>
+	</update>
 
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete">
@@ -94,29 +132,67 @@
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="MusicGroupPaymentCalenderDetail"
 		parameterType="map">
-		SELECT * FROM music_group_payment_calender_detail
+		SELECT mgpc.*,su.username_,st.name_ subject_names_
+		FROM music_group_payment_calender_detail mgpc
+		LEFT JOIN sys_user su ON su.id_ = mgpc.user_id_
+		LEFT JOIN student s ON s.user_id_ = mgpc.user_id_
+		LEFT JOIN `subject` st ON FIND_IN_SET(st.id_,s.subject_id_list_)
 		<where>
 			<if test="userId != null">
-				user_id_ = #{userId}
+				mgpc.user_id_ = #{userId}
+			</if>
+			<if test="id != null">
+				mgpc.music_group_payment_calender_id_ = #{id}
 			</if>
 			<if test="paymentStatus != null">
-				payment_status_ = #{paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+				mgpc.payment_status_ = #{paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="subjectId != null">
+				FIND_IN_SET(#{subjectId},s.subject_id_list_)
 			</if>
 		</where>
-		ORDER BY create_time_
+		ORDER BY mgpc.create_time_
 		<include refid="global.limit" />
 	</select>
 
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM music_group_payment_calender_detail
+		SELECT COUNT(mgpc.id_) FROM music_group_payment_calender_detail mgpc
+		LEFT JOIN student s ON s.user_id_ = mgpc.user_id_
+		LEFT JOIN `subject` st ON FIND_IN_SET(st.id_,s.subject_id_list_)
 		<where>
 			<if test="userId != null">
 				user_id_ = #{userId}
 			</if>
+			<if test="id != null">
+				mgpc.music_group_payment_calender_id_ = #{id}
+			</if>
+			<if test="subjectId != null">
+				FIND_IN_SET(#{subjectId},s.subject_id_list_)
+			</if>
 			<if test="paymentStatus != null">
 				payment_status_ = #{paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 			</if>
 		</where>
 	</select>
+	<select id="queryListByIds" resultMap="MusicGroupPaymentCalenderDetail">
+		SELECT * FROM music_group_payment_calender_detail WHERE FIND_IN_SET(id_,#{ids})
+	</select>
+	
+	<select id="queryByCalenderId" resultMap="MusicGroupPaymentCalenderDetail">
+		SELECT * FROM music_group_payment_calender_detail where music_group_payment_calender_id_ = #{calenderId}
+	</select>
+    <select id="findMusicGroupStudentWithSubject" resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
+		SELECT
+		DISTINCT su.id_ userId,su.username_ userName, su.avatar_ avatar, su.phone_ phone
+		FROM music_group_payment_calender_detail mgpcd
+		LEFT JOIN student_registration sr ON sr.user_id_=mgpcd.user_id_
+		LEFT JOIN sys_user su ON su.id_=mgpcd.user_id_
+		WHERE sr.music_group_id_=#{musicGroupId}
+		AND sr.subject_id_= #{subjectId}
+		AND music_group_payment_calender_id_ IN
+		(SELECT id_ FROM (SELECT id_ FROM music_group_payment_calender
+		WHERE music_group_id_=#{musicGroupId} AND payment_status_ IN ('PAID_COMPLETED', 'PROCESSING')
+		ORDER BY start_payment_date_ DESC LIMIT 1) t);
+	</select>
 </mapper>

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

@@ -85,6 +85,45 @@
         </set>
         WHERE id_ = #{id}
     </update>
+    
+    <update id="batchUpdate" parameterType="com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender">
+	    <foreach collection="list" item="item" index="index" open="" close="" separator=";">
+	        UPDATE music_group_payment_calender
+	        <set>
+	            <if test="item.type != null">
+	                type_ = #{item.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+	            </if>
+	            <if test="item.deadlinePaymentDate != null">
+	                deadline_payment_date_ = #{item.deadlinePaymentDate},
+	            </if>
+	            <if test="item.paymentStatus != null">
+	                payment_status_ = #{item.paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+	            </if>
+	            <if test="item.expectNum != null">
+	                expect_num_ = #{item.expectNum},
+	            </if>
+	            <if test="item.actualNum != null">
+	                actual_num_ = #{item.actualNum},
+	            </if>
+	            <if test="item.memo != null">
+	                memo_ = #{item.memo},
+	            </if>
+	            <if test="item.startPaymentDate != null">
+	                start_payment_date_ = #{item.startPaymentDate},
+	            </if>
+	            <if test="item.paymentMonth != null">
+	                payment_month_ = #{item.paymentMonth},
+	            </if>
+	            <if test="item.updateTime != null">
+	                update_time_ = NOW(),
+	            </if>
+	            <if test="item.musicGroupId != null">
+	                music_group_id_ = #{item.musicGroupId},
+	            </if>
+	        </set>
+	        WHERE id_ = #{item.id}
+		</foreach>
+    </update>
 
     <!-- 根据主键删除一条记录 -->
     <delete id="delete">
@@ -108,9 +147,22 @@
 		SELECT COUNT(mgpc.id_) FROM music_group_payment_calender mgpc
         WHERE mgpc.music_group_id_ = #{musicGroupId}
 	</select>
+	
     <select id="findByMusicGroupId" resultMap="MusicGroupPaymentCalender">
         SELECT * FROM music_group_payment_calender mgpc
         WHERE music_group_id_ = #{musicGroupId}
         ORDER BY payment_month_
     </select>
+	
+    <select id="queryByPaymentStatus" resultMap="MusicGroupPaymentCalender">
+        SELECT * FROM music_group_payment_calender mgpc
+        <where>
+        	<if test="status != null">
+        		payment_status_ in
+        		<foreach collection="list" item="item" open="(" close=")" separator=",">
+		            #{item}
+		        </foreach>
+        	</if>
+        </where>
+    </select>
 </mapper>

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

@@ -608,4 +608,9 @@
         WHERE sr.music_group_status_ != 'QUIT' AND sr.user_id_ = #{userId}
         GROUP BY sr.user_id_
     </select>
+    <select id="findMusicGroupAllStudentSubjects" resultMap="com.ym.mec.biz.dal.dao.SubjectDao.Subject">
+        SELECT DISTINCT s.* FROM student_registration sr
+        LEFT JOIN subject s ON sr.subject_id_=s.id_
+        WHERE sr.music_group_id_=#{musicGroupId};
+    </select>
 </mapper>

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -109,4 +109,8 @@ public interface TaskRemoteService {
 	//更新学生运营指标
 	@GetMapping("task/updateStudentOperatingTag")
 	void updateStudentOperatingTag();
+
+	// 更新乐团缴费日历的状态
+	@GetMapping("task/updateMusicGroupPaymentCalenderStatus")
+	void updateMusicGroupPaymentCalenderStatus();
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -140,4 +140,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void updateStudentOperatingTag() {
 		logger.info("更新学生运营指标失败");
 	}
+
+	@Override
+	public void updateMusicGroupPaymentCalenderStatus() {
+		logger.info("更新乐团缴费日历的状态失败");
+	}
 }

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/UpdateMusicGroupPaymentCalenderStatusTask.java

@@ -0,0 +1,19 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UpdateMusicGroupPaymentCalenderStatusTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.updateMusicGroupPaymentCalenderStatus();
+	}
+}

+ 12 - 8
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java

@@ -1,18 +1,22 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
-import com.ym.mec.biz.dal.page.MusicCalenderQueryInfo;
-import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
-import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
+import java.util.Date;
+import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Date;
-import java.util.List;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.page.MusicCalenderQueryInfo;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
+import com.ym.mec.common.controller.BaseController;
 
 @RequestMapping("musicGroupPaymentCalender")
 @Api(tags = "乐团缴费日历服务")

+ 20 - 2
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java

@@ -3,15 +3,17 @@ package com.ym.mec.web.controller;
 import com.ym.mec.biz.dal.page.MusicCalenderDetailQueryInfo;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderDetailService;
 import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
+
 @RequestMapping("musicGroupPaymentCalenderDetail")
 @Api(tags = "乐团缴费明细")
 @RestController
@@ -20,10 +22,26 @@ public class MusicGroupPaymentCalenderDetailController extends BaseController {
     @Autowired
     private MusicGroupPaymentCalenderDetailService musicGroupPaymentCalenderDetailService;
 
-    @ApiOperation(value = "分页查询乐团缴费日历列表")
+    @ApiOperation(value = "分页查询乐团缴费明细列表")
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalenderDetail/queryPage')")
     public Object queryPage(MusicCalenderDetailQueryInfo queryInfo) {
         return succeed(musicGroupPaymentCalenderDetailService.queryPage(queryInfo));
     }
+
+    @ApiOperation(value = "修改学员预计缴费金额")
+    @PostMapping("/updateActualAmount")
+    @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalenderDetail/updateActualAmount')")
+    public Object updateActualAmount(BigDecimal actualAmount,String ids) {
+        musicGroupPaymentCalenderDetailService.updateActualAmount(actualAmount,ids);
+        return succeed();
+    }
+
+    @ApiOperation(value = "开启缴费")
+    @PostMapping("/openPayment")
+    @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalenderDetail/openPayment')")
+    public Object openPayment(String ids) {
+        musicGroupPaymentCalenderDetailService.openPayment(ids);
+        return succeed();
+    }
 }

+ 10 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -2,6 +2,7 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -60,6 +61,9 @@ public class TaskController extends BaseController {
 	
 	@Autowired
 	private StudentService studentService;
+	
+	@Autowired
+	private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
 
 	@GetMapping("/refreshPaymentFeeStatus")
 	// 刷新付费状态
@@ -222,4 +226,10 @@ public class TaskController extends BaseController {
 	public void updateStudentOperatingTag(){
 		studentService.updateOperatingTempTag();
 	}
+
+	// 更新乐团缴费日历的状态
+	@GetMapping("/updateMusicGroupPaymentCalenderStatus")
+	public void updateMusicGroupPaymentCalenderStatus() {
+		musicGroupPaymentCalenderService.autoUpdateMusicGroupPaymentCalenderStatus();
+	}
 }

+ 77 - 19
mec-web/src/main/java/com/ym/mec/web/controller/education/EduOnlineMusicGroupController.java

@@ -2,25 +2,35 @@ package com.ym.mec.web.controller.education;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dto.OnlineMusicGroupCourseDto;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderDetailService;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.OnlineMusicGroupService;
+import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 
 @RequestMapping("eduOnlineMusic")
 @Api(tags = "教务端乐团网管课")
@@ -34,42 +44,90 @@ public class EduOnlineMusicGroupController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
     @Autowired
+    private StudentRegistrationService studentRegistrationService;
+    @Autowired
+    private MusicGroupPaymentCalenderDetailService musicGroupPaymentCalenderDetailService;
+    @Autowired
     private EmployeeDao employeeDao;
+    @Autowired
+    private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
 
     @ApiOperation(value = "分页查询乐团列表")
-    @GetMapping("/queryPage")
-    @PreAuthorize("@pcs.hasPermissions('eduOnlineMusic/queryPage')")
-    public Object queryPage(MusicGroupQueryInfo queryInfo) {
+    @GetMapping("/findMusicGroups")
+    @PreAuthorize("@pcs.hasPermissions('eduOnlineMusic/findMusicGroups')")
+    public HttpResponseResult findMusicGroups(MusicGroupQueryInfo queryInfo){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
-        if(!sysUser.getIsSuperAdmin()){
-            Employee employee = employeeDao.get(sysUser.getId());
-            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
-                queryInfo.setOrganId(employee.getOrganIdList());
-            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
-                return failed("用户所在分部异常");
-            }else {
-                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
-                    return failed("非法请求");
-                }
-            }
+        queryInfo.setEducationalTeacherId(sysUser.getId());
+        queryInfo.setStatus(MusicGroupStatusEnum.PROGRESS);
+        return succeed(musicGroupService.findEduTeacherMusicGroups(queryInfo));
+    }
+
+    @ApiOperation(value = "获取乐团下所有学员身上的声部列表")
+    @GetMapping("/findMusicGroupAllStudentSubjects")
+    @PreAuthorize("@pcs.hasPermissions('eduOnlineMusic/findMusicGroupAllStudentSubjects')")
+    public HttpResponseResult findMusicGroupAllStudentSubjects(String musicGroupId){
+        return succeed(studentRegistrationService.findMusicGroupAllStudentSubjects(musicGroupId));
+    }
+
+    @ApiOperation(value = "根据声部获取乐团下完成缴费的学员")
+    @GetMapping("/findMusicGroupStudentWithSubject")
+    @PreAuthorize("@pcs.hasPermissions('eduOnlineMusic/findMusicGroupStudentWithSubject')")
+    public HttpResponseResult findMusicGroupStudentWithSubject(String musicGroupId,Integer subjectId){
+        if(Objects.isNull(subjectId)){
+            return failed("请指定声部");
+        }
+        return succeed(musicGroupPaymentCalenderDetailService.findMusicGroupStudentWithSubject(musicGroupId, subjectId));
+    }
+
+    @ApiOperation(value = "获取可选择的教师")
+    @GetMapping("/getEnableApplyTeachers")
+    @PreAuthorize("@pcs.hasPermissions('eduOnlineMusic/getEnableApplyTeachers')")
+    public HttpResponseResult getEnableApplyTeachers(Integer studentId, Integer subjectId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if(Objects.isNull(studentId)){
+            throw new BizException("请指定学生");
         }
-        return succeed(musicGroupService.queryMusicGroupPage(queryInfo));
+        return succeed(onlineMusicGroupService.getEnableApplyTeachers(studentId, subjectId));
+    }
+
+    @ApiOperation(value = "获取教师空闲时间")
+    @GetMapping("/getTeacherFreeTimes")
+    @PreAuthorize("@pcs.hasPermissions('eduOnlineMusic/getTeacherFreeTimes')")
+    public HttpResponseResult getTeacherFreeTimes(Integer studentId, Integer teacherId) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if(Objects.isNull(studentId)){
+            throw new BizException("请指定学生");
+        }
+        return succeed(onlineMusicGroupService.getTeacherFreeTimes(studentId,teacherId));
+    }
+
+    @ApiOperation(value = "检测学生是否存在进行中的乐团网管课")
+    @GetMapping("/checkStudentExistMusicNetwork")
+    @PreAuthorize("@pcs.hasPermissions('eduOnlineMusic/checkStudentExistMusicNetwork')")
+    public HttpResponseResult checkStudentExistMusicNetwork(Integer studentId){
+        int i = courseScheduleStudentPaymentDao.countStudentNotStartCourseNumWithCourseType(studentId, CourseSchedule.CourseScheduleType.MUSIC_NETWORK);
+        return succeed(i>0?1:0);
     }
 
     @ApiOperation(value = "创建乐团网管课")
-    @GetMapping("/createOnlineMusicClassGroup")
+    @PostMapping("/createOnlineMusicClassGroup")
     @PreAuthorize("@pcs.hasPermissions('eduOnlineMusic/createOnlineMusicClassGroup')")
     public HttpResponseResult createOnlineMusicClassGroup(OnlineMusicGroupCourseDto onlineMusicGroupCourseInfo){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
-        onlineMusicGroupService.createOnlineMusicClassGroup(onlineMusicGroupCourseInfo);
-        return succeed();
+
+        return succeed(onlineMusicGroupService.createOnlineMusicClassGroup(onlineMusicGroupCourseInfo));
     }
 
 }