Преглед изворни кода

Merge remote-tracking branch 'origin/master'

周箭河 пре 5 година
родитељ
комит
4efa6d4282
58 измењених фајлова са 852 додато и 269 уклоњено
  1. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  3. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DemoGroupDao.java
  4. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  5. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  6. 11 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  7. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCashAccountDetailDao.java
  8. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  9. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupCategoryDao.java
  10. 96 79
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  11. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SubFeeSettingDto.java
  12. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageSendMode.java
  14. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  15. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PlatformCashAccountDetailTypeEnum.java
  16. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentVipGroupQueryInfo.java
  17. 18 5
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  18. 5 2
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  19. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentAttendanceService.java
  20. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentCourseHomeworkService.java
  21. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  22. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMessageService.java
  23. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupCategoryService.java
  24. 13 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  25. 24 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  26. 85 27
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  27. 57 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  28. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  29. 24 19
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  30. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentWithdrawServiceImpl.java
  31. 35 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  32. 20 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  33. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupCategoryServiceImpl.java
  34. 20 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  35. 8 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  36. 13 3
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  37. 16 0
      mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml
  38. 17 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  39. 9 3
      mec-biz/src/main/resources/config/mybatis/MusicGroupSubjectPlanMapper.xml
  40. 5 7
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  41. 4 3
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  42. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  43. 10 2
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  44. 4 0
      mec-biz/src/main/resources/config/mybatis/SysUserCashAccountDetailMapper.xml
  45. 9 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  46. 1 1
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  47. 3 0
      mec-biz/src/main/resources/config/mybatis/VipGroupCategoryMapper.xml
  48. 25 4
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  49. 4 0
      mec-im/pom.xml
  50. 20 16
      mec-im/src/main/java/com/ym/service/Impl/HereWhiteServiceImpl.java
  51. 26 12
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  52. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  53. 10 21
      mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java
  54. 0 1
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  55. 4 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java
  56. 17 3
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  57. 84 0
      mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java
  58. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupSubjectPlanController.java

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

@@ -6,7 +6,6 @@ import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.entity.ImUserModel;
-
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 import java.util.List;
 import java.util.List;
@@ -394,4 +393,13 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      * @return com.ym.mec.biz.dal.entity.ClassGroup
      * @return com.ym.mec.biz.dal.entity.ClassGroup
      */
      */
     ClassGroup findByCourseSchedule(Integer courseScheduleId);
     ClassGroup findByCourseSchedule(Integer courseScheduleId);
+
+    /**
+     * @describe 获取合奏班下所有子班级
+     * @author Joburgess
+     * @date 2019/11/5
+     * @param maxCourseScheduleId: 合奏班编号
+     * @return java.util.List<java.lang.Integer>
+     */
+    List<ClassGroup> findClassGroupsByMixClassGroup(Integer maxCourseScheduleId);
 }
 }

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

@@ -500,4 +500,22 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
 	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
 	 */
 	 */
 	List<CourseSchedule> findCourseScheduleWithDate(@Param("date") Date date);
 	List<CourseSchedule> findCourseScheduleWithDate(@Param("date") Date date);
+
+	/**
+	 * @describe 根据班级获取课程计划
+	 * @author Joburgess
+	 * @date 2019/11/5
+	 * @param classGroupId: 班级编号
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+	 */
+	List<CourseSchedule> findByClassGroup(@Param("classGroupId") Integer classGroupId);
+
+	/**
+	 * @describe 根据班级获取课程计划
+	 * @author Joburgess
+	 * @date 2019/11/5
+	 * @param classGroupIds: 班级编号
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+	 */
+	List<CourseSchedule> findByClassGroups(@Param("classGroupIds") List<Integer> classGroupIds);
 }
 }

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

@@ -111,5 +111,17 @@ public interface DemoGroupDao extends BaseDAO<Long, DemoGroup> {
      */
      */
     List<Map<Integer, Long>> countTeacherDemoGroupNum(String teacherIds);
     List<Map<Integer, Long>> countTeacherDemoGroupNum(String teacherIds);
 
 
-
+    /**
+     * 查询vip课程数
+     * @param organId
+     * @return
+     */
+    Map<String, Integer> queryDemoGroupNum(Integer organId);
+    
+    /**
+     * 
+     * @param organId
+     * @return
+     */
+    Integer queryCurrentMonthCoursesNum(Integer organId);
 }
 }

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

@@ -112,4 +112,18 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      * @return java.util.List<java.util.Map<java.lang.String,java.lang.String>>
      * @return java.util.List<java.util.Map<java.lang.String,java.lang.String>>
      */
      */
     List<Map<String,String>> findSettlementTypeByMusicGroups(@Param("musicGroupIds") List<String> musicGroupIds);
     List<Map<String,String>> findSettlementTypeByMusicGroups(@Param("musicGroupIds") List<String> musicGroupIds);
+    
+    /**
+     * 查询首页的乐团数量
+     * @param ogranId
+     * @return
+     */
+    Map<String,Integer> queryOrganMusicGroupNum(Integer ogranId);
+    
+    /**
+     * 查询本月乐团课程数
+     * @param organId
+     * @return
+     */
+    Integer queryCurrentMonthCoursesNum(Integer organId);
 }
 }

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

@@ -135,4 +135,12 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * @return java.util.Date
      * @return java.util.Date
      */
      */
     Date findLatestSignInDate(Integer classGroupId);
     Date findLatestSignInDate(Integer classGroupId);
+
+    /**
+     * 根据签到状态和课程编号查询签到记录
+     * @param userId
+     * @param courseScheduleId
+     * @return
+     */
+    StudentAttendance findByStatusAndCourseScheduleId(@Param("userId") Integer userId, @Param("courseScheduleId") int courseScheduleId);
 }
 }

+ 11 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -1,20 +1,19 @@
 package com.ym.mec.biz.dal.dao;
 package com.ym.mec.biz.dal.dao;
 
 
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Param;
+
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
 import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
 import com.ym.mec.biz.dal.dto.StudentFeeDetailDto;
 import com.ym.mec.biz.dal.dto.StudentFeeDetailDto;
-import com.ym.mec.biz.dal.dto.StudentFeeDto;
 import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
 import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.dal.BaseDAO;
 
 
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-import java.util.Map;
-
 public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistration> {
 public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistration> {
 
 
     /**
     /**
@@ -211,4 +210,10 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      * @return
      */
      */
     List<Map<Integer, String>> findParentId(String parentPhones);
     List<Map<Integer, String>> findParentId(String parentPhones);
+    
+    /**
+     * 查询学生数
+     * @return
+     */
+    Map<String,Integer> queryStudentNum(Integer organId);
 }
 }

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

@@ -2,9 +2,11 @@ package com.ym.mec.biz.dal.dao;
 
 
 import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
 import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.dal.BaseDAO;
+
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 public interface SysUserCashAccountDetailDao extends BaseDAO<Long, SysUserCashAccountDetail> {
 public interface SysUserCashAccountDetailDao extends BaseDAO<Long, SysUserCashAccountDetail> {
 
 
@@ -19,4 +21,5 @@ public interface SysUserCashAccountDetailDao extends BaseDAO<Long, SysUserCashAc
      */
      */
     int batchInsert(@Param("sysUserCashAccountDetails") List<SysUserCashAccountDetail> sysUserCashAccountDetails);
     int batchInsert(@Param("sysUserCashAccountDetails") List<SysUserCashAccountDetail> sysUserCashAccountDetails);
 
 
+    Map<String, Object> queryStatistics();
 }
 }

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

@@ -165,4 +165,11 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      */
      */
     List<Teacher> findOrganTeacherBySubject(@Param("organId") Integer organId,
     List<Teacher> findOrganTeacherBySubject(@Param("organId") Integer organId,
                                             @Param("subjectId") Integer subjectId);
                                             @Param("subjectId") Integer subjectId);
-}
+
+    /**
+     * 根据分部查询老师数
+     * @param organId
+     * @return
+     */
+    Map<String,Integer> queryOrganTeacherNum(Integer organId);
+}

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 package com.ym.mec.biz.dal.dao;
 
 
+import com.ym.mec.biz.dal.dto.ConditionDto;
 import com.ym.mec.biz.dal.entity.VipGroupCategory;
 import com.ym.mec.biz.dal.entity.VipGroupCategory;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.dal.BaseDAO;
 
 
@@ -9,4 +10,6 @@ public interface VipGroupCategoryDao extends BaseDAO<Integer, VipGroupCategory>
 
 
     List<VipGroupCategory> findAllByOrgan(Long organId);
     List<VipGroupCategory> findAllByOrgan(Long organId);
 
 
-}
+    List<ConditionDto> findConditionCategorys();
+
+}

+ 96 - 79
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java

@@ -28,8 +28,9 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return java.util.List<com.ym.mec.biz.dal.entity.VipGroup>
 	 * @return java.util.List<com.ym.mec.biz.dal.entity.VipGroup>
 	 * @describe 根据部门获取
 	 * @describe 根据部门获取
 	 */
 	 */
-	List<VipGroup> findAllByOrgan(Map<String,Object> params);
-	int countVipGroupByOrgan(Map<String,Object> params);
+	List<VipGroup> findAllByOrgan(Map<String, Object> params);
+
+	int countVipGroupByOrgan(Map<String, Object> params);
 
 
 	/**
 	/**
 	 * @Author: Joburgess
 	 * @Author: Joburgess
@@ -38,8 +39,9 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return java.util.List<com.ym.mec.biz.dal.dto.VipGroupStudentDto>
 	 * @return java.util.List<com.ym.mec.biz.dal.dto.VipGroupStudentDto>
 	 * @describe 获取小课学员
 	 * @describe 获取小课学员
 	 */
 	 */
-	List<VipGroupStudentDto> findVipGroupStudents(Map<String,Object> params);
-	int countVipGroupStudents(Map<String,Object> params);
+	List<VipGroupStudentDto> findVipGroupStudents(Map<String, Object> params);
+
+	int countVipGroupStudents(Map<String, Object> params);
 
 
 	/**
 	/**
 	 * @Author: Joburgess
 	 * @Author: Joburgess
@@ -48,8 +50,9 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return java.util.List<com.ym.mec.biz.dal.dto.VipGroupCourseSchduleRecordDto>
 	 * @return java.util.List<com.ym.mec.biz.dal.dto.VipGroupCourseSchduleRecordDto>
 	 * @describe 获取vip课教学记录
 	 * @describe 获取vip课教学记录
 	 */
 	 */
-	List<VipGroupCourseSchduleRecordDto> findTeachingRecord(Map<String,Object> params);
-	int countTeachingRecord(Map<String,Object> params);
+	List<VipGroupCourseSchduleRecordDto> findTeachingRecord(Map<String, Object> params);
+
+	int countTeachingRecord(Map<String, Object> params);
 
 
 	/**
 	/**
 	 * @Author: Joburgess
 	 * @Author: Joburgess
@@ -94,7 +97,7 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return java.util.List<com.ym.mec.biz.dal.dto.StudentVipGroupShowListDto>
 	 * @return java.util.List<com.ym.mec.biz.dal.dto.StudentVipGroupShowListDto>
 	 * @describe 学生端获取vip课列表
 	 * @describe 学生端获取vip课列表
 	 */
 	 */
-	List<StudentVipGroupShowListDto> findVipGroups(Map<String,Object> params);
+	List<StudentVipGroupShowListDto> findVipGroups(Map<String, Object> params);
 
 
 	/**
 	/**
 	 * @Author: Joburgess
 	 * @Author: Joburgess
@@ -103,7 +106,7 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return int
 	 * @return int
 	 * @describe 统计vip数
 	 * @describe 统计vip数
 	 */
 	 */
-	int countVipGorups(Map<String,Object> params);
+	int countVipGorups(Map<String, Object> params);
 
 
 	/**
 	/**
 	 * @Author: Joburgess
 	 * @Author: Joburgess
@@ -139,61 +142,61 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
 	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
 	 * @describe 获取小课考勤记录
 	 * @describe 获取小课考勤记录
 	 */
 	 */
-    List<CourseSchedule> findVipGroupAttendances(Map<String,Object> params);
-
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/10/3
-     * @params [params]
-     * @return int
-     * @describe 统计小课考勤记录数
-     */
-    int countVipGroupAttendance(Map<String,Object> params);
-
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/10/3
-     * @params [vipGroupId]
-     * @return com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto
-     * @describe 获取vip课详情
-     */
-    StudentVipGroupDetailDto getVipGroupDetail(Long vipGroupId);
-
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/10/3
-     * @params [vipGroupId]
-     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Integer>>
-     * @describe 统计剩余课时数
-     */
-    List<Map<String,Integer>> countSurplusClassTimes(Long vipGroupId);
-
-    /**
-     * @describe 统计vip课已上课程数量
-     * @author Joburgess
-     * @date 2019/10/21
-     * @param vipGroupIds: vip课编号列表
-     * @return java.util.List<java.util.Map<java.lang.Long,java.lang.Integer>>
-     */
-    List<Map<Long,Integer>> countVipGroupOverCourse(List<Long> vipGroupIds);
-
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/10/12
-     * @params [vipGroupId]
-     * @return java.math.BigDecimal
-     * @describe 统计学生vip课未上课时费用
-     */
-    List<Map<Integer,BigDecimal>> countSurplusCourseFee(Long vipGroupId);
-
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/10/14
-     * @params [teacherId]
-     * @return int
-     * @describe 统计老师开启的vip课数
-     */
-    int countTeacherVipGroups(Long teacherId);
+	List<CourseSchedule> findVipGroupAttendances(Map<String, Object> params);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/3
+	 * @params [params]
+	 * @return int
+	 * @describe 统计小课考勤记录数
+	 */
+	int countVipGroupAttendance(Map<String, Object> params);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/3
+	 * @params [vipGroupId]
+	 * @return com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto
+	 * @describe 获取vip课详情
+	 */
+	StudentVipGroupDetailDto getVipGroupDetail(Long vipGroupId);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/3
+	 * @params [vipGroupId]
+	 * @return java.util.List<java.util.Map<java.lang.String,java.lang.Integer>>
+	 * @describe 统计剩余课时数
+	 */
+	List<Map<String, Integer>> countSurplusClassTimes(Long vipGroupId);
+
+	/**
+	 * @describe 统计vip课已上课程数量
+	 * @author Joburgess
+	 * @date 2019/10/21
+	 * @param vipGroupIds: vip课编号列表
+	 * @return java.util.List<java.util.Map<java.lang.Long,java.lang.Integer>>
+	 */
+	List<Map<Long, Integer>> countVipGroupOverCourse(List<Long> vipGroupIds);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/12
+	 * @params [vipGroupId]
+	 * @return java.math.BigDecimal
+	 * @describe 统计学生vip课未上课时费用
+	 */
+	List<Map<Integer, BigDecimal>> countSurplusCourseFee(Long vipGroupId);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/14
+	 * @params [teacherId]
+	 * @return int
+	 * @describe 统计老师开启的vip课数
+	 */
+	int countTeacherVipGroups(Long teacherId);
 
 
 	/**
 	/**
 	 * 根据教师编号获取老师vip课数量
 	 * 根据教师编号获取老师vip课数量
@@ -208,20 +211,34 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return
 	 * @return
 	 */
 	 */
 	List<TeacherVipClassInfoDto> getTeacherVipClass(Map<String, Object> params);
 	List<TeacherVipClassInfoDto> getTeacherVipClass(Map<String, Object> params);
-    
-    /**
-     * 根据老师查询vip课教学点
-     * @param userId
-     * @return
-     */
-    List<School> querySchoolByUserId(Integer userId);
-
-    /**
-     * @describe 根据课程编号获取vip课
-     * @author Joburgess
-     * @date 2019/10/23
-     * @param courseScheduleId: 课程编号
-     * @return com.ym.mec.biz.dal.entity.VipGroup
-     */
-    VipGroup findByCourseSchedule(Integer courseScheduleId);
+
+	/**
+	 * 根据老师查询vip课教学点
+	 * @param userId
+	 * @return
+	 */
+	List<School> querySchoolByUserId(Integer userId);
+
+	/**
+	 * @describe 根据课程编号获取vip课
+	 * @author Joburgess
+	 * @date 2019/10/23
+	 * @param courseScheduleId: 课程编号
+	 * @return com.ym.mec.biz.dal.entity.VipGroup
+	 */
+	VipGroup findByCourseSchedule(Integer courseScheduleId);
+
+	/**
+	 * 查询vip课数目
+	 * @param organId
+	 * @return
+	 */
+	Map<String, Integer> queryVipGroupNum(Integer organId);
+	
+	/**
+	 * 查询当月vip课数量
+	 * @param organId
+	 * @return
+	 */
+	Integer queryCurrentMonthCoursesNum(Integer organId);
 }
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SubFeeSettingDto.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 package com.ym.mec.biz.dal.dto;
 
 
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
 import java.util.List;
 import java.util.List;
@@ -28,6 +29,17 @@ public class SubFeeSettingDto {
     @ApiModelProperty(value = "乐团编号(修改时用)",required = false)
     @ApiModelProperty(value = "乐团编号(修改时用)",required = false)
     private String musicGroupId;
     private String musicGroupId;
 
 
+    @ApiModelProperty(value = "乐团状态(修改时用)",required = false)
+    private MusicGroupStatusEnum musicGroupStatus;
+
+    public MusicGroupStatusEnum getMusicGroupStatus() {
+        return musicGroupStatus;
+    }
+
+    public void setMusicGroupStatus(MusicGroupStatusEnum musicGroupStatus) {
+        this.musicGroupStatus = musicGroupStatus;
+    }
+
     public String getMusicGroupId() {
     public String getMusicGroupId() {
         return musicGroupId;
         return musicGroupId;
     }
     }

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

@@ -107,6 +107,17 @@ public class VipGroup {
 	@ApiModelProperty(value = "月度消耗百分数")
 	@ApiModelProperty(value = "月度消耗百分数")
 	private Double monthConsumeRate;
 	private Double monthConsumeRate;
 
 
+	@ApiModelProperty(value = "开课时间")
+	private Date courseStartDate;
+
+	public Date getCourseStartDate() {
+		return courseStartDate;
+	}
+
+	public void setCourseStartDate(Date courseStartDate) {
+		this.courseStartDate = courseStartDate;
+	}
+
 	public Double getMonthConsumeRate() {
 	public Double getMonthConsumeRate() {
 		return monthConsumeRate;
 		return monthConsumeRate;
 	}
 	}

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

@@ -6,7 +6,7 @@ import com.ym.mec.common.enums.BaseEnum;
  状态,1,表示短信;2,表示邮件; 3,app推送消息
  状态,1,表示短信;2,表示邮件; 3,app推送消息
  */
  */
 public enum MessageSendMode implements BaseEnum<Integer, MessageSendMode> {
 public enum MessageSendMode implements BaseEnum<Integer, MessageSendMode> {
-	SMS(1, "短信"), EMAIL(2, "邮件"), PUSH(3, "app推送消息");
+	SMS(1, "短信"), EMAIL(2, "邮件"), PUSH(3, "app推送消息"), SEO(4, "站内推送消息");
 
 
 	private Integer code;
 	private Integer code;
 
 

+ 4 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -16,15 +16,15 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_WITHDRAW_SUCCESS("SMS_WITHDRAW_SUCCESS", "提现成功"),
     SMS_WITHDRAW_SUCCESS("SMS_WITHDRAW_SUCCESS", "提现成功"),
     SMS_MUSIC_GROUP_CLOSE("SMS_MUSIC_GROUP_CLOSE", "乐团关闭(关闭后)"),
     SMS_MUSIC_GROUP_CLOSE("SMS_MUSIC_GROUP_CLOSE", "乐团关闭(关闭后)"),
 
 
-    STUDENT_SMS_PAYMENT_SUCCESS("STUDENT_SMS_PAYMENT_RESULT", "缴费成功结果通知"),
-    STUDENT_SMS_PAYMENT_FAILED("STUDENT_SMS_PAYMENT_RESULT", "缴费失败结果通知"),
+    STUDENT_SMS_PAYMENT_SUCCESS("STUDENT_SMS_PAYMENT_SUCCESS", "缴费成功结果通知"),
+    STUDENT_SMS_PAYMENT_FAILED("STUDENT_SMS_PAYMENT_FAILED", "缴费失败结果通知"),
     STUDENT_PUSH_PAYMENT_RESULT("STUDENT_PUSH_PAYMENT_RESULT", "缴费结果"),
     STUDENT_PUSH_PAYMENT_RESULT("STUDENT_PUSH_PAYMENT_RESULT", "缴费结果"),
     STUDENT_PUSH_MUSIC_GROUP_CLOSE("STUDENT_PUSH_MUSIC_GROUP_CLOSE", "乐团关闭(确认后)"),
     STUDENT_PUSH_MUSIC_GROUP_CLOSE("STUDENT_PUSH_MUSIC_GROUP_CLOSE", "乐团关闭(确认后)"),
     STUDENT_PUSH_BASICS_SKILL_APPLY_MESSAGE("STUDENT_PUSH_BASICS_SKILL_APPLY_MESSAGE", "基础技能训练报名通知"),
     STUDENT_PUSH_BASICS_SKILL_APPLY_MESSAGE("STUDENT_PUSH_BASICS_SKILL_APPLY_MESSAGE", "基础技能训练报名通知"),
     STUDENT_SMS_WAIT_RENEW_MESSAGE("STUDENT_SMS_WAIT_RENEW_MESSAGE", "待续费通知"),
     STUDENT_SMS_WAIT_RENEW_MESSAGE("STUDENT_SMS_WAIT_RENEW_MESSAGE", "待续费通知"),
     STUDENT_PUSH_WAIT_RENEW_MESSAGE("STUDENT_PUSH_WAIT_RENEW_MESSAGE", "待续费通知"),
     STUDENT_PUSH_WAIT_RENEW_MESSAGE("STUDENT_PUSH_WAIT_RENEW_MESSAGE", "待续费通知"),
-    STUDENT_SMS_MUSIC_GROUP_RENEW_RESULT("STUDENT_SMS_MUSIC_GROUP_RENEW_RESULT", "乐团续费结果"),
-    STUDENT_PUSH_MUSIC_GROUP_RENEW_RESULT("STUDENT_PUSH_MUSIC_GROUP_RENEW_RESULT", "乐团续费结果"),
+    STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS("STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS", "乐团续费成功结果"),
+    STUDENT_PUSH_MUSIC_GROUP_RENEW_FAILED("STUDENT_PUSH_MUSIC_GROUP_RENEW_FAILED", "乐团续费失败结果"),
     STUDENT_SMS_BALANCE_CONSUME("STUDENT_SMS_BALANCE_CONSUME", "余额消费"),
     STUDENT_SMS_BALANCE_CONSUME("STUDENT_SMS_BALANCE_CONSUME", "余额消费"),
     STUDENT_PUSH_BALANCE_CONSUME("STUDENT_PUSH_BALANCE_CONSUME", "余额消费"),
     STUDENT_PUSH_BALANCE_CONSUME("STUDENT_PUSH_BALANCE_CONSUME", "余额消费"),
     STUDENT_PUSH_VIP_BUY("STUDENT_PUSH_VIP_BUY", "VIP课购买"),
     STUDENT_PUSH_VIP_BUY("STUDENT_PUSH_VIP_BUY", "VIP课购买"),

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

@@ -7,7 +7,7 @@ import com.ym.mec.common.enums.BaseEnum;
  */
  */
 public enum PlatformCashAccountDetailTypeEnum implements BaseEnum<String, PlatformCashAccountDetailTypeEnum> {
 public enum PlatformCashAccountDetailTypeEnum implements BaseEnum<String, PlatformCashAccountDetailTypeEnum> {
 	RECHARGE("RECHARGE", "充值"), WITHDRAW("WITHDRAW", "提现"), PAY_FEE("PAY_FEE", "缴费"), FILL_ACCOUNT("FILL_ACCOUNT", "人工补账"), REFUNDS("REFUNDS", "退费"), REWARDS(
 	RECHARGE("RECHARGE", "充值"), WITHDRAW("WITHDRAW", "提现"), PAY_FEE("PAY_FEE", "缴费"), FILL_ACCOUNT("FILL_ACCOUNT", "人工补账"), REFUNDS("REFUNDS", "退费"), REWARDS(
-			"REWARDS", "奖励");
+			"REWARDS", "奖励"), WAGE("WAGE", "工资");
 
 
 	private String code;
 	private String code;
 
 

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentVipGroupQueryInfo.java

@@ -15,9 +15,20 @@ public class StudentVipGroupQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "课程类型",required = false)
     @ApiModelProperty(value = "课程类型",required = false)
     private String classType;
     private String classType;
 
 
+    @ApiModelProperty(value = "课程类型编号")
+    private String categoryId;
+
     @ApiModelProperty(value = "学生编号")
     @ApiModelProperty(value = "学生编号")
     private Integer userId;
     private Integer userId;
 
 
+    public String getCategoryId() {
+        return categoryId;
+    }
+
+    public void setCategoryId(String categoryId) {
+        this.categoryId = categoryId;
+    }
+
     public Integer getUserId() {
     public Integer getUserId() {
         return userId;
         return userId;
     }
     }

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

@@ -36,13 +36,17 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	void deleteCourseSchedules(List<Long> courseScheduleIds);
 	void deleteCourseSchedules(List<Long> courseScheduleIds);
 
 
 	/**
 	/**
-	 * @Author: Joburgess
-	 * @Date: 2019/10/16
-	 * @params [teacherAttendanceDto, userId]
-	 * @return YesOrNoEnum
 	 * @describe 判断该课程是否只能进行正常签到
 	 * @describe 判断该课程是否只能进行正常签到
+	 * @author Joburgess
+	 * @date 2019/11/5
+	 * @param teacherAttendanceDto: 教师签到信息
+	 * @param userId: 教师编号
+	 * @param checkSchool: 是否判断教学点
+	 * @return com.ym.mec.biz.dal.enums.YesOrNoEnum
 	 */
 	 */
-	YesOrNoEnum enableOnlyNormalAttendance(TeacherAttendanceDto teacherAttendanceDto, Long userId);
+	YesOrNoEnum enableOnlyNormalAttendance(TeacherAttendanceDto teacherAttendanceDto,
+										   Long userId,
+										   boolean checkSchool);
 
 
 	/**
 	/**
 	 * @Author: Joburgess
 	 * @Author: Joburgess
@@ -263,4 +267,13 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * 老师上课提醒
 	 * 老师上课提醒
 	 */
 	 */
 	void teacherSignInRemind();
 	void teacherSignInRemind();
+
+	/**
+	 * @describe 获取班级的课程计划
+	 * @author Joburgess
+	 * @date 2019/11/5
+	 * @param classGroupId: 班级编号
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+	 */
+	List<CourseSchedule> findCourseScheduleByClassGroup(Integer classGroupId);
 }
 }

+ 5 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -7,13 +7,16 @@ import java.util.Map;
 import java.util.Set;
 import java.util.Set;
 
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
+import com.ym.mec.biz.dal.dto.MusicCardDto;
+import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
+import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
 import com.ym.mec.biz.dal.entity.ApprovalStatus;
 import com.ym.mec.biz.dal.entity.ApprovalStatus;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupMember;
-import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 import com.ym.mec.common.service.BaseService;
 
 

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

@@ -3,6 +3,8 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.dto.CourseScheduleResponse;
 import com.ym.mec.biz.dal.dto.CourseScheduleResponse;
 import com.ym.mec.biz.dal.dto.StudentPersonalAttendanceDto;
 import com.ym.mec.biz.dal.dto.StudentPersonalAttendanceDto;
 import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.biz.dal.entity.StudentAttendance;
+import com.ym.mec.biz.dal.enums.SignStatusEnum;
+import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.page.QueryInfo;
@@ -63,4 +65,11 @@ public interface StudentAttendanceService extends BaseService<Long, StudentAtten
 	 */
 	 */
 	CourseScheduleResponse getStatisticsInfo(Integer classGroupId);
 	CourseScheduleResponse getStatisticsInfo(Integer classGroupId);
 
 
+	/**
+	 * VIP课学生考勤
+	 * @param courseScheduleId
+	 * @param userId
+	 * @param statusEnum
+	 */
+	void addStudentAttendanceRecord(Integer courseScheduleId, Integer userId, StudentAttendanceStatusEnum statusEnum);
 }
 }

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

@@ -37,6 +37,7 @@ public interface StudentCourseHomeworkService extends BaseService<Long, StudentC
     boolean updateReplyStatus(Integer teacherId,Long courseHomeworkId,Integer studentId);
     boolean updateReplyStatus(Integer teacherId,Long courseHomeworkId,Integer studentId);
 
 
     /**
     /**
+     * @author Gaoyong
      * 课程作业提醒
      * 课程作业提醒
      * @return
      * @return
      */
      */

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

@@ -96,6 +96,8 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
 
 
 	String MUSIC_GROUP_SETTLEMENT_SINGLE_CLASS_MINUTES="music_group_settlement_single_class_minutes";
 	String MUSIC_GROUP_SETTLEMENT_SINGLE_CLASS_MINUTES="music_group_settlement_single_class_minutes";
 
 
+	String REFUND_PERIOD = "refund_period";
+
 	/**
 	/**
 	 * @params paramName
 	 * @params paramName
 	 * @return com.ym.mec.biz.dal.entity.SysConfig
 	 * @return com.ym.mec.biz.dal.entity.SysConfig

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service;
 
 
 import java.util.Date;
 import java.util.Date;
 import java.util.Map;
 import java.util.Map;
+import java.util.Set;
 
 
 import com.ym.mec.biz.dal.entity.SysMessage;
 import com.ym.mec.biz.dal.entity.SysMessage;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
@@ -18,6 +19,14 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	public int updateMessage(SysMessage message);
 	public int updateMessage(SysMessage message);
 
 
 	/**
 	/**
+	 * 推送站内消息
+	 * @param userIds
+	 * @param messageType
+	 * @return
+	 */
+	boolean batchSeoMessage(Set<Integer> userIds,MessageTypeEnum messageType, Object... args);
+
+	/**
 	 * 批量发送消息
 	 * 批量发送消息
 	 * @param messageSender 消息发送者
 	 * @param messageSender 消息发送者
 	 * @param subject 消息主题
 	 * @param subject 消息主题

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 package com.ym.mec.biz.service;
 
 
+import com.ym.mec.biz.dal.dto.ConditionDto;
 import com.ym.mec.biz.dal.entity.VipGroupCategory;
 import com.ym.mec.biz.dal.entity.VipGroupCategory;
 import com.ym.mec.common.service.BaseService;
 import com.ym.mec.common.service.BaseService;
 
 
@@ -8,4 +9,6 @@ import java.util.List;
 public interface VipGroupCategoryService extends BaseService<Integer, VipGroupCategory> {
 public interface VipGroupCategoryService extends BaseService<Integer, VipGroupCategory> {
 
 
     List<VipGroupCategory> findAllByOrgan(Long organId);
     List<VipGroupCategory> findAllByOrgan(Long organId);
-}
+
+    List<ConditionDto> findConditionCategorys();
+}

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

@@ -819,10 +819,19 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             throw new BizException("请指定课程编号");
             throw new BizException("请指定课程编号");
         }
         }
         List<StudentAttendanceViewDto> studentByCourse = classGroupStudentMapperDao.findStudentByCourse(courseScheduleId);
         List<StudentAttendanceViewDto> studentByCourse = classGroupStudentMapperDao.findStudentByCourse(courseScheduleId);
-        List<StudentAttendanceViewDto> leaveStudent = studentByCourse.stream().filter(studentAttendanceViewDto -> StudentAttendanceStatusEnum.LEAVE.equals(studentAttendanceViewDto.getStatus())).collect(Collectors.toList());
-        List<StudentAttendanceViewDto> notLeaveStudent = studentByCourse.stream().filter(studentAttendanceViewDto -> !StudentAttendanceStatusEnum.LEAVE.equals(studentAttendanceViewDto.getStatus())).collect(Collectors.toList());
-        notLeaveStudent.addAll(leaveStudent);
-        return notLeaveStudent;
+        List<StudentAttendanceViewDto> leaveStudent = studentByCourse.stream()
+                .filter(studentAttendanceViewDto -> StudentAttendanceStatusEnum.LEAVE.equals(studentAttendanceViewDto.getStatus()))
+                .collect(Collectors.toList());
+        List<StudentAttendanceViewDto> truantStudent = studentByCourse.stream()
+                .filter(studentAttendanceViewDto -> StudentAttendanceStatusEnum.TRUANT.equals(studentAttendanceViewDto.getStatus()))
+                .collect(Collectors.toList());
+        List<StudentAttendanceViewDto> otherStudent = studentByCourse.stream()
+                .filter(studentAttendanceViewDto -> !StudentAttendanceStatusEnum.LEAVE.equals(studentAttendanceViewDto.getStatus())
+                                                &&!StudentAttendanceStatusEnum.TRUANT.equals(studentAttendanceViewDto.getStatus()))
+                .collect(Collectors.toList());
+        truantStudent.addAll(otherStudent);
+        truantStudent.addAll(leaveStudent);
+        return truantStudent;
     }
     }
 
 
     @Override
     @Override

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

@@ -85,7 +85,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		    throw new BizException("课程不存在");
 		    throw new BizException("课程不存在");
         }
         }
 
 
-		currentCourseDetail.setOnlyNormal(enableOnlyNormalAttendance(currentCourseDetail, user.getId().longValue()));
+		currentCourseDetail.setOnlyNormal(enableOnlyNormalAttendance(currentCourseDetail, user.getId().longValue(),true));
 
 
 		currentCourseDetail.setCurrentTime(new Date());
 		currentCourseDetail.setCurrentTime(new Date());
 		currentCourseDetail.setAdvanceSignInMinutes(Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES)));
 		currentCourseDetail.setAdvanceSignInMinutes(Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES)));
@@ -102,7 +102,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 	}
 
 
 	@Override
 	@Override
-	public YesOrNoEnum enableOnlyNormalAttendance(TeacherAttendanceDto teacherAttendanceDto,Long userId){
+	public YesOrNoEnum enableOnlyNormalAttendance(TeacherAttendanceDto teacherAttendanceDto,Long userId,boolean checkSchool){
 		Date endTime=teacherAttendanceDto.getStartClassTime();
 		Date endTime=teacherAttendanceDto.getStartClassTime();
 		Date startTime=DateUtil.addHours(endTime,-1);
 		Date startTime=DateUtil.addHours(endTime,-1);
 		TeacherAttendanceDto teacherCourseByDateSpeed = courseScheduleDao.getTeacherCourseByDateSpeed(startTime, endTime, userId);
 		TeacherAttendanceDto teacherCourseByDateSpeed = courseScheduleDao.getTeacherCourseByDateSpeed(startTime, endTime, userId);
@@ -110,7 +110,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			return YesOrNoEnum.NO;
 			return YesOrNoEnum.NO;
 		}else{
 		}else{
 			int i = studentAttendanceDao.countByCourseSchedule(teacherCourseByDateSpeed.getCourseScheduleId());
 			int i = studentAttendanceDao.countByCourseSchedule(teacherCourseByDateSpeed.getCourseScheduleId());
-			if(i>0&&teacherAttendanceDto.getSchoolId().equals(teacherCourseByDateSpeed.getSchoolId())){
+			if(i>0&&checkSchool&&teacherAttendanceDto.getSchoolId().equals(teacherCourseByDateSpeed.getSchoolId())){
 				return YesOrNoEnum.YES;
 				return YesOrNoEnum.YES;
 			}else{
 			}else{
 				return YesOrNoEnum.NO;
 				return YesOrNoEnum.NO;
@@ -885,4 +885,25 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_ATTEND_CLASS_MESSAGE, receivers, null, 0, "", scheduleName);
 			sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_ATTEND_CLASS_MESSAGE, receivers, null, 0, "", scheduleName);
 		}
 		}
 	}
 	}
+
+	@Override
+	public List<CourseSchedule> findCourseScheduleByClassGroup(Integer classGroupId) {
+		if(Objects.isNull(classGroupId)){
+			throw new BizException("请指定班级");
+		}
+		ClassGroup classGroup = classGroupDao.get(classGroupId);
+		if(Objects.isNull(classGroup)){
+			throw new BizException("指定的班级不存在");
+		}
+		List<Integer> classGroupIds=new ArrayList<>();
+		classGroupIds.add(classGroupId);
+		if(classGroup.getType().equals(ClassGroupTypeEnum.MIX)){
+			List<ClassGroup> mixClassChildClassGroup = classGroupDao.findMixClassChildClassGroup(classGroupId);
+			List<Integer> childClassGroupIds = mixClassChildClassGroup.stream()
+					.map(ClassGroup::getId)
+					.collect(Collectors.toList());
+			classGroupIds.addAll(childClassGroupIds);
+		}
+		return courseScheduleDao.findByClassGroups(classGroupIds);
+	}
 }
 }

+ 85 - 27
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -19,6 +19,8 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.string.MessageFormatter;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -110,6 +112,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 	@Autowired
 	@Autowired
 	private SysMessageConfigDao sysMessageConfigDao;
 	private SysMessageConfigDao sysMessageConfigDao;
 
 
+	@Autowired
+	private SysConfigDao sysConfigDao;
+
     @Override
     @Override
     public BaseDAO<String, MusicGroup> getDAO() {
     public BaseDAO<String, MusicGroup> getDAO() {
         return musicGroupDao;
         return musicGroupDao;
@@ -195,9 +200,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //乐团状态是否正确
         //乐团状态是否正确
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if(musicGroup != null){
         if(musicGroup != null){
-            if(musicGroup.getStatus() != MusicGroupStatusEnum.DRAFT || musicGroup.getStatus() != MusicGroupStatusEnum.AUDIT_FAILED){
+            if(musicGroup.getStatus() != MusicGroupStatusEnum.DRAFT && musicGroup.getStatus() != MusicGroupStatusEnum.AUDIT_FAILED){
                 throw new Exception("当前乐团状态不支持此操作");
                 throw new Exception("当前乐团状态不支持此操作");
             }
             }
+            if(subFeeSettingDto.getMusicGroupStatus() == null){
+                throw new Exception("参数校验异常");
+            }
+            musicGroup.setStatus(subFeeSettingDto.getMusicGroupStatus());
+            musicGroup.setUpdateTime(new Date());
+            musicGroupDao.update(musicGroup);
             //记录日志信息
             //记录日志信息
             musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"修改乐团计划声部、乐器",sysUser.getId(), JSONObject.toJSONString(subFeeSettingDto)));
             musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"修改乐团计划声部、乐器",sysUser.getId(), JSONObject.toJSONString(subFeeSettingDto)));
             //删除原有的乐团声部规划
             //删除原有的乐团声部规划
@@ -363,7 +374,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
         }
         //获取当前乐团所有已报名学员
         //获取当前乐团所有已报名学员
         List<StudentRegistration> registrations = studentRegistrationDao.findClassGroupStu(musicGroupId, null);
         List<StudentRegistration> registrations = studentRegistrationDao.findClassGroupStu(musicGroupId, null);
-
+        Map<Integer,String> map = new HashMap<>(registrations.size());
+        registrations.forEach(e->{
+            map.put(e.getUserId(),e.getUserId() + "");
+        });
+        if(map.size() > 0){
+            String content = sysMessageConfigDao.findContent(MessageTypeEnum.STUDENT_PUSH_MUSIC_GROUP_CLOSE.getCode());
+            content = MessageFormatter.arrayFormat(content,sysConfigDao.findConfigValue(SysConfigService.REFUND_PERIOD));
+            sysMessageService.batchSendMessage(MessageSender.JIGUANG,"",content,map,new Date(),0,"");
+        }
         //记录建团日志
         //记录建团日志
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"取消乐团",sysUser.getId(),""));
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"取消乐团",sysUser.getId(),""));
         return true;
         return true;
@@ -633,26 +652,64 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if(musicGroupStudentFee == null){
         if(musicGroupStudentFee == null){
             throw new BizException("系统数据异常,找不到学员预缴费信息");
             throw new BizException("系统数据异常,找不到学员预缴费信息");
         }
         }
-
         Date date = new Date();
         Date date = new Date();
-
-        musicGroupStudentFee.setUpdateTime(date);
-        musicGroupStudentFee.setLatestPaidTime(date);
-        musicGroupStudentFee.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
-        musicGroupStudentFee.setTemporaryCourseFee(new BigDecimal(0));
-        musicGroupStudentFee.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId));
-
-        musicGroupStudentFeeDao.update(musicGroupStudentFee);
-        
-		SysUser user = sysUserFeignService.queryUserById(userId);
-        Map<Integer, String> receivers = new HashMap<Integer, String>();
-        receivers.put(user.getId(), userId + "");
-
-		// 发送续费结果通知
-		sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_MUSIC_GROUP_RENEW_RESULT, receivers, null, 0, "",
-				user.getRealName());
-
-        return true;
+        Map<Integer, String> receivers = new HashMap<Integer, String>(1);
+        StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
+        receivers.put(userId, studentRegistration.getParentsPhone());
+        if(studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS){
+            musicGroupStudentFee.setUpdateTime(date);
+            musicGroupStudentFee.setLatestPaidTime(date);
+            musicGroupStudentFee.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
+            musicGroupStudentFee.setTemporaryCourseFee(new BigDecimal(0));
+            musicGroupStudentFee.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId));
+            musicGroupStudentFeeDao.update(musicGroupStudentFee);
+            
+            //插入交易明细
+            SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
+            BigDecimal amount = studentPaymentOrder.getActualAmount();
+            //充值
+            SysUserCashAccountDetail rechargeDetail = new SysUserCashAccountDetail();
+            rechargeDetail.setAmount(amount);
+            rechargeDetail.setBalance(cashAccount.getBalance().add(amount));
+            rechargeDetail.setComment("缴费前充值");
+            rechargeDetail.setCreateTime(date);
+            rechargeDetail.setStatus(DealStatusEnum.SUCCESS);
+            rechargeDetail.setTransNo(studentPaymentOrder.getTransNo());
+            rechargeDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
+            rechargeDetail.setUpdateTime(date);
+            rechargeDetail.setUserId(userId);
+            sysUserCashAccountDetailService.insert(rechargeDetail);
+            
+            //缴费
+            SysUserCashAccountDetail paymentDetail = new SysUserCashAccountDetail();
+            paymentDetail.setAmount(amount);
+            paymentDetail.setBalance(cashAccount.getBalance());
+            paymentDetail.setComment("缴费");
+            paymentDetail.setCreateTime(date);
+            paymentDetail.setStatus(DealStatusEnum.SUCCESS);
+            paymentDetail.setTransNo(studentPaymentOrder.getTransNo());
+            paymentDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
+            paymentDetail.setUpdateTime(date);
+            paymentDetail.setUserId(userId);
+            sysUserCashAccountDetailService.insert(paymentDetail);
+            
+            // 发送续费结果通知
+
+            sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS, receivers, null, 0, "",
+                    studentRegistration.getParentsName(),studentPaymentOrder.getActualAmount());
+            sysMessageService.batchSendMessage(MessageSender.YIMEI, MessageTypeEnum.STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS, receivers, null, 0, "",
+                    studentRegistration.getParentsName(),studentPaymentOrder.getActualAmount());
+            return true;
+        }
+        if(studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAilED){
+            String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL + musicGroupId);
+            sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_MUSIC_GROUP_RENEW_FAILED, receivers, null, 0, "",
+                    studentApplyUrl);
+            sysMessageService.batchSendMessage(MessageSender.YIMEI, MessageTypeEnum.STUDENT_PUSH_MUSIC_GROUP_RENEW_FAILED, receivers, null, 0, "",
+                    studentApplyUrl);
+            return false;
+        }
+        return false;
     }
     }
 
 
     @Override
     @Override
@@ -743,9 +800,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new Exception("用户信息获取失败");
             throw new Exception("用户信息获取失败");
         }
         }
         String musicGroupId = subFeeSettingDto.getMusicGroup().getId();
         String musicGroupId = subFeeSettingDto.getMusicGroup().getId();
-        MusicGroup musicGroup = saveLog(musicGroupId,MusicGroupStatusEnum.DRAFT);
-        if(musicGroup.getStatus() != MusicGroupStatusEnum.AUDIT_FAILED){
-            throw new Exception("当前乐团状态不支持此操作");
+        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+        if(musicGroup == null){
+            throw new Exception("乐团信息不存在");
         }
         }
 
 
         Date date = new Date();
         Date date = new Date();
@@ -902,8 +959,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //获取所有家长电话
         //获取所有家长电话
         Set<String> parentsPhones = students.stream().map(StudentRegistration::getParentsPhone).collect(Collectors.toSet());
         Set<String> parentsPhones = students.stream().map(StudentRegistration::getParentsPhone).collect(Collectors.toSet());
         //获取对应家长的用户编号
         //获取对应家长的用户编号
-//        Map<Integer,String> userIds = MapUtil.convertMybatisMap(studentRegistrationService.findParentId(StringUtils.join(parentsPhones,",")));
-//        String content = sysMessageConfigDao.findContent(MessageTypeEnum.SMS_BASICS_SKILL_APPLY_MESSAGE.getCode());
-//        sysMessageService.batchSendMessage(MessageSender.YIMEI,"",content,userIds,date,0,"");
+        Map<Integer,String> userIds = MapUtil.convertMybatisMap(studentRegistrationDao.findParentId(StringUtils.join(parentsPhones,",")));
+        userIds = JSONObject.parseObject(JSONObject.toJSONString(userIds),HashMap.class);
+        String content = sysMessageConfigDao.findContent(MessageTypeEnum.SMS_BASICS_SKILL_APPLY_MESSAGE.getCode());
+        sysMessageService.batchSendMessage(MessageSender.YIMEI,"",content,userIds,new Date(),0,"");
     }
     }
 }
 }

+ 57 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -5,20 +5,21 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.service.StudentAttendanceService;
 import com.ym.mec.biz.service.StudentAttendanceService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -50,6 +51,8 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 	private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
 	private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
 	@Autowired
 	@Autowired
 	private MusicGroupQuitDao musicGroupQuitDao;
 	private MusicGroupQuitDao musicGroupQuitDao;
+	@Autowired
+	private SysMessageService sysMessageService;
 
 
 	@Override
 	@Override
 	public BaseDAO<Long, StudentAttendance> getDAO() {
 	public BaseDAO<Long, StudentAttendance> getDAO() {
@@ -171,6 +174,10 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 		if(courseSchedule.getStatus() == CourseStatusEnum.OVER){
 		if(courseSchedule.getStatus() == CourseStatusEnum.OVER){
 			throw new BizException("课程已结束");
 			throw new BizException("课程已结束");
 		}
 		}
+
+		if(StringUtils.length(remark)>150){
+			throw new BizException("字符长度超限");
+		}
 		
 		
 		Date date = new Date();
 		Date date = new Date();
 		
 		
@@ -297,4 +304,50 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 		}
 		}
 		return courseScheduleResp;
 		return courseScheduleResp;
 	}
 	}
+
+	@Override
+	public void addStudentAttendanceRecord(Integer courseScheduleId, Integer userId, StudentAttendanceStatusEnum statusEnum) {
+		StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId,courseScheduleId);
+		if(studentAttendance == null){
+			studentAttendance = new StudentAttendance();
+			ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId);
+			CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
+			Date date = new Date();
+			if(classGroup != null && courseSchedule != null){
+				studentAttendance.setClassGroupId(classGroup.getId());
+				studentAttendance.setCourseScheduleId(courseScheduleId.longValue());
+				studentAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes());
+				studentAttendance.setMusicGroupId(classGroup.getMusicGroupId());
+				studentAttendance.setStatus(statusEnum);
+				studentAttendance.setUserId(userId);
+				studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
+//				studentAttendance.setRemark(statusEnum==StudentAttendanceStatusEnum.NORMAL?"":"课程结束后学生未到");
+				studentAttendanceDao.insert(studentAttendance);
+				//点名完成推送
+				Map<Integer, String> receivers = new HashMap<Integer, String>(1);
+				receivers.put(userId, userId.toString());
+				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_NAMES_ACHIEVE, receivers, null, 0, "",
+						DateUtil.format(date,DateUtil.DATE_FORMAT_MIN));
+				//修改课程状态(如果是学生签到,并且课程未开始)
+				/*if(StudentAttendanceStatusEnum.NORMAL == statusEnum && courseSchedule.getStatus() == CourseStatusEnum.NOT_START){
+					courseSchedule.setStatus(CourseStatusEnum.UNDERWAY);
+					courseSchedule.setUpdateTime(date);
+					courseScheduleDao.update(courseSchedule);
+				}
+				if(StudentAttendanceStatusEnum.TRUANT == statusEnum && courseSchedule.getStatus() == CourseStatusEnum.UNDERWAY){
+					String classDate = DateUtil.getDate(courseSchedule.getClassDate());
+					String classTime = DateUtil.getTime(courseSchedule.getEndClassTime());
+					Date stringToDate = DateUtil.stringToDate(classDate + " " + classTime);
+					//当前课程已结束
+					if(DateUtil.minutesBetween(stringToDate,date) > 0){
+						courseSchedule.setStatus(CourseStatusEnum.OVER);
+						courseSchedule.setUpdateTime(date);
+						courseScheduleDao.update(courseSchedule);
+					}
+				}*/
+			}else {
+				throw new BizException("学员班级或课程信息异常");
+			}
+		}
+	}
 }
 }

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

@@ -110,7 +110,7 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
 		List<StudentCourseHomework> list = studentCourseHomeworkDao.queryNotDoneHomeworkList();
 		List<StudentCourseHomework> list = studentCourseHomeworkDao.queryNotDoneHomeworkList();
 
 
 		for (StudentCourseHomework sch : list) {
 		for (StudentCourseHomework sch : list) {
-			Map<Integer, String> receivers = new HashMap<Integer, String>();
+			Map<Integer, String> receivers = new HashMap<Integer, String>(1);
 			receivers.put(sch.getUserId(), sch.getUserId() + "");
 			receivers.put(sch.getUserId(), sch.getUserId() + "");
 
 
 			sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_JOB_MESSAGE, receivers, null, 0, "", sch.getCourseHomework()
 			sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_JOB_MESSAGE, receivers, null, 0, "", sch.getCourseHomework()

+ 24 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -195,14 +195,15 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 //        musicGroupSubjectPlanService.addApplyStudentNum(studentRegistration.getMusicGroupId(), studentRegistration.getSubjectId(),1);
 //        musicGroupSubjectPlanService.addApplyStudentNum(studentRegistration.getMusicGroupId(), studentRegistration.getSubjectId(),1);
         //报名成功后,发送短信
         //报名成功后,发送短信
         String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL + studentRegistration.getMusicGroupId());
         String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL + studentRegistration.getMusicGroupId());
-        String content = sysMessageConfigDao.findContent(MessageTypeEnum.SMS_APPLY_MESSAGE.getCode());
+        String serverPhone = sysConfigDao.findConfigValue(SysConfigService.SERVER_PHONE);
         Subject subject = subjectDao.get(studentRegistration.getActualSubjectId());
         Subject subject = subjectDao.get(studentRegistration.getActualSubjectId());
         MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
         MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
-        String format = DateUtil.format(musicGroup.getApplyExpireDate(), DateUtil.DATE_FORMAT_MIN);
-        sysMessageService.sendMessage(MessageSenderPluginContext.MessageSender.YIMEI,sysUser.getId(),"",
-                MessageFormatter.arrayFormat(content, studentRegistration.getParentsName(),subject.getName(),
-                        studentApplyUrl,musicGroup.getApplyExpireDate(),format,sysConfigDao.findConfigValue(SysConfigService.SERVER_PHONE)),
-                studentRegistration.getParentsPhone(),date,0,null);
+
+        Map<Integer,String> map = new HashMap<>(1);
+        map.put(studentRegistration.getUserId(),studentRegistration.getParentsPhone());
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI,
+                MessageTypeEnum.SMS_APPLY_MESSAGE,map,null,0,"",
+                studentRegistration.getParentsName(),subject.getName(),studentApplyUrl,musicGroup.getApplyExpireDate(),serverPhone);
         return studentRegistration;
         return studentRegistration;
     }
     }
 
 
@@ -511,13 +512,15 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             musicGroupStudentFee.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED);
             musicGroupStudentFee.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED);
             musicGroupStudentFeeDao.insert(musicGroupStudentFee);
             musicGroupStudentFeeDao.insert(musicGroupStudentFee);
             //发送缴费成功通知(短信 + push)
             //发送缴费成功通知(短信 + push)
-            String content = sysMessageConfigDao.findContent(MessageTypeEnum.STUDENT_SMS_PAYMENT_SUCCESS.getCode());
-            content = MessageFormatter.arrayFormat(content,studentRegistration.getParentsName(),studentPaymentOrder.getActualAmount());
-            sysMessageService.sendMessage(MessageSenderPluginContext.MessageSender.YIMEI,studentPaymentOrder.getUserId(),"",
-                    content,studentRegistration.getUserId().toString(),nowDate,0,"");
+            Map<Integer,String> map = new HashMap<>(1);
+            map.put(studentPaymentOrder.getUserId(),studentRegistration.getParentsPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI,
+                    MessageTypeEnum.STUDENT_SMS_PAYMENT_SUCCESS,map,null,0,"",
+                    studentRegistration.getParentsName(),studentPaymentOrder.getActualAmount());
             //push
             //push
-            sysMessageService.sendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,studentPaymentOrder.getUserId(),"",
-                    content,studentRegistration.getUserId().toString(),nowDate,0,"");
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
+                    MessageTypeEnum.STUDENT_SMS_PAYMENT_SUCCESS,map,null,0,"",
+                    studentRegistration.getParentsName(),studentPaymentOrder.getActualAmount());
         }
         }
 
 
         //失败减去已收款金额
         //失败减去已收款金额
@@ -527,14 +530,16 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() - 1);
             musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() - 1);
             musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
             musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
             //发送缴费成功通知(短信 + push)
             //发送缴费成功通知(短信 + push)
-            String content = sysMessageConfigDao.findContent(MessageTypeEnum.STUDENT_SMS_PAYMENT_FAILED.getCode());
             String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL + studentRegistration.getMusicGroupId());
             String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL + studentRegistration.getMusicGroupId());
-            content = MessageFormatter.arrayFormat(content,studentApplyUrl);
-            sysMessageService.sendMessage(MessageSenderPluginContext.MessageSender.YIMEI,studentPaymentOrder.getUserId(),"",
-                    content,studentRegistration.getUserId().toString(),nowDate,0,"");
-            //push
-            sysMessageService.sendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,studentPaymentOrder.getUserId(),"",
-                    content,studentRegistration.getUserId().toString(),nowDate,0,"");
+
+            Map<Integer,String> map = new HashMap<>(1);
+            map.put(studentPaymentOrder.getUserId(),studentRegistration.getParentsPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI,
+                    MessageTypeEnum.STUDENT_SMS_PAYMENT_FAILED,map,null,0,"",
+                    studentApplyUrl);
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
+                    MessageTypeEnum.STUDENT_SMS_PAYMENT_FAILED,map,null,0,"",
+                    studentApplyUrl);
         }
         }
 
 
         return studentPaymentOrder;
         return studentPaymentOrder;

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

@@ -98,7 +98,7 @@ public class StudentWithdrawServiceImpl extends BaseServiceImpl<Integer, Student
 			sysUserCashAccountDetail.setUserId(userId);
 			sysUserCashAccountDetail.setUserId(userId);
 			sysUserCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WITHDRAW);
 			sysUserCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WITHDRAW);
 			sysUserCashAccountDetail.setStatus(status);
 			sysUserCashAccountDetail.setStatus(status);
-			sysUserCashAccountDetail.setAmount(amount);
+			sysUserCashAccountDetail.setAmount(amount.negate());
 			sysUserCashAccountDetail.setAttribute(id + "");
 			sysUserCashAccountDetail.setAttribute(id + "");
 			sysUserCashAccountDetail.setComment(memo);
 			sysUserCashAccountDetail.setComment(memo);
 			sysUserCashAccountDetail.setTransNo(transNo);
 			sysUserCashAccountDetail.setTransNo(transNo);
@@ -171,7 +171,7 @@ public class StudentWithdrawServiceImpl extends BaseServiceImpl<Integer, Student
 				SysUserCashAccountDetail cashAccountDetail = new SysUserCashAccountDetail();
 				SysUserCashAccountDetail cashAccountDetail = new SysUserCashAccountDetail();
 				cashAccountDetail.setUserId(account.getUserId());
 				cashAccountDetail.setUserId(account.getUserId());
 				cashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WITHDRAW);
 				cashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WITHDRAW);
-				cashAccountDetail.setAmount(amount);
+				cashAccountDetail.setAmount(amount.negate());
 				cashAccountDetail.setBalance(subtract);
 				cashAccountDetail.setBalance(subtract);
 				cashAccountDetail.setCreateTime(date);
 				cashAccountDetail.setCreateTime(date);
 				cashAccountDetail.setStatus(DealStatusEnum.ING);
 				cashAccountDetail.setStatus(DealStatusEnum.ING);

+ 35 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java

@@ -1,12 +1,7 @@
 package com.ym.mec.biz.service.impl;
 package com.ym.mec.biz.service.impl;
 
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
 import java.util.Map.Entry;
-import java.util.Random;
 
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
@@ -90,7 +85,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		SysMessage message = null;
 		SysMessage message = null;
 		Date date = new Date();
 		Date date = new Date();
 
 
-		List<SysMessage> messages = new ArrayList<SysMessage>();
+		List<SysMessage> messages = new ArrayList<>();
 
 
 		Integer userId = null;
 		Integer userId = null;
 		String receiver;
 		String receiver;
@@ -134,6 +129,38 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	}
 	}
 
 
 	@Override
 	@Override
+	public boolean batchSeoMessage(Set<Integer> userIds, MessageTypeEnum messageType, Object... args) {
+		if (userIds == null || userIds.size() == 0) {
+			throw new BizException("接收地址不能为空");
+		}
+		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(messageType);
+		if (messageConfig == null) {
+			throw new BizException("消息类型错误");
+		}
+		Date date = new Date();
+		SendStatusEnum status = SendStatusEnum.SUCCESSED;
+		String content = MessageFormatter.arrayFormat(messageConfig.getContent(), args);
+		SysMessage message = null;
+
+		List<SysMessage> messages = new ArrayList<>();
+		for (Integer userId:userIds) {
+			message = new SysMessage();
+			message.setUserId(userId);
+			message.setContent(content);
+			message.setCreateOn(date);
+			message.setModifyOn(date);
+			message.setReceiver(userId.toString());
+			message.setSendTime(date);
+			message.setStatus(status);
+			message.setType(MessageSendMode.SEO);
+			message.setReadStatus(0);
+			messages.add(message);
+		}
+		sysMessageDao.batchInsert(messages);
+		return true;
+	}
+
+	@Override
 	@Async
 	@Async
 	public boolean batchSendMessage(MessageSender messageSender, String subject, String content, Map<Integer, String> receivers, Date triggerTime,
 	public boolean batchSendMessage(MessageSender messageSender, String subject, String content, Map<Integer, String> receivers, Date triggerTime,
 									Integer readStatus, String memo) {
 									Integer readStatus, String memo) {
@@ -268,7 +295,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		if (debugMode == false) {
 		if (debugMode == false) {
 			code = getRandomCode(messageType, receiver);
 			code = getRandomCode(messageType, receiver);
 		}
 		}
-		Map<Integer, String> receivers = new HashMap<Integer, String>();
+		Map<Integer, String> receivers = new HashMap<>(1);
 		receivers.put(userId, receiver);
 		receivers.put(userId, receiver);
 		batchSendMessage(messageSender, messageType, receivers, null, 1, "", code);
 		batchSendMessage(messageSender, messageType, receivers, null, 1, "", code);
 		redisCache.put(key, code, CODE_EXPIRE);
 		redisCache.put(key, code, CODE_EXPIRE);

+ 20 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -4,10 +4,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.CourseHomework;
-import com.ym.mec.biz.dal.entity.StudentCourseHomework;
-import com.ym.mec.biz.dal.entity.TeacherAttendance;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.biz.service.*;
@@ -45,6 +42,8 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	@Autowired
 	@Autowired
 	private SysConfigDao sysConfigDao;
 	private SysConfigDao sysConfigDao;
 	@Autowired
 	@Autowired
+	private SysConfigService sysConfigService;
+	@Autowired
 	private SysMessageService sysMessageService;
 	private SysMessageService sysMessageService;
 	@Autowired
 	@Autowired
 	private ClassGroupDao classGroupDao;
 	private ClassGroupDao classGroupDao;
@@ -66,6 +65,9 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			throw new BizException("请选择课程!");
 			throw new BizException("请选择课程!");
 		}
 		}
 
 
+		SysConfig byParamName = sysConfigService.findByParamName(SysConfigService.ADVANCE_SIGN_IN_MINUTES);
+		Integer advanceSignInMinutes=Integer.parseInt(byParamName.getParanValue());
+
 		Map<String,Object> result=new HashMap<>();
 		Map<String,Object> result=new HashMap<>();
 
 
 		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(user.getId().longValue(),teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId());
 		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(user.getId().longValue(),teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId());
@@ -93,14 +95,14 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				throw new BizException("该课程已结束,不能进行签到!");
 				throw new BizException("该课程已结束,不能进行签到!");
 			}
 			}
 
 
-			YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(currentCourseDetail, user.getId().longValue());
+			YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(currentCourseDetail, user.getId().longValue(),true);
 
 
 			if(yesOrNoEnum==YesOrNoEnum.YES){
 			if(yesOrNoEnum==YesOrNoEnum.YES){
 				teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 				teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 				result.put("signInStatus",YesOrNoEnum.YES.getCode());
 				result.put("signInStatus",YesOrNoEnum.YES.getCode());
 			}else{
 			}else{
 				Long timeGap=(date.getTime()-currentCourseDetail.getStartClassTime().getTime())/1000/60;
 				Long timeGap=(date.getTime()-currentCourseDetail.getStartClassTime().getTime())/1000/60;
-				if(timeGap<= ParamEnum.TEACHER_ATTENDANCE_TIME_GAP.getCode()){
+				if(timeGap<= advanceSignInMinutes){
 					teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 					teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 					result.put("signInStatus",YesOrNoEnum.YES.getCode());
 					result.put("signInStatus",YesOrNoEnum.YES.getCode());
 				}else{
 				}else{
@@ -159,9 +161,13 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	public void addTeacherAttendanceRecord(Integer courseScheduleId, Integer userId, SignStatusEnum signStatus, boolean updateCourseScheduleStatus) {
 	public void addTeacherAttendanceRecord(Integer courseScheduleId, Integer userId, SignStatusEnum signStatus, boolean updateCourseScheduleStatus) {
 		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(),courseScheduleId.longValue());
 		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(),courseScheduleId.longValue());
 		ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId);
 		ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId);
+		CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
 		boolean isAttendance=false;
 		boolean isAttendance=false;
 		Date now=new Date();
 		Date now=new Date();
 
 
+		SysConfig byParamName = sysConfigService.findByParamName(SysConfigService.ADVANCE_SIGN_IN_MINUTES);
+		Integer advanceSignInMinutes=Integer.parseInt(byParamName.getParanValue());
+
 		if(Objects.isNull(teacherAttendance)){
 		if(Objects.isNull(teacherAttendance)){
 			teacherAttendance=new TeacherAttendance();
 			teacherAttendance=new TeacherAttendance();
 			teacherAttendance.setTeacherId(userId);
 			teacherAttendance.setTeacherId(userId);
@@ -171,10 +177,17 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		}else{
 		}else{
 			isAttendance=true;
 			isAttendance=true;
 		}
 		}
+
+		int timeGap = DateUtil.minutesBetween(now, courseSchedule.getStartClassTime());
+
 		switch (signStatus){
 		switch (signStatus){
 			case SIGN_IN:
 			case SIGN_IN:
 				teacherAttendance.setSignInTime(now);
 				teacherAttendance.setSignInTime(now);
-				teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
+				if(advanceSignInMinutes<=timeGap&&timeGap<=60){
+					teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
+				}else{
+					teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
+				}
 				int currentClassTimes = teacherAttendanceDao.countClassTime(classGroup.getId().longValue());
 				int currentClassTimes = teacherAttendanceDao.countClassTime(classGroup.getId().longValue());
 				classGroup.setCurrentClassTimes(currentClassTimes);
 				classGroup.setCurrentClassTimes(currentClassTimes);
 				if(updateCourseScheduleStatus){
 				if(updateCourseScheduleStatus){

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 package com.ym.mec.biz.service.impl;
 
 
+import com.ym.mec.biz.dal.dto.ConditionDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -26,4 +27,9 @@ public class VipGroupCategoryServiceImpl extends BaseServiceImpl<Integer, VipGro
 	public List<VipGroupCategory> findAllByOrgan(Long organId) {
 	public List<VipGroupCategory> findAllByOrgan(Long organId) {
 		return vipGroupCategoryDao.findAllByOrgan(organId);
 		return vipGroupCategoryDao.findAllByOrgan(organId);
 	}
 	}
-}
+
+	@Override
+	public List<ConditionDto> findConditionCategorys() {
+		return vipGroupCategoryDao.findConditionCategorys();
+	}
+}

+ 20 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -17,6 +17,7 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.im.ImFeignService;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -88,6 +89,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	@Autowired
 	@Autowired
 	private SysUserCashAccountDetailService sysUserCashAccountDetailService;
 	private SysUserCashAccountDetailService sysUserCashAccountDetailService;
 	@Autowired
 	@Autowired
+	private SysMessageService sysMessageService;
+	@Autowired
 	private VipGroupDefaultClassesCycleDao vipGroupDefaultClassesCycleDao;
 	private VipGroupDefaultClassesCycleDao vipGroupDefaultClassesCycleDao;
 
 
 	@Override
 	@Override
@@ -185,6 +188,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		vipGroupApplyBaseInfoDto.setTotalPrice(costInfo.get("totalPrice"));
 		vipGroupApplyBaseInfoDto.setTotalPrice(costInfo.get("totalPrice"));
 		vipGroupApplyBaseInfoDto.setStatus(VipGroupStatusEnum.APPLYING);
 		vipGroupApplyBaseInfoDto.setStatus(VipGroupStatusEnum.APPLYING);
 		vipGroupApplyBaseInfoDto.setOrganId(sysUser.getOrganId());
 		vipGroupApplyBaseInfoDto.setOrganId(sysUser.getOrganId());
+		//开课时间为排课的第一节课的开始时间
+		vipGroupApplyBaseInfoDto.setCourseStartDate(firstCourseSchedule.getStartClassTime());
 		//课程结束时间为排课的最后一节课的结束时间
 		//课程结束时间为排课的最后一节课的结束时间
 		vipGroupApplyBaseInfoDto.setCoursesExpireDate(latestCourseSchedule.getEndClassTime());
 		vipGroupApplyBaseInfoDto.setCoursesExpireDate(latestCourseSchedule.getEndClassTime());
 		vipGroupDao.insert(vipGroupApplyBaseInfoDto);
 		vipGroupDao.insert(vipGroupApplyBaseInfoDto);
@@ -214,9 +219,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 
 		//创建融云班级群
 		//创建融云班级群
 		// 指导老师加入群组
 		// 指导老师加入群组
-//		ImGroupMember[] imGroupMembers = { new ImGroupMember(vipGroup.getVipGroupApplyBaseInfo().getUserId().toString())};
+		ImGroupMember[] imGroupMembers = { new ImGroupMember(vipGroup.getVipGroupApplyBaseInfo().getUserId().toString())};
 		// 创建群组
 		// 创建群组
-//		imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+		imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
 
 
 		//创建班级老师关联记录
 		//创建班级老师关联记录
 		ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
 		ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
@@ -607,7 +612,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.nonNull(vipGroupSalarySettlementDto.getOnlineSalarySettlement())){
 		if(Objects.nonNull(vipGroupSalarySettlementDto.getOnlineSalarySettlement())){
 			switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
 			switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
 				case TEACHER_DEFAULT:
 				case TEACHER_DEFAULT:
-					if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary){
+					if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary
+							&&vipGroupActivity.getSalaryReadonlyFlag().equals("0")){
 						teacherOnlineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOnlineTeacherSalary();
 						teacherOnlineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOnlineTeacherSalary();
 					}
 					}
 
 
@@ -635,7 +641,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.nonNull(vipGroupSalarySettlementDto.getOfflineSalarySettlement())){
 		if(Objects.nonNull(vipGroupSalarySettlementDto.getOfflineSalarySettlement())){
 			switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
 			switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
 				case TEACHER_DEFAULT:
 				case TEACHER_DEFAULT:
-					if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary){
+					if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary
+							&&vipGroupActivity.getSalaryReadonlyFlag().equals("0")){
 						teacherOfflineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOfflineTeacherSalary();
 						teacherOfflineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOfflineTeacherSalary();
 					}
 					}
 					if(Objects.isNull(teacherOfflineSalary)){
 					if(Objects.isNull(teacherOfflineSalary)){
@@ -741,6 +748,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.nonNull(byStudentVipGroup)){
 		if(Objects.nonNull(byStudentVipGroup)){
 			byStudentVipGroup.setStatus(DealStatusEnum.CLOSE);
 			byStudentVipGroup.setStatus(DealStatusEnum.CLOSE);
 			studentPaymentOrderDao.update(byStudentVipGroup);
 			studentPaymentOrderDao.update(byStudentVipGroup);
+			//更新班级人数,如果订单支付失败则减少
+			updateVipGroupStudentNumAndStatus(vipGroup.getId(),1,false);
 		}
 		}
 
 
 		VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroup.getId());
 		VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroup.getId());
@@ -782,15 +791,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		studentVipGroupPayment.setStudentPaymentOrderId(studentPaymentOrder.getId());
 		studentVipGroupPayment.setStudentPaymentOrderId(studentPaymentOrder.getId());
 		studentVipGroupPaymentDao.insert(studentVipGroupPayment);
 		studentVipGroupPaymentDao.insert(studentVipGroupPayment);
 
 
-		//更新班级人数,如果订单支付失败则减少
-		updateVipGroupStudentNumAndStatus(vipGroup.getId(),1,false);
-
 		//生成回调地址
 		//生成回调地址
 		Map payMap = payService.getPayMap(
 		Map payMap = payService.getPayMap(
 				vipGroup.getTotalPrice(),
 				vipGroup.getTotalPrice(),
 				orderNo,
 				orderNo,
 				"http://mstudev.dayaedu.com/api-student/studentOrder/notify",
 				"http://mstudev.dayaedu.com/api-student/studentOrder/notify",
-				"http://mstudev.dayaedu.com/paymentresult?orderNo="+orderNo,
+				"http://mstudev.dayaedu.com/#/paymentresult?orderNo="+orderNo,
 				"vip课购买",
 				"vip课购买",
 				vipGroup.getName());
 				vipGroup.getName());
 		//将学员加入vip班级群组
 		//将学员加入vip班级群组
@@ -811,6 +817,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		Integer userId = order.getUserId();
 		Integer userId = order.getUserId();
 		boolean isOk=order.getStatus().equals(DealStatusEnum.SUCCESS);
 		boolean isOk=order.getStatus().equals(DealStatusEnum.SUCCESS);
 
 
+		VipGroup vipGroup = vipGroupDao.get(vipGroupId);
 		studentPaymentOrderDao.update(order);
 		studentPaymentOrderDao.update(order);
 
 
 		//将学生加入到班级,更新班级报名状态及人数信息
 		//将学生加入到班级,更新班级报名状态及人数信息
@@ -834,16 +841,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			sysUserExpendCashAccountDetail.setUserId(userId);
 			sysUserExpendCashAccountDetail.setUserId(userId);
 			sysUserExpendCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
 			sysUserExpendCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
 			sysUserExpendCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
 			sysUserExpendCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-			sysUserExpendCashAccountDetail.setAmount(order.getActualAmount());
+			sysUserExpendCashAccountDetail.setAmount(order.getActualAmount().negate());
 			sysUserExpendCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
 			sysUserExpendCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
 			sysUserExpendCashAccountDetail.setAttribute(order.getTransNo());
 			sysUserExpendCashAccountDetail.setAttribute(order.getTransNo());
 
 
 			sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
 			sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
 			sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail);
 			sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail);
+			Map<Integer,String> map = new HashMap<>(1);
+			map.put(userId,userId.toString());
+			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_VIP_BUY, map, null, 0, "",
+					vipGroup.getName());
 		}
 		}
 
 
-		VipGroup vipGroup = vipGroupDao.get(vipGroupId);
-
 		//生成学生单课缴费信息
 		//生成学生单课缴费信息
 		courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentForVipGroup(vipGroupId,userId);
 		courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentForVipGroup(vipGroupId,userId);
 
 

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

@@ -679,4 +679,12 @@
             LEFT JOIN class_group cg ON cs.class_group_id_=cg.id_
             LEFT JOIN class_group cg ON cs.class_group_id_=cg.id_
         WHERE cs.id_=#{courseScheduleId}
         WHERE cs.id_=#{courseScheduleId}
     </select>
     </select>
+    <select id="findClassGroupsByMixClassGroup" resultMap="ClassGroup">
+        SELECT
+            cg.*
+        FROM
+            class_group_relation cgr
+        LEFT JOIN class_group cg ON cgr.sub_class_group_id_=cg.id_
+        WHERE cgr.class_group_id_=#{maxCourseScheduleId}
+    </select>
 </mapper>
 </mapper>

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

@@ -362,7 +362,7 @@
 
 
     <select id="getCourseSchedulesWithDate" resultMap="courseScheduleDto">
     <select id="getCourseSchedulesWithDate" resultMap="courseScheduleDto">
         SELECT
         SELECT
-            cg.id_ seal_class_id_,
+            cs.id_ seal_class_id_,
             cs.name_,
             cs.name_,
             cs.type_,
             cs.type_,
             cs.id_,
             cs.id_,
@@ -403,7 +403,7 @@
 
 
     <select id="getStudentCourseSchedulesWithDate" resultMap="courseScheduleDto">
     <select id="getStudentCourseSchedulesWithDate" resultMap="courseScheduleDto">
         SELECT
         SELECT
-        cgsm.class_group_id_ seal_class_id_,
+        cs.id_ seal_class_id_,
         cs.name_,
         cs.name_,
         cs.type_,
         cs.type_,
         cs.id_,
         cs.id_,
@@ -429,7 +429,7 @@
 
 
     <select id="getTeacherCourseSchedulesWithDate" resultMap="courseScheduleDto">
     <select id="getTeacherCourseSchedulesWithDate" resultMap="courseScheduleDto">
         SELECT
         SELECT
-        cg.id_ seal_class_id_,
+        cs.id_ seal_class_id_,
         cg.name_,
         cg.name_,
         su.username_ teacher_name_,
         su.username_ teacher_name_,
         cs.type_,
         cs.type_,
@@ -734,6 +734,7 @@
         SELECT
         SELECT
         cs.type_,
         cs.type_,
         cs.id_,
         cs.id_,
+        cs.id_ seal_class_id_,
         cs.class_date_,
         cs.class_date_,
         CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
         CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
         CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
         CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
@@ -1160,4 +1161,13 @@
         WHERE cs.class_date_=DATE_FORMAT(#{date},'%Y-%m-%d %H:%i:%s')
         WHERE cs.class_date_=DATE_FORMAT(#{date},'%Y-%m-%d %H:%i:%s')
         AND cs.type_!='VIP'
         AND cs.type_!='VIP'
     </select>
     </select>
+    <select id="findByClassGroup" resultMap="CourseSchedule">
+      select * from  course_schedule where class_group_id_=#{classGroupId}
+    </select>
+    <select id="findByClassGroups" resultMap="CourseSchedule">
+        select * from  course_schedule where class_group_id_ IN
+        <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+            #{classGroupId}
+        </foreach>
+    </select>
 </mapper>
 </mapper>

+ 16 - 0
mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml

@@ -269,4 +269,20 @@
         WHERE FIND_IN_SET(dg.user_id_,#{teacherIds}) GROUP BY user_id_
         WHERE FIND_IN_SET(dg.user_id_,#{teacherIds}) GROUP BY user_id_
 	</select>
 	</select>
 
 
+	<select id="queryDemoGroupNum" resultType="map">
+		select sum(case when dgcp.status_ = 0 then 1 else 0 end) unbooked_num_,sum(case when dgcp.status_ = 1 then 1 else 0 end) booked_num_ from demo_group_courses_plan dgcp left join demo_group dg on dgcp.demo_group_id_ = dg.id_
+		<where>
+    		<if test="organId != null">
+    			FIND_IN_SET(#{organId},dg.organ_id_list_)
+    		</if>
+    	</where> 
+	</select>
+    
+    <select id="queryCurrentMonthCoursesNum" resultType="int">
+    	select count(cs.id_) from course_schedule cs left join demo_group_class_group_mapper vgcgm on cs.class_group_id_ = vgcgm.class_group_id_ left join demo_group vg on vgcgm.demo_group_id_ = vg.id_ where cs.type_ in ('DEMO')
+  		and DATE_FORMAT(cs.class_date_, '%Y%m' ) = DATE_FORMAT(CURDATE() , '%Y%m')
+   		<if test="organId != null">
+   			and find_in_set(#{organId},vg.organ_id_list_)
+   		</if>
+    </select>
 </mapper>
 </mapper>

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

@@ -312,4 +312,21 @@
 				#{musicGroupId}
 				#{musicGroupId}
 			</foreach>
 			</foreach>
     </select>
     </select>
+    
+  	<select id="queryOrganMusicGroupNum" resultType="map">
+    	select count(*) total,sum(case when status_ = 'PROGRESS' then 1 else 0 end) progress_num_,sum(case when status_ = 'PAUSE' then 1 else 0 end) pause_num_ from music_group
+    	<where>
+    		<if test="organId != null">
+    			organ_id_ = #{organId}
+    		</if>
+    	</where>
+  	</select>
+  	
+  	<select id="queryCurrentMonthCoursesNum" resultType="int">
+  		select count(cs.id_) from course_schedule cs left join class_group cg on cs.class_group_id_ = cg.id_ left join music_group mg on cg.music_group_id_ = mg.id_ where cs.type_ not in ('VIP','DEMO')
+  		and DATE_FORMAT(cs.class_date_, '%Y%m' ) = DATE_FORMAT(CURDATE() , '%Y%m')
+   		<if test="organId != null">
+   			and mg.organ_id_ = #{organId}
+   		</if>
+  	</select>
 </mapper>
 </mapper>

+ 9 - 3
mec-biz/src/main/resources/config/mybatis/MusicGroupSubjectPlanMapper.xml

@@ -107,9 +107,15 @@
         UPDATE music_group_subject_plan SET expected_student_num_ = #{expectedStudentNum},update_time_ = now() WHERE id_ = #{musicGroupSubjectPlanId}
         UPDATE music_group_subject_plan SET expected_student_num_ = #{expectedStudentNum},update_time_ = now() WHERE id_ = #{musicGroupSubjectPlanId}
     </update>
     </update>
 
 
-    <update id="batchUpdateFee">
-        <foreach collection="plans" item="item" separator=";">
-            UPDATE music_group_subject_plan SET fee_ = #{item.fee},update_time_ = now() WHERE id_ = #{item.id}
+    <update id="batchUpdateFee" parameterType="java.util.List">
+        <foreach collection="plans" item="item" index="index" open="" close="" separator=";">
+            UPDATE music_group_subject_plan
+            <set>
+                fee_ = #{item.fee},update_time_ = now()
+            </set>
+            <where>
+                id_ = #{item.id}
+            </where>
         </foreach>
         </foreach>
     </update>
     </update>
 
 

+ 5 - 7
mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -32,14 +32,9 @@
     <!-- 向数据库增加一条记录 -->
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentAttendance" useGeneratedKeys="true"
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentAttendance" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
             keyColumn="id" keyProperty="id">
-        <!--
-        <selectKey resultClass="int" keyProperty="id" >
-        SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
-        </selectKey>
-        -->
         INSERT INTO student_attendance
         INSERT INTO student_attendance
-        (id_,music_group_id_,class_group_id_,course_schedule_id_,user_id_,teacher_id_,status_,create_time_,remark_,current_class_times_)
-        VALUES(#{id},#{musicGroupId},#{classGroupId},#{courseScheduleId},#{userId},#{teacherId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),#{remark},#{currentClassTimes})
+        (music_group_id_,class_group_id_,course_schedule_id_,user_id_,teacher_id_,status_,create_time_,remark_,current_class_times_)
+        VALUES(#{musicGroupId},#{classGroupId},#{courseScheduleId},#{userId},#{teacherId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),#{remark},#{currentClassTimes})
     </insert>
     </insert>
 
 
     <insert id="addStudentAttendances" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
     <insert id="addStudentAttendances" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
@@ -299,4 +294,7 @@
             student_attendance
             student_attendance
             WHERE class_group_id_=#{classGroupId}
             WHERE class_group_id_=#{classGroupId}
     </select>
     </select>
+    <select id="findByStatusAndCourseScheduleId" resultMap="StudentAttendance">
+        SELECT * FROM student_attendance sa WHERE course_schedule_id_ = #{courseScheduleId} AND user_id_ = #{userId}
+    </select>
 </mapper>
 </mapper>

+ 4 - 3
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -118,6 +118,7 @@
         SELECT sr.user_id_,su.username_ real_name_,su.gender_,sr.parents_name_,sr.parents_phone_
         SELECT sr.user_id_,su.username_ real_name_,su.gender_,sr.parents_name_,sr.parents_phone_
         FROM student_registration sr
         FROM student_registration sr
         LEFT JOIN sys_user su ON sr.user_id_ = su.id_
         LEFT JOIN sys_user su ON sr.user_id_ = su.id_
+        <include refid="findStudentsByOrganIdSql"/>
         <include refid="global.limit"/>
         <include refid="global.limit"/>
     </select>
     </select>
     <sql id="findStudentsByOrganIdSql">
     <sql id="findStudentsByOrganIdSql">
@@ -147,7 +148,7 @@
         sr.parents_phone_,sr.current_class_,sr.current_grade_
         sr.parents_phone_,sr.current_class_,sr.current_grade_
         FROM sys_user su
         FROM sys_user su
         LEFT JOIN student_registration sr ON su.id_ = sr.user_id_
         LEFT JOIN student_registration sr ON su.id_ = sr.user_id_
-        WHERE su.id_ =#{userId} AND su.user_type_ LIKE CONCAT('%',"STUDENT",'%')
+        WHERE su.id_ =#{userId} AND su.user_type_ LIKE CONCAT('%',"STUDENT",'%') LIMIT 1
     </select>
     </select>
 
 
     <select id="findGoodsNamesByIds" resultType="string">
     <select id="findGoodsNamesByIds" resultType="string">
@@ -226,7 +227,7 @@
     </select>
     </select>
 
 
     <select id="countStudentCourses" resultType="int">
     <select id="countStudentCourses" resultType="int">
-        SELECT count(cg.*) FROM class_group cg
+        SELECT count(*) FROM class_group cg
         LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
         LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
         <if test="vipGroupId!=null">
         <if test="vipGroupId!=null">
             LEFT JOIN vip_group_class_group_mapper vgcgm ON cgsm.class_group_id_=vgcgm.class_group_id_
             LEFT JOIN vip_group_class_group_mapper vgcgm ON cgsm.class_group_id_=vgcgm.class_group_id_
@@ -436,4 +437,4 @@
         WHERE (cs.type_ = 'NORMAL' OR cs.type_ = 'MIX') AND sa.music_group_id_ = #{search}
         WHERE (cs.type_ = 'NORMAL' OR cs.type_ = 'MIX') AND sa.music_group_id_ = #{search}
     </select>
     </select>
 
 
-</mapper>
+</mapper>

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

@@ -209,7 +209,7 @@
     </select>
     </select>
 
 
     <select id="queryByDealStatus" resultMap="StudentPaymentOrder" parameterType="map">
     <select id="queryByDealStatus" resultMap="StudentPaymentOrder" parameterType="map">
-        SELECT * FROM student_payment_order WHERE music_group_id_= #{musicGroupId} AND user_id_=#{userId} AND type_ =
+        SELECT * FROM student_payment_order WHERE music_group_id_= #{musicGroupId} AND type_ =
         #{type} AND status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         #{type} AND status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </select>
     </select>
 
 

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

@@ -432,8 +432,7 @@
         WHERE sr.music_group_id_ = #{musicGroupId}
         WHERE sr.music_group_id_ = #{musicGroupId}
         GROUP BY actual_subject_id_
         GROUP BY actual_subject_id_
     </select>
     </select>
-
-    <select id="findParentId" resultType="java.util.Map">
+    <select id="findParentId" resultType="map">
         SELECT MAX(sr.user_id_) `key`,sr.parents_phone_ `value`
         SELECT MAX(sr.user_id_) `key`,sr.parents_phone_ `value`
         FROM student_registration sr
         FROM student_registration sr
         WHERE FIND_IN_SET(sr.parents_phone_,#{parentPhones})
         WHERE FIND_IN_SET(sr.parents_phone_,#{parentPhones})
@@ -451,4 +450,13 @@
         update_time_ = now()
         update_time_ = now()
         WHERE FIND_IN_SET(id_,#{ids}) AND payment_status_ = '0'
         WHERE FIND_IN_SET(id_,#{ids}) AND payment_status_ = '0'
     </update>
     </update>
+    
+    <select id="queryStudentNum" resultType="map">
+        SELECT count(sr.id_) total_num_,sum(case when sr.create_time_ >= timestamp(date_add(curdate(), interval - day(curdate()) + 1 day)) then 1 else 0 end) new_num_,sum(case when sr.music_group_status_ = 'QUIT' and sr.update_time_ >= timestamp(date_add(curdate(), interval - day(curdate()) + 1 day)) then 1 else 0 end) new_num_ FROM student_registration sr left join music_group mg on sr.music_group_id_ = mg.id_
+        <where>
+    		<if test="organId != null">
+    			mg.organ_id_ = #{organId}
+    		</if>
+    	</where> 
+    </select>
 </mapper>
 </mapper>

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/SysUserCashAccountDetailMapper.xml

@@ -124,4 +124,8 @@
     <select id="selectDetailByTransNo" resultMap="SysUserCashAccountDetail">
     <select id="selectDetailByTransNo" resultMap="SysUserCashAccountDetail">
 		SELECT * FROM sys_user_cash_account_detail WHERE  trans_no_ = #{transNo}
 		SELECT * FROM sys_user_cash_account_detail WHERE  trans_no_ = #{transNo}
 	</select>
 	</select>
+	
+	<select id="queryStatistics" resultType="map">
+		select sum(case when amount_ &gt; 0 then 1 else 0 end) income_num_,sum(case when amount_ &gt; 0 then amount_ else 0 end) income_total_,sum(case when amount_ &lt; 0 then 1 else 0 end) expend_num_,sum(case when amount_ &lt; 0 then amount_ else 0 end) expend_total_ from sys_user_cash_account_detail where status_ = 'SUCCESS'
+	</select>
 </mapper>
 </mapper>

+ 9 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -490,4 +490,13 @@
             </if>
             </if>
         </where>
         </where>
     </sql>
     </sql>
+    
+    <select id="queryOrganTeacherNum" resultType="map">
+    	select count(*) total,sum(case when job_nature_ = 'PART_TIME' then 1 else 0 end) part_time_num_,sum(case when job_nature_ = 'FULL_TIME' then 1 else 0 end) full_time_num_ from teacher
+    	<where>
+    		<if test="organId != null">
+    			organ_id_ = #{organId}
+    		</if>
+    	</where>
+    </select>
 </mapper>
 </mapper>

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

@@ -124,7 +124,7 @@
 	<select id="queryPage" resultMap="VipGroupActivity" parameterType="map">
 	<select id="queryPage" resultMap="VipGroupActivity" parameterType="map">
 		SELECT
 		SELECT
 		vga.*,
 		vga.*,
-		(NOW() &lt; end_time_) enable,
+		(NOW() &lt; end_time_ AND NOW() > start_time_) enable,
 		GROUP_CONCAT(vgc.name_) vip_group_category_names_
 		GROUP_CONCAT(vgc.name_) vip_group_category_names_
 		FROM vip_group_activity vga
 		FROM vip_group_activity vga
 		LEFT JOIN vip_group_category vgc ON FIND_IN_SET(vgc.id_,vga.vip_group_category_id_list_)
 		LEFT JOIN vip_group_category vgc ON FIND_IN_SET(vgc.id_,vga.vip_group_category_id_list_)

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

@@ -93,4 +93,7 @@
 		SELECT COUNT(*) FROM
 		SELECT COUNT(*) FROM
 		vip_group_category
 		vip_group_category
 	</select>
 	</select>
+	<select id="findConditionCategorys" resultType="com.ym.mec.biz.dal.dto.ConditionDto">
+      	select id_ id,name_ `name` from vip_group_category where del_flag_ = 0
+    </select>
 </mapper>
 </mapper>

+ 25 - 4
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -35,6 +35,7 @@
         <result column="give_teach_mode_" property="giveTeachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="give_teach_mode_" property="giveTeachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="organ_id_" property="organId"/>
         <result column="organ_id_" property="organId"/>
         <result column="stop_reason_" property="stopReason"/>
         <result column="stop_reason_" property="stopReason"/>
+        <result column="courses_start_date" property="courseStartDate"/>
     </resultMap>
     </resultMap>
     
     
     <resultMap type="com.ym.mec.biz.dal.entity.School" id="School">
     <resultMap type="com.ym.mec.biz.dal.entity.School" id="School">
@@ -170,8 +171,8 @@
         </selectKey>
         </selectKey>
         -->
         -->
         INSERT INTO vip_group
         INSERT INTO vip_group
-        (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,name_,organ_id_list_,vip_group_activity_id_,status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_,vip_group_category_id_,organ_id_,stop_reason_,audit_status_)
-        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{name},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode},#{vipGroupCategoryId},#{organId},#{stopReason},#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+        (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,name_,organ_id_list_,vip_group_activity_id_,status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_,vip_group_category_id_,organ_id_,stop_reason_,audit_status_,courses_start_date)
+        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{name},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode},#{vipGroupCategoryId},#{organId},#{stopReason},#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{courseStartDate})
     </insert>
     </insert>
 
 
     <!-- 根据主键查询一条记录 -->
     <!-- 根据主键查询一条记录 -->
@@ -274,6 +275,9 @@
             <if test="subjectId!=null">
             <if test="subjectId!=null">
                AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)
                AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)
             </if>
             </if>
+            <if test="categoryId!=null">
+                AND FIND_IN_SET(vg.vip_group_category_id_,#{categoryId})
+            </if>
             <if test="classType!=null and classType.toString()=='0'.toString()">
             <if test="classType!=null and classType.toString()=='0'.toString()">
                 AND vg.offline_classes_num_>0
                 AND vg.offline_classes_num_>0
             </if>
             </if>
@@ -454,7 +458,7 @@
             LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
             LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
             LEFT JOIN class_group_student_mapper cgsm ON vgcgm.class_group_id_=cgsm.class_group_id_
             LEFT JOIN class_group_student_mapper cgsm ON vgcgm.class_group_id_=cgsm.class_group_id_
             LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
             LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
-        WHERE vgcgm.id_=#{vipGroupId}
+        WHERE vgcgm.vip_group_id_=#{vipGroupId}
         ORDER BY su.id_
         ORDER BY su.id_
         <include refid="global.limit"/>
         <include refid="global.limit"/>
     </select>
     </select>
@@ -466,7 +470,7 @@
         vip_group_class_group_mapper vgcgm
         vip_group_class_group_mapper vgcgm
         LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
         LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
         LEFT JOIN class_group_student_mapper cgsm ON vgcgm.class_group_id_=cgsm.class_group_id_
         LEFT JOIN class_group_student_mapper cgsm ON vgcgm.class_group_id_=cgsm.class_group_id_
-        WHERE vgcgm.id_=#{vipGroupId}
+        WHERE vgcgm.vip_group_id_=#{vipGroupId}
     </select>
     </select>
 
 
     <resultMap id="teachingRecord" type="com.ym.mec.biz.dal.dto.VipGroupCourseSchduleRecordDto">
     <resultMap id="teachingRecord" type="com.ym.mec.biz.dal.dto.VipGroupCourseSchduleRecordDto">
@@ -653,4 +657,21 @@
             LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
             LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
             WHERE cs.id_=#{courseScheduleId}
             WHERE cs.id_=#{courseScheduleId}
     </select>
     </select>
+    
+    <select id="queryVipGroupNum" resultType="map">
+    	select count(*) total,sum(case when status_ = 1 then 1 else 0 end) applying_num_,sum(case when status_ = 2 then 1 else 0 end) finished_num_ from vip_group 
+    	<where>
+    		<if test="organId != null">
+    			organ_id_ = #{organId}
+    		</if>
+    	</where>
+    </select>
+    
+    <select id="queryCurrentMonthCoursesNum" resultType="int">
+    	select count(cs.id_) from course_schedule cs left join vip_group_class_group_mapper vgcgm on cs.class_group_id_ = vgcgm.class_group_id_ left join vip_group vg on vgcgm.vip_group_id_ = vg.id_ where cs.type_ in ('VIP')
+  		and DATE_FORMAT(cs.class_date_, '%Y%m' ) = DATE_FORMAT(CURDATE() , '%Y%m')
+   		<if test="organId != null">
+   			and vg.organ_id_ = #{organId}
+   		</if>
+    </select>
 </mapper>
 </mapper>

+ 4 - 0
mec-im/pom.xml

@@ -84,6 +84,10 @@
       <version>2.8.1</version>
       <version>2.8.1</version>
     </dependency>
     </dependency>
     <dependency>
     <dependency>
+      <groupId>com.ym</groupId>
+      <artifactId>mec-biz</artifactId>
+    </dependency>
+    <dependency>
       <groupId>cn.rongcloud.im</groupId>
       <groupId>cn.rongcloud.im</groupId>
       <artifactId>server-sdk-java</artifactId>
       <artifactId>server-sdk-java</artifactId>
       <version>3.0.6</version>
       <version>3.0.6</version>

+ 20 - 16
mec-im/src/main/java/com/ym/service/Impl/HereWhiteServiceImpl.java

@@ -35,22 +35,26 @@ public class HereWhiteServiceImpl implements HereWhiteService {
         String url = "/room?token=" + hereWhiteToken;
         String url = "/room?token=" + hereWhiteToken;
         JSONObject jsonObject = JSONObject.parseObject(requestParam(json, url));
         JSONObject jsonObject = JSONObject.parseObject(requestParam(json, url));
         if(jsonObject.getString("code").equals("200")){
         if(jsonObject.getString("code").equals("200")){
-            JSONObject room = jsonObject.getJSONObject("msg").getJSONObject("room");
-            HereWhite hereWhite = new HereWhite();
-            Date date = new Date();
-            hereWhite.setCourseScheduleId(courseScheduleId);
-            hereWhite.setName(room.getString("name"));
-            hereWhite.setLimit(room.getInteger("limit"));
-            hereWhite.setTeamId(room.getInteger("teamId"));
-            hereWhite.setAdminId(room.getInteger("adminId"));
-            hereWhite.setMode(room.getString("mode"));
-            hereWhite.setTemplate(room.getString("template"));
-            hereWhite.setRegion(room.getString("region"));
-            hereWhite.setUuid(room.getString("uuid"));
-            hereWhite.setRoomToken(jsonObject.getJSONObject("msg").getString("roomToken"));
-            hereWhite.setUpdatedAt(date);
-            hereWhite.setCreatedAt(date);
-            return hereWhiteDao.save(hereWhite);
+            HereWhite hereWhite = hereWhiteDao.findByCourseScheduleId(courseScheduleId);
+            if(hereWhite == null){
+                JSONObject room = jsonObject.getJSONObject("msg").getJSONObject("room");
+                hereWhite = new HereWhite();
+                Date date = new Date();
+                hereWhite.setCourseScheduleId(courseScheduleId);
+                hereWhite.setName(room.getString("name"));
+                hereWhite.setLimit(room.getInteger("limit"));
+                hereWhite.setTeamId(room.getInteger("teamId"));
+                hereWhite.setAdminId(room.getInteger("adminId"));
+                hereWhite.setMode(room.getString("mode"));
+                hereWhite.setTemplate(room.getString("template"));
+                hereWhite.setRegion(room.getString("region"));
+                hereWhite.setUuid(room.getString("uuid"));
+                hereWhite.setRoomToken(jsonObject.getJSONObject("msg").getString("roomToken"));
+                hereWhite.setUpdatedAt(date);
+                hereWhite.setCreatedAt(date);
+                hereWhiteDao.save(hereWhite);
+            }
+            return hereWhite;
         }else {
         }else {
             throw new Exception(jsonObject.getString("msg"));
             throw new Exception(jsonObject.getString("msg"));
         }
         }

+ 26 - 12
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -9,11 +9,17 @@ import com.ym.dao.RoomDao;
 import com.ym.dao.RoomMemberDao;
 import com.ym.dao.RoomMemberDao;
 import com.ym.dao.UserDao;
 import com.ym.dao.UserDao;
 import com.ym.dao.WhiteboardDao;
 import com.ym.dao.WhiteboardDao;
-import com.ym.mec.im.IMHelper;
 import com.ym.job.ScheduleManager;
 import com.ym.job.ScheduleManager;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.enums.SignStatusEnum;
+import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
+import com.ym.mec.biz.service.StudentAttendanceService;
+import com.ym.mec.biz.service.TeacherAttendanceService;
 import com.ym.mec.common.security.SecurityUtils;
 import com.ym.mec.common.security.SecurityUtils;
+import com.ym.mec.im.IMHelper;
 import com.ym.mec.im.message.*;
 import com.ym.mec.im.message.*;
 import com.ym.pojo.*;
 import com.ym.pojo.*;
 import com.ym.service.RoomService;
 import com.ym.service.RoomService;
@@ -62,30 +68,35 @@ public class RoomServiceImpl implements RoomService {
     private UserDao userDao;
     private UserDao userDao;
 
 
     @Autowired
     @Autowired
+    private TeacherDao teacherDao;
+
+    @Autowired
+    private TeacherAttendanceService teacherAttendanceService;
+
+    @Autowired
+    private StudentAttendanceService studentAttendanceService;
+
+    @Autowired
     private IMProperties imProperties;
     private IMProperties imProperties;
 
 
     @Autowired
     @Autowired
     private SysUserFeignService sysUserFeignService;
     private SysUserFeignService sysUserFeignService;
 
 
-    /*private AuthUser getUser(){
-        String token = SecurityUtils.getToken();
-        String principal = SecurityUtils.getPrincipal().toString();
-        String json = redisTemplate.opsForValue().get(principal);
-        return JSON.parseObject(json,AuthUser.class);
-    }*/
-
     @Transactional
     @Transactional
     @Override
     @Override
     public RoomResult joinRoom(String userName, String roomId, boolean isAudience, boolean isDisableCamera) throws ApiException, Exception {
     public RoomResult joinRoom(String userName, String roomId, boolean isAudience, boolean isDisableCamera) throws ApiException, Exception {
-        String token = SecurityUtils.getAuthenticationValue();
-
         CheckUtils.checkArgument(userName != null, "userName must't be null");
         CheckUtils.checkArgument(userName != null, "userName must't be null");
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
 
 
         log.info("joinRoom: roomId={}, userName={}, isAudience={}, isDisableCamera={}", roomId, userName, isAudience, isDisableCamera);
         log.info("joinRoom: roomId={}, userName={}, isAudience={}, isDisableCamera={}", roomId, userName, isAudience, isDisableCamera);
         roomId = "DAYA" + roomId;
         roomId = "DAYA" + roomId;
-//        String userId = getUser().getUserId().toString();
         String userId = sysUserFeignService.queryUserInfo().getId().toString();
         String userId = sysUserFeignService.queryUserInfo().getId().toString();
+        Teacher teacher = teacherDao.get(Integer.parseInt(userId));
+        if(teacher == null){
+            studentAttendanceService.addStudentAttendanceRecord(Integer.parseInt(roomId),Integer.parseInt(userId), StudentAttendanceStatusEnum.NORMAL);
+        }else {
+            teacherAttendanceService.addTeacherAttendanceRecord(Integer.parseInt(roomId),Integer.parseInt(userId), SignStatusEnum.SIGN_IN,true);
+        }
 
 
         String display = "";
         String display = "";
         Date curTime = DateTimeUtils.currentUTC();
         Date curTime = DateTimeUtils.currentUTC();
@@ -221,9 +232,12 @@ public class RoomServiceImpl implements RoomService {
     @Transactional
     @Transactional
     @Override
     @Override
     public Boolean leaveRoom(String roomId) throws Exception {
     public Boolean leaveRoom(String roomId) throws Exception {
-        String token = SecurityUtils.getAuthenticationValue();
         SysUser user = sysUserFeignService.queryUserInfo();
         SysUser user = sysUserFeignService.queryUserInfo();
         String userId = user.getId().toString();
         String userId = user.getId().toString();
+        Teacher teacher = teacherDao.get(user.getId());
+        if(teacher != null){
+            teacherAttendanceService.addTeacherAttendanceRecord(Integer.parseInt(roomId),user.getId(), SignStatusEnum.SIGN_OUT,true);
+        }
         
         
         CheckUtils.checkArgument(user != null, "user must't be null");
         CheckUtils.checkArgument(user != null, "user must't be null");
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");

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

@@ -244,7 +244,7 @@ public class MusicGroupController extends BaseController {
                 orderAmount,
                 orderAmount,
                 orderNo,
                 orderNo,
                 "http://mstudev.dayaedu.com/api-student/studentOrder/notify",
                 "http://mstudev.dayaedu.com/api-student/studentOrder/notify",
-                "http://mstudev.dayaedu.com/#/paymentResult",
+                "http://mstudev.dayaedu.com/#/paymentresult?orderNo="+orderNo,
                 "测试订单",
                 "测试订单",
                 "测试订单");
                 "测试订单");
 
 

+ 10 - 21
mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java

@@ -1,11 +1,17 @@
 package com.ym.mec.student.controller;
 package com.ym.mec.student.controller;
 
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.CashAccountDetail;
+import com.ym.mec.biz.dal.entity.SysSuggestion;
+import com.ym.mec.biz.dal.entity.SysUserBankCard;
+import com.ym.mec.biz.service.*;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.UploadReturnBean;
+import com.ym.mec.util.upload.UploadUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import io.swagger.annotations.ApiParam;
-
-import java.util.Date;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
@@ -17,22 +23,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.CashAccountDetail;
-import com.ym.mec.biz.dal.entity.SysSuggestion;
-import com.ym.mec.biz.dal.entity.SysUserBankCard;
-import com.ym.mec.biz.service.ClassGroupService;
-import com.ym.mec.biz.service.StudentManageService;
-import com.ym.mec.biz.service.StudentWithdrawService;
-import com.ym.mec.biz.service.SysSuggestionService;
-import com.ym.mec.biz.service.SysUserBankCardService;
-import com.ym.mec.biz.service.SysUserCashAccountDetailService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
-import com.ym.mec.biz.service.UploadFileService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.UploadReturnBean;
-import com.ym.mec.util.upload.UploadUtil;
+import java.util.Date;
 
 
 @Api(tags = "学生管理")
 @Api(tags = "学生管理")
 @RestController
 @RestController
@@ -49,8 +40,6 @@ public class StudentManageController extends BaseController {
     @Autowired
     @Autowired
     private ClassGroupService classGroupService;
     private ClassGroupService classGroupService;
     @Autowired
     @Autowired
-    private StudentWithdrawService studentWithdrawService;
-    @Autowired
     private SysUserBankCardService sysUserBankCardService;
     private SysUserBankCardService sysUserBankCardService;
     @Autowired
     @Autowired
     private StudentManageService studentManageService;
     private StudentManageService studentManageService;

+ 0 - 1
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -77,7 +77,6 @@ public class StudentOrderController extends BaseController {
         } else if (order.getType().equals(OrderTypeEnum.RENEW)) {
         } else if (order.getType().equals(OrderTypeEnum.RENEW)) {
             musicGroupService.renewForCallback(order);
             musicGroupService.renewForCallback(order);
         }
         }
-
         return "SUCCESS";
         return "SUCCESS";
     }
     }
 
 

+ 4 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.dto.QueryConditionDto;
 import com.ym.mec.biz.dal.dto.VipGroupBuyParamsDto;
 import com.ym.mec.biz.dal.dto.VipGroupBuyParamsDto;
 import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
 import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
 import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.biz.service.SubjectService;
+import com.ym.mec.biz.service.VipGroupCategoryService;
 import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.controller.BaseController;
 
 
@@ -38,12 +39,15 @@ public class StudentVipGroupController extends BaseController {
     private SubjectService subjectService;
     private SubjectService subjectService;
     @Autowired
     @Autowired
     private SysUserFeignService sysUserFeignService;
     private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private VipGroupCategoryService vipGroupCategoryService;
 
 
     @ApiOperation(value = "获取vip课列表筛选条件")
     @ApiOperation(value = "获取vip课列表筛选条件")
     @GetMapping(value = "/findQueryCondition")
     @GetMapping(value = "/findQueryCondition")
     public Object findQueryCondition(){
     public Object findQueryCondition(){
         List<QueryConditionDto> conditions=new ArrayList<>();
         List<QueryConditionDto> conditions=new ArrayList<>();
         conditions.add(new QueryConditionDto("乐器选择","subjectId",subjectService.findSubjectConditions()));
         conditions.add(new QueryConditionDto("乐器选择","subjectId",subjectService.findSubjectConditions()));
+        conditions.add(new QueryConditionDto("课程类型","categoryId",vipGroupCategoryService.findConditionCategorys()));
         List<ConditionDto> conditionDtos=new ArrayList<>();
         List<ConditionDto> conditionDtos=new ArrayList<>();
         conditionDtos.add(new ConditionDto(0L,"线下"));
         conditionDtos.add(new ConditionDto(0L,"线下"));
         conditionDtos.add(new ConditionDto(1L,"线上"));
         conditionDtos.add(new ConditionDto(1L,"线上"));

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

@@ -3,7 +3,6 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
 import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
-import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
 import com.ym.mec.biz.dal.dto.CreateCourseScheduleDto;
 import com.ym.mec.biz.dal.dto.CreateCourseScheduleDto;
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
@@ -121,9 +120,17 @@ public class CourseScheduleController extends BaseController {
     @ApiOperation(value = "课时调整")
     @ApiOperation(value = "课时调整")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/classStartDateAdjust')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/classStartDateAdjust')")
     @PostMapping(value = "/classStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     @PostMapping(value = "/classStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-    public Object classStartDateAdjust(ClassDateAdjustDto classDateAdjustDto){
+    public Object classStartDateAdjust(CourseSchedule courseSchedule){
         List<CourseSchedule> courseSchedules=new ArrayList<>();
         List<CourseSchedule> courseSchedules=new ArrayList<>();
-        courseSchedules.add(classDateAdjustDto);
+        courseSchedules.add(courseSchedule);
+        scheduleService.classStartDateAdjust(courseSchedules);
+        return succeed();
+    }
+
+    @ApiOperation(value = "课时调整-批量")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchClassStartDateAdjust')")
+    @PostMapping(value = "/batchClassStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public Object batchClassStartDateAdjust(List<CourseSchedule> courseSchedules){
         scheduleService.classStartDateAdjust(courseSchedules);
         scheduleService.classStartDateAdjust(courseSchedules);
         return succeed();
         return succeed();
     }
     }
@@ -171,4 +178,11 @@ public class CourseScheduleController extends BaseController {
 		return succeed(musicGroupService.queryTeacherSalary(courseScheduleId));
 		return succeed(musicGroupService.queryTeacherSalary(courseScheduleId));
 	}
 	}
 
 
+    @ApiOperation(value = "根据班级获取课程计划")
+    @GetMapping("/findCourseScheduleByClassGroup")
+    @PreAuthorize("@pcs.hasPermissions('course/findCourseScheduleByClassGroup')")
+	public Object findCourseScheduleByClassGroup(Integer classGroupId){
+        return succeed(scheduleService.findCourseScheduleByClassGroup(classGroupId));
+    }
+
 }
 }

+ 84 - 0
mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

@@ -0,0 +1,84 @@
+package com.ym.mec.web.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.DemoGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDetailDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.VipGroupDao;
+import com.ym.mec.common.controller.BaseController;
+
+@Api(tags = "首页")
+@RequestMapping()
+@RestController
+public class IndexController extends BaseController {
+
+	@Autowired
+	private MusicGroupDao musicGroupDao;
+	
+	@Autowired
+	private TeacherDao teacherDao;
+	
+	@Autowired
+	private StudentRegistrationDao studentRegistrationDao;
+	
+	@Autowired
+	private VipGroupDao vipGroupDao;
+	
+	@Autowired
+	private DemoGroupDao demoGroupDao;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	
+	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
+
+	@ApiOperation(value = "获取首页数据")
+	@GetMapping("/index")
+	public Object index() {
+
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null || sysUser.getId() == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		Integer organId = sysUser.getOrganId();
+		if ("admin".equals(sysUser.getUsername())) {
+			organId = null;
+		}
+
+		Map<String, Integer> musicDatas = musicGroupDao.queryOrganMusicGroupNum(organId);
+		
+		Map<String, Integer> teacherDatas = teacherDao.queryOrganTeacherNum(organId);
+		
+		Map<String, Integer> studentDatas = studentRegistrationDao.queryStudentNum(organId);
+		
+		Map<String, Integer> vipDatas = vipGroupDao.queryVipGroupNum(organId);
+		
+		Map<String, Integer> demoDatas = demoGroupDao.queryDemoGroupNum(organId);
+		
+		Integer musicGroupNum = musicGroupDao.queryCurrentMonthCoursesNum(organId);
+		
+		Integer vipGroupNum = vipGroupDao.queryCurrentMonthCoursesNum(organId);
+		
+		Integer demoGroupNum = demoGroupDao.queryCurrentMonthCoursesNum(organId);
+		
+		Map<String, Object> incomeExpendMap = sysUserCashAccountDetailDao.queryStatistics();
+
+		return succeed();
+	}
+
+}

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

@@ -44,7 +44,7 @@ public class MusicGroupSubjectPlanController extends BaseController {
     }
     }
 
 
     @ApiOperation(value = "修改乐团声部规划费用")
     @ApiOperation(value = "修改乐团声部规划费用")
-    @GetMapping("/batchUpdateFee")
+    @PostMapping("/batchUpdateFee")
     @PreAuthorize("@pcs.hasPermissions('musicGroupSubjectPlan/batchUpdateFee')")
     @PreAuthorize("@pcs.hasPermissions('musicGroupSubjectPlan/batchUpdateFee')")
     public Object batchUpdateFee(@RequestBody List<MusicGroupSubjectPlan> musicGroupSubjectPlans) {
     public Object batchUpdateFee(@RequestBody List<MusicGroupSubjectPlan> musicGroupSubjectPlans) {
         return succeed(musicGroupSubjectPlanService.batchUpdateFee(musicGroupSubjectPlans));
         return succeed(musicGroupSubjectPlanService.batchUpdateFee(musicGroupSubjectPlans));