Browse Source

Merge branch 'online1' of http://git.dayaedu.com/yonge/mec into network_room

zouxuan 4 years ago
parent
commit
2296a2b85a
100 changed files with 2313 additions and 522 deletions
  1. 2 2
      cms/src/main/resources/bootstrap-test.properties
  2. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/AuthenticationFailureListener.java
  3. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  4. 7 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysUserDao.java
  5. 7 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/SysUserService.java
  6. 8 3
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysMenuServiceImpl.java
  7. 5 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java
  8. 5 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java
  9. 1 1
      mec-auth/mec-auth-server/src/main/resources/bootstrap-test.properties
  10. 1 2
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysMenuMapper.xml
  11. 4 0
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  12. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseHomeworkDao.java
  13. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  14. 50 9
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  15. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDetailDao.java
  16. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  17. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java
  18. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentManageDao.java
  19. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  20. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherRemindDao.java
  21. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassDateAdjustDto.java
  22. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkListDto.java
  23. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseMergeDto.java
  24. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java
  25. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExtraExerciseStudentsDto.java
  26. 11 7
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexBaseDto.java
  27. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentHomeworkRecordDto.java
  28. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServeCourseDto.java
  29. 110 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeDto.java
  30. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeExtraDto.java
  31. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeHomeworkDto.java
  32. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalender.java
  33. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseScheduleRecordDto.java
  34. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentExtracurricularExercisesSituation.java
  35. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentRegistration.java
  36. 104 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherRemind.java
  37. 75 37
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java
  38. 5 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java
  39. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  40. 37 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/TeacherRemindTypeEnum.java
  41. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/EndCourseScheduleQueryInfo.java
  42. 42 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherServeHomeworkQueryInfo.java
  43. 93 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherServeQueryInfo.java
  44. 59 1
      mec-biz/src/main/java/com/ym/mec/biz/event/listener/GroupEventListener.java
  45. 5 4
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  46. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ImUserFriendService.java
  47. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/IndexBaseMonthDataService.java
  48. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java
  49. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  50. 28 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java
  51. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherLeaveRecordService.java
  52. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherRemindService.java
  53. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherServeService.java
  54. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/UploadFileService.java
  55. 15 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  56. 84 53
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  57. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  58. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/GroupClassServiceImpl.java
  59. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java
  60. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java
  61. 156 178
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  62. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  63. 20 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  64. 38 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  65. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  66. 281 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  67. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  68. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  69. 11 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  70. 27 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  71. 9 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherLeaveRecordServiceImpl.java
  72. 24 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherRemindServiceImpl.java
  73. 10 0
      mec-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  74. 103 32
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  75. 3 1
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  76. 205 39
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  77. 1 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  78. 2 1
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  79. 15 2
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  80. 131 10
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  81. 17 6
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  82. 20 1
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  83. 4 4
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  84. 1 5
      mec-biz/src/main/resources/config/mybatis/SysExamSongMapper.xml
  85. 21 24
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreCategoriesMapper.xml
  86. 1 1
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  87. 103 0
      mec-biz/src/main/resources/config/mybatis/TeacherRemindMapper.xml
  88. 7 7
      mec-common/audit-log/pom.xml
  89. 0 4
      mec-common/common-core/src/main/java/com/ym/mec/common/page/PageInfo.java
  90. 2 2
      mec-eureka/src/main/resources/bootstrap-test.properties
  91. 1 1
      mec-gateway/mec-gateway-web/src/main/resources/bootstrap-test.properties
  92. 0 3
      mec-im/src/main/java/com/ym/controller/UserController.java
  93. 2 2
      mec-im/src/main/resources/bootstrap-test.properties
  94. 0 6
      mec-student/src/main/java/com/ym/mec/student/controller/StudentAttendanceController.java
  95. 0 3
      mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseHomeworkController.java
  96. 1 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  97. 2 2
      mec-task/src/main/resources/bootstrap-test.properties
  98. 0 2
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysExamSongController.java
  99. 9 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreAccompanimentController.java
  100. 3 4
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

+ 2 - 2
cms/src/main/resources/bootstrap-test.properties

@@ -1,9 +1,9 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.96.85.100:8848
+spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=02105743-16b8-46ab-87df-2aca0f3dbca3
+spring.cloud.nacos.config.namespace=f753d9d9-4bb2-4df6-a483-da9e169617c4
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/AuthenticationFailureListener.java

@@ -41,7 +41,7 @@ public class AuthenticationFailureListener implements ApplicationListener<Authen
         	if(username.startsWith(SecurityConstants.USERNAME_PRINCIPAL_PREFIX)){
                 sysUser = sysUserService.queryByUsername(username.split(":")[1]);
             }else {
-                sysUser = sysUserService.queryByPhone(username.split(":")[1]);
+                sysUser = sysUserService.queryLockByPhone(username.split(":")[1]);
             }
         }
         if(sysUser != null){

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java

@@ -82,7 +82,7 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 		if(username.startsWith(SecurityConstants.USERNAME_PRINCIPAL_PREFIX)){
 			sysUser = sysUserService.queryByUsername(username.split(":")[1]);
 		}else {
-			sysUser = sysUserService.queryByPhone(username.split(":")[1]);
+			sysUser = sysUserService.queryLockByPhone(username.split(":")[1]);
 		}
 		if(StringUtils.isEmpty(sysUser.getImToken())){
 			String name = sysUser.getRealName();

+ 7 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysUserDao.java

@@ -30,6 +30,13 @@ public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 	 * @param phone
 	 * @return
 	 */
+	SysUser queryLockByPhone(String phone);
+
+	/**
+	 * 根据手机号查询对象
+	 * @param phone
+	 * @return
+	 */
 	SysUser queryByPhoneAndClient(@Param("phone") String phone, @Param("client") String client);
 
 	/**

+ 7 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/SysUserService.java

@@ -26,6 +26,13 @@ public interface SysUserService extends BaseService<Integer, SysUser> {
 	 * @param phone
 	 * @return
 	 */
+	SysUser queryLockByPhone(String phone);
+
+	/**
+	 * 根据手机号查询对象
+	 * @param phone
+	 * @return
+	 */
 	SysUser queryByPhoneAndClient(String phone,String client);
 
 	/**

+ 8 - 3
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysMenuServiceImpl.java

@@ -50,11 +50,16 @@ public class SysMenuServiceImpl extends BaseServiceImpl<Integer, SysMenu>  imple
 
 	public List<SysMenu> findByUser(MenuQueryInfo menuQueryInfo) {
 		SysUser sysUser = sysUserDao.get(menuQueryInfo.getUserId());
+		List<SysMenu> sysMenus;
+		List<SysMenu> sysMenusAllList;
+
 		if(sysUser.getIsSuperAdmin()){
-			menuQueryInfo.setUserId(null);
+			sysMenus = sysMenuDao.findList(menuQueryInfo.getParentId(),menuQueryInfo.getDelFlag(),menuQueryInfo.getHid());
+			sysMenusAllList = sysMenuDao.findList(null,menuQueryInfo.getDelFlag(),menuQueryInfo.getHid());
+		}else {
+			sysMenus = sysMenuDao.findByParentId(menuQueryInfo.getParentId(),menuQueryInfo.getDelFlag(),menuQueryInfo.getUserId(),menuQueryInfo.getHid());
+			sysMenusAllList = sysMenuDao.findByParentId(null,menuQueryInfo.getDelFlag(),menuQueryInfo.getUserId(),menuQueryInfo.getHid());
 		}
-		List<SysMenu> sysMenus = sysMenuDao.findByParentId(menuQueryInfo.getParentId(),menuQueryInfo.getDelFlag(),menuQueryInfo.getUserId(),menuQueryInfo.getHid());
-		List<SysMenu> sysMenusAllList = sysMenuDao.findByParentId(null,menuQueryInfo.getDelFlag(),menuQueryInfo.getUserId(),menuQueryInfo.getHid());
 
 		for (SysMenu menu:sysMenus) {
 			menu = getTree1(menu,sysMenusAllList);

+ 5 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java

@@ -62,6 +62,10 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 	public SysUser queryByPhone(String phone) {
 		return sysUserDao.queryByPhone(phone);
 	}
+	@Override
+	public SysUser queryLockByPhone(String phone) {
+		return sysUserDao.queryLockByPhone(phone);
+	}
 
 	@Override
 	public SysUser queryByPhoneAndClient(String phone,String client) {
@@ -75,7 +79,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 
 	@Override
 	public SysUserInfo queryUserInfoByPhone(String phone) {
-		return getSysUserInfo(queryByPhone(phone));
+		return getSysUserInfo(queryLockByPhone(phone));
 	}
 
 	@Override

+ 5 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java

@@ -92,6 +92,11 @@ public class UserController extends BaseController {
 		return succeed(sysUserService.getBasic(userId));
 	}
 
+	@GetMapping(value = "/findByPhone")
+	public Object findByPhone(String mobile) {
+		return succeed(sysUserService.queryByPhone(mobile));
+	}
+
 	@GetMapping(value = "/queryUserByPhone")
 	public SysUser queryUserByPhone(String mobile) {
 		return sysUserService.queryByPhone(mobile);

+ 1 - 1
mec-auth/mec-auth-server/src/main/resources/bootstrap-test.properties

@@ -3,7 +3,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=02105743-16b8-46ab-87df-2aca0f3dbca3
+spring.cloud.nacos.config.namespace=f753d9d9-4bb2-4df6-a483-da9e169617c4
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 1 - 2
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysMenuMapper.xml

@@ -145,7 +145,6 @@
     </select>
     <sql id="queryTree">
         <where>
-                sm.parent_id_ IS NOT NULL
             <if test="userId != null">
                 AND sur.user_id_ = #{userId}
             </if>
@@ -183,6 +182,6 @@
                 AND hidden_ = #{hid}
             </if>
         </where>
-        ORDER BY sort_ DESC
+        ORDER BY sort_ DESC,id_ DESC
     </select>
 </mapper>

+ 4 - 0
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -189,6 +189,10 @@
 	</select>
 
     <select id="queryByPhone" resultMap="SysUser">
+		select * from sys_user where phone_ = #{phone} OR username_ = #{phone} LIMIT 1
+	</select>
+
+    <select id="queryLockByPhone" resultMap="SysUser">
 		select * from sys_user where phone_ = #{phone} OR username_ = #{phone} LIMIT 1 FOR UPDATE
 	</select>
     <resultMap id="ImUserModel" type="com.ym.mec.common.entity.ImUserModel">

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

@@ -42,6 +42,8 @@ public interface CourseHomeworkDao extends BaseDAO<Long, CourseHomework> {
 	 */
 	CourseHomework findByCourseSchedule(@Param("courseScheduleId") Long courseScheduleId);
 
+	List<CourseHomework> findByCourseSchedules(@Param("courseIds") List<Long> courseIds);
+
 	/**
 	 * 查询老师未回复作业的数量
 	 * @return

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

@@ -426,6 +426,10 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
                                      @Param("classGroupIds") List<Integer> classGroupIds,
                                      @Param("type") String type);
 
+    List<Date> getCourseScheduleDateWithOrgan(@Param("organIds") List<Integer> organIds,
+                                              @Param("month") Date month,
+                                              @Param("type") String type);
+
     /**
      * @Author: Joburgess
      * @Date: 2019/9/23
@@ -531,7 +535,7 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @params [vipGroupId]
      * @describe 获取vip课排课计划
      */
-    List<CourseSchedule> findGroupCourseSchedules(@Param("groupId") Long groupId, @Param("groupType") String groupType);
+    List<CourseSchedule> findGroupCourseSchedules(@Param("groupId") String groupId, @Param("groupType") String groupType);
 
     /**
      * @param groupId:   乐团编号
@@ -1787,4 +1791,7 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return
      */
     List<Integer> findHasCourseStudent(@Param("userIds") List<Integer> userIds, @Param("groupType") String groupType);
+
+    List<CourseSchedule> queryByCourseScheduleIds(Map<String, Object> params);
+    int countByCourseScheduleIds(Map<String, Object> params);
 }

+ 50 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -1,10 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.IndexDataType;
-import com.ym.mec.biz.dal.enums.JobNatureEnum;
-import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.poi.ss.formula.functions.Index;
@@ -24,6 +21,10 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     int deleteWithMonthAndType(@Param("months") Collection months,
                                @Param("dataType")IndexDataType dataType);
 
+    IndexBaseMonthData getOrganDataWithDayAndDataType(@Param("organId") Integer organId,
+                                                      @Param("day") String day,
+                                                      @Param("dataType")IndexDataType dataType);
+
     /**
      * @describe 获取首页统计数据
      * @author Joburgess
@@ -39,6 +40,36 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
                                               @Param("startMonth") String startMonth,
                                               @Param("endMonth") String endMonth);
 
+	List<IndexBaseMonthData> getWithDayAndDataType(@Param("day") String day,
+                                                   @Param("dataType")IndexDataType dataType);
+
+	/**
+	 * @describe 统计学员注册数据
+	 * @author Joburgess
+	 * @date 2021/2/24 0024
+	 * @param dayStr:
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.IndexBaseMonthData>
+	 */
+	List<IndexBaseMonthData> getStudentRegistrationData(@Param("dayStr") String dayStr);
+
+	/**
+	 * @describe 统计新增学员注册数据
+	 * @author Joburgess
+	 * @date 2021/2/24 0024
+	 * @param dayStr:
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.IndexBaseMonthData>
+	 */
+	List<IndexBaseMonthData> getAddStudentRegistrationData(@Param("dayStr") String dayStr);
+
+	/**
+	 * @describe 付费转化率
+	 * @author Joburgess
+	 * @date 2021/2/24 0024
+	 * @param dayStr:
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.IndexBaseMonthData>
+	 */
+	List<IndexBaseMonthData> getChargeStudentChangeData(@Param("dayStr") String dayStr);
+
     /**
      * @describe 统计系统中指定时间段的学员注册数据
      * @author Joburgess
@@ -94,13 +125,23 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
 
     List<IndexBaseMonthData> getOtherStudentData(@Param("dayStr") String dayStr);
 
+    List<IndexBaseMonthData> getVipPracticeAddStudentData(@Param("dayStr") String dayStr);
+
     List<IndexBaseMonthData> getTeacherData(@Param("dayStr") String dayStr,
                                             @Param("jobNature") JobNatureEnum jobNature,
                                             @Param("isDemission") Boolean isDemission);
 
     List<IndexBaseMonthData> getGroupCourseData(@Param("dayStr") String dayStr,
-                                                @Param("groupType")GroupType groupType);
+                                                @Param("groupType")GroupType groupType,
+                                                @Param("courseStatus") CourseStatusEnum courseStatus);
+
+    List<IndexBaseMonthData> getGroupSurplusCourseData(@Param("dayStr") String dayStr,
+                                                @Param("groupType")GroupType groupType,
+                                                @Param("courseStatus") CourseStatusEnum courseStatus);
 
+    List<IndexBaseMonthData> getGroupCourseDataWithGroup(@Param("dayStr") String dayStr,
+                                                @Param("groupType")GroupType groupType,
+                                                @Param("courseStatus") CourseStatusEnum courseStatus);
 
     int countLessThenThreeClassGroupNum(@Param("organIds") Set<Integer> organIds);
     List<String> getLessThenThreeMusicGroup(@Param("organIds") Set<Integer> organIds);
@@ -121,14 +162,14 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
      * @param organIds
      * @return
      */
-    int getAttendanceError(@Param("organIds") String organIds,@Param("startTime") String startTime);
+    int getAttendanceError(@Param("organIds") Set<Integer> organIds,@Param("startTime") String startTime);
 
     /**
      * 获取旷课考勤
      * @param organIds
      * @return
      */
-    int getNoAttendance(@Param("organIds") String organIds, @Param("startTime") String startTime);
+    int getNoAttendance(@Param("organIds") Set<Integer> organIds, @Param("startTime") String startTime);
 
     /**
      * 获取老师离职申请数
@@ -150,7 +191,7 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
      * @param organIdsStr
      * @return
      */
-    int queryInspectionItem(@Param("organIdsStr") String organIdsStr, @Param("startTime") String startTime);
+    int queryInspectionItem(@Param("organIdsStr") String organIdsStr, @Param("startTime") String startTime, @Param("userId") Integer userId);
 
     /**
      * 乐团巡查任务未提交
@@ -164,7 +205,7 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
      * @param organIdsStr
      * @return
      */
-    int queryStudentVisit(@Param("organIdsStr") String organIdsStr, @Param("startTime") String startTime);
+    int queryStudentVisit(@Param("organIdsStr") String organIdsStr, @Param("startTime") String startTime, @Param("userId") Integer userId);
 
     List<IndexBaseMonthData> getFinancePayData(@Param("dayStr") String dayStr);
 

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

@@ -266,10 +266,10 @@ public interface MusicGroupPaymentCalenderDetailDao extends BaseDAO<Long, MusicG
 	List<MusicGroup> getNoPaymentStudentMusicGroups(@Param("organIds") Set<Integer> organIds);
 
 	/**
-	 *
+	 * 获取可以缴费,并且未缴费,不是0元的学员
 	 * @param calenderId
 	 * @param studentIds
 	 * @return
 	 */
-    List<MusicGroupPaymentCalenderDetail> queryNoPaymentCanPushByCalenderId(@Param("calenderId") Long calenderId, @Param("studentIds") String studentIds);
+	List<MusicGroupPaymentCalenderDetail> queryNoPaymentCanPushByCalenderId(@Param("calenderId") Long calenderId, @Param("studentIds") String studentIds);
 }

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

@@ -70,7 +70,7 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      * @param groupType
      * @return
      */
-    List<Map<Integer, Integer>> getBuyNums(@Param("teacherIds") String teacherIds, @Param("groupType") GroupType groupType);
+    List<Map<Integer, Integer>> getBuyNums(@Param("teacherId") String teacherId, @Param("groupType") GroupType groupType);
 
     /**
      * 根据同事存在vip和网管的转化
@@ -185,4 +185,7 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      * @return java.util.List<com.ym.mec.biz.dal.entity.Subject>
      */
     List<Subject> getStudentSubjects(@Param("studentIds") Set<Integer> studentIds);
+
+    List<Student> queryByIds(Map<String, Object> params);
+    int countByIds(Map<String, Object> params);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
 import com.ym.mec.biz.dal.dto.TeacherExercisesServiceDto;
+import com.ym.mec.biz.dal.dto.TeacherServeDto;
+import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
@@ -113,4 +115,12 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
     List<StudentExtracurricularExercisesSituation> findServiceWithCourse(@Param("monday") String monday,
                                                                          @Param("courseId") Long courseId);
 
+    List<TeacherServeDto> queryTeacherServeInfo(Map<String, Object> params);
+    int countTeacherServeInfo(Map<String, Object> params);
+
+    List<StudentExtracurricularExercisesSituation> findTeacherServeWithDate(@Param("monday") String monday,
+                                                                            @Param("sunday") String sunday,
+                                                                            @Param("teacherIds") List<Integer> teacherIds,
+                                                                            @Param("serveType") String serveType);
+
 }

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

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import com.ym.mec.biz.dal.entity.Subject;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.auth.api.entity.SysUser;
@@ -307,4 +308,12 @@ public interface StudentManageDao {
      * @return
      */
     int countPracticeGroupStudents(Map<String, Object> params);
+
+    /**
+     * 获取学生的声部
+     * @param userIds
+     * @return
+     */
+    List<Subject> getStudentSubject(@Param("userIds") Set<Integer> userIds);
+
 }

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

@@ -156,7 +156,7 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @param studentRegistrationList
      * @return
      */
-    int batchInsert(@Param("studentRegistrationList") List<StudentRegistration> studentRegistrationList);
+    int batchInsert(@Param("list") List<StudentRegistration> studentRegistrationList);
 
 
     /**

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherRemindDao.java

@@ -0,0 +1,19 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.TeacherRemind;
+import com.ym.mec.biz.dal.enums.TeacherRemindTypeEnum;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface TeacherRemindDao extends BaseDAO<Long, TeacherRemind> {
+
+    int batchInsert(@Param("reminds") List<TeacherRemind> reminds);
+
+    List<TeacherRemind> findTeachersRemindWithType(@Param("remindType")TeacherRemindTypeEnum teacherRemindType,
+                                                   @Param("teacherIds") List<Integer> teacherIds,
+                                                   @Param("startDate") String startDate,
+                                                   @Param("endDate") String endDate);
+	
+}

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

@@ -20,6 +20,17 @@ public class ClassDateAdjustDto extends CourseSchedule {
     @ApiModelProperty(value = "星期几",required = false)
     private Integer weekNum;
 
+    @ApiModelProperty(value = "是否允许0课酬")
+    private Boolean allowZeroSalary = false;
+
+    public Boolean getAllowZeroSalary() {
+        return allowZeroSalary;
+    }
+
+    public void setAllowZeroSalary(Boolean allowZeroSalary) {
+        this.allowZeroSalary = allowZeroSalary;
+    }
+
     public Integer getWeekNum() {
         return weekNum;
     }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkListDto.java

@@ -61,6 +61,28 @@ public class CourseHomeworkListDto {
     @ApiModelProperty(value = "是否已经回复",required = false)
     private YesOrNoEnum isReplied;
 
+    @ApiModelProperty(value = "实际上课老师",required = false)
+    private String teacherName;
+
+    @ApiModelProperty(value = "实际上课老师头像",required = false)
+    private String headUrl;
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getHeadUrl() {
+        return headUrl;
+    }
+
+    public void setHeadUrl(String headUrl) {
+        this.headUrl = headUrl;
+    }
+
     public Long getId() {
         return id;
     }

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

@@ -17,6 +17,17 @@ public class CourseMergeDto extends CourseSchedule {
     @ApiModelProperty(value = "操作人编号")
     private Integer operatorId;
 
+    @ApiModelProperty(value = "是否允许0课酬")
+    private Boolean allowZeroSalary = false;
+
+    public Boolean getAllowZeroSalary() {
+        return allowZeroSalary;
+    }
+
+    public void setAllowZeroSalary(Boolean allowZeroSalary) {
+        this.allowZeroSalary = allowZeroSalary;
+    }
+
     public List<Long> getMergeCourseIds() {
         return mergeCourseIds;
     }

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

@@ -17,6 +17,9 @@ public class CourseScheduleDto extends CourseSchedule {
     @ApiModelProperty(value = "教师名称",required = false)
     private String teacherName;
 
+    @ApiModelProperty(value = "教师头像",required = false)
+    private String headUrl;
+
     /** 班级名称 */
     @ApiModelProperty(value = "班级名称",required = false)
     private String classGroupName;
@@ -90,6 +93,14 @@ public class CourseScheduleDto extends CourseSchedule {
 
     private PracticeGroupType practiceType;
 
+    public String getHeadUrl() {
+        return headUrl;
+    }
+
+    public void setHeadUrl(String headUrl) {
+        this.headUrl = headUrl;
+    }
+
     public PracticeGroupType getPracticeType() {
         return practiceType;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExtraExerciseStudentsDto.java

@@ -17,6 +17,8 @@ public class ExtraExerciseStudentsDto extends ExtracurricularExercisesReply {
 
     private String teacherName;
 
+    private String headUrl;
+
     private String title;
 
     private String content;
@@ -33,6 +35,14 @@ public class ExtraExerciseStudentsDto extends ExtracurricularExercisesReply {
 
     private String existVipCourseStr;
 
+    public String getHeadUrl() {
+        return headUrl;
+    }
+
+    public void setHeadUrl(String headUrl) {
+        this.headUrl = headUrl;
+    }
+
     public String getIsRepliedTimelyStr() {
         return isRepliedTimelyStr;
     }

+ 11 - 7
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexBaseDto.java

@@ -74,16 +74,20 @@ public class IndexBaseDto {
     public void setIndexMonthData(List<IndexBaseMonthData> indexMonthData, Date currentMonth) {
         this.indexMonthData = indexMonthData;
         if(!CollectionUtils.isEmpty(indexMonthData)){
-            BigDecimal total = indexMonthData.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add);
-            if(IndexDataType.ACTIVATION_RATE.equals(dataType)){
-                if(total.compareTo(BigDecimal.ZERO)==0){
-                    this.percent = BigDecimal.ZERO;
+            if(dataType.getCollect()){
+                BigDecimal total = indexMonthData.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add);
+                if(dataType.getPercent()){
+                    if(total.compareTo(BigDecimal.ZERO)==0){
+                        this.percent = BigDecimal.ZERO;
+                    }else{
+                        BigDecimal activateNum = indexMonthData.stream().map(IndexBaseMonthData::getActivateNum).reduce(BigDecimal.ZERO, BigDecimal::add);
+                        this.percent = activateNum.divide(total, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
+                    }
                 }else{
-                    BigDecimal activateNum = indexMonthData.stream().map(IndexBaseMonthData::getActivateNum).reduce(BigDecimal.ZERO, BigDecimal::add);
-                    this.percent = activateNum.divide(total, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
+                    this.percent = total;
                 }
             }else{
-                this.percent = indexMonthData.stream().filter(i->currentMonth.compareTo(i.getMonth())==0).max(Comparator.comparing(IndexBaseMonthData::getMonth)).get().getPercent();
+                this.percent = indexMonthData.stream().filter(i->currentMonth.compareTo(i.getMonth())>=0).max(Comparator.comparing(IndexBaseMonthData::getMonth)).get().getPercent();
             }
         }
     }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentHomeworkRecordDto.java

@@ -20,8 +20,28 @@ public class StudentHomeworkRecordDto {
 
     private String teacherName;
 
+    private String headUrl;
+
     private int status;
 
+    private String expiryDate;
+
+    public String getHeadUrl() {
+        return headUrl;
+    }
+
+    public void setHeadUrl(String headUrl) {
+        this.headUrl = headUrl;
+    }
+
+    public String getExpiryDate() {
+        return expiryDate;
+    }
+
+    public void setExpiryDate(String expiryDate) {
+        this.expiryDate = expiryDate;
+    }
+
     public Integer getStudentCourseHomeworkId() {
         return studentCourseHomeworkId;
     }

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

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 
@@ -24,6 +25,8 @@ public class StudentServeCourseDto {
 
     private Long classGroupId;
 
+    private CourseStatusEnum status;
+
     private CourseSchedule.CourseScheduleType type;
 
     private Integer actualTeacherId;
@@ -82,6 +85,14 @@ public class StudentServeCourseDto {
         this.courseScheduleId = courseScheduleId;
     }
 
+    public CourseStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(CourseStatusEnum status) {
+        this.status = status;
+    }
+
     public GroupType getGroupType() {
         return groupType;
     }

+ 110 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeDto.java

@@ -0,0 +1,110 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/3/9 0009
+ */
+public class TeacherServeDto {
+
+    private Date monday;
+
+    private Date sunday;
+
+    private Integer teacherId;
+
+    private String teacherName;
+
+    private String organName;
+
+    private int homeworkNum;
+
+    private int exerciseNum;
+
+    private int unDone;
+
+    private Date remindDate;
+
+    private String operatorName;
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public int getHomeworkNum() {
+        return homeworkNum;
+    }
+
+    public void setHomeworkNum(int homeworkNum) {
+        this.homeworkNum = homeworkNum;
+    }
+
+    public int getExerciseNum() {
+        return exerciseNum;
+    }
+
+    public void setExerciseNum(int exerciseNum) {
+        this.exerciseNum = exerciseNum;
+    }
+
+    public int getUnDone() {
+        return unDone;
+    }
+
+    public void setUnDone(int unDone) {
+        this.unDone = unDone;
+    }
+
+    public Date getRemindDate() {
+        return remindDate;
+    }
+
+    public void setRemindDate(Date remindDate) {
+        this.remindDate = remindDate;
+    }
+
+    public String getOperatorName() {
+        return operatorName;
+    }
+
+    public void setOperatorName(String operatorName) {
+        this.operatorName = operatorName;
+    }
+
+    public Date getMonday() {
+        return monday;
+    }
+
+    public void setMonday(Date monday) {
+        this.monday = monday;
+    }
+
+    public Date getSunday() {
+        return sunday;
+    }
+
+    public void setSunday(Date sunday) {
+        this.sunday = sunday;
+    }
+}

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeExtraDto.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.Student;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/3/10 0010
+ */
+public class TeacherServeExtraDto extends Student {
+
+    private int homeworkExist;
+
+    public int getHomeworkExist() {
+        return homeworkExist;
+    }
+
+    public void setHomeworkExist(int homeworkExist) {
+        this.homeworkExist = homeworkExist;
+    }
+}

+ 30 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeHomeworkDto.java

@@ -0,0 +1,30 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/3/10 0010
+ */
+public class TeacherServeHomeworkDto extends CourseSchedule {
+
+    private String subjectName;
+
+    private int homeworkExist;
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public int getHomeworkExist() {
+        return homeworkExist;
+    }
+
+    public void setHomeworkExist(int homeworkExist) {
+        this.homeworkExist = homeworkExist;
+    }
+}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalender.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
@@ -24,6 +25,14 @@ public class MusicGroupPaymentCalender {
 		this.chargeTypeId = chargeTypeId;
 	}
 
+	public CourseViewTypeEnum getCourseViewType() {
+		return courseViewType;
+	}
+
+	public void setCourseViewType(CourseViewTypeEnum courseViewType) {
+		this.courseViewType = courseViewType;
+	}
+
 	public enum PaymentCalenderStatusEnum implements BaseEnum<String, PaymentCalenderStatusEnum> {
 		AUDITING("审核中"), REJECT("拒绝"), NO("未开启缴费"), OPEN("开启缴费"), OVER("缴费已结束"), PAID("已缴费");
 
@@ -151,6 +160,9 @@ public class MusicGroupPaymentCalender {
 	@ApiModelProperty(value = "chargeTypeId", required = false)
 	private Integer chargeTypeId;
 
+	@ApiModelProperty(value = "课程展现形式",required = false)
+	private CourseViewTypeEnum courseViewType;
+
 	public String getAuditMemo() {
 		return auditMemo;
 	}

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

@@ -49,12 +49,23 @@ public class StudentCourseScheduleRecordDto {
     @ApiModelProperty(value = "教师名称",required = false)
     private String teacherName;
 
+    @ApiModelProperty(value = "教师头像",required = false)
+    private String headUrl;
+
     @ApiModelProperty(value = "剩余课次",required = false)
     private Integer restOfClass;
 
     @ApiModelProperty(value = "教学形式")
     private TeachModeEnum teachMode;
 
+    public String getHeadUrl() {
+        return headUrl;
+    }
+
+    public void setHeadUrl(String headUrl) {
+        this.headUrl = headUrl;
+    }
+
     public Integer getClassGroupId() {
         return classGroupId;
     }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentExtracurricularExercisesSituation.java

@@ -55,6 +55,10 @@ public class StudentExtracurricularExercisesSituation {
 
 	private String courseIds;
 
+	private String notOverCourseIds;
+
+	private Integer notOverCourseNum = 0;
+
 	public StudentExtracurricularExercisesSituation() {
 	}
 
@@ -205,6 +209,22 @@ public class StudentExtracurricularExercisesSituation {
 		return StringUtils.join(this.studentId, this.teacherId);
 	}
 
+	public String getNotOverCourseIds() {
+		return notOverCourseIds;
+	}
+
+	public void setNotOverCourseIds(String notOverCourseIds) {
+		this.notOverCourseIds = notOverCourseIds;
+	}
+
+	public Integer getNotOverCourseNum() {
+		return notOverCourseNum;
+	}
+
+	public void setNotOverCourseNum(Integer notOverCourseNum) {
+		this.notOverCourseNum = notOverCourseNum;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

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

@@ -121,6 +121,9 @@ public class StudentRegistration {
     
     private Integer chargeTypeId;
 
+    @ApiModelProperty(value = "是否是合并的学员 0-否 1-是",required = true)
+    private Integer isMerge = 0;
+
     public String getCertificateType() {
         return certificateType;
     }
@@ -423,4 +426,12 @@ public class StudentRegistration {
     public void setCurrentGradeDate(Date currentGradeDate) {
         this.currentGradeDate = currentGradeDate;
     }
+
+    public Integer getIsMerge() {
+        return isMerge;
+    }
+
+    public void setIsMerge(Integer isMerge) {
+        this.isMerge = isMerge;
+    }
 }

+ 104 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherRemind.java

@@ -0,0 +1,104 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.biz.dal.enums.TeacherRemindTypeEnum;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(teacher_remind):
+ */
+public class TeacherRemind {
+
+	/**  */
+	private Long id;
+	
+	/** 操作人 */
+	private Integer operatorId;
+
+	private String operatorName;
+	
+	/** 教师编号 */
+	private Integer teacherId;
+
+	private Date monday;
+	
+	/** 内容 */
+	private String content;
+	
+	/** 类型 */
+	private TeacherRemindTypeEnum type;
+	
+	/** 创建时间 */
+	private java.util.Date createTime;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setOperatorId(Integer operatorId){
+		this.operatorId = operatorId;
+	}
+	
+	public Integer getOperatorId(){
+		return this.operatorId;
+	}
+
+	public String getOperatorName() {
+		return operatorName;
+	}
+
+	public void setOperatorName(String operatorName) {
+		this.operatorName = operatorName;
+	}
+
+	public void setTeacherId(Integer teacherId){
+		this.teacherId = teacherId;
+	}
+	
+	public Integer getTeacherId(){
+		return this.teacherId;
+	}
+
+	public Date getMonday() {
+		return monday;
+	}
+
+	public void setMonday(Date monday) {
+		this.monday = monday;
+	}
+
+	public void setContent(String content){
+		this.content = content;
+	}
+	
+	public String getContent(){
+		return this.content;
+	}
+
+	public TeacherRemindTypeEnum getType() {
+		return type;
+	}
+
+	public void setType(TeacherRemindTypeEnum type) {
+		this.type = type;
+	}
+
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 75 - 37
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.enums;
 
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import com.ym.mec.common.enums.BaseEnum;
 
 /**
@@ -7,50 +8,71 @@ import com.ym.mec.common.enums.BaseEnum;
  * @Date 2021/1/8 0008
  **/
 public enum IndexDataType implements BaseEnum<String, IndexDataType> {
-    SCHOOL("SCHOOL","合作单位"),
-    MUSIC_GROUP_NUM("MUSIC_GROUP_NUM","乐团数量"),
-    MUSIC_GROUP_STUDENT("MUSIC_GROUP_STUDENT","乐团学员"),
-    OTHER_STUDENT("OTHER_STUDENT","其他学员"),
-
-    ACTIVATION_RATE("ACTIVATION_RATE","激活率"),
-    HOMEWORK_CREATE_RATE("HOMEWORK_CREATE_RATE","作业布置率"),
-    HOMEWORK_SUBMIT_RATE("HOMEWORK_SUBMIT_RATE","作业提交率"),
-    HOMEWORK_COMMENT_RATE("HOMEWORK_COMMENT_RATE","作业点评率"),
-
-    SHOULD_INCOME_MONEY("SHOULD_INCOME_MONEY","应收金额"),
-    ANTICIPATED_INCOME_MONEY("ANTICIPATED_INCOME_MONEY","预收金额"),
-    SHOULD_EXPEND_MONEY("SHOULD_EXPEND_MONEY","预付金额"),
-    ANTICIPATED_EXPEND_MONEY("ANTICIPATED_EXPEND_MONEY","应付金额"),
-    REVENUE_MONEY("REVENUE_MONEY","营收金额"),
-
-    TEACHER_NUM("TEACHER_NUM","老师总数"),
-    FULL_TIME_NUM("FULL_TIME_NUM","全职人数"),
-    PART_TIME_NUM("PART_TIME_NUM","兼职人数"),
-    DIMISSION_NUM("DIMISSION_NUM","离职人数"),
-
-    NEWLY_STUDENT_NUM("NEWLY_STUDENT_NUM","乐团新增学员"),
-    QUIT_MUSIC_GROUP_STUDENT_NUM("QUIT_MUSIC_GROUP_STUDENT_NUM","退团学员"),
-    STUDENT_CONVERSION("STUDENT_CONVERSION","学员转化"),
-    STUDENT_CONVERSION_PRE_STUDENT_NUM("STUDENT_CONVERSION_PRE_STUDENT_NUM","预报名人数"),
-    STUDENT_CONVERSION_STUDENT_NUM("STUDENT_CONVERSION_STUDENT_NUM","报名人数"),
-    STUDENT_CONVERSION_PAYMENT_STUDENT_NUM("STUDENT_CONVERSION_PAYMENT_STUDENT_NUM","报名缴费"),
-    STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM("STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM","VIP/网管课购买"),
-
-    MUSIC_GROUP_COURSE("MUSIC_GROUP_COURSE","乐团课"),
-    VIP_GROUP_COURSE("VIP_GROUP_COURSE","VIP课"),
-    PRACTICE_GROUP_COURSE("PRACTICE_GROUP_COURSE","网管课"),
-
-    FINANCE_PAY("FINANCE_PAY","财务支出"),
-    FINANCE_BALANCE_AMOUNT("FINANCE_BALANCE_AMOUNT","余额收入"),
-    FINANCE_AMOUNT("FINANCE_AMOUNT","现金收入");
+    //学员数据类型
+    STUDENT_REGISTRATION_NUM("STUDENT_REGISTRATION_NUM", "注册学员", false, false),
+    CHARGE_STUDENT_CHANGE_RATE("CHARGE_STUDENT_CHANGE_RATE", "付费转化率", true, false),
+    ACTIVATION_RATE("ACTIVATION_RATE","激活率", true, false),
+
+    //运营数据类型
+    SCHOOL("SCHOOL","合作单位", false, false),
+    PROGRESS_MUSIC_GROUP_NUM("PROGRESS_MUSIC_GROUP_NUM","进行中乐团", false, false),
+
+    //人事数据
+    TEACHER_NUM("TEACHER_NUM","老师总数", false, false),
+    FULL_TIME_NUM("FULL_TIME_NUM","全职人数", false, false),
+    PART_TIME_NUM("PART_TIME_NUM","兼职人数", false, false),
+
+    DIMISSION_NUM("DIMISSION_NUM","离职人数", false, false),
+
+    //剩余课时
+    SURPLUS_COURSE_NUM("SURPLUS_COURSE_NUM", "剩余课时总数", false, false),
+    SURPLUS_MUSIC_COURSE_NUM("SURPLUS_MUSIC_COURSE_NUM", "剩余乐团课时", false, false),
+    SURPLUS_VIP_COURSE_NUM("SURPLUS_VIP_COURSE_NUM", "剩余VIP课时", false, false),
+    SURPLUS_PRACTICE_COURSE_NUM("SURPLUS_PRACTICE_COURSE_NUM", "剩余网管课时", false, false),
+
+    //已消耗课时
+    OVER_COURSE_NUM("OVER_COURSE_NUM", "已消耗课时总数", false, false),
+    OVER_MUSIC_COURSE_NUM("OVER_MUSIC_COURSE_NUM", "已消耗乐团课时", false, false),
+    OVER_VIP_COURSE_NUM("OVER_VIP_COURSE_NUM", "已消耗VIP课时", false, false),
+    OVER_PRACTICE_COURSE_NUM("OVER_PRACTICE_COURSE_NUM", "已消耗网管课时", false, false),
+
+    //经营数据
+    FINANCE_PAY("FINANCE_PAY","财务支出", false, false),
+    FINANCE_BALANCE_AMOUNT("FINANCE_BALANCE_AMOUNT","余额收入", false, false),
+    FINANCE_AMOUNT("FINANCE_AMOUNT","现金收入", false, false),
+
+    //业务数据
+    HOMEWORK_CREATE_RATE("HOMEWORK_CREATE_RATE","作业布置率", true, true),
+    HOMEWORK_SUBMIT_RATE("HOMEWORK_SUBMIT_RATE","作业提交率", true, true),
+    HOMEWORK_COMMENT_RATE("HOMEWORK_COMMENT_RATE","作业点评率", true, true),
+
+    //课程数据
+    MUSIC_GROUP_COURSE("MUSIC_GROUP_COURSE","乐团课", false, true),
+    VIP_GROUP_COURSE("VIP_GROUP_COURSE","VIP课", false, true),
+    PRACTICE_GROUP_COURSE("PRACTICE_GROUP_COURSE","网管课", false, true),
+
+    //学员变动
+    ADD_STUDENT_REGISTRATION_NUM("ADD_STUDENT_REGISTRATION_NUM", "新增注册学员", false, true),
+    MUSIC_GROUP_STUDENT("MUSIC_GROUP_STUDENT","乐团在读学员", false, false),
+    NEWLY_STUDENT_NUM("NEWLY_STUDENT_NUM","乐团新增学员", false, true),
+    QUIT_MUSIC_GROUP_STUDENT_NUM("QUIT_MUSIC_GROUP_STUDENT_NUM","退团学员", false, true),
+    VIP_PRACTICE_STUDENT_NUM("VIP_PRACTICE_STUDENT_NUM", "VIP/网管在读", false, false),
+    VIP_PRACTICE_ADD_STUDENT_NUM("VIP_PRACTICE_ADD_STUDENT_NUM", "VIP/网管新增", false, true),
+    ;
 
     private String code;
 
     private String msg;
 
-    IndexDataType(String code, String msg) {
+    private Boolean percent;
+
+    private Boolean collect;
+
+    IndexDataType(String code, String msg, Boolean percent, Boolean collect) {
         this.code = code;
         this.msg = msg;
+        this.percent = percent;
+        this.collect = collect;
     }
 
     @Override
@@ -69,4 +91,20 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     public void setMsg(String msg) {
         this.msg = msg;
     }
+
+    public Boolean getCollect() {
+        return collect;
+    }
+
+    public void setCollect(Boolean collect) {
+        this.collect = collect;
+    }
+
+    public Boolean getPercent() {
+        return percent;
+    }
+
+    public void setPercent(Boolean percent) {
+        this.percent = percent;
+    }
 }

+ 5 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java

@@ -20,13 +20,16 @@ public enum IndexErrorType implements BaseEnum<String, IndexErrorType> {
     COURSE_LEAVE_STUDENT_NUM("COURSE_LEAVE_STUDENT_NUM", "学员请假"),
 
     TEACHER_INFO("TEACHER_INFO", "日常行政"),
-    TEACHER_EXCEPTION_ATTENDANCE("TEACHER_EXCEPTION_ATTENDANCE", "课程考勤异常"),
-    TEACHER_NOT_A_CLASS("TEACHER_NOT_A_CLASS", "课程异常"),
     TEACHER_LEAVE("TEACHER_LEAVE", "老师请假"),
     TEACHER_EXPECT_SALARY_BE_LOW("TEACHER_EXPECT_SALARY_BE_LOW", "预计课酬较低"),
     INSPECTION_ITEM("INSPECTION_ITEM", "乐团巡查任务未计划"),
     INSPECTION_ITEM_PLAN("INSPECTION_ITEM_PLAN", "乐团巡查任务未提交"),
     STUDENT_VISIT("STUDENT_VISIT", "回访任务未完成"),
+
+    ATTENDANCE_SERVE("ATTENDANCE_SERVE", "考勤及服务"),
+    TEACHER_EXCEPTION_ATTENDANCE("TEACHER_EXCEPTION_ATTENDANCE", "课程考勤异常"),
+    TEACHER_NOT_A_CLASS("TEACHER_NOT_A_CLASS", "课程异常"),
+    TEACHER_SERVE_ERROR("TEACHER_SERVE_ERROR", "服务指标异常"),
     ;
 
     private String code;

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

@@ -164,7 +164,8 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_GOODS_REPERTORY_WARN("SMS_GOODS_REPERTORY_WARN","商品库存预警"),
     SMS_REPAIR_SEND_COMPLETED("SMS_REPAIR_SEND_COMPLETED","乐器维修完成邮寄"),
     SMS_MUSIC_GROUP_PARENT_MEETING_NOTICE("SMS_MUSIC_GROUP_PARENT_MEETING_NOTICE","乐团家长会通知"),
-    SMS_INSPECTION_NOTICE("SMS_INSPECTION_NOTICE","巡查日程提醒");
+    SMS_INSPECTION_NOTICE("SMS_INSPECTION_NOTICE","巡查日程提醒"),
+    TEACHER_SERVE_PUSH("TEACHER_SERVE_PUSH", "服务指标未完成提醒");
 
 
 

+ 37 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/TeacherRemindTypeEnum.java

@@ -0,0 +1,37 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/3/9 0009
+ **/
+public enum TeacherRemindTypeEnum implements BaseEnum<String, TeachTypeEnum> {
+    SERVICE("SERVICE", "服务提醒");
+
+    private String code;
+
+    private String msg;
+
+    TeacherRemindTypeEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

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

@@ -78,6 +78,17 @@ public class EndCourseScheduleQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "ERR_ATTENDANCE 考勤异常,NO_ATTENDANCE 课程异常")
     private String searchType;
 
+    @ApiModelProperty(value = "课程编号搜索")
+    private Long courseIdSearch;
+
+    public Long getCourseIdSearch() {
+        return courseIdSearch;
+    }
+
+    public void setCourseIdSearch(Long courseIdSearch) {
+        this.courseIdSearch = courseIdSearch;
+    }
+
     public String getSearchType() {
         return searchType;
     }

+ 42 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherServeHomeworkQueryInfo.java

@@ -0,0 +1,42 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/3/10 0010
+ */
+public class TeacherServeHomeworkQueryInfo extends QueryInfo {
+
+    private Date monday;
+
+    private Date sunday;
+
+    private Integer teacherId;
+
+    public Date getMonday() {
+        return monday;
+    }
+
+    public void setMonday(Date monday) {
+        this.monday = monday;
+    }
+
+    public Date getSunday() {
+        return sunday;
+    }
+
+    public void setSunday(Date sunday) {
+        this.sunday = sunday;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+}

+ 93 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherServeQueryInfo.java

@@ -0,0 +1,93 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/3/9 0009
+ */
+public class TeacherServeQueryInfo extends QueryInfo {
+
+    private String organId;
+
+    private List<Integer> organIds;
+
+    private Integer teacherId;
+
+    private Integer unDone;
+
+    private Integer reminded;
+
+    private Integer operatorId;
+
+    private String monday;
+
+    private String sunday;
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
+    public List<Integer> getOrganIds() {
+        return organIds;
+    }
+
+    public void setOrganIds(List<Integer> organIds) {
+        this.organIds = organIds;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Integer getUnDone() {
+        return unDone;
+    }
+
+    public void setUnDone(Integer unDone) {
+        this.unDone = unDone;
+    }
+
+    public Integer getReminded() {
+        return reminded;
+    }
+
+    public void setReminded(Integer reminded) {
+        this.reminded = reminded;
+    }
+
+    public Integer getOperatorId() {
+        return operatorId;
+    }
+
+    public void setOperatorId(Integer operatorId) {
+        this.operatorId = operatorId;
+    }
+
+    public String getMonday() {
+        return monday;
+    }
+
+    public void setMonday(String monday) {
+        this.monday = monday;
+    }
+
+    public String getSunday() {
+        return sunday;
+    }
+
+    public void setSunday(String sunday) {
+        this.sunday = sunday;
+    }
+}

+ 59 - 1
mec-biz/src/main/java/com/ym/mec/biz/event/listener/GroupEventListener.java

@@ -38,7 +38,65 @@ public class GroupEventListener {
     @Async
     @EventListener
     public void musicGroupStudentChangeMonitor(MusicGroupStudentChangeEvent musicGroupStatusChangeEvent){
-
+        if(Objects.isNull(musicGroupStatusChangeEvent.getMusicGroupId())||Objects.isNull(musicGroupStatusChangeEvent.getStudentMusicGroupStatus())){
+            return;
+        }
+        MusicGroup musicGroup = musicGroupDao.get(musicGroupStatusChangeEvent.getMusicGroupId());
+        if(Objects.isNull(musicGroup)){
+            return;
+        }
+        List<Integer> studentIds = musicGroupStatusChangeEvent.getStudentIds();
+        if(CollectionUtils.isEmpty(studentIds)) {
+            List<StudentRegistration> studentRegistrations = studentRegistrationDao.queryStudentByMusicGroupId(musicGroupStatusChangeEvent.getMusicGroupId());
+            studentIds = studentRegistrations.stream().map(StudentRegistration::getUserId).collect(Collectors.toList());
+        }
+        if(CollectionUtils.isEmpty(studentIds)){
+            return;
+        }
+        List<StudentRegistration> studentNormalRegistration = studentRegistrationDao.getStudentNormalRegistration(new HashSet<>(studentIds));
+        Map<Integer, Set<String>> userGroupIdMap = studentNormalRegistration.stream().collect(Collectors.groupingBy(StudentRegistration::getUserId, Collectors.mapping(StudentRegistration::getMusicGroupId, Collectors.toSet())));
+        int updateNum = 0;
+        for (Integer studentId : studentIds) {
+            if(userGroupIdMap.containsKey(studentId)&&userGroupIdMap.get(studentId).size()>1){
+                continue;
+            }
+            if(userGroupIdMap.containsKey(studentId)&&!userGroupIdMap.get(studentId).contains(musicGroupStatusChangeEvent.getMusicGroupId())){
+                continue;
+            }
+            updateNum+=1;
+        }
+        LocalDate nowDate = LocalDate.now();
+        String dayStr = nowDate.toString();
+        IndexBaseMonthData indexBaseMonthData = null;
+        switch (musicGroupStatusChangeEvent.getStudentMusicGroupStatus()){
+            case NORMAL:
+                indexBaseMonthData = indexBaseMonthDataDao.getOrganDataWithDayAndDataType(musicGroup.getOrganId(), dayStr, IndexDataType.NEWLY_STUDENT_NUM);
+                break;
+            case QUIT:
+                indexBaseMonthData = indexBaseMonthDataDao.getOrganDataWithDayAndDataType(musicGroup.getOrganId(), dayStr, IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM);
+                break;
+            default:
+                return;
+        }
+        if(Objects.isNull(indexBaseMonthData)){
+            indexBaseMonthData = new IndexBaseMonthData();
+            Date date = DateUtil.stringToDate(dayStr, "yyyy-MM-dd");
+            BigDecimal zero = new BigDecimal(0);
+            indexBaseMonthData.setMonth(date);
+            indexBaseMonthData.setOrganId(musicGroup.getOrganId());
+            indexBaseMonthData.setDataType(StudentMusicGroupStatusEnum.NORMAL.equals(musicGroupStatusChangeEvent.getStudentMusicGroupStatus())?IndexDataType.NEWLY_STUDENT_NUM:IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM);
+            indexBaseMonthData.setTotalNum(zero);
+            indexBaseMonthData.setActivateNum(zero);
+            indexBaseMonthData.setPercent(zero);
+        }
+        indexBaseMonthData.setTotalNum(indexBaseMonthData.getTotalNum().add(new BigDecimal(updateNum)));
+        indexBaseMonthData.setActivateNum(indexBaseMonthData.getActivateNum().add(new BigDecimal(updateNum)));
+        indexBaseMonthData.setPercent(indexBaseMonthData.getPercent().add(new BigDecimal(updateNum)));
+        if(Objects.isNull(indexBaseMonthData.getId())){
+            indexBaseMonthDataDao.insert(indexBaseMonthData);
+        }else{
+            indexBaseMonthDataDao.update(indexBaseMonthData);
+        }
     }
 
 }

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

@@ -11,6 +11,7 @@ import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
@@ -217,7 +218,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param newCourseSchedules: 课程计划列表
 	 * @return void
 	 */
-	void courseAdjust(List<CourseSchedule> newCourseSchedules);
+	HttpResponseResult courseAdjust(List<CourseSchedule> newCourseSchedules, Boolean allowZeroSalary);
 
 	/**
 	 * @Author: Joburgess
@@ -258,7 +259,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @Date: 2019/9/24
 	 * 课程交换
 	 */
-	void courseSwap(Long courseScheduleId1, Long courseScheduleId2);
+	void courseSwap(Long courseScheduleId1, Long courseScheduleId2, Boolean allowZeroSalary);
 
 	/**
 	 * @Author: Joburgess
@@ -590,7 +591,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param teacherId
 	 * @param targetTeacherId
 	 */
-	void classGroupTeacherAdjust(String classGroupIds, Integer teacherId, Integer targetTeacherId);
+	HttpResponseResult classGroupTeacherAdjust(String classGroupIds, Integer teacherId, Integer targetTeacherId, Boolean allowZeroSalary);
 
 	/**
 	 * 网管课批量调整
@@ -634,7 +635,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param courseMergeInfo:
 	 * @return void
 	 */
-	void courseMerge(CourseMergeDto courseMergeInfo);
+	HttpResponseResult courseMerge(CourseMergeDto courseMergeInfo);
 
 	/**
 	 * @describe 合并课程还原

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

@@ -35,7 +35,7 @@ public interface ImUserFriendService extends BaseService<Long, ImUserFriend> {
 	 * @param nickname 昵称
 	 * @return
 	 */
-	boolean updateFriendNickname(Integer userId, Integer friendUserId, String nickname);
+	boolean updateFriendNickname(Integer userId, Integer friendUserId, String nickname, String memo);
 
 	/**
 	 * 根据条件查询指定用户的好友列表

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

@@ -14,7 +14,7 @@ public interface IndexBaseMonthDataService extends BaseService<Long, IndexBaseMo
 
     List<IndexBaseDto> getIndexBaseData(IndexDataQueryInfo indexDataQueryInfo);
 
-    Map<String, List<IndexBaseDto>> indexBaseDataTask(String month);
+    void indexBaseDataTask(String month);
 
     Map<String, Object> getIndexErrData(String organIds, IndexErrorType errorType);
 

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

@@ -106,9 +106,10 @@ public interface MusicGroupPaymentCalenderDetailService extends BaseService<Long
     List<MusicGroup> getNoPaymentStudentMusicGroups(String organIds);
 
     /**
-     * 发送学员待续费通知
+     * 主动发送学员待续费通知
      * @param calenderId
      * @param studentIds
+     * @return
      */
     void pushWaitRenewMessage(Long calenderId, String studentIds);
 }

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

@@ -352,7 +352,7 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @param registerIds 学员注册id
 	 * @return 添加学员记录
 	 */
-	List<StudentRegistration> addMusicGroupRegs(String musicGroupId,List<Long> registerIds);
+	List<StudentRegistration> addMusicGroupRegs(String musicGroupId,List<Long> registerIds) throws Exception;
 
 
 	/**

+ 28 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java

@@ -1,12 +1,18 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
+import com.ym.mec.biz.dal.dto.TeacherServeDto;
+import com.ym.mec.biz.dal.dto.TeacherServeExtraDto;
+import com.ym.mec.biz.dal.dto.TeacherServeHomeworkDto;
 import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
 import com.ym.mec.biz.dal.page.StudentExercisesSituationQueryInfo;
 import com.ym.mec.biz.dal.page.StudentServiceDetailQueryInfo;
+import com.ym.mec.biz.dal.page.TeacherServeHomeworkQueryInfo;
+import com.ym.mec.biz.dal.page.TeacherServeQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -32,4 +38,26 @@ public interface StudentExtracurricularExercisesSituationService extends BaseSer
      */
     List<Map<String, Object>> findServiceStudentDetail(StudentServiceDetailQueryInfo queryInfo);
 
+    /**
+     * @describe 获取教师服务指标明细
+     * @author Joburgess
+     * @date 2021/3/9 0009
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.TeacherServeDto>
+     */
+    PageInfo<TeacherServeDto> queryTeacherServeInfo(TeacherServeQueryInfo queryInfo);
+
+    /**
+     * @describe 教师作业布置提醒
+     * @author Joburgess
+     * @date 2021/3/9 0009
+     * @param teacherServes:
+     * @return void
+     */
+    void teacherServeRemindPush(List<TeacherServeDto> teacherServes, Integer operatorId, String operatorName);
+
+    PageInfo<TeacherServeHomeworkDto> queryTeacherServeHomeworkDetail(TeacherServeHomeworkQueryInfo queryInfo);
+
+    PageInfo<TeacherServeExtraDto> queryTeacherServeExtraDetail(TeacherServeHomeworkQueryInfo queryInfo);
+
 }

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.TeacherLeaveRecord;
 import com.ym.mec.biz.dal.enums.AuditStatusEnum;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
@@ -24,7 +25,7 @@ public interface TeacherLeaveRecordService extends BaseService<Long, TeacherLeav
 	 * @param remark 备注
 	 * @return
 	 */
-	boolean approve(Long id, Integer userId, AuditStatusEnum status, String remark);
+	HttpResponseResult approve(Long id, Integer userId, AuditStatusEnum status, String remark, Boolean allowZeroSalary);
 
 	/**
 	 * @describe 检测课程安排是否与老师的请假时间存在冲突

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

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.service;
+
+import java.util.List;
+import com.ym.mec.biz.dal.entity.TeacherRemind;
+import com.ym.mec.common.service.BaseService;
+
+public interface TeacherRemindService extends BaseService<Long, TeacherRemind> {
+
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherServeService.java

@@ -0,0 +1,11 @@
+package com.ym.mec.biz.service;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/3/9 0009
+ **/
+public interface TeacherServeService {
+
+
+
+}

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

@@ -32,7 +32,7 @@ public class UploadFileService {
 	private int maxSize;
 
 	/** 支持的扩展名 */
-	@Value("${common.upload.supportExtensions:jpg,jpeg,gif,png,mp3,mid,midi,aac,m4a,mp4}")
+	@Value("${common.upload.supportExtensions:jpg,jpeg,gif,png,mp3,mid,midi,aac,m4a,mp4,xml}")
 	private String supportExtensions;
 
 	/** 文件根目录 */

+ 15 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -164,7 +164,11 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
                     BigDecimal salary = null;
                     if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)){
-                        salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
+                        if(studentNum>0){
+                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
+                        }else{
+                            salary = new BigDecimal("0");
+                        }
                     }else if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH)){
                         MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
                         TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryHigh = collect.get(CourseSchedule.CourseScheduleType.HIGH);
@@ -350,7 +354,11 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
                     }
                     BigDecimal salary = null;
                     if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)){
-                        salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
+                        if(studentNum>0){
+                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
+                        }else{
+                            salary = new BigDecimal("0");
+                        }
                     }else if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH)){
                         MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
                         TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryHigh = collect.get(CourseSchedule.CourseScheduleType.HIGH);
@@ -558,7 +566,11 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
                     BigDecimal salary = null;
                     if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)){
-                        salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
+                        if(studentNum>0){
+                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
+                        }else{
+                            salary = new BigDecimal("0");
+                        }
                     }else if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH)){
                         TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryHigh = collect.get(CourseSchedule.CourseScheduleType.HIGH);
                         if(Objects.isNull(teacherDefaultMusicGroupSalaryHigh)){

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

@@ -31,6 +31,8 @@ import java.util.stream.Stream;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import org.apache.commons.collections.ListUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -38,9 +40,11 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.util.CollectionUtils;
 
 import com.alibaba.fastjson.JSON;
@@ -972,28 +976,33 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
     @Override
     public List<Date> getCourseScheduleDates(Date month, String organIdList, String type) {
-		Map<String, Object> params = new HashMap<>();
-		params.put("organIdList", organIdList);
-
-		List<Group> groups = groupDao.searchGroups(params);
-		List<Integer> classGroupIds=new ArrayList<>();
-		if(!CollectionUtils.isEmpty(groups)){
-			Map<GroupType, List<Group>> groupTypeGroupsMap = groups.stream().collect(Collectors.groupingBy(Group::getGroupType));
-			for (Map.Entry<GroupType, List<Group>> groupTypeListEntry : groupTypeGroupsMap.entrySet()) {
-				List<String> groupIds = groupTypeListEntry.getValue().stream().map(Group::getId).collect(Collectors.toList());
-				List<ClassGroup> classGroups = classGroupDao.findByMusicGroupsAndType(groupIds, groupTypeListEntry.getKey().getCode());
-				if(!CollectionUtils.isEmpty(classGroups)){
-					List<Integer> tempClassGroupIds=classGroups.stream().map(ClassGroup::getId).collect(Collectors.toList());
-					classGroupIds.addAll(tempClassGroupIds);
-				}
-			}
-			if(CollectionUtils.isEmpty(classGroupIds)){
-				return Collections.EMPTY_LIST;
-			}
-		}else{
-			return Collections.EMPTY_LIST;
+//		Map<String, Object> params = new HashMap<>();
+//		params.put("organIdList", organIdList);
+//
+//		List<Group> groups = groupDao.searchGroups(params);
+//		List<Integer> classGroupIds=new ArrayList<>();
+//		if(!CollectionUtils.isEmpty(groups)){
+//			Map<GroupType, List<Group>> groupTypeGroupsMap = groups.stream().collect(Collectors.groupingBy(Group::getGroupType));
+//			for (Map.Entry<GroupType, List<Group>> groupTypeListEntry : groupTypeGroupsMap.entrySet()) {
+//				List<String> groupIds = groupTypeListEntry.getValue().stream().map(Group::getId).collect(Collectors.toList());
+//				List<ClassGroup> classGroups = classGroupDao.findByMusicGroupsAndType(groupIds, groupTypeListEntry.getKey().getCode());
+//				if(!CollectionUtils.isEmpty(classGroups)){
+//					List<Integer> tempClassGroupIds=classGroups.stream().map(ClassGroup::getId).collect(Collectors.toList());
+//					classGroupIds.addAll(tempClassGroupIds);
+//				}
+//			}
+//			if(CollectionUtils.isEmpty(classGroupIds)){
+//				return Collections.EMPTY_LIST;
+//			}
+//		}else{
+//			return Collections.EMPTY_LIST;
+//		}
+//        return courseScheduleDao.getCourseScheduleDate(month, classGroupIds,type);
+		List<Integer> organIds = new ArrayList<>();
+		if(StringUtils.isNotBlank(organIdList)){
+			organIds = Arrays.stream(organIdList.split(",")).map(s->Integer.valueOf(s)).collect(Collectors.toList());
 		}
-        return courseScheduleDao.getCourseScheduleDate(month, classGroupIds,type);
+		return courseScheduleDao.getCourseScheduleDateWithOrgan(organIds, month, type);
     }
 
     @Override
@@ -1075,30 +1084,36 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             queryInfo.setDate(new Date());
         }
 
+		List<Integer> organIds = new ArrayList<>();
+		if(StringUtils.isNotBlank(queryInfo.getOrganIdList())){
+			organIds = Arrays.stream(queryInfo.getOrganIdList().split(",")).map(s->Integer.valueOf(s)).collect(Collectors.toList());
+		}
+
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
-
-        params.put("musicGroupStatus", null);
-        params.put("vipGroupStatus", null);
-        List<Group> groups = groupDao.searchGroups(params);
-        if(!CollectionUtils.isEmpty(groups)){
-            Map<GroupType, List<Group>> groupTypeGroupsMap = groups.stream().collect(Collectors.groupingBy(Group::getGroupType));
-            List<Integer> classGroupIds=new ArrayList<>();
-            for (Map.Entry<GroupType, List<Group>> groupTypeListEntry : groupTypeGroupsMap.entrySet()) {
-                List<String> groupIds = groupTypeListEntry.getValue().stream().map(Group::getId).collect(Collectors.toList());
-                List<ClassGroup> classGroups = classGroupDao.findByMusicGroupsAndType(groupIds, groupTypeListEntry.getKey().getCode());
-                if(!CollectionUtils.isEmpty(classGroups)){
-                    List<Integer> tempClassGroupIds=classGroups.stream().map(ClassGroup::getId).collect(Collectors.toList());
-                    classGroupIds.addAll(tempClassGroupIds);
-                }
-            }
-            if(CollectionUtils.isEmpty(classGroupIds)){
-                return pageInfo;
-            }
-            params.put("classGroupIds", classGroupIds);
-        }else{
-            return pageInfo;
-        }
+		params.put("organIds", organIds);
+
+//        params.put("musicGroupStatus", null);
+//        params.put("vipGroupStatus", null);
+//        List<Group> groups = groupDao.searchGroups(params);
+//        if(!CollectionUtils.isEmpty(groups)){
+//            Map<GroupType, List<Group>> groupTypeGroupsMap = groups.stream().collect(Collectors.groupingBy(Group::getGroupType));
+//            List<Integer> classGroupIds=new ArrayList<>();
+//            for (Map.Entry<GroupType, List<Group>> groupTypeListEntry : groupTypeGroupsMap.entrySet()) {
+//                List<String> groupIds = groupTypeListEntry.getValue().stream().map(Group::getId).collect(Collectors.toList());
+//                List<ClassGroup> classGroups = classGroupDao.findByMusicGroupsAndType(groupIds, groupTypeListEntry.getKey().getCode());
+//                if(!CollectionUtils.isEmpty(classGroups)){
+//                    List<Integer> tempClassGroupIds=classGroups.stream().map(ClassGroup::getId).collect(Collectors.toList());
+//                    classGroupIds.addAll(tempClassGroupIds);
+//                }
+//            }
+//            if(CollectionUtils.isEmpty(classGroupIds)){
+//                return pageInfo;
+//            }
+//            params.put("classGroupIds", classGroupIds);
+//        }else{
+//            return pageInfo;
+//        }
 
         List<CourseScheduleDto> dataList = null;
         int count = courseScheduleDao.countCourseSchedulesWithDate(params);
@@ -2766,7 +2781,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 }
             }
         }
-        if(groupType == VIP){
+		if(groupType == VIP){
 			VipGroup vipGroup = vipGroupDao.get(vipGroupCourseAdjustInfo.getVipGroupId().longValue());
 
 			CourseSchedule courseSchedule = courseSchedules.stream().max(Comparator.comparing(CourseSchedule::getEndClassTime)).get();
@@ -2999,7 +3014,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void courseAdjust(List<CourseSchedule> newCourseSchedules) {
+    public HttpResponseResult courseAdjust(List<CourseSchedule> newCourseSchedules, Boolean allowZeroSalary) {
         Date date = new Date();
 		// 课程信息处理
 		List<Long> courseScheduleIds = newCourseSchedules.stream().map(CourseSchedule::getId).distinct().collect(Collectors.toList());
@@ -3381,6 +3396,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					if(ts.getExpectSalary() == null){
 						throw new BizException("请设置老师的课酬");
 					}
+					if(!allowZeroSalary&&BigDecimal.ZERO.compareTo(ts.getExpectSalary())==0){
+						TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+						return BaseController.failed(HttpStatus.PARTIAL_CONTENT,"当前课程课酬预计为0,是否继续");
+					}
 					insertCourseScheduleTeacherSalaryList.add(ts);
 				}
 			}
@@ -3431,6 +3450,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
+		return BaseController.succeed();
     }
 
     @Override
@@ -3700,7 +3720,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void courseSwap(Long courseScheduleId1, Long courseScheduleId2) {
+    public void courseSwap(Long courseScheduleId1, Long courseScheduleId2, Boolean allowZeroSalary) {
         if (courseScheduleId1.equals(courseScheduleId2)) {
             throw new BizException("请选择不同的课程");
         }
@@ -3733,7 +3753,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         List<CourseSchedule> courseSchedules = new ArrayList<>();
         courseSchedules.add(courseSchedule1);
         courseSchedules.add(courseSchedule2);
-        classStartDateAdjust(courseSchedules);
+        courseAdjust(courseSchedules, allowZeroSalary);
     }
 
     @Override
@@ -4273,7 +4293,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if (vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)) {
             dataList = JSON.parseArray(vipGroup.getCourseSchedulesJson(), CourseSchedule.class);
         } else {
-            dataList = courseScheduleDao.findGroupCourseSchedules(vipGroup.getId(),GroupType.VIP.getCode());
+            dataList = courseScheduleDao.findGroupCourseSchedules(vipGroup.getId().toString(),GroupType.VIP.getCode());
         }
 
         int count = dataList.size();
@@ -4981,7 +5001,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void classGroupTeacherAdjust(String classGroupIds, Integer teacherId, Integer targetTeacherId) {
+	public HttpResponseResult classGroupTeacherAdjust(String classGroupIds, Integer teacherId, Integer targetTeacherId, Boolean allowZeroSalary) {
 		List<Integer> teachingTeacherIdList = new ArrayList<Integer>();
 		teachingTeacherIdList.add(targetTeacherId);
 		List<CourseSchedule> courseSchedules = this.queryNoStartCourseByTeacherId(classGroupIds,teacherId,"BISHOP");
@@ -4991,7 +5011,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				e.setTeachingTeacherIdList(courseScheduleTeacherSalaryDao.queryTeacherByTeaching(e.getClassGroupId(),"TEACHING"));
 				e.setActualTeacherId(targetTeacherId);
 			});
-			this.courseAdjust(courseSchedules);
+			HttpResponseResult httpResponseResult = this.courseAdjust(courseSchedules, allowZeroSalary);
+			if(httpResponseResult.getCode()==HttpStatus.PARTIAL_CONTENT.value()){
+				return httpResponseResult;
+			}
 			//修改老师考勤
 			Set<Integer> collect1 = courseSchedules.stream().map(e -> e.getClassGroupId()).collect(Collectors.toSet());
 //			teacherAttendanceDao.deleteByCourseAndTeacherId(collect1,teacherId);
@@ -5003,11 +5026,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				e.setActualTeacherId(courseScheduleTeacherSalaryDao.queryTeacherByBishop(e.getClassGroupId()));
 				e.setTeachingTeacherIdList(teachingTeacherIdList);
 			});
-			this.courseAdjust(courseSchedules1);
+			HttpResponseResult httpResponseResult = this.courseAdjust(courseSchedules1, allowZeroSalary);
+			if(httpResponseResult.getCode()==HttpStatus.PARTIAL_CONTENT.value()){
+				return httpResponseResult;
+			}
 			Set<Integer> collect1 = courseSchedules1.stream().map(e -> e.getClassGroupId()).collect(Collectors.toSet());
 ////			teacherAttendanceDao.deleteByCourseAndTeacherId(collect1,teacherId);
 			batchUpdateClassTeacher(new ArrayList<>(collect1),teacherId,targetTeacherId);
 		}
+		return BaseController.succeed();
 	}
 
 	@Override
@@ -5251,7 +5278,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void courseMerge(CourseMergeDto courseMergeInfo) {
+	public HttpResponseResult courseMerge(CourseMergeDto courseMergeInfo) {
 		Date now = new Date();
 
 		if(CollectionUtils.isEmpty(courseMergeInfo.getMergeCourseIds())){
@@ -5364,11 +5391,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		if(!CollectionUtils.isEmpty(newPayments))
 			courseScheduleStudentPaymentDao.batchInsert(newPayments);
 
-		courseAdjust(courseSchedules);
+		HttpResponseResult httpResponseResult = courseAdjust(courseSchedules, courseMergeInfo.getAllowZeroSalary());
+		if(httpResponseResult.getCode()==HttpStatus.PARTIAL_CONTENT.value()){
+			return httpResponseResult;
+		}
 
 		if (insertCourseScheduleModifyLogList.size() > 0) {
 			courseScheduleModifyLogDao.batchInsert(insertCourseScheduleModifyLogList);
 		}
+		return BaseController.succeed();
 	}
 
 	@Override

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

@@ -96,7 +96,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 		//获取活动信息
 		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroupApplyBaseInfoDto.getVipGroupActivityId().intValue());
 
-		List<CourseSchedule> vipGroupCourseSchedules=courseScheduleDao.findGroupCourseSchedules(vipGroupId,GroupType.VIP.getCode());
+		List<CourseSchedule> vipGroupCourseSchedules=courseScheduleDao.findGroupCourseSchedules(vipGroupId.toString(),GroupType.VIP.getCode());
 
 		if(CollectionUtils.isEmpty(vipGroupCourseSchedules)){
 			throw new BizException("未获取到排课信息");

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

@@ -153,7 +153,7 @@ public class GroupClassServiceImpl implements GroupClassService {
                 if(refundAmount.compareTo(orders.get(0).getExpectAmount())>0){
                     throw new BizException("退款不可大于购买金额");
                 }
-                sysUserCashAccountService.updateBalance(practiceGroup.getStudentId(), refundAmount, PlatformCashAccountDetailTypeEnum.REFUNDS, "后关闭网管课");
+                sysUserCashAccountService.updateBalance(practiceGroup.getStudentId(), refundAmount, PlatformCashAccountDetailTypeEnum.REFUNDS, "后关闭网管课");
             }
             cleanGroupInfo(groupId.toString(), GroupType.PRACTICE);
             practiceGroup.setMemo("后台关闭网管课");

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

@@ -73,9 +73,9 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		imGroupMember.setUpdateTime(date);
 		imGroupMember.setUserId(userId);
 		if (StringUtils.isBlank(roleType)) {
-			imGroupMember.setNickname(user.getRealName());
+			imGroupMember.setNickname(user.getUsername()==null?user.getRealName():user.getUsername());
 		} else {
-			imGroupMember.setNickname(user.getRealName());
+			imGroupMember.setNickname(user.getRealName()==null?user.getUsername():user.getRealName());
 		}
 
 		imGroupMemberDao.insert(imGroupMember);

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

@@ -88,13 +88,14 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
 	}
 
 	@Override
-	public boolean updateFriendNickname(Integer userId, Integer friendUserId, String nickname) {
+	public boolean updateFriendNickname(Integer userId, Integer friendUserId, String nickname, String memo) {
 		ImUserFriend userFriend = imUserFriendDao.query(userId, friendUserId);
 		if (userFriend == null) {
 			throw new BizException("好友不存在");
 		}
 		Date date = new Date();
 		userFriend.setFriendNickname(nickname);
+		userFriend.setMemo(memo);
 		userFriend.setUpdateTime(date);
 		imUserFriendDao.update(userFriend);
 

+ 156 - 178
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -2,12 +2,14 @@ package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.IndexBaseDto;
 import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.IndexDataQueryInfo;
+import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -23,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -50,6 +53,10 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 	private SysUserFeignService sysUserFeignService;
 	@Autowired
 	private SysMessageDao sysMessageDao;
+	@Autowired
+	private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
+	@Autowired
+	private StudentExtracurricularExercisesSituationService studentExtracurricularExercisesSituationService;
 
 	private static ThreadLocal<Set<Integer>> organIds = new ThreadLocal<Set<Integer>>(){
 		@Override
@@ -95,15 +102,20 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			indexBaseDatas = new ArrayList<>();
 		}
 
-		Map<IndexDataType, List<IndexBaseMonthData>> typeDateMap = indexBaseDatas.stream().collect(Collectors.groupingBy(IndexBaseMonthData::getDataType));
+		Map<IndexDataType, List<IndexBaseMonthData>> typeDateMap = indexBaseDatas.stream().filter(d->Objects.nonNull(d.getDataType())).collect(Collectors.groupingBy(IndexBaseMonthData::getDataType));
 
 		for (IndexDataType dataType : IndexDataType.values()) {
-			if(typeDateMap.containsKey(dataType)){
+			if(typeDateMap.containsKey(dataType)||(Objects.nonNull(dataTypes)&&!dataTypes.contains(dataType.getCode()))){
 				continue;
 			}
 
 			IndexBaseMonthData indexBaseMonthData = new IndexBaseMonthData();
 			indexBaseMonthData.setMonth(Date.from(endDate.atStartOfDay(DateUtil.zoneId).toInstant()));
+			if(IndexDataType.HOMEWORK_CREATE_RATE.equals(dataType)
+					||IndexDataType.HOMEWORK_SUBMIT_RATE.equals(dataType)
+					||IndexDataType.HOMEWORK_COMMENT_RATE.equals(dataType)){
+				indexBaseMonthData.setMonth(Date.from(endDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue()).atStartOfDay(DateUtil.zoneId).toInstant()));
+			}
 			indexBaseMonthData.setTotalNum(BigDecimal.ZERO);
 			indexBaseMonthData.setActivateNum(BigDecimal.ZERO);
 			indexBaseMonthData.setPercent(BigDecimal.ZERO);
@@ -115,6 +127,13 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			Set<String> hasMonths = typeDateMapEntry.getValue().stream().map(d -> DateUtil.dateToString(d.getMonth(), "yyyy-MM-dd")).collect(Collectors.toSet());
 			LocalDate currentMonthDate = startDate;
 			while (currentMonthDate.compareTo(endDate)<=0){
+				if((IndexDataType.HOMEWORK_CREATE_RATE.equals(typeDateMapEntry.getKey())
+					||IndexDataType.HOMEWORK_SUBMIT_RATE.equals(typeDateMapEntry.getKey())
+					||IndexDataType.HOMEWORK_COMMENT_RATE.equals(typeDateMapEntry.getKey()))
+					&&currentMonthDate.getDayOfWeek()!=DayOfWeek.MONDAY){
+					currentMonthDate = currentMonthDate.plusDays(1);
+					continue;
+				}
 				if(hasMonths.contains(currentMonthDate.toString())){
 					currentMonthDate = currentMonthDate.plusDays(1);
 					continue;
@@ -129,9 +148,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				currentMonthDate = currentMonthDate.plusDays(1);
 			}
 			typeDateMapEntry.getValue().sort(Comparator.comparing(IndexBaseMonthData::getMonth));
-			if(IndexDataType.ACTIVATION_RATE.equals(typeDateMapEntry.getKey())||IndexDataType.HOMEWORK_CREATE_RATE.equals(typeDateMapEntry.getKey())
-					||IndexDataType.HOMEWORK_SUBMIT_RATE.equals(typeDateMapEntry.getKey())||IndexDataType.HOMEWORK_COMMENT_RATE.equals(typeDateMapEntry.getKey())
-					||IndexDataType.STUDENT_CONVERSION.equals(typeDateMapEntry.getKey())){
+			if(typeDateMapEntry.getKey().getPercent()){
 				for (IndexBaseMonthData indexBaseMonthData : typeDateMapEntry.getValue()) {
 					if(indexBaseMonthData.getTotalNum().compareTo(BigDecimal.ZERO)==0){
 						indexBaseMonthData.setPercent(BigDecimal.ZERO);
@@ -143,22 +160,17 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			IndexBaseDto indexBaseData = new IndexBaseDto(typeDateMapEntry.getKey(),typeDateMapEntry.getKey().getMsg());
 			indexBaseData.setIndexMonthData(typeDateMapEntry.getValue(), currentMonth);
 			if(IndexDataType.FINANCE_PAY.equals(typeDateMapEntry.getKey()) || IndexDataType.FINANCE_AMOUNT.equals(typeDateMapEntry.getKey()) ||
-				IndexDataType.FINANCE_BALANCE_AMOUNT.equals(typeDateMapEntry.getKey())
-				||IndexDataType.MUSIC_GROUP_COURSE.equals(typeDateMapEntry.getKey())||IndexDataType.VIP_GROUP_COURSE.equals(typeDateMapEntry.getKey())
-					||IndexDataType.PRACTICE_GROUP_COURSE.equals(typeDateMapEntry.getKey())){
+				IndexDataType.FINANCE_BALANCE_AMOUNT.equals(typeDateMapEntry.getKey())){
 				indexBaseData.setPercent(typeDateMapEntry.getValue().stream().map(IndexBaseMonthData::getPercent).reduce(BigDecimal.ZERO, BigDecimal::add));
 			}
 			result.add(indexBaseData);
 		}
-		countStudentConvertData(result, currentMonth);
 		return result;
 	}
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public Map<String, List<IndexBaseDto>> indexBaseDataTask(String dayStr) {
-		Map<String, List<IndexBaseDto>> result = new HashMap<>();
-
+	public void indexBaseDataTask(String dayStr) {
 		LocalDate nowDate = LocalDate.now();
 
 		List<Organization> allOrgans = organizationDao.findAllOrgans();
@@ -171,149 +183,58 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			dayStr = nowDate.plusDays(-1).toString();
 		}
 
-		//运营数据
-		saveData(indexBaseMonthDataDao.getSchoolData(dayStr), dayStr, IndexDataType.SCHOOL);
-		saveData(indexBaseMonthDataDao.getMusicData(dayStr), dayStr, IndexDataType.MUSIC_GROUP_NUM);
-		saveData(indexBaseMonthDataDao.getMusicStudentData(dayStr, null), dayStr, IndexDataType.MUSIC_GROUP_STUDENT);
-		saveData(indexBaseMonthDataDao.getOtherStudentData(dayStr), dayStr, IndexDataType.OTHER_STUDENT);
+		LocalDate day = LocalDate.parse(dayStr, DateUtil.dateFormatter);
+		LocalDate monday = day.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
 
-		//业务数据
+		//学员数据
+		saveData(indexBaseMonthDataDao.getStudentRegistrationData(dayStr), dayStr, IndexDataType.STUDENT_REGISTRATION_NUM);
+		saveData(indexBaseMonthDataDao.getChargeStudentChangeData(dayStr), dayStr, IndexDataType.CHARGE_STUDENT_CHANGE_RATE);
 		saveData(indexBaseMonthDataDao.getStudentSignUpData(dayStr), dayStr, IndexDataType.ACTIVATION_RATE);
-		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, null), dayStr, IndexDataType.HOMEWORK_CREATE_RATE);
-		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "submit"), dayStr, IndexDataType.HOMEWORK_SUBMIT_RATE);
-		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "comment"), dayStr, IndexDataType.HOMEWORK_COMMENT_RATE);
 
-		//经营数据
-		saveData(null, dayStr, IndexDataType.SHOULD_INCOME_MONEY);
-		saveData(null, dayStr, IndexDataType.ANTICIPATED_INCOME_MONEY);
-		saveData(null, dayStr, IndexDataType.SHOULD_EXPEND_MONEY);
-		saveData(null, dayStr, IndexDataType.ANTICIPATED_EXPEND_MONEY);
-		saveData(null, dayStr, IndexDataType.REVENUE_MONEY);
+		//运营数据
+		saveData(indexBaseMonthDataDao.getSchoolData(dayStr), dayStr, IndexDataType.SCHOOL);
+		saveData(indexBaseMonthDataDao.getMusicData(dayStr), dayStr, IndexDataType.PROGRESS_MUSIC_GROUP_NUM);
 
 		//人事数据
 		saveData(indexBaseMonthDataDao.getTeacherData(dayStr, null, null), dayStr, IndexDataType.TEACHER_NUM);
 		saveData(indexBaseMonthDataDao.getTeacherData(dayStr, JobNatureEnum.FULL_TIME, null), dayStr, IndexDataType.FULL_TIME_NUM);
 		saveData(indexBaseMonthDataDao.getTeacherData(dayStr, JobNatureEnum.PART_TIME, null), dayStr, IndexDataType.PART_TIME_NUM);
-		saveData(indexBaseMonthDataDao.getTeacherData(dayStr, null, true), dayStr, IndexDataType.DIMISSION_NUM);
+//		saveData(indexBaseMonthDataDao.getTeacherData(dayStr, null, true), dayStr, IndexDataType.DIMISSION_NUM);
 
-		//学员变动
-		saveData(indexBaseMonthDataDao.getMusicStudentData(dayStr, "ADD"), dayStr, IndexDataType.NEWLY_STUDENT_NUM);
-		saveData(indexBaseMonthDataDao.getMusicStudentData(dayStr, "QUIT"), dayStr, IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM);
-		saveData(indexBaseMonthDataDao.getMusicGroupPreRegistrationStudentData(dayStr), dayStr, IndexDataType.STUDENT_CONVERSION_PRE_STUDENT_NUM);
-		saveData(indexBaseMonthDataDao.getMusicGroupStudentFromPreData(dayStr, null), dayStr, IndexDataType.STUDENT_CONVERSION_STUDENT_NUM);
-		saveData(indexBaseMonthDataDao.getMusicGroupStudentFromPreData(dayStr, PaymentStatusEnum.YES), dayStr, IndexDataType.STUDENT_CONVERSION_PAYMENT_STUDENT_NUM);
-		List<Integer> studentIds = indexBaseMonthDataDao.getMusicGroupStudentIdFromPre(dayStr, PaymentStatusEnum.YES);
-		List<IndexBaseMonthData> convertStudentNum = new ArrayList<>();
-		if(!CollectionUtils.isEmpty(studentIds)){
-			convertStudentNum = indexBaseMonthDataDao.getStudentConversionData(dayStr, studentIds);
-		}
-		saveData(convertStudentNum, dayStr, IndexDataType.STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM);
+		//剩余课时
+		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, null, CourseStatusEnum.NOT_START), dayStr, IndexDataType.SURPLUS_COURSE_NUM);
+		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.MUSIC, CourseStatusEnum.NOT_START), dayStr, IndexDataType.SURPLUS_MUSIC_COURSE_NUM);
+		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.VIP, CourseStatusEnum.NOT_START), dayStr, IndexDataType.SURPLUS_VIP_COURSE_NUM);
+		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.PRACTICE, CourseStatusEnum.NOT_START), dayStr, IndexDataType.SURPLUS_PRACTICE_COURSE_NUM);
 
-		//课程数据
-		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.MUSIC), dayStr, IndexDataType.MUSIC_GROUP_COURSE);
-		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.VIP), dayStr, IndexDataType.VIP_GROUP_COURSE);
-		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.PRACTICE), dayStr, IndexDataType.PRACTICE_GROUP_COURSE);
+		//已消耗课时
+		saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, null, CourseStatusEnum.OVER), dayStr, IndexDataType.OVER_COURSE_NUM);
+		saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.MUSIC, CourseStatusEnum.OVER), dayStr, IndexDataType.OVER_MUSIC_COURSE_NUM);
+		saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.VIP, CourseStatusEnum.OVER), dayStr, IndexDataType.OVER_VIP_COURSE_NUM);
+		saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.PRACTICE, CourseStatusEnum.OVER), dayStr, IndexDataType.OVER_PRACTICE_COURSE_NUM);
 
-		//财务数据
+		//经营数据
 		saveData(indexBaseMonthDataDao.getFinancePayData(dayStr),dayStr,IndexDataType.FINANCE_PAY);
 		saveData(indexBaseMonthDataDao.getFinanceBalanceData(dayStr),dayStr,IndexDataType.FINANCE_BALANCE_AMOUNT);
 		saveData(indexBaseMonthDataDao.getFinanceActualData(dayStr),dayStr,IndexDataType.FINANCE_AMOUNT);
 
-		return result;
-	}
+		//业务数据
+		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, null), monday.toString(), IndexDataType.HOMEWORK_CREATE_RATE);
+		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "submit"), monday.toString(), IndexDataType.HOMEWORK_SUBMIT_RATE);
+		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "comment"), monday.toString(), IndexDataType.HOMEWORK_COMMENT_RATE);
 
-	private void countStudentConvertData(List<IndexBaseDto> result, Date currentMonth){
-		List<IndexBaseMonthData> convertData = new ArrayList<>();
-
-		Map<IndexDataType, IndexBaseDto> typeDataMap = result.stream().collect(Collectors.toMap(IndexBaseDto::getDataType, i -> i, (i1, i2) -> i1));
-		List<IndexBaseMonthData> preStudentNum = new ArrayList<>();
-		if(typeDataMap.containsKey(IndexDataType.STUDENT_CONVERSION_PRE_STUDENT_NUM)){
-			preStudentNum = typeDataMap.get(IndexDataType.STUDENT_CONVERSION_PRE_STUDENT_NUM).getIndexMonthData();
-		}
-
-		IndexBaseMonthData preStudentNumData = new IndexBaseMonthData();
-		preStudentNumData = preStudentNum.stream().max(Comparator.comparing(IndexBaseMonthData::getMonth)).get();
-//		preStudentNumData.setMonth(currentMonth);
-		preStudentNumData.setDataType(IndexDataType.STUDENT_CONVERSION_PRE_STUDENT_NUM);
-		preStudentNumData.setTitle(IndexDataType.STUDENT_CONVERSION_PRE_STUDENT_NUM.getMsg());
-//		preStudentNumData.setTotalNum(preStudentNum.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add));
-//		preStudentNumData.setActivateNum(preStudentNum.stream().map(IndexBaseMonthData::getActivateNum).reduce(BigDecimal.ZERO, BigDecimal::add));
-//		preStudentNumData.setPercent(preStudentNumData.getActivateNum());
-
-		List<IndexBaseMonthData> studentNum = new ArrayList<>();
-		if(typeDataMap.containsKey(IndexDataType.STUDENT_CONVERSION_STUDENT_NUM)){
-			studentNum = typeDataMap.get(IndexDataType.STUDENT_CONVERSION_STUDENT_NUM).getIndexMonthData();
-		}
-
-		IndexBaseMonthData studentNumData = new IndexBaseMonthData();
-		studentNumData = studentNum.stream().max(Comparator.comparing(IndexBaseMonthData::getMonth)).get();
-//		studentNumData.setMonth(currentMonth);
-		studentNumData.setDataType(IndexDataType.STUDENT_CONVERSION_STUDENT_NUM);
-		studentNumData.setTitle(IndexDataType.STUDENT_CONVERSION_STUDENT_NUM.getMsg());
-//		studentNumData.setTotalNum(studentNum.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add));
-//		studentNumData.setActivateNum(studentNum.stream().map(IndexBaseMonthData::getActivateNum).reduce(BigDecimal.ZERO, BigDecimal::add));
-
-		List<IndexBaseMonthData> paymentStudentNum = new ArrayList<>();
-		if(typeDataMap.containsKey(IndexDataType.STUDENT_CONVERSION_PAYMENT_STUDENT_NUM)){
-			paymentStudentNum = typeDataMap.get(IndexDataType.STUDENT_CONVERSION_PAYMENT_STUDENT_NUM).getIndexMonthData();
-		}
-
-		IndexBaseMonthData paymentStudentNumData = new IndexBaseMonthData();
-		paymentStudentNumData = paymentStudentNum.stream().max(Comparator.comparing(IndexBaseMonthData::getMonth)).get();
-//		paymentStudentNumData.setMonth(currentMonth);
-		paymentStudentNumData.setDataType(IndexDataType.STUDENT_CONVERSION_PAYMENT_STUDENT_NUM);
-		paymentStudentNumData.setTitle(IndexDataType.STUDENT_CONVERSION_PAYMENT_STUDENT_NUM.getMsg());
-//		paymentStudentNumData.setTotalNum(paymentStudentNum.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add));
-//		paymentStudentNumData.setActivateNum(paymentStudentNum.stream().map(IndexBaseMonthData::getActivateNum).reduce(BigDecimal.ZERO, BigDecimal::add));
-
-		List<IndexBaseMonthData> convertStudentNum = new ArrayList<>();
-		if(typeDataMap.containsKey(IndexDataType.STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM)){
-			convertStudentNum = typeDataMap.get(IndexDataType.STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM).getIndexMonthData();
-		}
-
-		IndexBaseMonthData convertStudentNumData = new IndexBaseMonthData();
-		convertStudentNumData = convertStudentNum.stream().max(Comparator.comparing(IndexBaseMonthData::getMonth)).get();
-//		convertStudentNumData.setMonth(currentMonth);
-		convertStudentNumData.setDataType(IndexDataType.STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM);
-		convertStudentNumData.setTitle(IndexDataType.STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM.getMsg());
-//		convertStudentNumData.setTotalNum(convertStudentNum.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add));
-//		convertStudentNumData.setActivateNum(convertStudentNum.stream().map(IndexBaseMonthData::getActivateNum).reduce(BigDecimal.ZERO, BigDecimal::add));
-
-		if(true){
-			studentNumData.setPercent(studentNumData.getActivateNum());
-			paymentStudentNumData.setPercent(paymentStudentNumData.getActivateNum());
-			convertStudentNumData.setPercent(convertStudentNumData.getActivateNum());
-		}else if(preStudentNumData.getActivateNum().compareTo(BigDecimal.ZERO)==0){
-			studentNumData.setPercent(BigDecimal.ZERO);
-			paymentStudentNumData.setPercent(BigDecimal.ZERO);
-			convertStudentNumData.setPercent(BigDecimal.ZERO);
-		}else{
-			studentNumData.setPercent(studentNumData.getActivateNum().divide(preStudentNumData.getActivateNum(), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
-			if(studentNumData.getActivateNum().compareTo(BigDecimal.ZERO)==0){
-				paymentStudentNumData.setPercent(BigDecimal.ZERO);
-				convertStudentNumData.setPercent(BigDecimal.ZERO);
-			}else{
-				paymentStudentNumData.setPercent(paymentStudentNumData.getActivateNum().divide(studentNumData.getActivateNum(), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
-				if(paymentStudentNumData.getActivateNum().compareTo(BigDecimal.ZERO)==0){
-					convertStudentNumData.setPercent(BigDecimal.ZERO);
-				}else{
-					convertStudentNumData.setPercent(convertStudentNumData.getActivateNum().divide(paymentStudentNumData.getActivateNum(), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
-				}
-			}
-		}
+		//课程数据
+		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.MUSIC, null), dayStr, IndexDataType.MUSIC_GROUP_COURSE);
+		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null), dayStr, IndexDataType.VIP_GROUP_COURSE);
+		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.PRACTICE, null), dayStr, IndexDataType.PRACTICE_GROUP_COURSE);
 
-		convertData.add(preStudentNumData);
-		convertData.add(studentNumData);
-		convertData.add(paymentStudentNumData);
-		convertData.add(convertStudentNumData);
-		IndexBaseDto indexBaseData = new IndexBaseDto(IndexDataType.STUDENT_CONVERSION, IndexDataType.STUDENT_CONVERSION.getMsg());
-		indexBaseData.setIndexMonthData(convertData, currentMonth);
-		if(paymentStudentNumData.getActivateNum().compareTo(BigDecimal.ZERO)==0){
-			indexBaseData.setPercent(convertStudentNumData.getPercent());
-		}else{
-			indexBaseData.setPercent(convertStudentNumData.getActivateNum().divide(paymentStudentNumData.getActivateNum(), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
-		}
-		result.add(indexBaseData);
+		//学员变动
+		saveData(indexBaseMonthDataDao.getAddStudentRegistrationData(dayStr), dayStr, IndexDataType.ADD_STUDENT_REGISTRATION_NUM);
+		saveData(indexBaseMonthDataDao.getMusicStudentData(dayStr, null), dayStr, IndexDataType.MUSIC_GROUP_STUDENT);
+		saveData(null, nowDate.toString(), IndexDataType.NEWLY_STUDENT_NUM);
+		saveData(null, nowDate.toString(), IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM);
+		saveData(indexBaseMonthDataDao.getOtherStudentData(dayStr), dayStr, IndexDataType.VIP_PRACTICE_STUDENT_NUM);
+		saveData(indexBaseMonthDataDao.getVipPracticeAddStudentData(dayStr), dayStr, IndexDataType.VIP_PRACTICE_ADD_STUDENT_NUM);
 	}
 
 	/**
@@ -328,14 +249,31 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			dataList = new ArrayList<>();
 		}
 		Set<Integer> hasOrganIds = dataList.stream().map(IndexBaseMonthData::getOrganId).collect(Collectors.toSet());
+
+		boolean specialType = IndexDataType.NEWLY_STUDENT_NUM.equals(indexDataType)||IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM.equals(indexDataType);
+		Set<Integer> ignoreOrganIds = new HashSet<>();
+		if(specialType){
+			List<IndexBaseMonthData> indexBaseDatas = indexBaseMonthDataDao.getWithDayAndDataType(dayStr, indexDataType);
+			if(!CollectionUtils.isEmpty(indexBaseDatas)) {
+				ignoreOrganIds = indexBaseDatas.stream().map(IndexBaseMonthData::getOrganId).collect(Collectors.toSet());
+			}
+		}
+
 		for (Integer organId : this.organIds.get()) {
 			if(hasOrganIds.contains(organId)){
 				continue;
 			}
+			if(specialType&&ignoreOrganIds.contains(organId)){
+				continue;
+			}
 			dataList.add(new IndexBaseMonthData(date, organId));
 		}
-		indexBaseMonthDataDao.deleteWithMonthAndType(Arrays.asList(dayStr), indexDataType);
-		indexBaseMonthDataDao.batchInsertWithDataType(dataList, indexDataType);
+		if(!IndexDataType.NEWLY_STUDENT_NUM.equals(indexDataType)&&!IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM.equals(indexDataType)){
+			indexBaseMonthDataDao.deleteWithMonthAndType(Arrays.asList(dayStr), indexDataType);
+		}
+		if(!CollectionUtils.isEmpty(dataList)){
+			indexBaseMonthDataDao.batchInsertWithDataType(dataList, indexDataType);
+		}
 	}
 
 	@Override
@@ -391,12 +329,6 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			three.setDesc(IndexErrorType.TEACHER_INFO.getMsg());
 			List<IndexErrInfoDto> threeChild = new ArrayList<>();
 
-			int attendanceError = indexBaseMonthDataDao.getAttendanceError(organIdsStr,startTime);
-			threeChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_EXCEPTION_ATTENDANCE, IndexErrorType.TEACHER_EXCEPTION_ATTENDANCE.getMsg(), attendanceError, null));
-
-			int noAttendance = indexBaseMonthDataDao.getNoAttendance(organIdsStr,startTime);
-			threeChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_NOT_A_CLASS, IndexErrorType.TEACHER_NOT_A_CLASS.getMsg(), noAttendance, null));
-
 //			int teacherLeave = indexBaseMonthDataDao.queryTeacherLeave(organIdsStr,startTime);
 //			threeChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_LEAVE, IndexErrorType.TEACHER_LEAVE.getMsg(),teacherLeave, null));
 
@@ -405,13 +337,19 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			int lowTeacherSalary = indexBaseMonthDataDao.queryLowTeacherSalary(organIdsStr,monthStr);
 			threeChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_EXPECT_SALARY_BE_LOW, IndexErrorType.TEACHER_EXPECT_SALARY_BE_LOW.getMsg(),lowTeacherSalary, null));
 
-			int inspectionItem = indexBaseMonthDataDao.queryInspectionItem(organIdsStr,startTime);
+			SysUser sysUser = sysUserFeignService.queryUserInfo();
+			List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
+			Integer userId = null;
+			if (!userRole.contains(SysUserRole.SECTION_MANAGER) && !sysUser.getIsSuperAdmin()) {
+				userId = sysUser.getId();
+			}
+			int inspectionItem = indexBaseMonthDataDao.queryInspectionItem(organIdsStr,startTime,userId);
 			threeChild.add(new IndexErrInfoDto(IndexErrorType.INSPECTION_ITEM, IndexErrorType.INSPECTION_ITEM.getMsg(),inspectionItem, null));
 
 			int inspectionItemPlan = indexBaseMonthDataDao.queryInspectionItemPlan(organIdsStr,startTime);
 			threeChild.add(new IndexErrInfoDto(IndexErrorType.INSPECTION_ITEM_PLAN, IndexErrorType.INSPECTION_ITEM_PLAN.getMsg(),inspectionItemPlan, null));
 
-			int studentVisit = indexBaseMonthDataDao.queryStudentVisit(organIdsStr,startTime);
+			int studentVisit = indexBaseMonthDataDao.queryStudentVisit(organIdsStr,startTime,userId);
 			threeChild.add(new IndexErrInfoDto(IndexErrorType.STUDENT_VISIT, IndexErrorType.STUDENT_VISIT.getMsg(),studentVisit, null));
 
 			three.setNum(threeChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
@@ -419,6 +357,34 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			all.add(three);
 		}
 
+		if(IndexErrorType.ATTENDANCE_SERVE.equals(errorType)){
+			IndexErrInfoDto<IndexErrInfoDto> four = new IndexErrInfoDto<>();
+			four.setErrorType(IndexErrorType.ATTENDANCE_SERVE);
+			four.setDesc(IndexErrorType.ATTENDANCE_SERVE.getMsg());
+			List<IndexErrInfoDto> fourChild = new ArrayList<>();
+
+			int attendanceError = indexBaseMonthDataDao.getAttendanceError(organIds,startTime);
+			fourChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_EXCEPTION_ATTENDANCE, IndexErrorType.TEACHER_EXCEPTION_ATTENDANCE.getMsg(), attendanceError, null));
+
+			int noAttendance = indexBaseMonthDataDao.getNoAttendance(organIds,startTime);
+			fourChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_NOT_A_CLASS, IndexErrorType.TEACHER_NOT_A_CLASS.getMsg(), noAttendance, null));
+
+			Map<String, Object> params = new HashMap<>();
+			LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
+			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
+			LocalDate sunDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue());
+			params.put("organIds", organIds);
+			params.put("monday",monDayDate.toString());
+			params.put("sunday",sunDayDate.toString());
+			params.put("unDone",1);
+			int serveErrTeacherNum = studentExtracurricularExercisesSituationDao.countTeacherServeInfo(params);
+			fourChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_SERVE_ERROR, IndexErrorType.TEACHER_SERVE_ERROR.getMsg(), serveErrTeacherNum, null));
+
+			four.setNum(fourChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
+			four.setResult(fourChild);
+			all.add(four);
+		}
+
 		Map<String, Object> result = new HashMap<>(2);
 		result.put("totalNum", all.stream().mapToInt(IndexErrInfoDto::getNum).sum());
 		result.put("data", all);
@@ -489,33 +455,9 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				flag2 = true;
 			}
 		}
-		/*if(!flag2){
-			int attendanceInfo = indexBaseMonthDataDao.queryStudentAttendanceInfo(organIds, StudentAttendanceStatusEnum.TRUANT.getCode(),startTime);
-			if(attendanceInfo > 0){
-				flag2 = true;
-			}
-		}
-		if(!flag2){
-			int attendanceInfo1 = indexBaseMonthDataDao.queryStudentAttendanceInfo(organIds, StudentAttendanceStatusEnum.LEAVE.getCode(),startTime);
-			if(attendanceInfo1 > 0){
-				flag2 = true;
-			}
-		}*/
 		resultMap.put("studentInfo",flag2);
 		boolean flag3 = false;
 		if(!flag3){
-			int attendanceError = indexBaseMonthDataDao.getAttendanceError(organIdsStr,startTime);
-			if(attendanceError > 0){
-				flag3 = true;
-			}
-		}
-		if(!flag3){
-			int noAttendance = indexBaseMonthDataDao.getNoAttendance(organIdsStr,startTime);
-			if(noAttendance > 0){
-				flag3 = true;
-			}
-		}
-		if(!flag3){
 			int teacherLeave = indexBaseMonthDataDao.queryTeacherLeave(organIdsStr,startTime);
 			if(teacherLeave > 0){
 				flag3 = true;
@@ -528,8 +470,14 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				flag3 = true;
 			}
 		}
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
+		Integer userId = null;
+		if (!userRole.contains(SysUserRole.SECTION_MANAGER) && !sysUser.getIsSuperAdmin()) {
+			userId = sysUser.getId();
+		}
 		if(!flag3){
-			int inspectionItem = indexBaseMonthDataDao.queryInspectionItem(organIdsStr,startTime);
+			int inspectionItem = indexBaseMonthDataDao.queryInspectionItem(organIdsStr,startTime,userId);
 			if(inspectionItem > 0){
 				flag3 = true;
 			}
@@ -541,18 +489,48 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			}
 		}
 		if(!flag3){
-			int studentVisit = indexBaseMonthDataDao.queryStudentVisit(organIdsStr,startTime);
+			int studentVisit = indexBaseMonthDataDao.queryStudentVisit(organIdsStr,startTime,userId);
 			if(studentVisit > 0){
 				flag3 = true;
 			}
 		}
 		resultMap.put("teacherInfo",flag3);
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			throw new BizException("用户信息获取失败");
+
+		boolean flag4 = false;
+		if(!flag4){
+			int attendanceError = indexBaseMonthDataDao.getAttendanceError(organIds,startTime);
+			if(attendanceError > 0){
+				flag4 = true;
+			}
+		}
+		if(!flag4){
+			int noAttendance = indexBaseMonthDataDao.getNoAttendance(organIds,startTime);
+			if(noAttendance > 0){
+				flag4 = true;
+			}
 		}
+		if(!flag4){
+			Map<String, Object> params = new HashMap<>();
+			LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
+			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
+			LocalDate sunDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue());
+			params.put("organIds", organIds);
+			params.put("monday",monDayDate.toString());
+			params.put("sunday",sunDayDate.toString());
+			params.put("unDone",1);
+			int serveErrTeacherNum = studentExtracurricularExercisesSituationDao.countTeacherServeInfo(params);
+			if(serveErrTeacherNum > 0){
+				flag4 = true;
+			}
+		}
+		resultMap.put("attendanceServe",flag4);
+
+//		SysUser sysUser = sysUserFeignService.queryUserInfo();
+//		if (sysUser == null) {
+//			throw new BizException("用户信息获取失败");
+//		}
 		//当前用户是否是分部经理
-		List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
+//		List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
 		//获取关联的乐团列表
 		List<String> musicGroupIds = musicGroupDao.queryIdsByEduIdAndOrganIds(userRole.contains(3)?sysUser.getId():null,organIdsStr);
 		String configValue1 = sysConfigDao.findConfigValue("push_create_payment_calender");

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

@@ -15,6 +15,7 @@ import com.ym.mec.biz.dal.dto.MusicArrearageStudentDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.ArrearageStudentsQueryInfo;
+import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
@@ -65,6 +66,8 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 	private StudentRegistrationDao studentRegistrationDao;
 	@Autowired
 	private SysMessageService sysMessageService;
+	@Autowired
+	private GroupEventSource groupEventSource;
 
 	@Override
 	public BaseDAO<Long, MusicGroupPaymentCalenderDetail> getDAO() {
@@ -91,6 +94,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 //				throw new BizException("修改失败:存在未开启缴费的学员");
 //			}
 //		}
+		//为了解决学员欠费数量的问题,只要学员没有缴费就可以修改金额
 		Set<Integer> studentIds = new HashSet<>();
 				calenderDetails.forEach(e->{
 			if(e.getPaymentStatus() == null || e.getPaymentStatus() != NON_PAYMENT){
@@ -119,6 +123,9 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 					studentRegistration.setPaymentStatus(YES);
 					studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
 					studentRegistrationDao.update(studentRegistration);
+
+					//统计变更学员数
+					groupEventSource.musicGroupStudentChangeEvent(calender.getMusicGroupId(), StudentMusicGroupStatusEnum.NORMAL, new ArrayList<>(Arrays.asList(e.getUserId())));
 				}
 			}
 		});
@@ -424,7 +431,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 		Long musicGroupPaymentCalenderId = null;
 		for(MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenderList){
 			int paymentNum = 0;
-			
+
 			musicGroupPaymentCalenderId = musicGroupPaymentCalender.getId();
 			
 			if(musicGroupPaymentCalender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.MUSIC_APPLY){

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

@@ -28,6 +28,7 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.service.*;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -132,6 +133,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	private MusicGroupPaymentCalenderStudentDetailDao musicGroupPaymentCalenderStudentDetailDao;
 	@Autowired
 	private StudentRegistrationDao studentRegistrationDao;
+	@Autowired
+	private GroupEventSource groupEventSource;
 
 	@Override
 	public BaseDAO<Long, MusicGroupPaymentCalender> getDAO() {
@@ -206,6 +209,16 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			musicGroupPaymentCalenderCourseSettingsList = new ArrayList<>();
 		}
 
+		// 必须课程缴费金额为0时,报名、续费不能建多期
+		if(paymentType == MUSIC_APPLY || paymentType == MUSIC_RENEW){
+			BigDecimal noOptionalCoursePrice = musicGroupPaymentCalenderCourseSettingsList.stream()
+					.filter(e -> !e.getIsStudentOptional()).map(MusicGroupPaymentCalenderCourseSettings::getCourseCurrentPrice)
+					.reduce(BigDecimal.ZERO, BigDecimal::add);
+			if(noOptionalCoursePrice.compareTo(BigDecimal.ZERO) <= 0 && musicGroupPaymentDateRangeList.size() > 1){
+				throw new BizException("必选课程缴费金额为0时不支持多周期缴费");
+			}
+		}
+
 		if (payUserType == SCHOOL) {
 			status = AUDITING;
 		} else {
@@ -804,6 +817,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 						,studentIds,courseIds,classGroupStudents,allLockCourseIds,batchNo,adjust.getMasterTotalPrice());
 			}
 		}
+
+		//统计变更学员数
+		groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.NORMAL, null);
+
 		return batchNo;
 	}
 
@@ -870,6 +887,9 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 					studentRegistration.setPaymentStatus(YES);
 					studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
 					studentRegistrationDao.update(studentRegistration);
+
+					//统计变更学员数
+					groupEventSource.musicGroupStudentChangeEvent(musicGroupPaymentCalender.getMusicGroupId(), StudentMusicGroupStatusEnum.NORMAL, new ArrayList<>(Arrays.asList(Integer.parseInt(studentId))));
 				}
 
 				// 学生加课程明细
@@ -1159,7 +1179,6 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			}
 			musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenders);
 		}
-
 	}
 
 	@Override

+ 38 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -294,7 +294,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT) {
             Set<Integer> roleIds = new HashSet<>(1);
             roleIds.add(SysUserRole.SECTION_MANAGER);
-            sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_APPLY, "", sysUser.getRealName(),musicGroup.getName());
+            sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_APPLY, "", sysUser.getRealName(), musicGroup.getName());
         }
         // 保存乐团付费主体列表
         //批量新增
@@ -1140,7 +1140,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         Set<Integer> roleIds = new HashSet<>(1);
         roleIds.add(SysUserRole.SECTION_MANAGER);
 
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_APPLY, "", sysUser.getRealName(),musicGroup.getName());
+        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_APPLY, "", sysUser.getRealName(), musicGroup.getName());
 
     }
 
@@ -1246,7 +1246,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         Set<Integer> roleIds = new HashSet<>(1);
         roleIds.add(SysUserRole.SECTION_MANAGER);
 
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_APPLY, "", sysUser.getRealName(),musicGroup.getName());
+        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_APPLY, "", sysUser.getRealName(), musicGroup.getName());
 
     }
 
@@ -1305,9 +1305,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         Set<Integer> roleIds = new HashSet<>(1);
         roleIds.add(SysUserRole.EDUCATIONAL_TEACHER);
         sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()),
-                MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_ADJUST_SUCCESS, "",musicGroup.getName());
+                MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_ADJUST_SUCCESS, "", musicGroup.getName());
         Map<Integer, String> map = new HashMap<>(1);
-        map.put(musicGroup.getEducationalTeacherId(),musicGroup.getEducationalTeacherId().toString());
+        map.put(musicGroup.getEducationalTeacherId(), musicGroup.getEducationalTeacherId().toString());
         if (map != null && map.size() > 0) {
             sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_ADJUST_SUCCESS,
                     map, null, 0, null, "SYSTEM", musicGroup.getName());
@@ -1911,9 +1911,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
             }
 
-            //统计变更学员数
-            groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
+            if(MusicGroupStatusEnum.PROGRESS.equals(musicGroup.getStatus())){
+                //统计变更学员数
+                groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
 
+            }
             if (currentStudentMusicGroupStatus != StudentMusicGroupStatusEnum.NORMAL) {
                 return true;
             }
@@ -2089,8 +2091,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
         }
 
-        //统计变更学员数
-        groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
+        if(MusicGroupStatusEnum.PROGRESS.equals(musicGroup.getStatus())){
+            //统计变更学员数
+            groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
+        }
 
         if (currentStudentMusicGroupStatus != StudentMusicGroupStatusEnum.NORMAL) {
             return true;
@@ -2169,7 +2173,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             if (oldStudentPaymentOrder != null) {
                 if (oldStudentPaymentOrder.getStatus() == SUCCESS) {
                     throw new BizException("您已支付请勿重复提交");
-                }else if(oldStudentPaymentOrder.getStatus() == ING){
+                } else if (oldStudentPaymentOrder.getStatus() == ING) {
                     oldStudentPaymentOrder.setStatus(CLOSE);
                     studentPaymentOrderService.update(oldStudentPaymentOrder);
                     if (oldStudentPaymentOrder.getBalancePaymentAmount() != null && oldStudentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
@@ -2309,6 +2313,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 studentRegistration.setPaymentStatus(YES);
                 studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
                 studentRegistrationDao.update(studentRegistration);
+
+                //统计变更学员数
+                groupEventSource.musicGroupStudentChangeEvent(studentRegistration.getMusicGroupId(), StudentMusicGroupStatusEnum.NORMAL, new ArrayList<>(Arrays.asList(userId)));
             }
             /*if (musicGroupPaymentCalender.getType().equals(MusicGroupPaymentCalender.FeeType.ONLINE)) {
                 Integer getRemainNetworkClassTimes = musicGroupStudentFee.getRemainNetworkClassTimes() == null ? 0 : musicGroupStudentFee.getRemainNetworkClassTimes();
@@ -2833,7 +2840,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public List<StudentRegistration> addMusicGroupRegs(String musicGroupId, List<Long> registerIds) {
+    public List<StudentRegistration> addMusicGroupRegs(String musicGroupId, List<Long> registerIds) throws Exception {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null || sysUser.getId() == null) {
             throw new BizException("获取用户信息失败");
@@ -2882,10 +2889,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             for (StudentRegistration studentRegistration : regs) {
                 studentRegistration.setId(null);
                 studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.APPLY);
-                studentRegistration.setPaymentStatus(PaymentStatusEnum.NO);
+                studentRegistration.setPaymentStatus(PaymentStatusEnum.OPEN); //开启缴费
                 studentRegistration.setMusicGroupId(musicGroupId);
                 studentRegistration.setSubjectId(subjectId);
                 studentRegistration.setActualSubjectId(subjectId);
+                studentRegistration.setIsMerge(1);
                 studentRegistration.setTemporaryCourseFee(null);
             }
             studentRegistrationList.addAll(regs);
@@ -2895,6 +2903,24 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (studentRegistrationList.size() > 0) {
             studentRegistrationDao.batchInsert(studentRegistrationList);
         }
+        //0元的和学校缴费的默认缴费
+        boolean autoPay = false;
+        MusicGroupPaymentCalender regCalender = musicGroupPaymentCalenderService.findByMusicGroupRegCalender(musicGroupId);
+        List<MusicGroupPaymentCalenderCourseSettings> musicGroupRegCalenderCourseSettings = musicGroupPaymentCalenderCourseSettingsDao.getMusicGroupRegCalenderCourseSettings(musicGroupId);
+        BigDecimal courseSettingsPrice = musicGroupRegCalenderCourseSettings.stream().map(MusicGroupPaymentCalenderCourseSettings::getCourseCurrentPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        if (regCalender == null || courseSettingsPrice.compareTo(BigDecimal.ZERO) == 0) {
+            autoPay = true;
+        }
+        if (autoPay) {
+            List<Integer> courseSettings = musicGroupRegCalenderCourseSettings.stream().map(MusicGroupPaymentCalenderCourseSettings::getId).collect(Collectors.toList());
+            RegisterPayDto registerPayDto = new RegisterPayDto();
+            registerPayDto.setAmount(BigDecimal.ZERO);
+            registerPayDto.setNewCourse(courseSettings);
+            for (StudentRegistration studentRegistration : studentRegistrationList) {
+                registerPayDto.setRegisterId(studentRegistration.getId().intValue());
+                Map payMap = this.pay(registerPayDto);
+            }
+        }
 
         //修改乐团信息
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);

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

@@ -2221,7 +2221,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (Objects.isNull(practiceGroup)) {
             throw new BizException("指定的网管课不存在");
         }
-        List<CourseSchedule> dataList = courseScheduleDao.findGroupCourseSchedules(practiceGroup.getId(), GroupType.PRACTICE.getCode());
+        List<CourseSchedule> dataList = courseScheduleDao.findGroupCourseSchedules(practiceGroup.getId().toString(), GroupType.PRACTICE.getCode());
         int count = dataList.size();
         if (count > 0) {
             pageInfo.setTotal(count);

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

@@ -1,23 +1,30 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.StudentEduTeacherDto;
-import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
-import com.ym.mec.biz.dal.dto.StudentServiceDetailDto;
-import com.ym.mec.biz.dal.dto.UserGroupDto;
-import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.enums.TeacherRemindTypeEnum;
 import com.ym.mec.biz.dal.page.StudentExercisesSituationQueryInfo;
 import com.ym.mec.biz.dal.page.StudentServiceDetailQueryInfo;
+import com.ym.mec.biz.dal.page.TeacherServeHomeworkQueryInfo;
+import com.ym.mec.biz.dal.page.TeacherServeQueryInfo;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
+import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 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.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.time.DayOfWeek;
@@ -42,6 +49,18 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 	private ClassGroupStudentMapperDao classGroupStudentMapperDao;
 	@Autowired
 	private StudentRegistrationDao studentRegistrationDao;
+	@Autowired
+	private TeacherRemindDao teacherRemindDao;
+	@Autowired
+	private SysMessageService sysMessageService;
+	@Autowired
+	private StudentDao studentDao;
+	@Autowired
+	private SubjectDao subjectDao;
+	@Autowired
+	private CourseHomeworkDao courseHomeworkDao;
+	@Autowired
+	private ClassGroupDao classGroupDao;
 
 	@Override
 	public BaseDAO<Long, StudentExtracurricularExercisesSituation> getDAO() {
@@ -158,6 +177,67 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 	}
 
 	@Override
+	public PageInfo<TeacherServeDto> queryTeacherServeInfo(TeacherServeQueryInfo queryInfo) {
+		if(StringUtils.isNotBlank(queryInfo.getOrganId())){
+			List<Integer> organIds = Arrays.stream(queryInfo.getOrganId().split(",")).map(e -> Integer.valueOf(e)).collect(Collectors.toList());
+			queryInfo.setOrganIds(organIds);
+		}
+		PageInfo<TeacherServeDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<TeacherServeDto> dataList = null;
+		int count = studentExtracurricularExercisesSituationDao.countTeacherServeInfo(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = studentExtracurricularExercisesSituationDao.queryTeacherServeInfo(params);
+			List<Integer> teacherIds = dataList.stream().map(TeacherServeDto::getTeacherId).collect(Collectors.toList());
+			List<TeacherRemind> teacherReminds = new ArrayList<>();
+			if(!CollectionUtils.isEmpty(teacherIds)){
+				teacherReminds = teacherRemindDao.findTeachersRemindWithType(TeacherRemindTypeEnum.SERVICE, teacherIds, queryInfo.getMonday(), queryInfo.getSunday());
+			}
+			Map<String, Map<Integer, List<TeacherRemind>>> mondayTeacherRemindMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(teacherReminds)){
+				mondayTeacherRemindMap = teacherReminds.stream().collect(Collectors.groupingBy(e -> DateUtil.dateToString(e.getMonday(), "yyyy-MM-dd"), Collectors.groupingBy(TeacherRemind::getTeacherId)));
+			}
+			List<StudentExtracurricularExercisesSituation> teacherServeWithDate = studentExtracurricularExercisesSituationDao.findTeacherServeWithDate(queryInfo.getMonday(), queryInfo.getSunday(), teacherIds, null);
+			Map<Integer, List<StudentExtracurricularExercisesSituation>> teacherServeMap = teacherServeWithDate.stream().collect(Collectors.groupingBy(StudentExtracurricularExercisesSituation::getTeacherId));
+			for (TeacherServeDto teacherServeDto : dataList) {
+				List<StudentExtracurricularExercisesSituation> tss = teacherServeMap.get(teacherServeDto.getTeacherId());
+				Set<Long> courseIds = new HashSet<>();
+				for (StudentExtracurricularExercisesSituation ts : tss) {
+					if(teacherServeDto.getMonday().compareTo(ts.getMonday())!=0){
+						continue;
+					}
+					if(StringUtils.isBlank(ts.getCourseIds())){
+						continue;
+					}
+					Set<Long> ids = Arrays.stream(ts.getCourseIds().split(",")).map(s -> Long.valueOf(s)).collect(Collectors.toSet());
+					courseIds.addAll(ids);
+				}
+				teacherServeDto.setHomeworkNum(courseIds.size());
+				String mondayStr = DateUtil.dateToString(teacherServeDto.getMonday(), "yyyy-MM-dd");
+				if(!mondayTeacherRemindMap.containsKey(mondayStr)){
+					continue;
+				}
+				Map<Integer, List<TeacherRemind>> teacherRemindMap = mondayTeacherRemindMap.get(mondayStr);
+				if(!teacherRemindMap.containsKey(teacherServeDto.getTeacherId())){
+					continue;
+				}
+				TeacherRemind lastTeacherRemind = teacherRemindMap.get(teacherServeDto.getTeacherId()).stream().max(Comparator.comparing(TeacherRemind::getCreateTime)).get();
+				teacherServeDto.setOperatorName(lastTeacherRemind.getOperatorName());
+				teacherServeDto.setRemindDate(lastTeacherRemind.getCreateTime());
+			}
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
 	public List<Map<String, Object>> findServiceStudentDetail(StudentServiceDetailQueryInfo queryInfo) {
 		PageInfo<StudentServiceDetailDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<>();
@@ -193,4 +273,200 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 			return null;
 		}
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void teacherServeRemindPush(List<TeacherServeDto> teacherServes, Integer operatorId, String operatorName) {
+		if(CollectionUtils.isEmpty(teacherServes)){
+			return;
+		}
+		List<TeacherRemind> reminds = new ArrayList<>();
+		for (TeacherServeDto teacherServe : teacherServes) {
+			if(Objects.isNull(teacherServe.getMonday())||Objects.isNull(teacherServe.getSunday())||Objects.isNull(teacherServe.getTeacherId())){
+				continue;
+			}
+			String mondayStr = DateUtil.dateToString(teacherServe.getMonday(), "yyyy-MM-dd");
+			List<StudentExtracurricularExercisesSituation> serves = studentExtracurricularExercisesSituationDao.findWeekServiceWithStudents(mondayStr, teacherServe.getTeacherId(), null);
+			if(CollectionUtils.isEmpty(serves)){
+				continue;
+			}
+			TeacherRemind remind = new TeacherRemind();
+			remind.setOperatorId(operatorId);
+			remind.setOperatorName(operatorName);
+			remind.setMonday(teacherServe.getMonday());
+			remind.setTeacherId(teacherServe.getTeacherId());
+			remind.setType(TeacherRemindTypeEnum.SERVICE);
+			remind.setContent("作业布置提醒");
+			reminds.add(remind);
+
+			Map<Integer, String> userMap = new HashMap<>();
+			userMap.put(teacherServe.getTeacherId(), teacherServe.getTeacherId().toString());
+			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_SERVE_PUSH,
+					userMap, null, 0, null, "TEACHER", teacherServe.getHomeworkNum(), teacherServe.getExerciseNum());
+		}
+		if(!CollectionUtils.isEmpty(reminds)){
+			teacherRemindDao.batchInsert(reminds);
+		}
+	}
+
+	@Override
+	public PageInfo<TeacherServeHomeworkDto> queryTeacherServeHomeworkDetail(TeacherServeHomeworkQueryInfo queryInfo) {
+		if(Objects.isNull(queryInfo.getMonday())||Objects.isNull(queryInfo.getSunday())||Objects.isNull(queryInfo.getTeacherId())){
+			throw new BizException("请指定教师");
+		}
+		PageInfo<TeacherServeHomeworkDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		String mondayStr = DateUtil.dateToString(queryInfo.getMonday(), "yyyy-MM-dd");
+		List<StudentExtracurricularExercisesSituation> serves = studentExtracurricularExercisesSituationDao.findWeekServiceWithStudents(mondayStr, queryInfo.getTeacherId(), null);
+		if(CollectionUtils.isEmpty(serves)){
+			return pageInfo;
+		}
+		List<StudentExtracurricularExercisesSituation> homeworkServes = serves.stream().filter(s -> "HOMEWORK".equals(s.getServeType())).collect(Collectors.toList());
+		if(CollectionUtils.isEmpty(homeworkServes)){
+			return pageInfo;
+		}
+		List<Long> courseIdsArr = new ArrayList<>();
+		for (StudentExtracurricularExercisesSituation homeworkServe : homeworkServes) {
+			if(StringUtils.isBlank(homeworkServe.getCourseIds())){
+				continue;
+			}
+			List<Long> ids = Arrays.stream(homeworkServe.getCourseIds().split(",")).map(id -> Long.valueOf(id)).collect(Collectors.toList());
+			courseIdsArr.addAll(ids);
+		}
+		if(CollectionUtils.isEmpty(courseIdsArr)){
+			return pageInfo;
+		}
+
+		Map<Long, Long> courseNumMap = courseIdsArr.stream().collect(Collectors.groupingBy(id -> id, Collectors.counting()));
+		Set<Long> courseIds = new HashSet<>(courseIdsArr);
+
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+		params.put("courseIds", courseIds);
+
+		List<TeacherServeHomeworkDto> dataList = new ArrayList<>();
+		int count = courseScheduleDao.countByCourseScheduleIds(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			List<CourseSchedule> courseSchedules = courseScheduleDao.queryByCourseScheduleIds(params);
+			Map<Integer, ClassGroup> idClassGroupMap = new HashMap<>();
+			List<Integer> classGroupIds = courseSchedules.stream().map(CourseSchedule::getClassGroupId).collect(Collectors.toList());
+			if(!CollectionUtils.isEmpty(classGroupIds)){
+				List<ClassGroup> classGroups = classGroupDao.findByClassGroupIds(classGroupIds, null);
+				idClassGroupMap = classGroups.stream().collect(Collectors.toMap(ClassGroup::getId, c -> c, (c1, c2) -> c1));
+			}
+
+			List<CourseHomework> courseHomeworks = courseHomeworkDao.findByCourseSchedules(new ArrayList<>(courseIds));
+			Map<Long, Long> courseHomeworkMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(courseHomeworks)){
+				courseHomeworkMap = courseHomeworks.stream().collect(Collectors.groupingBy(CourseHomework::getCourseScheduleId, Collectors.counting()));
+			}
+			List<Integer> subjectIds = new ArrayList<>();
+			for (CourseSchedule courseSchedule : courseSchedules) {
+				if(idClassGroupMap.containsKey(courseSchedule.getClassGroupId())){
+					List<Integer> ids = Arrays.stream(idClassGroupMap.get(courseSchedule.getClassGroupId()).getSubjectIdList().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+					subjectIds.addAll(ids);
+				}
+				TeacherServeHomeworkDto tshd = new TeacherServeHomeworkDto();
+				BeanUtils.copyProperties(courseSchedule,tshd);
+				tshd.setStudentNum(courseNumMap.get(courseSchedule.getId()).intValue());
+				if(courseHomeworkMap.containsKey(courseSchedule.getId())){
+					tshd.setHomeworkExist(1);
+				}
+				dataList.add(tshd);
+			}
+			List<Subject> subjects = new ArrayList<>();
+			if(!CollectionUtils.isEmpty(subjectIds)){
+				subjects = subjectDao.findBySubjectIds(new ArrayList<>(subjectIds));
+			}
+			for (TeacherServeHomeworkDto teacherServeHomeworkDto : dataList) {
+				if(idClassGroupMap.containsKey(teacherServeHomeworkDto.getClassGroupId())){
+					ClassGroup classGroup = idClassGroupMap.get(teacherServeHomeworkDto.getClassGroupId());
+					if(StringUtils.isNotBlank(classGroup.getSubjectIdList())){
+						Set<Integer> sids = Arrays.stream(classGroup.getSubjectIdList().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toSet());
+						List<String> subjectNames = subjects.stream().filter(s -> sids.contains(s.getId())).map(Subject::getName).collect(Collectors.toList());
+						teacherServeHomeworkDto.setSubjectName(StringUtils.join(subjectNames, ","));
+					}
+				}
+			}
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
+	public PageInfo<TeacherServeExtraDto> queryTeacherServeExtraDetail(TeacherServeHomeworkQueryInfo queryInfo) {
+		if(Objects.isNull(queryInfo.getMonday())||Objects.isNull(queryInfo.getSunday())||Objects.isNull(queryInfo.getTeacherId())){
+			throw new BizException("请指定教师");
+		}
+		PageInfo<TeacherServeExtraDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		String mondayStr = DateUtil.dateToString(queryInfo.getMonday(), "yyyy-MM-dd");
+		List<StudentExtracurricularExercisesSituation> serves = studentExtracurricularExercisesSituationDao.findWeekServiceWithStudents(mondayStr, queryInfo.getTeacherId(), null);
+		if(CollectionUtils.isEmpty(serves)){
+			return pageInfo;
+		}
+		List<StudentExtracurricularExercisesSituation> homeworkServes = serves.stream().filter(s -> "EXERCISE".equals(s.getServeType())).collect(Collectors.toList());
+		if(CollectionUtils.isEmpty(homeworkServes)){
+			return pageInfo;
+		}
+
+		Set<Integer> studentIds = homeworkServes.stream().map(StudentExtracurricularExercisesSituation::getStudentId).collect(Collectors.toSet());
+		Map<Integer, List<StudentExtracurricularExercisesSituation>> studentServeMap = homeworkServes.stream().collect(Collectors.groupingBy(StudentExtracurricularExercisesSituation::getStudentId));
+
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+		params.put("studentIds", studentIds);
+
+		List<TeacherServeExtraDto> dataList = new ArrayList<>();
+		int count = studentDao.countByIds(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			List<Student> students = studentDao.queryByIds(params);
+			List<SimpleUserDto> usersSimpleInfo = teacherDao.getUsersSimpleInfo(new ArrayList<>(studentIds));
+			Map<Integer, String> idNameMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(usersSimpleInfo)){
+				idNameMap = usersSimpleInfo.stream().collect(Collectors.toMap(SimpleUserDto::getUserId, s -> s.getNickName(), (s1, s2) -> s1));
+			}
+			Set<Integer> subjectIds = new HashSet<>();
+			for (Student student : students) {
+				if(StringUtils.isNotBlank(student.getSubjectIdList())){
+					Set<Integer> ids = Arrays.stream(student.getSubjectIdList().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toSet());
+					subjectIds.addAll(ids);
+				}
+				TeacherServeExtraDto tsed = new TeacherServeExtraDto();
+				BeanUtils.copyProperties(student,tsed);
+				if(studentServeMap.containsKey(student.getUserId())){
+					List<StudentExtracurricularExercisesSituation> studentServes = studentServeMap.get(student.getUserId());
+					int num = studentServes.stream().mapToInt(StudentExtracurricularExercisesSituation::getActualExercisesNum).reduce(0, Integer::sum);
+					if(num>0){
+						tsed.setHomeworkExist(1);
+					}
+				}
+				dataList.add(tsed);
+			}
+			List<Subject> subjects = new ArrayList<>();
+			if(!CollectionUtils.isEmpty(subjectIds)){
+				subjects = subjectDao.findBySubjectIds(new ArrayList<>(subjectIds));
+			}
+			for (TeacherServeExtraDto teacherServeExtraDto : dataList) {
+				if(idNameMap.containsKey(teacherServeExtraDto.getUserId())){
+					teacherServeExtraDto.setUsername(idNameMap.get(teacherServeExtraDto.getUserId()));
+				}
+				if(StringUtils.isNotBlank(teacherServeExtraDto.getSubjectIdList())){
+					Set<Integer> sids = Arrays.stream(teacherServeExtraDto.getSubjectIdList().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toSet());
+					List<String> subjectNames = subjects.stream().filter(s -> sids.contains(s.getId())).map(Subject::getName).collect(Collectors.toList());
+					teacherServeExtraDto.setSubjectNames(StringUtils.join(subjectNames, ","));
+				}
+			}
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
 }

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

@@ -116,6 +116,9 @@ public class StudentManageServiceImpl implements StudentManageService {
         Map<String, Object> params = new HashMap<String, Object>();
         MapUtil.populateMap(params, queryInfo);
 
+        String[] organIds = queryInfo.getOrganId().split(",");
+        params.put("organIds", organIds);
+
         List<StudentManageListDto> dataList = null;
         int count = studentManageDao.countStudentByOrganId(params);
         if (count > 0) {
@@ -144,6 +147,7 @@ public class StudentManageServiceImpl implements StudentManageService {
             userContractVersionMap = userAllContract.stream().collect(Collectors.groupingBy(SysUserContracts::getUserId, Collectors.mapping(SysUserContracts::getVersion, Collectors.toSet())));
         }
 
+        //List<Subject> studentSubject = studentManageDao.getStudentSubject(userIds);
         StudentListCourseDto studentListCourseDto = null;
         for (StudentManageListDto dto : dataList) {
             studentListCourseDto = StudentListCourseDtoMap.get(dto.getUserId());
@@ -169,6 +173,10 @@ public class StudentManageServiceImpl implements StudentManageService {
             }else{
                 dto.setIsSignedContract(false);
             }
+//            for (Subject subject : studentSubject) {
+//                if(!subject.getId().equals(dto.getUserId())) continue;
+//                dto.setSubjectName(subject.getName());
+//            }
         }
 
         if (queryInfo.getIsExport()) {

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -808,9 +808,6 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             }
             studentRegistrationDao.updateCurrentClass(studentRegistration);
 
-            //统计变更学员数
-            groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.NORMAL, new ArrayList<>(Arrays.asList(userId)));
-
             return userId;
         }
     }
@@ -1138,6 +1135,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
             addCalenderDetail(studentPaymentOrder, studentRegistration);
 
+            if (studentRegistration.getIsMerge().equals(1) && studentPaymentOrder.getExpectAmount().compareTo(BigDecimal.ZERO) <= 0) {
+                return studentPaymentOrder;
+            }
+
             //三方乐团不发送缴费通知
             if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
                 //发送缴费成功通知(短信 + push)

+ 11 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

@@ -34,6 +34,8 @@ import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.*;
+
 @Service
 public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRepair> implements StudentRepairService {
     private static final Logger log = LoggerFactory.getLogger(StudentRepairServiceImpl.class);
@@ -117,10 +119,15 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             } else {
                 studentGoodsSell.setIsUseBalancePayment(false);
             }
-            orderByOrderNo.setStatus(DealStatusEnum.CLOSE);
-            studentPaymentOrderService.update(orderByOrderNo);
-            if (orderByOrderNo.getBalancePaymentAmount() != null && orderByOrderNo.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
-                sysUserCashAccountService.updateBalance(orderByOrderNo.getUserId(), orderByOrderNo.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "关闭订单");
+
+            if (orderByOrderNo.getStatus() == SUCCESS) {
+                throw new BizException("您已支付请勿重复提交");
+            }else if(orderByOrderNo.getStatus() == ING){
+                orderByOrderNo.setStatus(CLOSE);
+                studentPaymentOrderService.update(orderByOrderNo);
+                if (orderByOrderNo.getBalancePaymentAmount() != null && orderByOrderNo.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+                    sysUserCashAccountService.updateBalance(orderByOrderNo.getUserId(), orderByOrderNo.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "关闭订单");
+                }
             }
             StudentGoodsSell byOrderNo = studentGoodsSellDao.findByOrderNo(studentGoodsSell.getOrderNo());
             if (byOrderNo != null) {

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

@@ -4,10 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.TeachModeEnum;
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.common.exception.BizException;
@@ -378,15 +375,24 @@ public class StudentServeServiceImpl implements StudentServeService {
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.SINGLE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(!CollectionUtils.isEmpty(weekCourseInfo)){
                     Map<String, List<StudentServeCourseDto>> groupCourseInfo = weekCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getMusicGroupId));
+                    Map<Integer, Set<Long>> teacherNotOverCourseIds = new HashMap<>();
                     Map<Integer, Set<Long>> teacherServiceCourseIdMap = new HashMap<>();
                     for (Map.Entry<String, List<StudentServeCourseDto>> groupCourseInfoEntry : groupCourseInfo.entrySet()) {
-                        if(musicGroupIds.contains(groupCourseInfoEntry.getKey()))
+                        if(musicGroupIds.contains(groupCourseInfoEntry.getKey())) {
                             musicGroupIds.remove(groupCourseInfoEntry.getKey());
+                        }
                         StudentServeCourseDto courseInfo = groupCourseInfoEntry.getValue().stream().min(Comparator.comparing(StudentServeCourseDto::getCourseStartTime)).get();
                         if(!teacherServiceCourseIdMap.containsKey(courseInfo.getActualTeacherId())){
                             teacherServiceCourseIdMap.put(courseInfo.getActualTeacherId(), new HashSet<>());
                         }
                         teacherServiceCourseIdMap.get(courseInfo.getActualTeacherId()).add(courseInfo.getCourseScheduleId());
+
+                        if(!teacherNotOverCourseIds.containsKey(courseInfo.getActualTeacherId())){
+                            teacherNotOverCourseIds.put(courseInfo.getActualTeacherId(), new HashSet<>());
+                        }
+                        if(!CourseStatusEnum.OVER.equals(courseInfo.getStatus())){
+                            teacherNotOverCourseIds.get(courseInfo.getActualTeacherId()).add(courseInfo.getCourseScheduleId());
+                        }
                     }
                     for (Map.Entry<Integer, Set<Long>> teacherServiceCourseIdMapEntry : teacherServiceCourseIdMap.entrySet()) {
                         StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
@@ -394,6 +400,8 @@ public class StudentServeServiceImpl implements StudentServeService {
                                 DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
                                 "HOMEWORK", StringUtils.join(teacherServiceCourseIdMapEntry.getValue(), ","));
                         studentExtracurricularExercisesSituation.setExpectExercisesNum(teacherServiceCourseIdMapEntry.getValue().size());
+                        studentExtracurricularExercisesSituation.setNotOverCourseIds(StringUtils.join(teacherNotOverCourseIds.get(teacherServiceCourseIdMapEntry.getKey()), ","));
+                        studentExtracurricularExercisesSituation.setNotOverCourseNum(teacherNotOverCourseIds.get(teacherServiceCourseIdMapEntry.getKey()).size());
                         results.add(studentExtracurricularExercisesSituation);
                     }
                 }
@@ -456,6 +464,10 @@ public class StudentServeServiceImpl implements StudentServeService {
                                     teacherCourseMapEntry.getKey(),nowDate.get(DateUtil.weekFields.weekOfYear()),
                                     DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
                                     "HOMEWORK", String.valueOf(courseInfo.getCourseScheduleId()));
+                            if(!CourseStatusEnum.OVER.equals(courseInfo.getStatus())){
+                                studentExtracurricularExercisesSituation.setNotOverCourseIds(String.valueOf(courseInfo.getCourseScheduleId()));
+                                studentExtracurricularExercisesSituation.setNotOverCourseNum(1);
+                            }
                         }
                         results.add(studentExtracurricularExercisesSituation);
                     }
@@ -508,11 +520,19 @@ public class StudentServeServiceImpl implements StudentServeService {
                     }
                 }else{
                     Map<Integer, List<StudentServeCourseDto>> teacherCourseMap = weekCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getActualTeacherId));
+                    Map<Integer, Set<Long>> teacherNotOverCourseIds = new HashMap<>();
                     Map<Integer, Set<Long>> teacherServiceCourseIdMap = new HashMap<>();
                     for (Map.Entry<Integer, List<StudentServeCourseDto>> teacherCourseMapEntry : teacherCourseMap.entrySet()) {
                         StudentServeCourseDto courseInfo = teacherCourseMapEntry.getValue().stream().min(Comparator.comparing(StudentServeCourseDto::getCourseStartTime)).get();
                         teacherServiceCourseIdMap.put(teacherCourseMapEntry.getKey(), new HashSet<>());
                         teacherServiceCourseIdMap.get(teacherCourseMapEntry.getKey()).add(courseInfo.getCourseScheduleId());
+
+                        if(!teacherNotOverCourseIds.containsKey(courseInfo.getActualTeacherId())){
+                            teacherNotOverCourseIds.put(courseInfo.getActualTeacherId(), new HashSet<>());
+                        }
+                        if(!CourseStatusEnum.OVER.equals(courseInfo.getStatus())){
+                            teacherNotOverCourseIds.get(courseInfo.getActualTeacherId()).add(courseInfo.getCourseScheduleId());
+                        }
                     }
                     for (Map.Entry<Integer, Set<Long>> teacherServiceCourseIdMapEntry : teacherServiceCourseIdMap.entrySet()) {
                         StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
@@ -520,6 +540,8 @@ public class StudentServeServiceImpl implements StudentServeService {
                                 DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
                                 "HOMEWORK", StringUtils.join(teacherServiceCourseIdMapEntry.getValue(), ","));
                         studentExtracurricularExercisesSituation.setExpectExercisesNum(teacherServiceCourseIdMapEntry.getValue().size());
+                        studentExtracurricularExercisesSituation.setNotOverCourseIds(StringUtils.join(teacherNotOverCourseIds.get(teacherServiceCourseIdMapEntry.getKey()), ","));
+                        studentExtracurricularExercisesSituation.setNotOverCourseNum(teacherNotOverCourseIds.get(teacherServiceCourseIdMapEntry.getKey()).size());
                         results.add(studentExtracurricularExercisesSituation);
                     }
                 }

+ 9 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherLeaveRecordServiceImpl.java

@@ -10,8 +10,11 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -120,7 +123,7 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 
 	@Override
 	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-	public boolean approve(Long id, Integer userId, AuditStatusEnum status, String remark) {
+	public HttpResponseResult approve(Long id, Integer userId, AuditStatusEnum status, String remark, Boolean allowZeroSalary) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (Objects.isNull(sysUser)) {
 			throw new BizException("获取用户信息失败");
@@ -155,7 +158,10 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 				}
 				// 课时调整
 				if (list.size() > 0) {
-					courseScheduleService.courseAdjust(list);
+					HttpResponseResult httpResponseResult = courseScheduleService.courseAdjust(list, allowZeroSalary);
+					if(httpResponseResult.getCode()== HttpStatus.PARTIAL_CONTENT.value()){
+						return httpResponseResult;
+					}
 				}
 			}
 		}
@@ -165,7 +171,7 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 		map.put(teacher.getId(),teacher.getId() + "");
 		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_LEAVE_RESULT,
 				map,null,0,"7","TEACHER",status.getMsg());
-		return true;
+		return BaseController.succeed();
 	}
 
 	@Override

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherRemindServiceImpl.java

@@ -0,0 +1,24 @@
+package com.ym.mec.biz.service.impl;
+
+import java.util.List;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.ym.mec.biz.dal.entity.TeacherRemind;
+import com.ym.mec.biz.service.TeacherRemindService;
+import com.ym.mec.biz.dal.dao.TeacherRemindDao;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TeacherRemindServiceImpl extends BaseServiceImpl<Long, TeacherRemind> implements TeacherRemindService {
+	
+	@Autowired
+	private TeacherRemindDao teacherRemindDao;
+
+	@Override
+	public BaseDAO<Long, TeacherRemind> getDAO() {
+		return teacherRemindDao;
+	}
+	
+}

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml

@@ -231,6 +231,16 @@
 			course_homework ch
 			WHERE ch.course_schedule_id_=#{courseScheduleId}
 	</select>
+	<select id="findByCourseSchedules" resultMap="CourseHomework">
+		SELECT
+			ch.*
+		FROM
+			course_homework ch
+		WHERE ch.course_schedule_id_ IN
+			<foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
+				#{courseId}
+			</foreach>
+	</select>
 	
 	<select id="queryTeacerNoReplyNum" resultMap="Mapper">
 		select cs.actual_teacher_id_ key_,count(1) value_ from student_course_homework sch

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

@@ -60,6 +60,7 @@
 
     <resultMap type="com.ym.mec.biz.dal.dto.CourseScheduleDto" id="courseScheduleDto" extends="CourseSchedule">
         <result column="teacher_name_" property="teacherName"/>
+        <result column="avatar_" property="headUrl"/>
         <result column="name_" property="classGroupName"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="school_name_" property="schoolName"/>
@@ -95,6 +96,7 @@
         <result column="end_class_time_" property="endClassTime"/>
         <result column="teacher_id_" property="teacherId"/>
         <result column="teacher_name_" property="teacherName"/>
+        <result column="avatar_" property="headUrl"/>
         <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="rest_of_class_" property="restOfClass"/>
@@ -519,6 +521,7 @@
             cs.new_course_id_,
             cg.student_num_ total_student_num_,
             su.real_name_ teacher_name_,
+            su.avatar_,
             IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_,
             s.name_ school_name_
         FROM
@@ -528,36 +531,50 @@
             LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_ AND ta.teacher_id_=cs.actual_teacher_id_
             LEFT JOIN school s ON cs.schoole_id_=s.id_
         WHERE
-        (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
-        <if test="classGroupIds != null and organIdList!=null">
-            AND cs.class_group_id_ IN
-            <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
-                #{classGroupId}
-            </foreach>
-        </if>
-        AND cs.id_ IS NOT NULL
-        <if test="type!=null">
-            AND cg.group_type_ = #{type}
-        </if>
-        <if test="musicGroupId!=null">
-            AND cs.music_group_id_=#{musicGroupId} AND cs.group_type_='MUSIC'
-        </if>
-        AND cs.class_date_ = DATE_FORMAT(#{date},'%Y-%m-%d')
-        ORDER BY CONCAT(cs.class_date_,' ',cs.start_class_time_)
-        <include refid="global.limit"/>
+            (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
+            <if test="organIds!=null and organIds.size()>0">
+                AND cs.organ_id_ IN
+                <foreach collection="organIds" item="organId" separator="," open="(" close=")">
+                    #{organId}
+                </foreach>
+            </if>
+            <if test="classGroupIds != null and organIdList!=null">
+                AND cs.class_group_id_ IN
+                <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+                    #{classGroupId}
+                </foreach>
+            </if>
+            AND cs.id_ IS NOT NULL
+            <if test="type!=null">
+                AND cs.group_type_ = #{type}
+            </if>
+            <if test="musicGroupId!=null">
+                AND cs.music_group_id_=#{musicGroupId} AND cs.group_type_='MUSIC'
+            </if>
+            AND cs.class_date_ = DATE_FORMAT(#{date},'%Y-%m-%d')
+            ORDER BY CONCAT(cs.class_date_,' ',cs.start_class_time_)
+            <include refid="global.limit"/>
     </select>
 
     <select id="countCourseSchedulesWithDate" resultType="int">
         SELECT
         count(*)
         FROM
-        course_schedule cs
-        LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
+            course_schedule cs
+            <if test="classGroupIds != null and organIdList!=null">
+                LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
+            </if>
         WHERE
         (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
         AND cs.id_ IS NOT NULL
+        <if test="organIds!=null and organIds.size()>0">
+            AND cs.organ_id_ IN
+            <foreach collection="organIds" item="organId" separator="," open="(" close=")">
+                #{organId}
+            </foreach>
+        </if>
         <if test="type!=null">
-            AND cg.group_type_ = #{type}
+            AND cs.group_type_ = #{type}
         </if>
         <if test="classGroupIds != null and organIdList!=null">
             AND cs.class_group_id_ IN
@@ -971,6 +988,31 @@
         cs.class_date_
     </select>
 
+    <select id="getCourseScheduleDateWithOrgan" resultType="java.util.Date">
+        SELECT
+            cs.class_date_
+        FROM
+            course_schedule cs
+        WHERE
+            (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
+            <if test="organIds!=null and organIds.size()>0">
+                AND cs.organ_id_ IN
+                <foreach collection="organIds" item="organId" separator="," open="(" close=")">
+                    #{organId}
+                </foreach>
+            </if>
+            <if test="month==null">
+                AND DATE_FORMAT( NOW(), '%Y%m' ) = DATE_FORMAT( cs.class_date_, '%Y%m' )
+            </if>
+            <if test="month!=null">
+                AND DATE_FORMAT( #{month}, '%Y%m' ) = DATE_FORMAT( cs.class_date_, '%Y%m' )
+            </if>
+            <if test="type!=null and type!=''">
+                AND cs.group_type_=#{type}
+            </if>
+        GROUP BY cs.class_date_
+    </select>
+
     <select id="findClassSubjects" resultType="string">
         SELECT
         CONCAT(cg.id_,'-',IF(GROUP_CONCAT(s.name_) IS NULL,'',GROUP_CONCAT(s.name_)))
@@ -1009,20 +1051,21 @@
         SELECT
         sa.id_,
         IF(sa.status_ IS NULL,'TRUANT',sa.status_) status_,
-        sa.teacher_id_,
-        su.username_,
-        cs.id_ course_schedule_id_,
+        su.real_name_ username_,
+        su.avatar_,
+        cssp.course_schedule_id_,
         cs.name_,
+        cs.type_,
         cs.class_date_,
         CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
         CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
-        cs.teacher_id_,
+        cs.actual_teacher_id_ teacher_id_,
         cs.teach_mode_
         FROM course_schedule_student_payment cssp
         LEFT JOIN student_attendance sa ON cssp.course_schedule_id_ = sa.course_schedule_id_ AND cssp.user_id_ =
         sa.user_id_
-        LEFT JOIN course_schedule cs ON sa.course_schedule_id_=cs.id_
-        LEFT JOIN sys_user su ON sa.teacher_id_=su.id_
+        LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
+        LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
         <include refid="queryStudentCourseScheduleRecordCondition"/>
         ORDER BY cs.class_date_ DESC,cs.start_class_time_ DESC
         <include refid="global.limit"/>
@@ -1033,23 +1076,25 @@
         FROM course_schedule_student_payment cssp
         LEFT JOIN student_attendance sa ON cssp.course_schedule_id_ = sa.course_schedule_id_ AND cssp.user_id_ =
         sa.user_id_
-        LEFT JOIN course_schedule cs ON sa.course_schedule_id_=cs.id_
-        LEFT JOIN sys_user su ON sa.teacher_id_=su.id_
+        LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
+        LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
         <include refid="queryStudentCourseScheduleRecordCondition"/>
     </select>
     <select id="findStudentCourseScheduleNotStartRecords" resultMap="studentCourseScheduleRecord">
-        SELECT cs.teacher_id_,
+        SELECT cs.actual_teacher_id_ teacher_id_,
                su.real_name_                                     teacher_name_,
+               su.avatar_,
                cs.id_                                            course_schedule_id_,
                cs.name_,
                cs.class_date_,
+               cs.type_,
                CONCAT(cs.class_date_, ' ', cs.start_class_time_) start_class_time_,
                CONCAT(cs.class_date_, ' ', cs.end_class_time_)   end_class_time_,
                cs.teach_mode_,
                cs.class_group_id_
         FROM class_group_student_mapper cgsm
                  LEFT JOIN course_schedule cs ON cs.class_group_id_ = cgsm.class_group_id_
-                 LEFT JOIN sys_user su ON cs.teacher_id_ = su.id_
+                 LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
         WHERE (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
             AND (cs.is_lock_=0 OR cs.is_lock_ IS NULL)
             AND cs.status_ = 'NOT_START'
@@ -2499,8 +2544,11 @@
         <if test="organIdList!=null">
             AND FIND_IN_SET(cs.organ_id_,#{organIdList})
         </if>
-        <if test="search!=null">
-            AND (cs.music_group_id_=#{search} OR cs.id_=#{search} OR cs.name_ LIKE CONCAT( '%', #{search}, '%' ))
+        <if test="search != null and search != ''">
+            AND (cs.music_group_id_ = #{search} OR cs.id_=#{search} OR cs.name_ LIKE CONCAT('%' ,#{search}, '%' ))
+        </if>
+        <if test="courseIdSearch != null">
+            AND cs.id_ = #{courseIdSearch}
         </if>
         <if test="searchType == 'ERR_ATTENDANCE'">
             AND ta.teacher_id_ = cs.actual_teacher_id_
@@ -3581,4 +3629,27 @@
         AND FIND_IN_SET(cs.group_type_,#{groupType})
         GROUP BY cssp.user_id_
     </select>
+
+    <select id="queryByCourseScheduleIds" resultMap="CourseSchedule">
+        SELECT
+        <include refid="resultSql" />
+        FROM course_schedule cs
+        WHERE cs.id_ IN
+        <foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
+            #{courseId}
+        </foreach>
+        ORDER BY cs.class_date_,cs.start_class_time_,cs.id_
+        <include refid="global.limit"></include>
+    </select>
+    <select id="countByCourseScheduleIds" resultType="int">
+        SELECT
+        COUNT(cs.id_)
+        FROM course_schedule cs
+        WHERE cs.id_ IN
+        <foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
+            #{courseId}
+        </foreach>
+    </select>
+
+
 </mapper>

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

@@ -29,6 +29,7 @@
 		<result column="student_name_" property="studentName"/>
 		<result column="teacher_id_" property="teacherId"/>
 		<result column="teacher_name_" property="teacherName"/>
+		<result column="avatar_" property="headUrl"/>
 		<result column="title_" property="title"/>
 		<result column="content_" property="content"/>
 		<result column="expire_date_" property="expireDate"/>
@@ -223,12 +224,13 @@
 			ee.expire_date_,
 			ee.teacher_id_,
 			tea.real_name_ teacher_name_,
+			tea.avatar_,
 			su.username_ student_name_
 		FROM
 			extracurricular_exercises_reply eer
 			LEFT JOIN extracurricular_exercises ee ON ee.id_=eer.extracurricular_exercises_id_
 			LEFT JOIN sys_user su ON su.id_ = eer.user_id_
-			LEFT JOIN sys_user tea ON tea.id_=ee.teacher_id_
+			LEFT JOIN sys_user tea ON tea.id_ = ee.teacher_id_
 			<include refid="queryStudentExtraExercisesCondition"/>
 			ORDER BY eer.create_time_ DESC
 		<include refid="global.limit"/>

+ 205 - 39
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -28,6 +28,10 @@
 		SELECT * FROM index_base_month_data ORDER BY id_
 	</select>
 
+	<select id="getOrganDataWithDayAndDataType" resultMap="IndexBaseMonthData">
+		SELECT * FROM index_base_month_data WHERE organ_id_=#{organId} AND month_ = #{day} AND data_type_=#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} ORDER BY month_ DESC LIMIT 1;
+	</select>
+
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		<!--
@@ -59,30 +63,32 @@
 
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData">
-		UPDATE index_base_month_data <set>
-		<if test="organId != null">
-			organ_id_ = #{organId},
-		</if>
-		<if test="id != null">
-			id_ = #{id},
-		</if>
-		<if test="activateNum != null">
-			activate_num_ = #{activateNum},
-		</if>
-		<if test="totalNum != null">
-			total_num_ = #{totalNum},
-		</if>
-		<if test="percent != null">
-			percent_ = #{percent},
-		</if>
-		<if test="month != null">
-			month_ = #{month},
-		</if>
-		<if test="dataType != null">
-			data_type_ = #{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-		</if>
-		update_time_ = NOW()
-	</set> WHERE id_ = #{id}
+		UPDATE index_base_month_data
+		<set>
+			<if test="organId != null">
+				organ_id_ = #{organId},
+			</if>
+			<if test="id != null">
+				id_ = #{id},
+			</if>
+			<if test="activateNum != null">
+				activate_num_ = #{activateNum},
+			</if>
+			<if test="totalNum != null">
+				total_num_ = #{totalNum},
+			</if>
+			<if test="percent != null">
+				percent_ = #{percent},
+			</if>
+			<if test="month != null">
+				month_ = #{month},
+			</if>
+			<if test="dataType != null">
+				data_type_ = #{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			</if>
+			update_time_ = NOW()
+		</set>
+		WHERE id_ = #{id}
 	</update>
 
 	<!-- 根据主键删除一条记录 -->
@@ -138,6 +144,15 @@
 		GROUP BY month_,data_type_
 	</select>
 
+	<select id="getWithDayAndDataType" resultMap="IndexBaseMonthData">
+		SELECT
+			*
+		FROM index_base_month_data
+		WHERE 1=1
+			AND data_type_ = #{dataType}
+			AND month_&gt;=#{day}
+	</select>
+
 	<select id="getStudentSignUpData" resultMap="IndexBaseMonthData">
 		SELECT
 			organ_id_,
@@ -151,7 +166,7 @@
 					 sr.user_id_
 				 FROM
 					 student_registration sr
-						 LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+					LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
 				 WHERE
 					 mg.status_ IN ( 'PREPARE', 'PROGRESS' )
 				   AND sr.music_group_status_ = 'NORMAL'
@@ -161,12 +176,13 @@
 			 SELECT DISTINCT
 				 cssp.user_id_
 			 FROM
-				 course_schedule_student_payment cssp
-					 LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
+				course_schedule_student_payment cssp
+				LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
 			 WHERE
 				 cs.del_flag_ = 0
 			   AND ( cs.is_lock_ = 0 OR cs.is_lock_ IS NULL )
 			   AND ( cs.new_course_id_ IS NULL OR cs.new_course_id_ = cs.id_ )
+			   AND cssp.group_type_ IN ('VIP', 'PRACTICE')
 			   AND cs.organ_id_ IS NOT NULL
 			   AND DATE_FORMAT(cssp.create_time_, '%Y-%m-%d')&lt;=#{dayStr}
 			)) u
@@ -179,10 +195,68 @@
 		ORDER BY organ_id_;
 	</select>
 
-	<select id="getHomeworkData" resultMap="IndexBaseMonthData">
+	<select id="getStudentRegistrationData" resultMap="IndexBaseMonthData">
+		SELECT
+			su.organ_id_,
+			#{dayStr} month_,
+			COUNT( DISTINCT stu.user_id_ ) total_num_,
+			COUNT( DISTINCT stu.user_id_ ) activate_num_,
+			COUNT( DISTINCT stu.user_id_ ) percent_
+		FROM
+			student stu
+			LEFT JOIN sys_user su ON stu.user_id_=su.id_
+		WHERE
+			su.del_flag_=0
+		  AND su.organ_id_ IS NOT NULL
+		  AND su.user_type_ LIKE '%STUDENT%'
+		  AND DATE_FORMAT(stu.create_time_, '%Y-%m-%d')&lt;=#{dayStr}
+		GROUP BY organ_id_
+		ORDER BY organ_id_;
+	</select>
+
+	<select id="getAddStudentRegistrationData" resultMap="IndexBaseMonthData">
+		SELECT
+			su.organ_id_,
+			#{dayStr} month_,
+			COUNT( DISTINCT stu.user_id_ ) total_num_,
+			COUNT( DISTINCT stu.user_id_ ) activate_num_,
+			COUNT( DISTINCT stu.user_id_ ) percent_
+		FROM
+			student stu
+			LEFT JOIN sys_user su ON stu.user_id_=su.id_
+		WHERE
+			su.del_flag_=0
+		  AND su.organ_id_ IS NOT NULL
+		  AND su.user_type_ LIKE '%STUDENT%'
+		  AND DATE_FORMAT(stu.create_time_, '%Y-%m-%d')=#{dayStr}
+		GROUP BY organ_id_
+		ORDER BY organ_id_;
+	</select>
+
+	<select id="getChargeStudentChangeData" resultMap="IndexBaseMonthData">
 		SELECT
 			su.organ_id_,
 			#{dayStr} month_,
+			COUNT( DISTINCT stu.user_id_ ) total_num_,
+			COUNT( DISTINCT (CASE WHEN DATE_FORMAT( spo.create_time_, '%Y-%m-%d' ) &lt;= #{dayStr} THEN spo.user_id_ ELSE NULL END) ) activate_num_,
+			TRUNCATE(COUNT(DISTINCT (CASE WHEN DATE_FORMAT( spo.create_time_, '%Y-%m-%d' ) &lt;= #{dayStr} THEN spo.user_id_ ELSE NULL END))/COUNT(DISTINCT stu.user_id_)*100, 2) percent_
+		FROM
+			student stu
+			LEFT JOIN sys_user su ON stu.user_id_=su.id_
+			LEFT JOIN student_payment_order spo ON stu.user_id_=spo.user_id_ AND status_='SUCCESS' AND actual_amount_>0
+		WHERE
+			su.del_flag_=0
+			  AND su.organ_id_ IS NOT NULL
+			  AND su.user_type_ LIKE '%STUDENT%'
+			  AND DATE_FORMAT(stu.create_time_, '%Y-%m-%d')&lt;=#{dayStr}
+		GROUP BY organ_id_
+		ORDER BY organ_id_;
+	</select>
+
+	<select id="getHomeworkData" resultMap="IndexBaseMonthData">
+		SELECT
+			su.organ_id_,
+			sees.monday_ month_,
 			<choose>
 				<when test="type == 'submit'">
 					SUM(sees.actual_exercises_num_) total_num_,
@@ -195,17 +269,17 @@
 					TRUNCATE(SUM(sees.exercises_message_num_)/SUM(sees.exercises_reply_num_)*100, 2) percent_
 				</when>
 				<otherwise>
-					SUM(sees.expect_exercises_num_) total_num_,
+					SUM(sees.expect_exercises_num_-sees.not_over_course_num_) total_num_,
 					SUM(sees.actual_exercises_num_) activate_num_,
-					TRUNCATE(SUM(sees.actual_exercises_num_)/SUM(sees.expect_exercises_num_)*100, 2) percent_
+					TRUNCATE(SUM(sees.actual_exercises_num_)/SUM(sees.expect_exercises_num_-sees.not_over_course_num_)*100, 2) percent_
 				</otherwise>
 			</choose>
 		FROM student_extracurricular_exercises_situation_ sees
 		LEFT JOIN sys_user su ON sees.student_id_=su.id_
 		WHERE su.del_flag_=0
 			AND su.organ_id_ IS NOT NULL
-			AND (DATE_FORMAT(sees.monday_, '%Y-%m')=DATE_FORMAT(#{dayStr}, '%Y-%m')
-			        OR DATE_FORMAT(sees.sunday_, '%Y-%m')=DATE_FORMAT(#{dayStr}, '%Y-%m'))
+			AND DATE_FORMAT(sees.monday_, '%Y-%m-%d')&lt;=#{dayStr}
+			AND DATE_FORMAT(sees.sunday_, '%Y-%m-%d')&gt;=#{dayStr}
 		GROUP BY su.organ_id_
 		ORDER BY su.organ_id_
 	</select>
@@ -295,6 +369,7 @@
 			LEFT JOIN sys_user su ON su.id_ = t.id_
 		WHERE
 			su.del_flag_ = 0
+		  	AND (t.demission_date_ IS NULl OR DATE_FORMAT(t.demission_date_, '%Y-%m-%d') &gt; #{dayStr})
 		  	<if test="isDemission==null">
 				AND su.lock_flag_ = 0
 			</if>
@@ -326,14 +401,15 @@
 		WHERE
 			m.del_flag_ = 0
 			AND (m.is_lock_ = 0 OR m.is_lock_ IS NULL)
-		  	AND m.status_ = 'OVER'
+		  	AND m.status_ = #{courseStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 			AND (m.new_course_id_ IS NULL OR m.new_course_id_=m.id_)
+			AND NOT EXISTS (SELECT id_ FROM practice_group WHERE m.group_type_='PRACTICE' AND m.music_group_id_=id_ AND type_='TRIAL')
 			AND m.organ_id_ IS NOT NULL
 			<if test="groupType!=null">
-				AND m.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+				AND m.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 			</if>
 			<if test="dayStr!=null and dayStr!=''">
-				AND DATE_FORMAT(m.class_date_, '%Y-%m-%d') = #{dayStr}
+				AND m.class_date_ &gt;= #{dayStr}
 			</if>
 		GROUP BY
 			m.organ_id_
@@ -341,6 +417,59 @@
 			m.organ_id_;
 	</select>
 
+	<select id="getGroupSurplusCourseData" resultMap="IndexBaseMonthData">
+		SELECT
+			m.organ_id_,
+			#{dayStr} month_,
+			COUNT( m.id_ ) total_num_,
+			COUNT( m.id_ ) activate_num_,
+			COUNT( m.id_ ) percent_
+		FROM
+			course_schedule m
+		WHERE
+			m.del_flag_ = 0
+			AND (m.is_lock_ = 0 OR m.is_lock_ IS NULL)
+			AND m.status_ = #{courseStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			AND (m.new_course_id_ IS NULL OR m.new_course_id_=m.id_)
+			AND NOT EXISTS (SELECT id_ FROM practice_group WHERE m.group_type_='PRACTICE' AND m.music_group_id_=id_ AND type_='TRIAL')
+			AND m.organ_id_ IS NOT NULL
+			<if test="groupType!=null">
+				AND m.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="dayStr!=null and dayStr!=''">
+				AND m.class_date_ &lt;= #{dayStr}
+			</if>
+		GROUP BY m.organ_id_
+		ORDER BY m.organ_id_;
+	</select>
+
+	<select id="getGroupCourseDataWithGroup" resultMap="IndexBaseMonthData">
+		SELECT
+		m.organ_id_,
+		#{dayStr} month_,
+		COUNT( m.id_ ) total_num_,
+		COUNT( m.id_ ) activate_num_,
+		COUNT( m.id_ ) percent_
+		FROM
+		course_schedule m
+		WHERE
+		m.del_flag_ = 0
+		AND (m.is_lock_ = 0 OR m.is_lock_ IS NULL)
+		AND (m.new_course_id_ IS NULL OR m.new_course_id_=m.id_)
+		AND NOT EXISTS (SELECT id_ FROM practice_group WHERE m.group_type_='PRACTICE' AND m.music_group_id_=id_ AND type_='TRIAL')
+		AND m.organ_id_ IS NOT NULL
+		<if test="groupType!=null">
+			AND m.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		</if>
+		<if test="dayStr!=null and dayStr!=''">
+			AND m.class_date_ = #{dayStr}
+		</if>
+		GROUP BY
+		m.organ_id_
+		ORDER BY
+		m.organ_id_;
+	</select>
+
 	<select id="getOtherStudentData" resultMap="IndexBaseMonthData">
 		SELECT
 			su.organ_id_,
@@ -367,6 +496,31 @@
 			su.organ_id_;
 	</select>
 
+	<select id="getVipPracticeAddStudentData" resultMap="IndexBaseMonthData">
+		SELECT
+			su.organ_id_,
+			#{dayStr} month_,
+			COUNT( DISTINCT s.user_id_ ) total_num_,
+			COUNT( DISTINCT s.user_id_ ) activate_num_,
+			COUNT( DISTINCT s.user_id_ ) percent_
+		FROM
+			sys_user su
+			LEFT JOIN course_schedule_student_payment s ON su.id_=s.user_id_
+			LEFT JOIN course_schedule_student_payment cssp1 ON s.user_id_=cssp1.user_id_ AND cssp1.create_time_&lt;#{dayStr}
+			LEFT JOIN course_schedule m ON s.course_schedule_id_=m.id_
+		WHERE
+			m.del_flag_ = 0
+			AND (m.is_lock_ = 0 OR m.is_lock_ IS NULL)
+			AND cssp1.id_ IS NULL
+			AND su.organ_id_ IS NOT NULL
+			AND m.group_type_ IN ('VIP', 'PRACTICE')
+			<if test="dayStr!=null and dayStr!=''">
+				AND DATE_FORMAT(s.create_time_, '%Y-%m-%d') = #{dayStr}
+			</if>
+		GROUP BY su.organ_id_
+		ORDER BY su.organ_id_;
+	</select>
+
 	<select id="getStudentConversionData" resultMap="IndexBaseMonthData">
 		SELECT
 			cs.organ_id_,
@@ -595,8 +749,11 @@
 		AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0)))
 		AND (ta.dispose_content_ IS NOT NULL OR (ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL))
 		AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
-		<if test="organIds != null and organIds != ''">
-			AND FIND_IN_SET(cs.organ_id_,#{organIds})
+		<if test="organIds != null and organIds.size()>0">
+			AND cs.organ_id_ IN
+			<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+				#{organId}
+			</foreach>
 		</if>
 		GROUP BY cs.id_) c
 	</select>
@@ -607,8 +764,11 @@
 		AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND cs.class_date_>='2021-02-01'
 		AND ta.sign_in_time_ IS NULL AND ta.sign_out_time_ IS NULL AND ta.dispose_content_ IS NULL
 		AND (cs.new_course_id_ IS NULL OR cs.new_course_id_ = cs.id_)
-		<if test="organIds != null and organIds != ''">
-			AND FIND_IN_SET(cs.organ_id_,#{organIds})
+		<if test="organIds!=null and organIds.size() > 0">
+			AND cs.organ_id_ IN
+			<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+				#{organId}
+			</foreach>
 		</if>
 	</select>
 	<select id="queryTeacherLeave" resultType="int">
@@ -637,6 +797,9 @@
 		<if test="organIdsStr != null and organIdsStr != ''">
 			AND FIND_IN_SET(ii.organ_id_,#{organIdsStr})
 		</if>
+		<if test="userId != null">
+			AND ii.user_id_ = #{userId}
+		</if>
 	</select>
 	<select id="queryInspectionItemPlan" resultType="int">
 		SELECT COUNT(DISTINCT iip.id_) FROM inspection_item_plan iip
@@ -656,6 +819,9 @@
 		<if test="organIdsStr != null and organIdsStr != ''">
 			AND FIND_IN_SET(ii.organ_id_,#{organIdsStr})
 		</if>
+		<if test="userId != null">
+			AND ii.user_id_ = #{userId}
+		</if>
 	</select>
 
     <select id="queryErrInspection" resultType="int">

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

@@ -510,11 +510,10 @@
 				</foreach>
 			</if>
 	</select>
-
 	<select id="queryNoPaymentCanPushByCalenderId"
 			resultMap="MusicGroupPaymentCalenderDetail">
 		SELECT mgpcd.* FROM music_group_payment_calender_detail mgpcd
-								LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpcd.music_group_payment_calender_id_
+		LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpcd.music_group_payment_calender_id_
 		WHERE (mgpc.status_ = 'OPEN' OR mgpcd.open_ = 1) AND mgpcd.payment_status_ = 'NON_PAYMENT' AND mgpcd.expect_amount_ != 0
 		AND mgpcd.music_group_payment_calender_id_ = #{calenderId} AND FIND_IN_SET(mgpcd.user_id_,#{studentIds})
 	</select>

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

@@ -494,7 +494,8 @@
     <select id="findStudentAttendance" resultMap="StudentAttendance">
         SELECT cssp.id_,cssp.course_schedule_id_,cssp.user_id_,cssp.group_type_,cssp.music_group_id_,sa.sign_in_time_,sa.sign_out_time_,
                CASE WHEN sa.status_ IS NULL THEN 'TRUANT' ELSE sa.status_ END status_,
-        su.username_,su.phone_,su.avatar_,cs.teach_mode_,cs.type_ course_type_,o.name_ organ_name_,tu.real_name_ teacher_name_,cs.name_ course_schedule_name_,cs.status_ course_status_,
+        su.username_,su.phone_,su.avatar_,cs.teach_mode_,cs.type_ course_type_,o.name_ organ_name_,tu.real_name_ teacher_name_,tu.avatar_,
+        cs.name_ course_schedule_name_,cs.status_ course_status_,
         cs.actual_teacher_id_ teacher_id_,cs.class_date_ ,cs.start_class_time_,cs.end_class_time_ ,cs.new_course_id_,
         CASE WHEN sa.visit_flag_ IS NULL THEN 0 ELSE sa.visit_flag_ END visitFlag
         FROM course_schedule_student_payment cssp left join course_schedule cs on cs.id_ = cssp.course_schedule_id_

+ 15 - 2
mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml

@@ -152,6 +152,8 @@
         <result column="expect_num_" property="expectNum"/>
         <result column="expiry_date_" property="expiryDate"/>
         <result column="remark_" property="remark"/>
+        <result column="real_name_" property="teacherName"/>
+        <result column="avatar_" property="headUrl"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="is_replied_" property="isReplied" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
@@ -188,10 +190,13 @@
         ch.expiry_date_,
         sch.remark_,
         sch.status_,
-        sch.is_replied_
+        sch.is_replied_,
+        su.real_name_,
+        su.avatar_
         FROM student_course_homework sch
         LEFT JOIN course_homework ch ON sch.course_homework_id_=ch.id_
         LEFT JOIN course_schedule cs ON ch.course_schedule_id_=cs.id_
+        LEFT JOIN sys_user su ON su.id_ = cs.actual_teacher_id_
         LEFT JOIN music_group mg ON ch.music_group_id_=mg.id_
         LEFT JOIN class_group cg ON ch.class_group_id_=cg.id_
         <include refid="queryCondition"/>
@@ -319,6 +324,9 @@
         <result property="startClassTime" column="start_class_time_"/>
         <result property="teacherId" column="actual_teacher_id_"/>
         <result property="status" column="status_"/>
+        <result property="expiryDate" column="expiry_date_"/>
+        <result property="teacherName" column="real_name_"/>
+        <result property="headUrl" column="avatar_"/>
     </resultMap>
     <select id="findStudentHomeworkRecord" resultMap="StudentHomeworkRecordDto">
         SELECT
@@ -327,10 +335,15 @@
         cs.name_ course_name_,
         CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
         cs.actual_teacher_id_,
-        sch.status_
+        sch.status_,
+        ch.expiry_date_,
+        su.real_name_,
+        su.avatar_
         FROM
         student_course_homework sch
+        LEFT JOIN course_homework ch ON ch.id_ = sch.course_homework_id_
         LEFT JOIN course_schedule cs ON cs.id_ = sch.course_schedule_id_
+        LEFT JOIN sys_user su ON su.id_ = cs.actual_teacher_id_
         WHERE sch.user_id_=#{userId}
         AND DATE_FORMAT(class_date_, '%Y-%m')=DATE_FORMAT(#{classDate}, '%Y-%m')
         ORDER BY CONCAT(cs.class_date_,' ',cs.start_class_time_) DESC

+ 131 - 10
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -23,6 +23,8 @@
 		<result column="last_submit_time_" property="lastSubmitTime"/>
 		<result column="serve_type_" property="serveType"/>
 		<result column="course_ids_" property="courseIds"/>
+		<result column="not_over_course_ids_" property="notOverCourseIds"/>
+		<result column="not_over_course_num_" property="notOverCourseNum"/>
 	</resultMap>
 
 	<resultMap id="StudentExercisesSituationDto" type="com.ym.mec.biz.dal.dto.StudentExercisesSituationDto" extends="StudentExtracurricularExercisesSituation">
@@ -45,28 +47,28 @@
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		<!--
-		<selectKey resultClass="int" keyProperty="id" > 
-		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		<selectKey resultClass="int" keyProperty="id" >
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
 		</selectKey>
 		-->
 		INSERT INTO student_extracurricular_exercises_situation_ (id_,student_id_,week_of_year_,monday_,sunday_,teacher_id_,expect_exercises_num_,
 		                                                          actual_exercises_num_,exercises_reply_num_,exercises_message_num_,
 		                                                          exercises_message_timely_num_,create_time_,update_time_,last_submit_time_,
-		                                                          serve_type_,course_ids_)
+		                                                          serve_type_,course_ids_,not_over_course_ids_,not_over_course_num_)
 		VALUES(#{id},#{studentId},#{weekOfYear},#{monday},#{sunday},#{teacherId},#{expectExercisesNum},#{actualExercisesNum},#{exercisesReplyNum},
-		       #{exercisesMessageNum},#{exercisesMessageTimelyNum},NOW(),NOW(),#{lastSubmitTime},#{serveType},#{courseIds})
+		       #{exercisesMessageNum},#{exercisesMessageTimelyNum},NOW(),NOW(),#{lastSubmitTime},#{serveType},#{courseIds},#{notOverCourseIds},#{notOverCourseNum})
 	</insert>
 
 	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO student_extracurricular_exercises_situation_ (student_id_,week_of_year_,monday_,sunday_,teacher_id_,expect_exercises_num_,
 		                                                          actual_exercises_num_,exercises_reply_num_,exercises_message_num_,
 		                                                          exercises_message_timely_num_,create_time_,update_time_,last_submit_time_,
-		                                                          serve_type_,course_ids_)
+		                                                          serve_type_,course_ids_,not_over_course_ids_,not_over_course_num_)
 		VALUES
 		<foreach collection="situations" item="situation" separator=",">
 			(#{situation.studentId},#{situation.weekOfYear},#{situation.monday},#{situation.sunday},#{situation.teacherId},#{situation.expectExercisesNum},
 			#{situation.actualExercisesNum},#{situation.exercisesReplyNum},#{situation.exercisesMessageNum},#{situation.exercisesMessageTimelyNum},
-			NOW(),NOW(),#{situation.lastSubmitTime},#{situation.serveType},#{situation.courseIds})
+			NOW(),NOW(),#{situation.lastSubmitTime},#{situation.serveType},#{situation.courseIds},#{situation.notOverCourseIds},#{situation.notOverCourseNum})
 		</foreach>
 	</insert>
 
@@ -119,6 +121,12 @@
 			<if test="courseIds!=null and courseIds!=''">
 				course_ids_=#{courseIds},
 			</if>
+			<if test="notOverCourseIds!=null and notOverCourseIds!=''">
+				not_over_course_ids_=#{notOverCourseIds},
+			</if>
+			<if test="notOverCourseNum!=null">
+				not_over_course_num_=#{notOverCourseNum},
+			</if>
 			update_time_ = #{updateTime}
 		</set> WHERE id_ = #{id}
 	</update>
@@ -166,6 +174,12 @@
 				<if test="situation.courseIds!=null">
 					course_ids_=#{situation.courseIds},
 				</if>
+				<if test="situation.notOverCourseIds!=null and situation.notOverCourseIds!=''">
+					not_over_course_ids_=#{situation.notOverCourseIds},
+				</if>
+				<if test="situation.notOverCourseNum!=null">
+					not_over_course_num_=#{situation.notOverCourseNum},
+				</if>
 				update_time_ = NOW()
 			</set> WHERE id_ = #{situation.id}
 		</foreach>
@@ -454,10 +468,12 @@
 		  <if test="teacherId!=null">
 			  AND teacher_id_=#{teacherId}
 		  </if>
-		  AND student_id_ IN
-		<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
-			#{studentId}
-		</foreach>
+		  <if test="studentIds!=null and studentIds.size()>0">
+			  AND student_id_ IN
+			  <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+				  #{studentId}
+			  </foreach>
+		  </if>
 	</select>
     <select id="findTeacherNoStartServices" resultMap="StudentExtracurricularExercisesSituation">
 		SELECT * FROM student_extracurricular_exercises_situation_ WHERE teacher_id_=#{teacherId} AND actual_exercises_num_&lt;=0 AND serve_type_='HOMEWORK';
@@ -467,4 +483,109 @@
 			resultMap="StudentExtracurricularExercisesSituation">
 		SELECT * FROM student_extracurricular_exercises_situation_ WHERE monday_=#{monday} AND FIND_IN_SET(#{courseId}, course_ids_)
 	</select>
+
+	<resultMap id="TeacherServeDto" type="com.ym.mec.biz.dal.dto.TeacherServeDto">
+		<result column="organ_name_" property="organName"/>
+		<result column="monday_" property="monday"/>
+		<result column="sunday_" property="sunday"/>
+		<result column="teacher_id_" property="teacherId"/>
+		<result column="teacher_name_" property="teacherName"/>
+		<result column="homework_num_" property="homeworkNum"/>
+		<result column="exercise_num_" property="exerciseNum"/>
+		<result column="un_done_" property="unDone"/>
+		<result column="remind_time_" property="remindDate"/>
+		<result column="operator_name_" property="operatorName"/>
+	</resultMap>
+
+	<sql id="queryTeacherServeInfoCondition">
+		<where>
+			<if test="organIds!=null and organIds.size()>0">
+				AND tea.organ_id_ IN
+				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+					#{organId}
+				</foreach>
+			</if>
+			<if test="monday!=null and monday!='' and sunday!=null and sunday!=''">
+				AND sees.monday_ BETWEEN #{monday} AND #{sunday}
+			</if>
+			<if test="teacherId!=null">
+				AND sees.teacher_id_ = #{teacherId}
+			</if>
+			<if test="reminded!=null and reminded==0">
+				AND NOT EXISTS (SELECT id_ FROM teacher_remind WHERE teacher_id_=sees.teacher_id_ AND monday_ = sees.monday_ AND type_='SERVICE')
+			</if>
+			<if test="reminded!=null and reminded==1">
+				AND EXISTS (SELECT id_ FROM teacher_remind WHERE teacher_id_=sees.teacher_id_ AND monday_ = sees.monday_ AND type_='SERVICE')
+			</if>
+			<if test="operatorId!=null">
+				AND EXISTS (SELECT id_ FROM teacher_remind WHERE operator_id_=#{operatorId} AND teacher_id_=sees.teacher_id_ AND monday_ = sees.monday_ AND type_='SERVICE')
+			</if>
+		</where>
+	</sql>
+
+	<select id="queryTeacherServeInfo" resultMap="TeacherServeDto">
+		SELECT
+			organ.name_ organ_name_,
+			sees.monday_,
+			sees.sunday_,
+			sees.teacher_id_,
+			su.real_name_ teacher_name_,
+			SUM(CASE sees.serve_type_ WHEN 'HOMEWORK' THEN sees.expect_exercises_num_ ELSE 0 END) homework_num_,
+			SUM(CASE sees.serve_type_ WHEN 'EXERCISE' THEN 1 ELSE 0 END) exercise_num_,
+			SUM( sees.expect_exercises_num_-sees.not_over_course_num_ )> SUM( sees.actual_exercises_num_ ) un_done_
+		FROM
+			student_extracurricular_exercises_situation_ sees
+			LEFT JOIN teacher tea ON tea.id_=sees.teacher_id_
+			LEFT JOIN organization organ ON organ.id_=tea.organ_id_
+			LEFT JOIN sys_user su ON tea.id_=su.id_
+		<include refid="queryTeacherServeInfoCondition" />
+		GROUP BY sees.monday_,sees.sunday_,sees.teacher_id_
+		<if test="unDone!=null">
+			HAVING
+			<if test="unDone==1">
+				SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &gt; SUM( sees.actual_exercises_num_ )
+			</if>
+			<if test="unDone==0">
+				SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &lt;= SUM( sees.actual_exercises_num_ )
+			</if>
+		</if>
+		ORDER BY sees.monday_,sees.sunday_,sees.teacher_id_
+		<include refid="global.limit"></include>
+	</select>
+
+	<select id="countTeacherServeInfo" resultType="int">
+		SELECT COUNT(1) FROM (
+			SELECT
+				sees.id_
+			FROM
+				student_extracurricular_exercises_situation_ sees
+				LEFT JOIN teacher tea ON tea.id_=sees.teacher_id_
+			<include refid="queryTeacherServeInfoCondition" />
+			GROUP BY sees.monday_,sees.sunday_,sees.teacher_id_
+			<if test="unDone!=null">
+				HAVING
+				<if test="unDone==1">
+					SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &gt; SUM( sees.actual_exercises_num_ )
+				</if>
+				<if test="unDone==0">
+					SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &lt;= SUM( sees.actual_exercises_num_ )
+				</if>
+			</if>
+			ORDER BY sees.monday_,sees.sunday_,sees.teacher_id_
+		) e
+	</select>
+
+	<select id="findTeacherServeWithDate" resultMap="StudentExtracurricularExercisesSituation">
+		SELECT * FROM student_extracurricular_exercises_situation_
+		WHERE monday_ BETWEEN #{monday} AND #{sunday}
+			<if test="serveType!=null and serveType!=''">
+				AND serve_type_=#{serveType}
+			</if>
+		  <if test="teacherIds!=null and teacherIds.size()>0">
+			  AND teacher_id_ IN
+			  <foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
+				  #{teacherId}
+			  </foreach>
+		  </if>
+	</select>
 </mapper>

+ 17 - 6
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -153,9 +153,8 @@
 
     <select id="findStudentsByOrganId" resultMap="studentManageListDto">
         SELECT o.`name_` organ_name_,s.`user_id_` ,su.`username_` ,su.`phone_` parents_phone_,su.`real_name_` ,su.`gender_` , su.organ_id_,
-		tu.`real_name_` teacher_name_,IF(s.service_tag_=2,0,s.service_tag_) service_tag_ ,s.`operating_tag_` , s.care_package_, s.come_on_package_, suca.`course_balance_` ,
-		sub.`name_` music_group_subject_ ,su.birthdate_,s.subject_id_list_,s.teacher_id_,
-		case when su.password_ is null then false else true end isActive_,s.is_new_user_,case when count(sut.user_id_) > 0 then 1 else 0 end is_signed_contract_
+		tu.`real_name_` teacher_name_,CASE s.service_tag_ WHEN 2 THEN 0 ELSE s.service_tag_ END service_tag_ ,s.`operating_tag_` , s.care_package_, s.come_on_package_, suca.`course_balance_` ,
+		sub.`name_` music_group_subject_ ,su.birthdate_,s.subject_id_list_,s.teacher_id_,case when su.password_ is null then false else true end isActive_,s.is_new_user_,case when sut.user_id_ is null then 0 else 1 end is_signed_contract_
 		FROM `student` s LEFT JOIN `sys_user` su on s.`user_id_` = su.`id_`
 		LEFT JOIN `organization` o on o.`id_` = su.`organ_id_`
 		LEFT JOIN `sys_user` tu on tu.`id_` = s.`teacher_id_` 
@@ -163,15 +162,17 @@
 		LEFT JOIN `subject` sub on sub.id_ = s.`subject_id_list_`
 		left join sys_user_tsign sut on sut.user_id_ = s.user_id_
         <include refid="findStudentsByOrganIdSql"/>
-        group by s.user_id_
         ORDER BY su.create_time_ DESC
         <include refid="global.limit"/>
     </select>
     <sql id="findStudentsByOrganIdSql">
         <where>
                 su.del_flag_ = 0
-            <if test="organId != null and organId != ''">
-                AND FIND_IN_SET(su.organ_id_,#{organId})
+            <if test="organIds != null and organIds.length>0">
+                AND su.organ_id_ IN
+                <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+                    #{organId}
+                </foreach>
             </if>
             <if test="search != null and search != ''">
                 AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.id_ LIKE CONCAT('%',#{search},'%'))
@@ -903,4 +904,14 @@
             AND (su.id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
         </if>
     </select>
+
+    <select id="getStudentSubject" resultMap="com.ym.mec.biz.dal.dao.SubjectDao.Subject">
+        SELECT s.user_id_ id_ ,GROUP_CONCAT(sj.name_) name_ FROM student s
+        LEFT JOIN subject sj ON FIND_IN_SET(sj.id_,s.subject_id_list_)
+        WHERE s.user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+        GROUP BY s.user_id_
+    </select>
 </mapper>

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

@@ -373,7 +373,7 @@
         <if test="groupType != null and groupType==@com.ym.mec.biz.dal.enums.GroupType@PRACTICE">
             LEFT JOIN practice_group pg ON cssp.music_group_id_ = pg.id_ AND cssp.group_type_ = 'PRACTICE'
         </if>
-        WHERE FIND_IN_SET(s.teacher_id_, #{teacherIds})
+        WHERE s.teacher_id_ = #{teacherId}
         AND cs.status_ IN ('NOT_START', 'UNDERWAY')
         AND (cs.is_lock_ IS NULL OR cs.is_lock_ = 0)
         <if test="groupType != null">
@@ -496,6 +496,7 @@
         <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="music_group_id_" property="musicGroupId"/>
         <result column="class_group_id_" property="classGroupId"/>
+        <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="actual_teacher_id_" property="actualTeacherId"/>
         <result column="course_start_time_" property="courseStartTime"/>
@@ -510,6 +511,7 @@
             cs.group_type_,
             cs.music_group_id_,
             cs.class_group_id_,
+            cs.status_,
             CASE cs.type_ WHEN 'TRAINING_SINGLE' THEN 'SINGLE' WHEN 'TRAINING_MIX' THEN 'MIX' ELSE cs.type_ END type_,
             cs.actual_teacher_id_,
             CONCAT(cs.class_date_, ' ', cs.start_class_time_) course_start_time_,
@@ -644,4 +646,21 @@
             AND sub.id_ IS NOT NULL
         ORDER BY sub.id_ DESC
     </select>
+
+    <select id="queryByIds" resultMap="Student">
+        SELECT * FROM student
+        WHERE user_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+        ORDER BY user_id_
+        <include refid="global.limit"></include>
+    </select>
+    <select id="countByIds" resultType="int">
+        SELECT count(user_id_) FROM student
+        WHERE user_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+    </select>
 </mapper>

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

@@ -469,19 +469,19 @@
         AND music_group_status_ != 'QUIT'
     </select>
 
-    <insert id="batchInsert">
+    <insert id="batchInsert" parameterType="list" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO student_registration
         (parents_phone_,id_,user_id_,name_,music_group_id_,current_grade_,current_class_,subject_id_,
         is_allow_adjust_,kit_purchase_method_,remark_,create_time_,update_time_,
-        parents_name_,parents_company_,payment_status_,actual_subject_id_,music_group_status_)
+        parents_name_,parents_company_,payment_status_,actual_subject_id_,music_group_status_,is_merge_)
         VALUES
-        <foreach collection="studentRegistrationList" item="item" index="index" separator=",">
+        <foreach collection="list" item="item" index="index" separator=",">
             (#{item.parentsPhone},#{item.id},#{item.userId},#{item.name},#{item.musicGroupId},#{item.currentGrade},
             #{item.currentClass},#{item.subjectId},#{item.isAllowAdjust,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{item.kitPurchaseMethod,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{item.remark},now(),now(),#{item.parentsName},#{item.parentsCompany},
             #{item.paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{item.subjectId},
-            #{item.musicGroupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+            #{item.musicGroupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{item.isMerge})
         </foreach>
     </insert>
 

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

@@ -98,9 +98,6 @@
 					AND ses.create_user_id_ = #{createUserId}
 				</if>
 			</if>
-			<if test="subjectId != null">
-				AND FIND_IN_SET(#{subjectId},ses.subject_ids_)
-			</if>
 		</where>
 	</sql>
 	<!-- 分页查询 -->
@@ -109,8 +106,7 @@
 		LEFT JOIN sys_user su ON ses.create_user_id_ = su.id_
 		LEFT JOIN `subject` s ON FIND_IN_SET(s.id_,ses.subject_ids_)
 		<include refid="queryPageSql"/>
-		GROUP BY ses.id_
-		ORDER BY ses.id_ DESC
+		GROUP BY ses.id_ ORDER BY ses.id_ DESC
 		<include refid="global.limit"/>
 	</select>
 	

+ 21 - 24
mec-biz/src/main/resources/config/mybatis/SysMusicScoreCategoriesMapper.xml

@@ -28,35 +28,32 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysMusicScoreCategories" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO sys_music_score_categories (id_,parent_id_,name_,cover_img_,operator_id_,create_time_,update_time_)
-		VALUES(#{id},#{parentId},#{name},#{coverImg},#{operatorId},#{createTime},#{updateTime})
+		INSERT INTO sys_music_score_categories (parent_id_,name_,cover_img_,operator_id_,create_time_,update_time_)
+		VALUES(#{parentId},#{name},#{coverImg},#{operatorId},NOW(),NOW())
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.SysMusicScoreCategories">
 		UPDATE sys_music_score_categories <set>
-		<if test="parentId != null">
-		parent_id_ = #{parentId},
-		</if>
-		<if test="operatorId != null">
-		operator_id_ = #{operatorId},
-		</if>
-		<if test="coverImg != null">
-		cover_img_ = #{coverImg},
-		</if>
-		<if test="id != null">
-		id_ = #{id},
-		</if>
-		<if test="updateTime != null">
-		update_time_ = #{updateTime},
-		</if>
-		<if test="name != null">
-		name_ = #{name},
-		</if>
-		<if test="createTime != null">
-		create_time_ = #{createTime},
-		</if>
-		</set> WHERE id_ = #{id}
+			<if test="parentId != null">
+			parent_id_ = #{parentId},
+			</if>
+			<if test="operatorId != null">
+			operator_id_ = #{operatorId},
+			</if>
+			<if test="coverImg != null">
+			cover_img_ = #{coverImg},
+			</if>
+			<if test="id != null">
+			id_ = #{id},
+			</if>
+			<if test="updateTime != null">
+			update_time_ = #{updateTime},
+			</if>
+			<if test="name != null">
+			name_ = #{name},
+			</if>
+			</set> WHERE id_ = #{id}
 	</update>
 	
 	<!-- 根据主键删除一条记录 -->

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

@@ -313,7 +313,7 @@
         <where>
             su.del_flag_ = 0
             <if test="organId != null and organId != ''">
-                AND (INTE_ARRAY(#{organId},t.flow_organ_range_) OR FIND_IN_SET(t.organ_id_,#{organId}))
+               AND (CONCAT(',',t.organ_id_,',',t.flow_organ_range_,',') REGEXP CONCAT(',(',replace(#{organId},',','|'),'),'))
             </if>
             <if test="subjectId != null">
                 AND FIND_IN_SET(#{subjectId},t.subject_id_)

+ 103 - 0
mec-biz/src/main/resources/config/mybatis/TeacherRemindMapper.xml

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.TeacherRemindDao">
+
+	<resultMap type="com.ym.mec.biz.dal.entity.TeacherRemind" id="TeacherRemind">
+		<result column="id_" property="id" />
+		<result column="operator_id_" property="operatorId" />
+		<result column="operator_name_" property="operatorName" />
+		<result column="teacher_id_" property="teacherId" />
+		<result column="monday_" property="monday"/>
+		<result column="content_" property="content" />
+		<result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="create_time_" property="createTime" />
+	</resultMap>
+
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="TeacherRemind" >
+		SELECT * FROM teacher_remind WHERE id_ = #{id}
+	</select>
+
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="TeacherRemind">
+		SELECT * FROM teacher_remind ORDER BY id_
+	</select>
+
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.TeacherRemind" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO teacher_remind (operator_id_,operator_name_,teacher_id_,monday_,content_,type_,create_time_)
+		VALUES(#{operatorId},#{operatorName},#{teacherId},#{monday},#{content},#{type, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},NOW())
+	</insert>
+
+	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.TeacherRemind" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO teacher_remind (operator_id_,operator_name_,teacher_id_,monday_,content_,type_,create_time_)
+		VALUE
+		<foreach collection="reminds" item="remind" separator=",">
+			(#{remind.operatorId},#{remind.operatorName},#{remind.teacherId},#{remind.monday},#{remind.content},#{remind.type, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},NOW())
+		</foreach>
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.TeacherRemind">
+		UPDATE teacher_remind <set>
+		<if test="operatorId != null">
+			operator_id_ = #{operatorId},
+		</if>
+		<if test="operatorName != null">
+			operator_name_ = #{operatorName},
+		</if>
+		<if test="id != null">
+			id_ = #{id},
+		</if>
+		<if test="teacherId != null">
+			teacher_id_ = #{teacherId},
+		</if>
+		<if test="monday != null">
+			monday_ = #{monday},
+		</if>
+		<if test="content != null">
+			content_ = #{content},
+		</if>
+		<if test="type != null">
+			type_ = #{type, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+		</if>
+	</set> WHERE id_ = #{id}
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM teacher_remind WHERE id_ = #{id}
+	</delete>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="TeacherRemind" parameterType="map">
+		SELECT * FROM teacher_remind ORDER BY id_ <include refid="global.limit"/>
+	</select>
+
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM teacher_remind
+	</select>
+
+	<select id="findTeachersRemindWithType" resultMap="TeacherRemind">
+		SELECT *
+		FROM teacher_remind
+		WHERE type_=#{remindType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		    AND teacher_id_ IN
+			<foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
+				#{teacherId}
+			</foreach>
+			<if test="startDate!=null and endDate!=null">
+				AND monday_ BETWEEN #{startDate} AND #{endDate}
+			</if>
+	</select>
+</mapper>

+ 7 - 7
mec-common/audit-log/pom.xml

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

+ 0 - 4
mec-common/common-core/src/main/java/com/ym/mec/common/page/PageInfo.java

@@ -132,10 +132,6 @@ public class PageInfo<T> implements Serializable {
 	public void setTotal(int total) {
 		this.total = total;
 		this.totalPage=new BigDecimal(total).divide(new BigDecimal(limit),0,BigDecimal.ROUND_CEILING).intValue();
-		if(this.pageNo>total){
-			this.pageNo = total;
-			this.offset = (this.pageNo - 1) * this.limit;
-		}
 	}
 
 	public List<T> getRows() {

+ 2 - 2
mec-eureka/src/main/resources/bootstrap-test.properties

@@ -1,9 +1,9 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.96.85.100:8848
+spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=02105743-16b8-46ab-87df-2aca0f3dbca3
+spring.cloud.nacos.config.namespace=f9d46b0a-9847-48ae-8e4b-216c7a3eb466
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 1 - 1
mec-gateway/mec-gateway-web/src/main/resources/bootstrap-test.properties

@@ -3,7 +3,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=47.96.85.100:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=02105743-16b8-46ab-87df-2aca0f3dbca3
+spring.cloud.nacos.config.namespace=f9d46b0a-9847-48ae-8e4b-216c7a3eb466
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 0 - 3
mec-im/src/main/java/com/ym/controller/UserController.java

@@ -8,9 +8,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
-/**
- * Created by weiqinxiao on 2019/2/25.
- */
 @RestController
 @RequestMapping("/user")
 public class UserController {

+ 2 - 2
mec-im/src/main/resources/bootstrap-test.properties

@@ -1,9 +1,9 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.96.85.100:8848
+spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=02105743-16b8-46ab-87df-2aca0f3dbca3
+spring.cloud.nacos.config.namespace=f9d46b0a-9847-48ae-8e4b-216c7a3eb466
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 0 - 6
mec-student/src/main/java/com/ym/mec/student/controller/StudentAttendanceController.java

@@ -10,9 +10,7 @@ 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.EmployeeDao;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
-import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.StudentAttendanceService;
 import com.ym.mec.common.controller.BaseController;
 
@@ -24,11 +22,7 @@ public class StudentAttendanceController extends BaseController {
     @Autowired
     private StudentAttendanceService studentAttendanceService;
     @Autowired
-    private ClassGroupService classGroupService;
-    @Autowired
     private SysUserFeignService sysUserFeignService;
-    @Autowired
-    private EmployeeDao employeeDao;
 
 
     @ApiOperation(value = "获取某节课学生签到列表")

+ 0 - 3
mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseHomeworkController.java

@@ -8,7 +8,6 @@ import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
 import com.ym.mec.biz.service.StudentCourseHomeworkService;
-import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
@@ -37,8 +36,6 @@ public class StudentCourseHomeworkController extends BaseController {
     private ExtracurricularExercisesReplyService extracurricularExercisesReplyService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
-    @Autowired
-    private StudentServeService studentServeService;
 
     @ApiOperation(value = "提交作业")
     @PostMapping(value = "/add",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

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

@@ -795,6 +795,7 @@ public class StudentOrderController extends BaseController {
             musicGroupRegCalender.setChargeTypeId(musicGroup.getChargeTypeId());
             List<MusicGroupPaymentCalenderCourseSettings> courseSettings = musicGroupPaymentCalenderCourseSettingsDao.getMusicGroupRegCalenderCourseSettings(musicGroupId);
             musicGroupRegCalender.setMusicGroupPaymentCalenderCourseSettingsList(courseSettings);
+            musicGroupRegCalender.setCourseViewType(musicGroup.getCourseViewType());
         }
         return succeed(musicGroupRegCalender);
     }

+ 2 - 2
mec-task/src/main/resources/bootstrap-test.properties

@@ -1,9 +1,9 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.96.85.100:8848
+spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=02105743-16b8-46ab-87df-2aca0f3dbca3
+spring.cloud.nacos.config.namespace=f9d46b0a-9847-48ae-8e4b-216c7a3eb466
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 0 - 2
mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysExamSongController.java

@@ -9,10 +9,8 @@ import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 @RequestMapping("sysExamSong")

+ 9 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreAccompanimentController.java

@@ -55,7 +55,15 @@ public class SysMusicScoreAccompanimentController extends BaseController {
     @ApiOperation(value = "分页查询")
     @GetMapping("/queryPageLimit")
     public Object queryPageLimit(SysExamSongQueryInfo queryInfo) {
-        queryInfo.setType("COMMON");
+        String type = queryInfo.getType();
+        if(StringUtils.isEmpty(type)){
+            queryInfo.setType("ALL");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("请登录");
+        }
+        queryInfo.setCreateUserId(sysUser.getId());
         return succeed(sysMusicScoreAccompanimentService.queryPage(queryInfo));
     }
 }

+ 3 - 4
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

@@ -237,8 +237,7 @@ public class TeacherCourseScheduleController extends BaseController {
         }
         List<CourseSchedule> courseSchedules=new ArrayList<>();
         courseSchedules.add(classDateAdjustDto);
-        scheduleService.courseAdjust(courseSchedules);
-        return succeed();
+        return scheduleService.courseAdjust(courseSchedules, true);
     }
 
     @ApiOperation(value = "对外课时调整")
@@ -265,7 +264,7 @@ public class TeacherCourseScheduleController extends BaseController {
         }
         List<CourseSchedule> courseSchedules=new ArrayList<>();
         courseSchedules.add(courseSchedule);
-        scheduleService.courseAdjust(courseSchedules);
+        scheduleService.courseAdjust(courseSchedules, true);
         return succeed();
     }
 
@@ -275,7 +274,7 @@ public class TeacherCourseScheduleController extends BaseController {
         if(Objects.isNull(courseScheduleId1)||Objects.isNull(courseScheduleId2)){
             return failed("请指定课程!");
         }
-        scheduleService.courseSwap(courseScheduleId1,courseScheduleId2);
+        scheduleService.courseSwap(courseScheduleId1,courseScheduleId2, true);
         return succeed();
     }
 

Some files were not shown because too many files changed in this diff