瀏覽代碼

Merge branch 'online1' into grade_feature

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
周箭河 4 年之前
父節點
當前提交
bbb454173c
共有 29 個文件被更改,包括 573 次插入137 次删除
  1. 63 33
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  2. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java
  3. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  4. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderStudentDetail.java
  5. 48 0
      mec-biz/src/main/java/com/ym/mec/biz/event/MusicGroupStatusChangeEvent.java
  6. 50 0
      mec-biz/src/main/java/com/ym/mec/biz/event/MusicGroupStudentChangeEvent.java
  7. 44 0
      mec-biz/src/main/java/com/ym/mec/biz/event/listener/GroupEventListener.java
  8. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/event/source/GroupEventSource.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  10. 9 9
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java
  11. 27 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  12. 5 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  13. 34 17
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  14. 36 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  15. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  16. 6 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  17. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  18. 7 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  19. 4 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  20. 3 0
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  21. 15 0
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  22. 6 0
      mec-common/audit-log/pom.xml
  23. 63 30
      mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java
  24. 2 1
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  25. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  26. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  27. 63 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java
  28. 3 1
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduPracticeGroupController.java
  29. 7 0
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduRepairController.java

+ 63 - 33
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -26,11 +26,11 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     int batchInsert(List<CourseScheduleStudentPayment> courseScheduleStudentPayments);
 
     /**
+     * @param courseScheduleStudentPayments:
+     * @return int
      * @describe 批量更新
      * @author Joburgess
      * @date 2020/1/10
-     * @param courseScheduleStudentPayments:
-     * @return int
      */
     int batchUpdate(@Param("courseScheduleStudentPayments") List<CourseScheduleStudentPayment> courseScheduleStudentPayments);
 
@@ -117,15 +117,15 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
                                                                               @Param("userId") Integer userId);
 
     /**
-     * @describe 统计团体下为开始课程学生数量
-     * @author Joburgess
-     * @date 2020.09.27
      * @param groupId:
      * @param groupType:
      * @return int
      * @describe 统计团体下为开始课程学生数量
      * @author Joburgess
      * @date 2020.09.27
+     * @describe 统计团体下为开始课程学生数量
+     * @author Joburgess
+     * @date 2020.09.27
      */
     int countNotStartCourseStudentNumWithGroup(@Param("groupId") String groupId,
                                                @Param("groupType") GroupType groupType);
@@ -145,6 +145,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 根据乐团编号删除记录
+     *
      * @param musicGroupId
      * @return
      */
@@ -152,6 +153,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 根据乐团编号,和groupTYpe获取学员剩余课程数
+     *
      * @param musicGroupIds
      * @param userId
      * @param groupType
@@ -172,21 +174,24 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 根据乐团,vip状态获取编号
+     *
      * @return
      */
     Set<Integer> queryMusicStudentPer();
+
     /**
      * 根据乐团,vip状态获取编号
+     *
      * @return
      */
     Set<Integer> queryVipStudentPer();
 
     /**
+     * @param courseIds: 统计课程上的学生人数
+     * @return java.util.List<java.util.Map < java.lang.Integer, java.lang.Integer>>
      * @describe
      * @author Joburgess
      * @date 2020/1/8
-     * @param courseIds: 统计课程上的学生人数
-     * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.Integer>>
      */
     List<Map<Integer, Integer>> countCourseStudentNum(@Param("courseIds") List<Long> courseIds);
 
@@ -211,11 +216,11 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     List<CourseScheduleStudentPayment> findByCourseSchedule(@Param("courseScheduleId") Long courseScheduleId);
 
     /**
+     * @param mainMergeCourseId:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment>
      * @describe 获取合并课程的学员缴费记录
      * @author Joburgess
      * @date 2021/1/21 0021
-     * @param mainMergeCourseId:
-     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment>
      */
     List<CourseScheduleStudentPayment> findByMainMergedCourse(@Param("mainMergeCourseId") Long mainMergeCourseId);
 
@@ -230,17 +235,18 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 获取课程学员数量
+     *
      * @param courseScheduleId
      * @return
      */
     Integer countStudentNum(Integer courseScheduleId);
 
     /**
+     * @param courseScheduleId:
+     * @return int
      * @describe 统计课程学员数量
      * @author Joburgess
      * @date 2021/2/9 0009
-     * @param courseScheduleId:
-     * @return int
      */
     int countCourseOnlyStudentNum(@Param("courseScheduleId") Long courseScheduleId);
 
@@ -257,6 +263,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 获取当前课程的学员列表
+     *
      * @param courseScheduleId
      * @return
      */
@@ -264,17 +271,18 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 获取课程的学员编号列表
+     *
      * @param courseScheduleIds
      * @return
      */
     List<Map<Integer, String>> getStudentIdMap(@Param("courseScheduleIds") List<Long> courseScheduleIds);
 
     /**
+     * @param monday:
+     * @return java.util.List<java.lang.Integer>
      * @describe 获取在指定时间之后不存在网管课的学员编号列表
      * @author Joburgess
      * @date 2020/4/10
-     * @param monday:
-     * @return java.util.List<java.lang.Integer>
      */
     List<Practice4ExercisesSituationDto> findNoPracticeStudentIdsOnWeek(@Param("monday") String monday,
                                                                         @Param("sunday") String sunday);
@@ -283,6 +291,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 从指定时间开始查询学的线上可数
+     *
      * @return
      */
     List<StudentCourseTimesDto> queryStudentNotStartCourseTimesOfOnline();
@@ -300,6 +309,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 获取学员指定课程类型的剩余课时数
+     *
      * @param studentId
      * @param courseScheduleType
      * @return
@@ -309,6 +319,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 批量操作节拍器状态
+     *
      * @param courseScheduleId
      * @param userId
      */
@@ -316,6 +327,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 获取用户的节拍器信息
+     *
      * @param userIds
      * @param courseScheduleId
      * @return
@@ -324,6 +336,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 获取用户的曲目下载信息
+     *
      * @param userIds
      * @param courseScheduleId
      * @return
@@ -332,6 +345,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 获取单个用户的midi
+     *
      * @param courseScheduleId
      * @param userId
      * @return
@@ -340,6 +354,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 获取单个用户的examDownloadJson
+     *
      * @param courseScheduleId
      * @param userId
      * @return
@@ -347,18 +362,19 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     String getExamJsonByCourseIdAndUserId(@Param("courseScheduleId") Long courseScheduleId, @Param("userId") Integer userId);
 
     /**
+     * @param groupType:
+     * @param groupIds:
+     * @return java.util.List<java.util.Map < java.lang.String, java.math.BigDecimal>>
      * @describe 统计课程组下的课程单价
      * @author Joburgess
      * @date 2020.06.11
-     * @param groupType:
-     * @param groupIds:
-     * @return java.util.List<java.util.Map<java.lang.String,java.math.BigDecimal>>
      */
     List<Map<String, BigDecimal>> findGroupCoursesUnitPrice(@Param("groupType") GroupType groupType,
                                                             @Param("groupIds") List<String> groupIds);
 
     /**
      * 获取未进入教室的学员列表
+     *
      * @param roomId
      * @param courseScheduleId
      * @return
@@ -382,11 +398,11 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
 
     /**
+     * @param StudentIds:
+     * @return java.util.List<java.util.Map < java.lang.Integer, java.util.Date>>
      * @describe 获取指定学员的最后一节课时间
      * @author Joburgess
      * @date 2020/11/17 0017
-     * @param StudentIds:
-     * @return java.util.List<java.util.Map<java.lang.Integer,java.util.Date>>
      */
     List<Map<Integer, Date>> findStudentLastCourseSchedule(@Param("studentIds") List<Integer> StudentIds);
 
@@ -396,27 +412,28 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 修改学员曲目下载信息
-     * @author zouxuan
+     *
      * @param roomId
+     * @author zouxuan
      */
     int adjustExamSong(@Param("roomId") Long roomId, @Param("userId") Integer userId, @Param("examSongJson") String examSongJson);
 
     /**
-     * @describe 统计学员通过双十一活动排课的数量
-     * @author qnc99
-     * @date 2020/11/25 0025
      * @param userIds:
      * @param activityIds:
      * @return java.util.List<com.ym.mec.biz.dal.dto.StudentVipDouble11Dto>
+     * @describe 统计学员通过双十一活动排课的数量
+     * @author qnc99
+     * @date 2020/11/25 0025
      */
     List<StudentVipDouble11Dto> countStudentDouble11CourseTime(@Param("userIds") List<Integer> userIds,
                                                                @Param("specialActivityIds") List<Integer> specialActivityIds);
 
     /**
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleStudentPaymentDto>
      * @describe 获取需要更新课营收的课程
      * @author qnc99
      * @date 2020/12/2 0002
-     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleStudentPaymentDto>
      */
     List<CourseScheduleStudentPaymentDto> findNeedUpdateActualPriceStudentCourses(@Param("groupIds") List<String> groupIds,
                                                                                   @Param("userIds") List<Integer> userIds,
@@ -424,62 +441,75 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     /**
      * 根据课程编号和,学员编号获取列表信息
-     * @author zouxuan
+     *
      * @param courseIds
      * @param studentId
      * @return
+     * @author zouxuan
      */
     List<CourseScheduleStudentPayment> queryCourseByIdsAndStudentId(@Param("courseIds") List<Long> courseIds, @Param("studentId") Integer studentId, @Param("courseType") String courseType);
 
     /**
      * 获取班级学员关联的编号
-     * @zouxuan
+     *
      * @param classGroupIds
      * @param studentIds
      * @return
+     * @zouxuan
      */
     List<Long> queryStudentNotStartByClassIdsAndStudentIds(@Param("classGroupIds") List<Integer> classGroupIds, @Param("studentIds") List<Integer> studentIds);
 
     /**
      * 获取指定列表中学员的费用列表
-     * @author zouxuan
+     *
      * @param studentPaymentIds
      * @param studentId
      * @return
+     * @author zouxuan
      */
     List<CourseScheduleStudentPayment> queryByIdsAndStudentId(@Param("studentPaymentIds") List<Long> studentPaymentIds, @Param("studentId") Integer studentId, @Param("courseType") String courseType);
 
     /**
-     * @describe 统计课程组已经开始的课程的应缴费用
-     * @author qnc99
-     * @date 2020/12/8 0008
      * @param groupId:
      * @param groupType:
      * @return java.math.BigDecimal
+     * @describe 统计课程组已经开始的课程的应缴费用
+     * @author qnc99
+     * @date 2020/12/8 0008
      */
     BigDecimal countFinishCoursePriceWithMusicGroup(@Param("groupId") String groupId,
                                                     @Param("groupType") GroupType groupType,
                                                     @Param("userId") Integer userId);
 
     /**
-     * @describe 获取学生指定日期之前指定类型的最后一节课
-     * @author Joburgess
-     * @date 2020/12/25 0025
      * @param studentId:
      * @param monday:
      * @return com.ym.mec.biz.dal.entity.CourseSchedule
+     * @describe 获取学生指定日期之前指定类型的最后一节课
+     * @author Joburgess
+     * @date 2020/12/25 0025
      */
     CourseSchedule getStudentHistoryLastCourse(@Param("studentId") Integer studentId,
                                                @Param("monday") String monday,
                                                @Param("groupId") String groupId,
-                                               @Param("courseType")CourseSchedule.CourseScheduleType courseType);
+                                               @Param("courseType") CourseSchedule.CourseScheduleType courseType);
 
     /**
      * 获取学员对应课程类型剩余课程价值
+     *
      * @param studentId
      * @param classGroupId
      * @param courseType
      * @return
      */
     BigDecimal querySubCoursePriceMap(@Param("studentId") Integer studentId, @Param("classGroupId") Integer classGroupId, @Param("courseType") String courseType);
+
+
+    /**
+     * 获取课程的人数
+     *
+     * @param courseIds
+     * @return
+     */
+    List<CourseSchedule> getCourseScheduleStudentNum(@Param("courseIds") List<Long> courseIds);
 }

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

@@ -106,7 +106,8 @@ public interface PracticeGroupDao extends com.ym.mec.common.dal.BaseDAO<Long, Pr
      * @author Joburgess
      * @date 2020/4/24
      */
-    int checkStudentExitChargePractice(@Param("studentId") Integer studentId);
+    int checkStudentExitChargePractice(@Param("studentId") Integer studentId,
+                                       @Param("startTime") String startTime);
 
     /**
      * @param userId:

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

@@ -471,4 +471,13 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return com.ym.mec.biz.dal.entity.MusicGroup
      */
     MusicGroup getUserLastNormalMusicGroup(@Param("userId") Integer userId);
+
+    /**
+     * @describe 查询学员在读进行中乐团报名信息
+     * @author Joburgess
+     * @date 2021/2/25 0025
+     * @param studentIds:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.StudentRegistration>
+     */
+    List<StudentRegistration> getStudentNormalRegistration(@Param("studentIds") Set<Integer> studentIds);
 }

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

@@ -24,7 +24,7 @@ public class MusicGroupPaymentCalenderStudentDetail {
 	private java.math.BigDecimal courseOriginalPrice;
 	
 	/** 现价 */
-	private java.math.BigDecimal courseCurrentPrice;
+	private java.math.BigDecimal courseCurrentPrice = BigDecimal.ZERO;
 
 	/** 可扣减的课程余额 */
 	private java.math.BigDecimal subCourseAmount;

+ 48 - 0
mec-biz/src/main/java/com/ym/mec/biz/event/MusicGroupStatusChangeEvent.java

@@ -0,0 +1,48 @@
+package com.ym.mec.biz.event;
+
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/2/24 0024
+ */
+public class MusicGroupStatusChangeEvent extends ApplicationEvent {
+
+    private String musicGroupId;
+
+    private MusicGroupStatusEnum oldStatus;
+
+    private MusicGroupStatusEnum currentStatus;
+
+    public MusicGroupStatusChangeEvent(Object source, String musicGroupId, MusicGroupStatusEnum oldStatus, MusicGroupStatusEnum currentStatus) {
+        super(source);
+        this.musicGroupId = musicGroupId;
+        this.oldStatus = oldStatus;
+        this.currentStatus = currentStatus;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public MusicGroupStatusEnum getOldStatus() {
+        return oldStatus;
+    }
+
+    public void setOldStatus(MusicGroupStatusEnum oldStatus) {
+        this.oldStatus = oldStatus;
+    }
+
+    public MusicGroupStatusEnum getCurrentStatus() {
+        return currentStatus;
+    }
+
+    public void setCurrentStatus(MusicGroupStatusEnum currentStatus) {
+        this.currentStatus = currentStatus;
+    }
+}

+ 50 - 0
mec-biz/src/main/java/com/ym/mec/biz/event/MusicGroupStudentChangeEvent.java

@@ -0,0 +1,50 @@
+package com.ym.mec.biz.event;
+
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import org.springframework.context.ApplicationEvent;
+
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/2/24 0024
+ */
+public class MusicGroupStudentChangeEvent extends ApplicationEvent {
+
+    private String musicGroupId;
+
+    private StudentMusicGroupStatusEnum studentMusicGroupStatus;
+
+    private List<Integer> studentIds;
+
+    public MusicGroupStudentChangeEvent(Object source, String musicGroupId, StudentMusicGroupStatusEnum studentMusicGroupStatus, List<Integer> studentIds) {
+        super(source);
+        this.musicGroupId = musicGroupId;
+        this.studentMusicGroupStatus = studentMusicGroupStatus;
+        this.studentIds = studentIds;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public StudentMusicGroupStatusEnum getStudentMusicGroupStatus() {
+        return studentMusicGroupStatus;
+    }
+
+    public void setStudentMusicGroupStatus(StudentMusicGroupStatusEnum studentMusicGroupStatus) {
+        this.studentMusicGroupStatus = studentMusicGroupStatus;
+    }
+
+    public List<Integer> getStudentIds() {
+        return studentIds;
+    }
+
+    public void setStudentIds(List<Integer> studentIds) {
+        this.studentIds = studentIds;
+    }
+}

+ 44 - 0
mec-biz/src/main/java/com/ym/mec/biz/event/listener/GroupEventListener.java

@@ -0,0 +1,44 @@
+package com.ym.mec.biz.event.listener;
+
+import com.ym.mec.biz.dal.dao.IndexBaseMonthDataDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.enums.IndexDataType;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.event.MusicGroupStudentChangeEvent;
+import com.ym.mec.util.date.DateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/2/24 0024
+ */
+@Component
+public class GroupEventListener {
+
+    @Autowired
+    private MusicGroupDao musicGroupDao;
+    @Autowired
+    private StudentRegistrationDao studentRegistrationDao;
+    @Autowired
+    private IndexBaseMonthDataDao indexBaseMonthDataDao;
+
+    @Async
+    @EventListener
+    public void musicGroupStudentChangeMonitor(MusicGroupStudentChangeEvent musicGroupStatusChangeEvent){
+
+    }
+
+}

+ 30 - 0
mec-biz/src/main/java/com/ym/mec/biz/event/source/GroupEventSource.java

@@ -0,0 +1,30 @@
+package com.ym.mec.biz.event.source;
+
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.event.MusicGroupStatusChangeEvent;
+import com.ym.mec.biz.event.MusicGroupStudentChangeEvent;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/2/24 0024
+ */
+@Service
+public class GroupEventSource {
+
+    @Resource
+    private ApplicationContext applicationContext;
+
+    public void musicGroupStatusChange(String musicGroupId, MusicGroupStatusEnum oldStatus, MusicGroupStatusEnum currentStatus) {
+        applicationContext.publishEvent(new MusicGroupStatusChangeEvent(this, musicGroupId, oldStatus, currentStatus));
+    }
+
+    public void musicGroupStudentChangeEvent(String musicGroupId, StudentMusicGroupStatusEnum studentMusicGroupStatus, List<Integer> studentIds) {
+        applicationContext.publishEvent(new MusicGroupStudentChangeEvent(this, musicGroupId, studentMusicGroupStatus, studentIds));
+    }
+}

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

@@ -573,7 +573,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param practiceGroupId
 	 * @param coursesExpireDate
 	 */
-	void updateCoursesExpireDate(String practiceGroupId, Date coursesExpireDate);
+	void updatePracticeGroupInDate(String practiceGroupId, Date courseStartDate, Date coursesExpireDate);
 
 	/**
 	 * 获取当前班级列表的所有未开始的课程

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

@@ -6,10 +6,7 @@ import java.util.Set;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAuditDetailDto;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAuditDto;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
-import com.ym.mec.biz.dal.entity.MusicGroupStudentClassAdjust;
-import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
@@ -42,11 +39,14 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	 * @return
 	 */
 	boolean makesureSchoolePaid(Long id, String memo);
-	
-	/**
-	 * 自动更新付款日历记录状态
-	 * @return
-	 */
+
+	void addStudent(MusicGroupPaymentCalender musicGroupPaymentCalender,List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettingsList);
+
+
+		/**
+         * 自动更新付款日历记录状态
+         * @return
+         */
 	boolean autoUpdateMusicGroupPaymentCalenderStatus();
 
 	/**

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

@@ -4411,7 +4411,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			if(!CollectionUtils.isEmpty(courseMergeCourseNum)){
 				courseMergeCourseNumMap = MapUtil.convertIntegerMap(courseMergeCourseNum);
 			}
-
+			//获取课程的预计人数
+			List<CourseSchedule> courseScheduleStudentNum = courseScheduleStudentPaymentDao.getCourseScheduleStudentNum(courseScheduleIds);
+			Map<Long, Integer> courseScheduleStudentNumMap = courseScheduleStudentNum.stream().collect(Collectors.toMap(CourseSchedule::getId, CourseSchedule::getStudentNum));
 			//获取班级声部名称
             List<Map<Integer, String>> classGroupSubjectNameMaps = classGroupDao.findClassGroupSubjectNameMaps(courseScheduleIds);
             Map<Integer, String> classGroupSubjectNameMap = MapUtil.convertIntegerMap(classGroupSubjectNameMaps);
@@ -4423,6 +4425,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				if(courseMergeCourseNumMap.containsKey(result.getId())){
 					result.setBeMerged(courseMergeCourseNumMap.get(result.getId())>0?true:false);
 				}
+				result.setStudentNum(courseScheduleStudentNumMap.getOrDefault(result.getId(), 0));
 			}
         }
         pageInfo.setRows(results);
@@ -4924,34 +4927,46 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void updateCoursesExpireDate(String practiceGroupId, Date coursesExpireDate) {
+	public void updatePracticeGroupInDate(String practiceGroupId, Date courseStartDate, Date coursesExpireDate) {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if (null == user) {
 			throw new BizException("获取用户信息失败");
 		}
-    	if(practiceGroupId == null || coursesExpireDate == null ){
+    	if(practiceGroupId == null || courseStartDate == null || coursesExpireDate == null){
     		throw new BizException("参数校验失败");
 		}
 		PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(practiceGroupId));
     	if(practiceGroup == null){
 			throw new BizException("课程组不存在");
 		}
-		if(practiceGroup.getCoursesStartDate().after(coursesExpireDate)){
-			throw new BizException("课程有效时间不能早于开始时间");
+    	if(!GroupStatusEnum.NORMAL.equals(practiceGroup.getGroupStatus())){
+    		throw new BizException("非进行中课程组不可编辑");
 		}
-		if(Objects.nonNull(practiceGroup.getBuyMonths())){
-			LocalDate courseStartDay = LocalDateTime.ofInstant(practiceGroup.getCoursesStartDate().toInstant(), DateUtil.zoneId).toLocalDate();
-			LocalDate currentExpiredDay = courseStartDay.plusMonths(practiceGroup.getBuyMonths()).plusDays(-1);
-			Date courseExpiredDateTemp=Date.from(currentExpiredDay.atStartOfDay(DateUtil.zoneId).toInstant());
-			if(coursesExpireDate.before(courseExpiredDateTemp)){
-				throw new BizException("课程结束时间不得早于,{}", DateUtil.dateToString(courseExpiredDateTemp, "yyyy年MM月dd日"));
-			}
+		if(courseStartDate.after(coursesExpireDate)){
+			throw new BizException("课程组有效结束时间不能早于课程组有效开始时间");
+		}
+		Date minCourseTime = courseScheduleDao.getMinCourseTime(PRACTICE, practiceGroupId);
+		if(Objects.nonNull(minCourseTime)&&courseStartDate.compareTo(minCourseTime)>0){
+			throw new BizException("课程组有效开始时间不得晚于第一节课开始时间");
 		}
+		Date maxCourseTime = courseScheduleDao.getMaxCourseTime(PRACTICE, practiceGroupId);
+		if(Objects.nonNull(maxCourseTime)&&!DateUtil.isSameDay(maxCourseTime, coursesExpireDate)&&coursesExpireDate.compareTo(maxCourseTime)<0){
+			throw new BizException("课程组有效结束时间不得早于最后一节课结束时间");
+		}
+//		if(Objects.nonNull(practiceGroup.getBuyMonths())){
+//			LocalDate courseStartDay = LocalDateTime.ofInstant(practiceGroup.getCoursesStartDate().toInstant(), DateUtil.zoneId).toLocalDate();
+//			LocalDate currentExpiredDay = courseStartDay.plusMonths(practiceGroup.getBuyMonths()).plusDays(-1);
+//			Date courseExpiredDateTemp=Date.from(currentExpiredDay.atStartOfDay(DateUtil.zoneId).toInstant());
+//			if(coursesExpireDate.before(courseExpiredDateTemp)){
+//				throw new BizException("课程结束时间不得早于,{}", DateUtil.dateToString(courseExpiredDateTemp, "yyyy年MM月dd日"));
+//			}
+//		}
 		CoursesGroupModifyLog coursesGroupModifyLog = new CoursesGroupModifyLog();
 		coursesGroupModifyLog.setGroupId(practiceGroupId);
 		coursesGroupModifyLog.setGroupType(PRACTICE.getCode());
 		coursesGroupModifyLog.setOperatorId(user.getId());
 		coursesGroupModifyLog.setPreviousGroup(JSONObject.toJSONString(practiceGroup));
+		practiceGroup.setCoursesStartDate(courseStartDate);
 		practiceGroup.setCoursesExpireDate(DateUtil.addSeconds(DateUtil.addDays(coursesExpireDate, 1),-1));
 		practiceGroup.setUpdateTime(new Date());
 		practiceGroupDao.update(practiceGroup);

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

@@ -192,7 +192,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
 
         Date now=new Date();
 
-        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(practiceGroupBuyParams.getStudentId());
+        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(practiceGroupBuyParams.getStudentId(), "2021-03-09 00:00:00");
 
         LocalDate courseStartDay=LocalDate.now();
         LocalDate tempCourseLocalDate=LocalDate.parse("2020-03-01", DateUtil.dateFormatter);
@@ -286,8 +286,9 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         }
         BigDecimal oneMonthPrice;
         BigDecimal oneMonthOriginalPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceOriginalPrice():practiceGroupSellPrice.getTwiceOriginalPrice();
-        if(practiceBuyActivityExpireDate.after(now)){
-            oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceActivityPrice():practiceGroupSellPrice.getTwiceActivityPrice();
+        if(practiceBuyActivityExpireDate.after(now)&&Objects.nonNull(sysUser.getOrganId())&&sysUser.getOrganId()==14&&studentExitChargePractices<=0){
+//            oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceActivityPrice():practiceGroupSellPrice.getTwiceActivityPrice();
+            oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceOriginalPrice():practiceGroupSellPrice.getTwiceOriginalPrice();
             if(!now.before(practicePromotionActivityStartDate)&&practiceGroupBuyParams.getBuyMonths()>=3&&studentExitChargePractices>0){
                 oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceQuartActivityPrice():practiceGroupSellPrice.getTwiceQuartActivityPrice();
             }else if(!now.before(practicePromotionActivityStartDate)&&studentExitChargePractices<=0){
@@ -298,7 +299,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         }
         BigDecimal originalAmount = oneMonthOriginalPrice.multiply(new BigDecimal(practiceGroupBuyParams.getBuyMonths()));
         BigDecimal amount= oneMonthPrice.multiply(new BigDecimal(practiceGroupBuyParams.getBuyMonths()));
-        if(!now.before(practicePromotionActivityStartDate)&&now.before(practiceBuyActivityExpireDate)&&studentExitChargePractices<=0){
+        if(!now.before(practicePromotionActivityStartDate)&&now.before(practiceBuyActivityExpireDate)&&Objects.nonNull(sysUser.getOrganId())&&sysUser.getOrganId()==14&&studentExitChargePractices<=0){
             amount= oneMonthPrice.multiply(new BigDecimal(1));
         }
 

+ 34 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java

@@ -3,13 +3,17 @@ package com.ym.mec.biz.service.impl;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.STUDENT;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.*;
 import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
+import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
 
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.MusicArrearageStudentDto;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.ArrearageStudentsQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
@@ -20,13 +24,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentStudentCourseDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.FeeStudentDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
@@ -65,6 +62,8 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 	@Autowired
 	private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
 	@Autowired
+	private StudentRegistrationDao studentRegistrationDao;
+	@Autowired
 	private SysMessageService sysMessageService;
 
 	@Override
@@ -86,28 +85,44 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 		Date date = new Date();
 		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderService.get(calenderDetails.get(0).getMusicGroupPaymentCalenderId());
 		//缴费项目已结束,并且没有单独开启缴费的学员,不能修改缴费金额
-		if(calender.getStatus() == OVER){
-			List<MusicGroupPaymentCalenderDetail> paymentCalenderDetails = calenderDetails.stream().filter(e -> e.getOpenFlag() == YesOrNoEnum.NO).collect(Collectors.toList());
-			if(paymentCalenderDetails != null && paymentCalenderDetails.size() > 0){
-				throw new BizException("修改失败:存在未开启缴费的学员");
-			}
-		}
+//		if(calender.getStatus() == OVER){
+//			List<MusicGroupPaymentCalenderDetail> paymentCalenderDetails = calenderDetails.stream().filter(e -> e.getOpenFlag() == YesOrNoEnum.NO).collect(Collectors.toList());
+//			if(paymentCalenderDetails != null && paymentCalenderDetails.size() > 0){
+//				throw new BizException("修改失败:存在未开启缴费的学员");
+//			}
+//		}
 		Set<Integer> studentIds = new HashSet<>();
 				calenderDetails.forEach(e->{
 			if(e.getPaymentStatus() == null || e.getPaymentStatus() != NON_PAYMENT){
 				throw new BizException("修改失败:缴费状态不匹配");
 			}
-			if(expectAmount.doubleValue() != 0){
-
-			}
 			e.setUpdateTime(date);
 			e.setExpectAmount(expectAmount);
 			if(expectAmount.doubleValue() > 0){
 				if((e.getOpen() != null && e.getOpen() == 1) || calender.getStatus() == PaymentCalenderStatusEnum.OPEN){
 					studentIds.add(e.getUserId());
 				}
+			}else {
+				calender.setActualNum((calender.getActualNum()==null?0:calender.getActualNum()) + 1);
+				e.setPaymentStatus(PAID_COMPLETED);
+				if(calender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.ADD_STUDENT){
+					MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(e.getUserId(), calender.getMusicGroupId());
+					if (musicGroupStudentFee != null) {
+						musicGroupStudentFee.setUpdateTime(date);
+						musicGroupStudentFee.setLatestPaidTime(date);
+						musicGroupStudentFee.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
+						musicGroupStudentFee.setTemporaryCourseFee(new BigDecimal(0));
+						musicGroupStudentFeeDao.update(musicGroupStudentFee);
+					}
+					//如果是进行中加学员
+					StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(e.getUserId(), calender.getMusicGroupId());
+					studentRegistration.setPaymentStatus(YES);
+					studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
+					studentRegistrationDao.update(studentRegistration);
+				}
 			}
 		});
+		musicGroupPaymentCalenderDao.update(calender);
 		musicGroupPaymentCalenderDetailDao.batchUpdate(calenderDetails);
 		//推送消息
 		if (calender.getPayUserType() == STUDENT && studentIds.size() > 0) {
@@ -407,8 +422,8 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 		List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = new ArrayList<MusicGroupPaymentStudentCourseDetail>();
 		
 		Long musicGroupPaymentCalenderId = null;
-		
 		for(MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenderList){
+			int paymentNum = 0;
 			
 			musicGroupPaymentCalenderId = musicGroupPaymentCalender.getId();
 			
@@ -452,6 +467,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 				musicGroupPaymentCalenderDetail.setExpectAmount(totalPrice);
 				if (musicGroupPaymentCalenderDetail.getExpectAmount().compareTo(new BigDecimal(0)) == 0) {
 					musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
+					paymentNum++;
 				} else {
 					musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
 				}
@@ -473,6 +489,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 			//更新预计缴费人数
 			musicGroupPaymentCalender.setExpectNum(musicGroupPaymentCalender.getExpectNum() + userIdList.size());
 			musicGroupPaymentCalender.setUpdateTime(date);
+			musicGroupPaymentCalender.setActualNum((musicGroupPaymentCalender.getActualNum()==null?0:musicGroupPaymentCalender.getActualNum()) + paymentNum);
 			musicGroupPaymentCalenderService.update(musicGroupPaymentCalender);
 			
 			MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = null;

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

@@ -2,8 +2,7 @@ package com.ym.mec.biz.service.impl;
 
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.SCHOOL;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.STUDENT;
-import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.AUDITING;
-import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.REJECT;
+import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.*;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType.ADD_COURSE;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType.ADD_STUDENT;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType.MUSIC_APPLY;
@@ -26,6 +25,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.service.*;
@@ -46,25 +46,11 @@ import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAuditDetailDto;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAuditDto;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange;
-import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
-import com.ym.mec.biz.dal.entity.MusicGroupOrganizationCourseSettings;
-import com.ym.mec.biz.dal.entity.MusicGroupOrganizationCourseSettingsDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderStudentDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupStudentClassAdjust;
-import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.entity.OrganizationCourseUnitPriceSettings;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
@@ -433,6 +419,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 					Set<Integer> list2 = Arrays.stream(ints).boxed().collect(Collectors.toSet());
 					musicGroupPaymentCalenderDetailService.batchAdd(musicGroupPaymentCalender.getId(),list2);
 				}
+				//将0元未缴费学员缴费状态更新为已缴费
+				int j = musicGroupPaymentCalenderDetailDao.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender.getId());
+				musicGroupPaymentCalender.setActualNum((musicGroupPaymentCalender.getActualNum()==null?0:musicGroupPaymentCalender.getActualNum()) + j);
+				musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender);
 			}
 		}
 
@@ -744,6 +734,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 					//如果是跨团班级合并,添加学员
 					musicGroupPaymentCalenderDetailService.batchAdd(musicGroupPaymentCalender,musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails());
 				}
+				//将0元未缴费学员缴费状态更新为已缴费
+				int j = musicGroupPaymentCalenderDetailDao.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender.getId());
+				musicGroupPaymentCalender.setActualNum((musicGroupPaymentCalender.getActualNum()==null?0:musicGroupPaymentCalender.getActualNum()) + j);
+				musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender);
 			}
 
 			if (currentMusicGroupPaymentCalenderCourseSettings.size() > 0) {
@@ -832,6 +826,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		return true;
 	}
 
+	@Transactional(rollbackFor = Exception.class)
+	@Override
 	public void addStudent(MusicGroupPaymentCalender musicGroupPaymentCalender,List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettingsList){
 		//如果是进行中加学生
 		Date date = new Date();
@@ -859,6 +855,22 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 				musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
 
 				musicGroupPaymentCalenderDetailDao.insert(musicGroupPaymentCalenderDetail);
+				//如果是0元那么更新fee表和studentRegistration表
+				if(totalPrice.doubleValue() == 0d){
+					MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(Integer.parseInt(studentId), musicGroupPaymentCalender.getMusicGroupId());
+					if (musicGroupStudentFee != null) {
+						musicGroupStudentFee.setUpdateTime(date);
+						musicGroupStudentFee.setLatestPaidTime(date);
+						musicGroupStudentFee.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
+						musicGroupStudentFee.setTemporaryCourseFee(new BigDecimal(0));
+						musicGroupStudentFeeDao.update(musicGroupStudentFee);
+					}
+					//如果是进行中加学员
+					StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(Integer.parseInt(studentId), musicGroupPaymentCalender.getMusicGroupId());
+					studentRegistration.setPaymentStatus(YES);
+					studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
+					studentRegistrationDao.update(studentRegistration);
+				}
 
 				// 学生加课程明细
 				for(MusicGroupPaymentCalenderCourseSettings courseSettings : musicGroupPaymentCalenderCourseSettingsList){
@@ -1125,6 +1137,11 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			classGroupService.spanGroupClassAdjustPass(adjust.getMasterClassGroupId()
 					,studentIds,courseIds,classGroupStudents,allLockCourseIds,batchNo,adjust.getMasterTotalPrice());
 		}
+		for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) {
+			//将0元未缴费学员缴费状态更新为已缴费
+			int j = musicGroupPaymentCalenderDetailDao.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender.getId());
+			musicGroupPaymentCalender.setActualNum((musicGroupPaymentCalender.getActualNum()==null?0:musicGroupPaymentCalender.getActualNum()) + j);
+		}
 		musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenders);
 	}
 
@@ -1218,6 +1235,9 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 				// “未开始”更新至“进行中”
 				mgpc.setUpdateTime(date);
 				mgpc.setStatus(PaymentCalenderStatusEnum.OPEN);
+				//将0元未缴费学员缴费状态更新为已缴费
+				int i = musicGroupPaymentCalenderDetailDao.updateNoPaymentAndZeroPaymentStatus(mgpc.getId());
+				mgpc.setActualNum((mgpc.getActualNum()==null?0:mgpc.getActualNum()) + i);
 				updateMusicGroupPaymentCalenderList.add(mgpc);
 				if(mgpc.getPayUserType() == STUDENT){
 					//推送待续费通知

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

@@ -19,6 +19,7 @@ import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.service.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -237,6 +238,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private StudentPreRegistrationDao studentPreRegistrationDao;
 
+    @Autowired
+    private GroupEventSource groupEventSource;
+
     private SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyy-MM-dd");
 
     private SimpleDateFormat sdf_hms = new SimpleDateFormat("HH:mm:ss");
@@ -1214,6 +1218,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         roleIds.add(SysUserRole.DEAN_OF_STUDIES);
 
         sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_ACTION_GROUP, "1", musicGroup.getName());
+
+        //统计变更学员数
+        groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.NORMAL, null);
     }
 
     private MusicGroup saveLog(String musicGroupId, MusicGroupStatusEnum statusEnum) throws Exception {
@@ -1564,6 +1571,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //删除课表
         courseScheduleDao.logicDeleteCourseSchedulesByMusicGroupID(musicGroup.getId());
 
+        //统计变更学员数
+        groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, null);
+
         return true;
     }
 
@@ -1601,6 +1611,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //恢复课表
         courseScheduleDao.resumeCourseScheduleByMusicGroupId(musicGroup.getId());
 
+        //统计变更学员数
+        groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.NORMAL, null);
+
         return true;
     }
 
@@ -1903,6 +1916,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
             }
 
+            //统计变更学员数
+            groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
+
             if (currentStudentMusicGroupStatus != StudentMusicGroupStatusEnum.NORMAL) {
                 return true;
             }
@@ -2078,6 +2094,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
         }
 
+        //统计变更学员数
+        groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
+
         if (currentStudentMusicGroupStatus != StudentMusicGroupStatusEnum.NORMAL) {
             return true;
         }
@@ -2942,6 +2961,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         //删除未上课表
         courseScheduleDao.logicDeleteCourseSchedulesByMusicGroupID(musicGroup.getId());
+
+        //统计变更学员数
+        groupEventSource.musicGroupStudentChangeEvent(closeMusicGroupDto.getMusicGroupId(), StudentMusicGroupStatusEnum.QUIT, null);
+
         return true;
     }
 

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

@@ -2786,7 +2786,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
         Date now = new Date();
 
-        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(practiceGroupBuyParams.getStudentId());
+        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(practiceGroupBuyParams.getStudentId(),"2021-03-09 00:00:00");
 
         LocalDate courseStartDay = LocalDate.now();
         LocalDate tempCourseLocalDate = LocalDate.parse("2020-03-01", DateUtil.dateFormatter);
@@ -2894,8 +2894,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             throw new BizException("所在城市暂不参与此活动");
         }
         BigDecimal oneMonthPrice;
-        if (practiceBuyActivityExpireDate.after(now)) {
-            oneMonthPrice = practiceGroupBuyParams.getDrillTimesOnWeek() == 1 ? practiceGroupSellPrice.getOnceActivityPrice() : practiceGroupSellPrice.getTwiceActivityPrice();
+        if (practiceBuyActivityExpireDate.after(now)&&Objects.nonNull(sysUser.getOrganId())&&sysUser.getOrganId()==14&& studentExitChargePractices <= 0) {
+//            oneMonthPrice = practiceGroupBuyParams.getDrillTimesOnWeek() == 1 ? practiceGroupSellPrice.getOnceActivityPrice() : practiceGroupSellPrice.getTwiceActivityPrice();
+            oneMonthPrice = practiceGroupBuyParams.getDrillTimesOnWeek() == 1 ? practiceGroupSellPrice.getOnceOriginalPrice() : practiceGroupSellPrice.getTwiceOriginalPrice();
             if (!now.before(practicePromotionActivityStartDate) && practiceGroupBuyParams.getBuyMonths() >= 3 && studentExitChargePractices > 0) {
                 oneMonthPrice = practiceGroupBuyParams.getDrillTimesOnWeek() == 1 ? practiceGroupSellPrice.getOnceQuartActivityPrice() : practiceGroupSellPrice.getTwiceQuartActivityPrice();
             } else if (!now.before(practicePromotionActivityStartDate) && studentExitChargePractices <= 0) {
@@ -2905,7 +2906,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             oneMonthPrice = practiceGroupBuyParams.getDrillTimesOnWeek() == 1 ? practiceGroupSellPrice.getOnceOriginalPrice() : practiceGroupSellPrice.getTwiceOriginalPrice();
         }
         BigDecimal amount = oneMonthPrice.multiply(new BigDecimal(practiceGroupBuyParams.getBuyMonths()));
-        if (!now.before(practicePromotionActivityStartDate) && now.before(practiceBuyActivityExpireDate) && studentExitChargePractices <= 0) {
+        if (!now.before(practicePromotionActivityStartDate) && now.before(practiceBuyActivityExpireDate) && Objects.nonNull(sysUser.getOrganId())&&sysUser.getOrganId()==14 && studentExitChargePractices <= 0) {
             amount = oneMonthPrice.multiply(new BigDecimal(1));
         }
 
@@ -3730,7 +3731,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
     @Override
     public boolean isPurchasedPracticeCourse(Integer userId) {
-        int count = practiceGroupDao.checkStudentExitChargePractice(userId);
+        int count = practiceGroupDao.checkStudentExitChargePractice(userId, null);
         if (count > 0) {
             return true;
         }

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

@@ -23,6 +23,8 @@ import javax.annotation.Resource;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.event.source.GroupEventSource;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -153,6 +155,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Autowired
     private OrganizationDao organizationDao;
 
+    @Autowired
+    private GroupEventSource groupEventSource;
+
     @Override
     public BaseDAO<Long, StudentRegistration> getDAO() {
         return studentRegistrationDao;
@@ -779,6 +784,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             studentDao.update(student);
             //studentRegistrationDao.updateCurrentClass(studentRegistration);
 
+            //统计变更学员数
+            groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.NORMAL, new ArrayList<>(Arrays.asList(userId)));
+
             return userId;
         }
     }

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

@@ -722,4 +722,11 @@
 		  AND cs.type_ = #{courseType}
 	  </if>
 	</select>
+    <select id="getCourseScheduleStudentNum" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
+		SELECT course_schedule_id_ id_,COUNT(*) student_num_ FROM course_schedule_student_payment WHERE course_schedule_id_ IN
+		<foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
+			#{courseId}
+		</foreach>
+		GROUP BY course_schedule_id_
+	</select>
 </mapper>

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

@@ -512,7 +512,9 @@
 	</select>
 
     <update id="updateNoPaymentAndZeroPaymentStatus">
-		UPDATE music_group_payment_calender_detail SET payment_status_ = 'PAID_COMPLETED',actual_amount_ = 0,update_time_ = NOW()
-		WHERE music_group_payment_calender_id_ = #{calenderId} AND expect_amount_ = 0 AND payment_status_ = 'NON_PAYMENT'
+		UPDATE music_group_payment_calender_detail mgpcd
+		SET mgpcd.payment_status_ = 'PAID_COMPLETED',mgpcd.actual_amount_ = 0,mgpcd.update_time_ = NOW()
+		WHERE mgpcd.music_group_payment_calender_id_ = #{calenderId} AND mgpcd.expect_amount_ = 0
+		AND mgpcd.payment_status_ = 'NON_PAYMENT'
 	</update>
 </mapper>

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml

@@ -672,6 +672,9 @@
 
     <select id="checkStudentExitChargePractice" resultType="int">
         SELECT COUNT(id_) FROM practice_group WHERE type_='CHARGE' AND student_id_=#{studentId} AND group_status_ IN ('NORMAL', 'FINISH')
+        <if test="startTime!=null and startTime!=''">
+            AND create_time_>#{startTime}
+        </if>
     </select>
 
     <select id="countStudentIngTrialPractices" resultType="int">

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

@@ -823,6 +823,21 @@
             AND sr.user_id_ = #{userId}
         ORDER BY sr.create_time_ DESC LIMIT 1
     </select>
+    <select id="getStudentNormalRegistration" resultMap="StudentRegistration">
+        SELECT
+               sr.*
+        FROM
+            student_registration sr
+            LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+        WHERE
+            mg.status_ = 'PROGRESS'
+            AND mg.del_flag_ = 0
+            AND sr.music_group_status_ = 'NORMAL'
+            AND sr.user_id_ IN
+            <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+                #{studentId}
+            </foreach>
+    </select>
     <!-- 批量删除信息 -->
     <delete id="batchDelete">
         DELETE FROM student_registration WHERE id_ IN

+ 6 - 0
mec-common/audit-log/pom.xml

@@ -21,5 +21,11 @@
 			<groupId>com.yonge.mongodb</groupId>
 			<artifactId>mongo-db</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>io.swagger</groupId>
+			<artifactId>swagger-annotations</artifactId>
+			<version>1.5.20</version>
+			<scope>compile</scope>
+		</dependency>
 	</dependencies>
 </project>

+ 63 - 30
mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java

@@ -1,22 +1,20 @@
 package com.yonge.log.interceptor;
 
 import java.io.IOException;
+import java.lang.reflect.Array;
 import java.nio.charset.Charset;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import io.swagger.annotations.ApiOperation;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
@@ -41,6 +39,10 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
 
 	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
+	private static List<String> ignoreLogUrl;
+
+
+
 	@Override
 	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
 
@@ -48,35 +50,66 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
 	}
 
 	@Override
-	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
-
-		HandlerMethod handlerMethod = (HandlerMethod) handler;
-		AuditLogAnnotation anno = handlerMethod.getMethodAnnotation(AuditLogAnnotation.class);
-
-		if (anno != null) {
-			AuditLog auditLog = new AuditLog();
-			auditLog.setOperateName(anno.operateName());
-			if(StringUtils.isNotBlank(anno.interfaceURL())){
-				auditLog.setInterfaceUrl(anno.interfaceURL());
-			}else{
-				auditLog.setInterfaceUrl(request.getRequestURI());
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
+		try {
+			String servletPath = request.getServletPath();
+			HandlerMethod handlerMethod = (HandlerMethod) handler;
+			AuditLogAnnotation anno = handlerMethod.getMethodAnnotation(AuditLogAnnotation.class);
+			ApiOperation apiOperation = handlerMethod.getMethodAnnotation(ApiOperation.class);
+			String operateName = null;
+			if(StringUtils.isEmpty(operateName) && apiOperation != null){
+				operateName = apiOperation.value();
+			}
+			if(StringUtils.isEmpty(operateName) && anno != null){
+				operateName = anno.operateName();
+			}
+			if(anno != null){
+				saveLog(operateName,servletPath,request);
+				return;
 			}
-			auditLog.setToken(request.getHeader("Authorization"));
-			auditLog.setService(clientName);
-			auditLog.setUserIp(WebUtil.getRemoteIp(request));
-
-			Map<String, Object> params = WebUtil.getParameterMap(request);
-			if (params == null || params.size() == 0) {
-				auditLog.setInputParams(IOUtils.toString(request.getInputStream(), Charset.defaultCharset()));
-			} else {
-				auditLog.setInputParams(JsonUtil.toJSONString(WebUtil.getParameterMap(request)));
+			if(servletPath.contains("/task/") || servletPath.contains("/import/") ){
+				return;
 			}
-			// 操作人
-			auditLog.setUsername(username);
-			auditLog.setOperateTime(sdf.format(new Date()));
-			auditLogService.insert(auditLog);
+			String substring = servletPath.substring(servletPath.lastIndexOf("/") + 1).toLowerCase();
+			if(ignoreLogUrl == null){
+				ignoreLogUrl = new ArrayList<>();
+				ignoreLogUrl.add("add");
+				ignoreLogUrl.add("insert");
+				ignoreLogUrl.add("query");
+				ignoreLogUrl.add("get");
+				ignoreLogUrl.add("find");
+				ignoreLogUrl.add("list");
+				ignoreLogUrl.add("detail");
+			}
+			for (String e : ignoreLogUrl) {
+				if(substring.contains(e)){
+					return;
+				}
+			}
+			saveLog(operateName,servletPath,request);
+		}catch (Exception e){
+			e.printStackTrace();
 		}
+	}
 
+	private void saveLog(String operateName,String servletPath,HttpServletRequest request) throws IOException {
+		AuditLog auditLog = new AuditLog();
+		auditLog.setOperateName(operateName);
+		auditLog.setInterfaceUrl(servletPath);
+		auditLog.setToken(request.getHeader("Authorization"));
+		auditLog.setService(clientName);
+		auditLog.setUserIp(WebUtil.getRemoteIp(request));
+
+		Map<String, Object> params = WebUtil.getParameterMap(request);
+		if (params == null || params.size() == 0) {
+			auditLog.setInputParams(IOUtils.toString(request.getInputStream(), Charset.defaultCharset()));
+		} else {
+			auditLog.setInputParams(JsonUtil.toJSONString(WebUtil.getParameterMap(request)));
+		}
+		// 操作人
+		auditLog.setUsername(username);
+		auditLog.setOperateTime(sdf.format(new Date()));
+		auditLogService.insert(auditLog);
 	}
 
 	public void setUsername(String username) {

+ 2 - 1
mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java

@@ -198,8 +198,9 @@ public class PracticeGroupController extends BaseController {
         if (sysUser == null) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(sysUser.getId());
+        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(sysUser.getId(),"2021-03-09 00:00:00");
         Map<String, Integer> result=new HashMap<>();
+        result.put("organId", sysUser.getOrganId());
         result.put("isNewStudent", studentExitChargePractices<=0?0:1);
         return succeed(result);
     }

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

@@ -424,8 +424,8 @@ public class CourseScheduleController extends BaseController {
     @ApiOperation(value = "陪练课课程组有效期调整")
     @PostMapping("/updateCoursesExpireDate")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/updateCoursesExpireDate')")
-    public Object updateCoursesExpireDate(String practiceGroupId,Date coursesExpireDate){
-        courseScheduleService.updateCoursesExpireDate(practiceGroupId,coursesExpireDate);
+    public Object updateCoursesExpireDate(String practiceGroupId, Date coursesStartDate,Date coursesExpireDate){
+        courseScheduleService.updatePracticeGroupInDate(practiceGroupId, coursesStartDate,coursesExpireDate);
         return succeed();
     }
 

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

@@ -860,9 +860,9 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "课程编号", "开始时间", "结束时间",
                     "班级名称", "班级声部", "课程名称", "课程类型", "教学模式",
-                    "教学点", "课程状态", "指导老师", "学员编号", "是否点名", "是否有考勤申诉"}, new String[]{
+                    "教学点", "课程状态", "指导老师", "学员编号", "是否点名", "是否有考勤申诉","预计上课人数"}, new String[]{
                     "organName", "id", "startClassTime", "endClassTime", "classGroupName", "subjectName", "name",
-                    "groupType.desc", "teachMode.msg", "schoolName", "status.msg", "teacherName", "studentId", "isCallNames.msg", "isComplaints"}, rows);
+                    "groupType.desc", "teachMode.msg", "schoolName", "status.msg", "teacherName", "studentId", "isCallNames.msg", "isComplaints","studentNum"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             ouputStream = response.getOutputStream();

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

@@ -1,17 +1,24 @@
 package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dto.StudentPreRegistrationDto;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.excel.POIUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 
+import java.io.EOFException;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.util.Date;
 import java.util.List;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -34,6 +41,8 @@ import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 
+import javax.servlet.http.HttpServletResponse;
+
 @RequestMapping("studentRegistration")
 @Api(tags = "学生报名信息服务")
 @RestController
@@ -230,4 +239,58 @@ public class StudentRegistrationController extends BaseController {
         return succeed(studentRegistrationService.getMusicGroupStuReBack(musicGroupId));
     }
 
+
+    @ApiOperation(value = "预报名导出")
+    @GetMapping("/preRegisterExport")
+    @PreAuthorize("@pcs.hasPermissions('studentRegistration/preRegisterExport')")
+    public void queryPreApplyList(StudentPreRegistrationQueryInfo queryInfo, HttpServletResponse response) throws Exception {
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+
+        PageInfo<StudentPreRegistrationDto> studentPreRegistration = studentPreRegistrationService.queryListForPage(queryInfo);
+        if (studentPreRegistration.getTotal() <= 0) {
+            response.setStatus(200);
+            response.setContentType("Content-Type: application/json;charset=UTF-8");
+            response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+            response.flushBuffer();
+            return;
+        }
+        for (StudentPreRegistrationDto row : studentPreRegistration.getRows()) {
+            if (row.getKitPurchaseMethod().equals("OWNED")) {
+                row.setKitPurchaseMethod("自行准备");
+            } else if (row.getKitPurchaseMethod().equals("GROUP")) {
+                row.setKitPurchaseMethod("团购");
+            }
+            if(row.getSubjectFirst().equals(999)){
+                row.setSubjectFirstName("听从老师安排");
+            }
+            if(row.getSubjectSecond().equals(999)){
+                row.setSubjectSecondName("听从老师安排");
+            }
+            row.setCurrentGrade(row.getCurrentGrade() + row.getCurrentClass());
+        }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            String[] header = {"学员编号", "学员姓名", "性别", "联系电话", "年级班级", "选报声部1", "选报声部2", "是否服从调剂", "乐器准备方式"};
+            String[] body = {"userId", "userName", "gender ? '男' : '女'", "phone", "currentGrade", "subjectFirstName", "subjectSecondName", "isAllowAdjust ? '是' : '否'", "kitPurchaseMethod"};
+
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, studentPreRegistration.getRows());
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=pre-register-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 }

+ 3 - 1
mec-web/src/main/java/com/ym/mec/web/controller/education/EduPracticeGroupController.java

@@ -165,8 +165,10 @@ public class EduPracticeGroupController extends BaseController {
         if(Objects.isNull(studentId)){
             throw new BizException("请指定学生");
         }
-        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(studentId);
+        SysUser student = sysUserFeignService.queryUserById(studentId);
+        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(studentId, "2021-03-09 00:00:00");
         Map<String, Integer> result=new HashMap<>();
+        result.put("organId", student.getOrganId());
         result.put("isNewStudent", studentExitChargePractices<=0?0:1);
         return succeed(result);
     }

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

@@ -22,6 +22,7 @@ import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.util.date.DateUtil;
 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.web.bind.annotation.*;
@@ -106,6 +107,12 @@ public class EduRepairController extends BaseController {
         }
         repairInfo.setEmployeeId(sysUser.getId());
         repairInfo.setEmployeeName(sysUser.getRealName());
+//        if(repairInfo.getSendType().equals(1)){
+//            Employee employee = employeeDao.get(sysUser.getId());
+//            if(StringUtils.isBlank(employee.getContactAddress())){
+//                return failed("联系地址为空,请联系相关人员在\"员工管理\"完善");
+//            }
+//        }
         return succeed(studentRepairService.addRepair(repairInfo));
     }