瀏覽代碼

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
周箭河 5 年之前
父節點
當前提交
7fdd9d8f1c
共有 100 個文件被更改,包括 2586 次插入684 次删除
  1. 8 2
      cms/src/main/java/com/ym/mec/cms/config/ResourceServerConfig.java
  2. 11 1
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/dto/MenuQueryInfo.java
  3. 1 1
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/enums/SysUserType.java
  4. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/PhoneLoginAuthenticationFilter.java
  5. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/UsernameAuthenticationFilter.java
  6. 10 9
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/AuthenticationFailureListener.java
  7. 1 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  8. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java
  9. 2 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/DefaultUserDetailsService.java
  10. 2 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysMenuDao.java
  11. 11 10
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysMenuServiceImpl.java
  12. 0 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/MenuController.java
  13. 19 10
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/RoleController.java
  14. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/SmsCodeController.java
  15. 19 9
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java
  16. 17 3
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysMenuMapper.xml
  17. 34 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  18. 29 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java
  19. 23 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java
  20. 86 34
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  21. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DemoGroupDao.java
  22. 14 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java
  23. 9 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SubjectDao.java
  24. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java
  25. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  26. 33 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseListDto.java
  27. 31 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CreateCourseScheduleDto.java
  28. 146 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassCourseSchudeleDto.java
  29. 69 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassGroupDto.java
  30. 98 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassHeadInfo.java
  31. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassStudentDto.java
  32. 141 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherCloseDto.java
  33. 51 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherLeaveRecordDto.java
  34. 60 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  35. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleRewardsRules.java
  36. 11 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DemoGroup.java
  37. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherAttendance.java
  38. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherDefaultMusicGroupSalary.java
  39. 18 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherDefaultVipGroupSalary.java
  40. 9 9
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SalarySettlementTypeEnum.java
  41. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseScheduleQueryInfo.java
  42. 64 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCloseQueryInfo.java
  43. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherManageDemoGroupQueryInfo.java
  44. 24 6
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  45. 24 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  46. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/service/DemoGroupService.java
  47. 10 4
      mec-biz/src/main/java/com/ym/mec/biz/service/SubjectService.java
  48. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  49. 16 11
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java
  50. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java
  51. 132 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  52. 54 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleRewardsRulesServiceImpl.java
  53. 74 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  54. 12 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DemoGroupServiceImpl.java
  55. 17 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectServiceImpl.java
  56. 28 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  57. 23 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  58. 24 85
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  59. 3 3
      mec-biz/src/main/resources/config/mybatis/ChargeTypeMapper.xml
  60. 2 1
      mec-biz/src/main/resources/config/mybatis/ChargeTypeSubjectMapperMapper.xml
  61. 68 11
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  62. 41 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  63. 16 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  64. 100 26
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  65. 2 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleRewardsMapper.xml
  66. 166 175
      mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml
  67. 17 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml
  68. 6 0
      mec-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  69. 2 2
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  70. 18 19
      mec-biz/src/main/resources/config/mybatis/TeacherDefaultMusicGroupSalaryMapper.xml
  71. 76 67
      mec-biz/src/main/resources/config/mybatis/TeacherDefaultVipGroupSalaryMapper.xml
  72. 20 5
      mec-biz/src/main/resources/config/mybatis/TeacherLeaveRecordMapper.xml
  73. 52 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  74. 11 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  75. 16 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  76. 9 2
      mec-common/common-core/src/main/java/com/ym/mec/common/security/PermissionCheckService.java
  77. 1 1
      mec-common/common-core/src/main/java/com/ym/mec/common/security/SecurityConstants.java
  78. 16 14
      mec-education/src/main/java/com/ym/mec/education/config/ResourceServerConfig.java
  79. 4 1
      mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java
  80. 26 7
      mec-student/src/main/java/com/ym/mec/student/config/WebMvcConfig.java
  81. 17 40
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  82. 36 0
      mec-student/src/main/java/com/ym/mec/student/interceptor/RequestInterceptor.java
  83. 4 1
      mec-task/src/main/java/com/ym/mec/task/config/ResourceServerConfig.java
  84. 24 0
      mec-task/src/main/java/com/ym/mec/task/jobs/UpdateCourseScheduleToOverStatusTask.java
  85. 4 1
      mec-teacher/src/main/java/com/ym/mec/teacher/config/ResourceServerConfig.java
  86. 44 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ClassGroupController.java
  87. 25 2
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/DemoGroupController.java
  88. 0 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherAttendanceController.java
  89. 9 2
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java
  90. 7 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  91. 3 1
      mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java
  92. 6 0
      mec-web/src/main/java/com/ym/mec/web/controller/ChargeTypeController.java
  93. 26 5
      mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  94. 8 0
      mec-web/src/main/java/com/ym/mec/web/controller/CooperationOrganController.java
  95. 44 4
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  96. 19 1
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleRewardsRulesController.java
  97. 6 0
      mec-web/src/main/java/com/ym/mec/web/controller/GoodsCategoryController.java
  98. 7 2
      mec-web/src/main/java/com/ym/mec/web/controller/GoodsController.java
  99. 5 2
      mec-web/src/main/java/com/ym/mec/web/controller/HotWordLabelManageController.java
  100. 5 0
      mec-web/src/main/java/com/ym/mec/web/controller/LeaveCategoryController.java

+ 8 - 2
cms/src/main/java/com/ym/mec/cms/config/ResourceServerConfig.java

@@ -2,6 +2,7 @@ package com.ym.mec.cms.config;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
@@ -12,6 +13,7 @@ import com.ym.mec.common.security.BaseAuthenticationEntryPoint;
 
 @Configuration
 @EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true)
 public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Autowired
@@ -22,10 +24,14 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Override
 	public void configure(HttpSecurity http) throws Exception {
-		http.authorizeRequests().antMatchers("/v2/api-docs", "/news/list", "/news/query/*").permitAll()// 任何人不登录都可以获取的资源
+		http.authorizeRequests()
+				.antMatchers("/v2/api-docs", "/news/list", "/news/query/*")
+				.permitAll()
+				// 任何人不登录都可以获取的资源
 				// .antMatchers("/ipController/**").hasIpAddress("127.0.0.1") //特定ip可以不登录获取资源
 				// .antMatchers("/ipControll/**").access("isAuthenticated() and hasIpAddress('127.0.0.1')")// 特定ip必须登录才能获取
-				.anyRequest().authenticated().and().csrf().disable();
+				.anyRequest().authenticated().and().csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler)
+				.authenticationEntryPoint(baseAuthenticationEntryPoint).and();
 	}
 
 	@Override

+ 11 - 1
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/dto/MenuQueryInfo.java

@@ -1,6 +1,5 @@
 package com.ym.mec.auth.api.dto;
 
-import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
 public class MenuQueryInfo{
@@ -10,8 +9,19 @@ public class MenuQueryInfo{
     @ApiModelProperty(value = "节点状态,默认0未删除,1删除",required = false)
     private String delFlag = "0";
 
+    @ApiModelProperty(value = "节点状态,默认0显示,1不显示",required = false)
+    private Integer hid;
+
     private Integer userId;
 
+    public Integer getHid() {
+        return hid;
+    }
+
+    public void setHid(Integer hid) {
+        this.hid = hid;
+    }
+
     public Integer getParentId() {
         return parentId;
     }

+ 1 - 1
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/enums/SysUserType.java

@@ -6,7 +6,7 @@ import com.ym.mec.common.enums.BaseEnum;
 
 public enum SysUserType implements BaseEnum<String, SysUserType> {
 
-	STUDENT("学生"), EDU_TEACHER("教务老师"), TEACHER("指导老师"), SYSTEM("系统內置");
+	STUDENT("学生"), EDU_TEACHER("教务老师"), TEACHER("指导老师"), SYSTEM("系统內置"), ADMIN("管理员");
 
 	private String desc;
 

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/PhoneLoginAuthenticationFilter.java

@@ -19,9 +19,9 @@ import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
 
 import com.ym.mec.auth.api.dto.SysUserInfo;
 import com.ym.mec.auth.api.enums.SysUserType;
-import com.ym.mec.auth.config.constant.SecurityConstants;
 import com.ym.mec.auth.config.token.PhoneAuthenticationToken;
 import com.ym.mec.auth.service.SysUserService;
+import com.ym.mec.common.security.SecurityConstants;
 
 public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
 

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/UsernameAuthenticationFilter.java

@@ -20,8 +20,8 @@ import org.springframework.util.Assert;
 
 import com.ym.mec.auth.api.dto.SysUserInfo;
 import com.ym.mec.auth.api.enums.SysUserType;
-import com.ym.mec.auth.config.constant.SecurityConstants;
 import com.ym.mec.auth.service.SysUserService;
+import com.ym.mec.common.security.SecurityConstants;
 
 public class UsernameAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
 

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

@@ -1,12 +1,8 @@
 package com.ym.mec.auth.core.handler;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.auth.api.entity.SysUserLogin;
-import com.ym.mec.auth.api.enums.UserLockFlag;
-import com.ym.mec.auth.config.constant.SecurityConstants;
-import com.ym.mec.auth.service.SysUserLoginService;
-import com.ym.mec.auth.service.SysUserService;
+import java.util.Date;
+import java.util.HashMap;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,8 +11,13 @@ import org.springframework.security.authentication.event.AuthenticationFailureBa
 import org.springframework.security.core.Authentication;
 import org.springframework.stereotype.Component;
 
-import java.util.Date;
-import java.util.HashMap;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.entity.SysUserLogin;
+import com.ym.mec.auth.api.enums.UserLockFlag;
+import com.ym.mec.auth.service.SysUserLoginService;
+import com.ym.mec.auth.service.SysUserService;
+import com.ym.mec.common.security.SecurityConstants;
 
 @Component
 public class AuthenticationFailureListener implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> {

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

@@ -19,7 +19,6 @@ import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.core.Authentication;
-import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
 import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.security.oauth2.common.exceptions.UnapprovedClientAuthenticationException;
 import org.springframework.security.oauth2.provider.ClientDetails;
@@ -35,11 +34,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserLogin;
 import com.ym.mec.auth.api.entity.SysUserLoginLog;
-import com.ym.mec.auth.config.constant.SecurityConstants;
 import com.ym.mec.auth.service.SysUserLoginLogService;
 import com.ym.mec.auth.service.SysUserLoginService;
 import com.ym.mec.auth.service.SysUserService;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.security.SecurityConstants;
 
 @Component
 public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuthenticationSuccessHandler {

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java

@@ -9,8 +9,8 @@ import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 
-import com.ym.mec.auth.config.constant.SecurityConstants;
 import com.ym.mec.auth.config.token.PhoneAuthenticationToken;
+import com.ym.mec.common.security.SecurityConstants;
 import com.ym.mec.common.validcode.SmsCodeService;
 
 public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider {

+ 2 - 2
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/DefaultUserDetailsService.java

@@ -3,7 +3,6 @@ package com.ym.mec.auth.core.provider.service;
 import java.util.ArrayList;
 import java.util.List;
 
-import com.ym.mec.auth.api.enums.UserLockFlag;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.LockedException;
@@ -19,9 +18,10 @@ import org.springframework.stereotype.Service;
 import com.ym.mec.auth.api.dto.SysUserInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.SysUserType;
-import com.ym.mec.auth.config.constant.SecurityConstants;
+import com.ym.mec.auth.api.enums.UserLockFlag;
 import com.ym.mec.auth.service.SysUserService;
 import com.ym.mec.common.security.AuthUser;
+import com.ym.mec.common.security.SecurityConstants;
 
 @Service
 public class DefaultUserDetailsService implements UserDetailsService {

+ 2 - 2
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysMenuDao.java

@@ -38,7 +38,7 @@ public interface SysMenuDao extends BaseDAO<Integer, SysMenu> {
      * @param userId
      * @return
      */
-    List<SysMenu> findByParentId(@Param("parentId") Integer menuId,@Param("delFlag") String delFlag,@Param("userId") Integer userId);
+    List<SysMenu> findByParentId(@Param("parentId") Integer menuId,@Param("delFlag") String delFlag,@Param("userId") Integer userId,@Param("hid") Integer hid);
 
     /**
      * 获取所有菜单列表
@@ -46,7 +46,7 @@ public interface SysMenuDao extends BaseDAO<Integer, SysMenu> {
      * @param delFlag
      * @return
      */
-    List<SysMenu> findList(@Param("parentId") Integer menuId,@Param("delFlag") String delFlag);
+    List<SysMenu> findList(@Param("parentId") Integer menuId,@Param("delFlag") String delFlag,@Param("hid") Integer hid);
 
     /**
      * 批量删除菜单列表

+ 11 - 10
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysMenuServiceImpl.java

@@ -43,26 +43,27 @@ public class SysMenuServiceImpl extends BaseServiceImpl<Integer, SysMenu>  imple
 	public List<SysMenu> findByUser(MenuQueryInfo menuQueryInfo) {
 		SysUser sysUser = sysUserDao.get(menuQueryInfo.getUserId());
 		List<SysMenu> sysMenus = null;
-		if(sysUser.getUserType() == SysUserType.SYSTEM){
+//		if(sysUser.getUserType() == SysUserType.ADMIN){
+		if(sysUser.getId() == 1){
 			menuQueryInfo.setUserId(null);
-			sysMenus = sysMenuDao.findList(menuQueryInfo.getParentId(),menuQueryInfo.getDelFlag());
+			sysMenus = sysMenuDao.findList(menuQueryInfo.getParentId(),menuQueryInfo.getDelFlag(),menuQueryInfo.getHid());
 		}else {
-			sysMenus = sysMenuDao.findByParentId(menuQueryInfo.getParentId(),menuQueryInfo.getDelFlag(),menuQueryInfo.getUserId());
+			sysMenus = sysMenuDao.findByParentId(menuQueryInfo.getParentId(),menuQueryInfo.getDelFlag(),menuQueryInfo.getUserId(),menuQueryInfo.getHid());
 		}
 		for (SysMenu menu:sysMenus) {
-			menu = getTree(menu,menuQueryInfo.getDelFlag(),menuQueryInfo.getUserId());
+			menu = getTree(menu,menuQueryInfo.getDelFlag(),menuQueryInfo.getUserId(),menuQueryInfo.getHid());
 		}
 		return sysMenus;
 	}
 
-	private SysMenu getTree(SysMenu menu, String delFlag,Integer userId){
+	private SysMenu getTree(SysMenu menu, String delFlag,Integer userId,Integer hid){
 		//得到根节点对象
 		//获取子节点list
 		List<SysMenu> sysMenus = null;
 		if(userId == null){
-			sysMenus = sysMenuDao.findList(menu.getId(),delFlag);
+			sysMenus = sysMenuDao.findList(menu.getId(),delFlag,hid);
 		}else {
-			sysMenus = sysMenuDao.findByParentId(menu.getId(),delFlag,userId);
+			sysMenus = sysMenuDao.findByParentId(menu.getId(),delFlag,userId,hid);
 		}
 		//如果存在子节点
 		if(sysMenus != null && sysMenus.size() > 0) {
@@ -70,7 +71,7 @@ public class SysMenuServiceImpl extends BaseServiceImpl<Integer, SysMenu>  imple
 			menu.setSysMenus(sysMenus);
 			//遍历子节点....
 			for (SysMenu sysMenu : sysMenus) {
-				getTree(sysMenu,delFlag,userId);
+				getTree(sysMenu,delFlag,userId,hid);
 			}
 		}
 		return menu;
@@ -83,9 +84,9 @@ public class SysMenuServiceImpl extends BaseServiceImpl<Integer, SysMenu>  imple
 
 	@Override
 	public void recursiveDel(Integer parentId) {
-		List<SysMenu> sysMenus = sysMenuDao.findList(parentId, "0");
+		List<SysMenu> sysMenus = sysMenuDao.findList(parentId, "0",0);
 		for (SysMenu menu:sysMenus) {
-			menu = getTree(menu,"0",null);
+			menu = getTree(menu,"0",null,null);
 		}
 		List<Integer> collect = sysMenus.stream().map(sysMenu -> sysMenu.getId()).collect(Collectors.toList());
 		if(collect == null || collect.size() <= 0){

+ 0 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/MenuController.java

@@ -66,7 +66,6 @@ public class MenuController extends BaseController {
             if(menuQueryInfo == null){
                 menuQueryInfo = new MenuQueryInfo();
             }
-
             menuQueryInfo.setUserId(user.getUserId());
             return succeed(sysMenuService.findByUser(menuQueryInfo));
         }

+ 19 - 10
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/RoleController.java

@@ -1,22 +1,31 @@
 package com.ym.mec.auth.web.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.util.Date;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.ym.mec.auth.api.entity.SysRole;
-import com.ym.mec.auth.config.constant.SecurityConstants;
 import com.ym.mec.auth.service.SysMenuService;
 import com.ym.mec.auth.service.SysRoleMenuService;
 import com.ym.mec.auth.service.SysRoleService;
 import com.ym.mec.auth.service.SysUserRoleService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.page.QueryInfo;
-
-import io.swagger.annotations.*;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Date;
+import com.ym.mec.common.security.SecurityConstants;
 
 @RestController()
 @RequestMapping("role")

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/SmsCodeController.java

@@ -24,8 +24,8 @@ import org.springframework.web.bind.annotation.RestController;
 import com.google.code.kaptcha.Constants;
 import com.google.code.kaptcha.Producer;
 import com.google.code.kaptcha.servlet.KaptchaServlet;
-import com.ym.mec.auth.config.constant.SecurityConstants;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.security.SecurityConstants;
 import com.ym.mec.common.validcode.SmsCodeService;
 
 @RestController

+ 19 - 9
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java

@@ -1,23 +1,33 @@
 package com.ym.mec.auth.web.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+import java.util.Date;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.auth.config.constant.SecurityConstants;
 import com.ym.mec.auth.service.SysRoleService;
 import com.ym.mec.auth.service.SysUserRoleService;
 import com.ym.mec.auth.service.SysUserService;
 import com.ym.mec.auth.web.controller.queryInfo.SysUserQueryInfo;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.security.AuthUser;
+import com.ym.mec.common.security.SecurityConstants;
 import com.ym.mec.common.security.SecurityUtils;
 import com.ym.mec.common.validcode.SmsCodeService;
-import io.swagger.annotations.*;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Date;
 
 @RestController()
 @RequestMapping("user")

+ 17 - 3
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysMenuMapper.xml

@@ -140,6 +140,9 @@
             <if test="userId != null">
                 sur.user_id_ = #{userId}
             </if>
+            <if test="hid != null">
+                AND sm.hidden_ = #{hid}
+            </if>
             <if test="delFlag != null">
                 AND sm.del_flag_ = #{delFlag}
             </if>
@@ -154,11 +157,22 @@
         LEFT JOIN sys_role_menu srm ON sur.role_id_ = srm.role_id_
         LEFT JOIN sys_menu sm ON srm.menu_id_ = sm.id_
         <include refid="queryTree"/>
---         GROUP BY sm.id_
-        ORDER BY sm.sort_
+        ORDER BY sm.sort_ DESC
     </select>
 
     <select id="findList" resultMap="SysMenu">
-        SELECT * FROM sys_menu WHERE del_flag_ = #{delFlag} AND parent_id_ = #{parentId} ORDER BY sort_ DESC
+        SELECT * FROM sys_menu
+        <where>
+            <if test="delFlag != null">
+                AND del_flag_ = #{delFlag}
+            </if>
+            <if test="parentId != null">
+                AND parent_id_ = #{parentId}
+            </if>
+            <if test="hid != null">
+                AND hidden_ = #{hid}
+            </if>
+        </where>
+        ORDER BY sort_ DESC
     </select>
 </mapper>

+ 34 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -2,9 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.VipGroup;
 import com.ym.mec.common.dal.BaseDAO;
-
 import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.entity.ImUserModel;
 import org.apache.ibatis.annotations.Param;
@@ -75,10 +73,33 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     /**
      * 根据教师编号获取教师所在乐团,带了哪些班级
      *
-     * @param userId
+     * @param params
+     * @return
+     */
+    List<TeacherMusicClassInfoDto> queryGroupCourses(Map<String, Object> params);
+
+    /**
+     * COUNT教师所在乐团带了哪些班级
+     * @param params
+     * @return
+     */
+    int countGroupCourses(Map<String, Object> params);
+
+    /**
+     * 获取老师VIP课程信息列表
+     *
+     * @param params
      * @return
      */
-    List<TeacherMusicClassInfoDto> queryGroupCourses(Integer userId);
+    List<TeacherVipClassInfoDto> getTeacherVipClass(Map<String, Object> params);
+
+    /**
+     * count老师VIP课程信息列表
+     *
+     * @param params
+     * @return
+     */
+    int countTeacherVipClass(Map<String, Object> params);
 
     /**
      * 获取乐团所有班级列表
@@ -236,4 +257,13 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      */
     List<Map<Integer, Long>> countTeacherVipNum(String teacherIds);
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/17
+     * @params [teacherId]
+     * @return java.util.List<com.ym.mec.biz.dal.dto.TeacherClassGroupDto>
+     * @describe 获取老师vip课班级
+     */
+    List<TeacherClassGroupDto> findTeacherVipClassGroup(@Param("teacherId") Long teacherId);
+
 }

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java

@@ -1,10 +1,12 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.TeacherClassStudentDto;
 import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStudentMapper> {
 
@@ -45,4 +47,31 @@ public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStud
 	 * @describe 删除班级上的指定学生
 	 */
 	int deleteStudentByClassGroupId(@Param("classGroupId") Long classGroupId,@Param("userId") Long userId);
+
+	/**
+	 * @describe 根据班级编号获取班级学生名称列表
+	 * @author Joburgess
+	 * @date 2019/10/18
+	 * @param classGroupId: 班级编号
+	 * @return java.lang.String[]
+	 */
+	String[] findStudentNumByClassGroupId(@Param("classGroupId") Long classGroupId);
+
+	/**
+	 * @describe 获取班级学生
+	 * @author Joburgess
+	 * @date 2019/10/18
+	 * @param params:
+	 * @return java.util.List<com.ym.mec.biz.dal.dto.TeacherClassStudentDto>
+	 */
+	List<TeacherClassStudentDto> findClassStudent(Map<String,Object> params);
+
+	/**
+	 * @describe 统计班级学生数量
+	 * @author Joburgess
+	 * @date 2019/10/18
+	 * @param params:
+	 * @return int
+	 */
+	int findClassStudentNum(Map<String,Object> params);
 }

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

@@ -1,8 +1,8 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
+import com.ym.mec.biz.dal.enums.TeachTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
-
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -21,7 +21,7 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
     /**
      * 查询班级老师
      *
-     * @param ClassGroupList
+     * @param classGroupList
      * @return
      */
     List<ClassGroupTeacherMapper> findClassGroupTeachers(@Param("classGroupList") List classGroupList);
@@ -32,4 +32,25 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      * @return
      */
     int delMusicGroupTeacherMapper(@Param("classGroupTeacherMapperList") List<ClassGroupTeacherMapper> classGroupTeacherMapperList);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/18
+     * @param classGroupId:班级编号
+     * @param teacherRole:
+     * @return com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper
+     * @describe 根据班级编号和教师类型获取老师信息
+     */
+    ClassGroupTeacherMapper findByClassGroupAndRole(@Param("classGroupId") Long classGroupId,
+                                                    @Param("teacherRole") TeachTypeEnum teacherRole);
+
+    /**
+     * @describe 获取乐团下的所有主教老师
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param musicGroupId:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper>
+     */
+    List<ClassGroupTeacherMapper> findByMusicGroup(Long musicGroupId);
+
 }

+ 86 - 34
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -1,18 +1,18 @@
 package com.ym.mec.biz.dal.dao;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
-import org.apache.ibatis.annotations.Param;
-
 import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
+import com.ym.mec.biz.dal.dto.TeacherClassCourseSchudeleDto;
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.StudentCourseScheduleRecordDto;
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
@@ -25,11 +25,13 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     TeacherAttendanceDto getCurrentCourseDetail(@Param("courseID") Long courseID);
 
     /**
-     * @Author: Joburgess
-     * @Date: 2019/10/16
-     * @params [startTime, endTime, teacherId]
-     * @return com.ym.mec.biz.dal.dto.TeacherAttendanceDto
      * @describe 根据时间区间获取教师上课的课程
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param startTime:
+     * @param endTime:
+     * @param teacherId:
+     * @return com.ym.mec.biz.dal.dto.TeacherAttendanceDto
      */
     TeacherAttendanceDto getTeacherCourseByDateSpeed(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("teacherId") Long teacherId);
 
@@ -75,57 +77,73 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<String> findStudentNamesByCourseSchedule(Long courseScheduleId);
 
     /**
-     * @Author: Joburgess
-     * @Date: 2019/9/17
-     * 根据日期获取老师当日排课信息
+     * @describe 根据日期获取老师当日排课信息
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param classDate: 上课日期
+     * @param teacherId: 教师编号
+     * @return java.util.List<com.ym.mec.biz.dal.dto.CourseScheduleDto>
      */
     List<CourseScheduleDto> getTeacherCourseSchedulesWithDate(@Param("classDate") Date classDate, @Param("teacherId") Long teacherId);
 
     /**
-     * @Author: Joburgess
-     * @Date: 2019/10/11
-     * @params [params]
+     * @describe 根据日期获取排课
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param params:
      * @return java.util.List<com.ym.mec.biz.dal.dto.CourseScheduleDto>
-     * @describe 根据
      */
     List<CourseScheduleDto> getCourseSchedulesWithDate(Map<String, Object> params);
 
     int countCourseSchedulesWithDate(Map<String, Object> params);
 
     /**
-     * @Author: Joburgess
-     * @Date: 2019/9/17
-     * 根据乐团ID删除排课
+     * @describe 根据乐团ID删除排课
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param musicGroupID: 乐团编号
+     * @return int
      */
     int deleteCourseSchedulesByMusicGroupID(@Param("musicGroupID") Long musicGroupID);
 
     /**
-     * @Author: Joburgess
-     * @Date: 2019/9/17
-     * 根据月份获取乐团在该月有课的日期
+     * @describe 根据月份获取乐团在该月有课的日期
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param musicGroupID: 乐团编号
+     * @param month: 月份
+     * @return java.util.List<java.util.Date>
      */
     List<Date> getCourseScheduleDateByMonth(@Param("musicGroupID") Long musicGroupID, @Param("month") Date month);
 
     /**
-     * @Author: Joburgess
-     * @Date: 2019/9/27
-     * 获取学生有课日期
+     * @describe 获取学生有课日期
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param studentId:
+     * @param month:
+     * @param isAttend:
+     * @return java.util.List<java.util.Date>
      */
     List<Date> getStudentCourseScheduleDate(@Param("studentId") Long studentId, @Param("month") Date month, @Param("isAttend") Integer isAttend);
 
     /**
-     * @Author: Joburgess
-     * @Date: 2019/9/27
-     * 获取教师有课日期
+     * @describe 获取教师有课日期
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param teacherId:
+     * @param month:
+     * @return java.util.List<java.util.Date>
      */
     List<Date> getTeacherCourseScheduleDate(@Param("teacherId") Long teacherId, @Param("month") Date month);
 
     /**
-     * @Author: Joburgess
-     * @Date: 2019/10/11
-     * @params [month, organId]
-     * @return java.util.List<java.util.Date>
      * @describe 获取当月有课的日期
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param month:
+     * @param organId:
+     * @return java.util.List<java.util.Date>
      */
     List<Date> getCourseScheduleDate(@Param("month") Date month, @Param("organId") Long organId);
 
@@ -249,4 +267,38 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<CourseSchedule> queryFinishedWithNoUpdateStatus();
     
     int batchUpdate(List<CourseSchedule> courseScheduleList);
+    
+    /**
+     * 查询提前指定分钟数还未签到的用户
+     * @param minutes 分钟数
+     * @return
+     */
+    List<CourseSchedule> queryNoSignInListByBeforeMinutes(Integer minutes);
+
+    /**
+     * @describe 查询老师指定班级的排课信息
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param params: 参数
+     * @return java.util.List<com.ym.mec.biz.dal.dto.TeacherClassCourseSchudeleDto>
+     */
+    List<TeacherClassCourseSchudeleDto> queryTeacherClassCourseSchedule(Map<String,Object> params);
+
+    /**
+     * @describe 统计老师指定班级的排课数量
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param params: 参数
+     * @return int
+     */
+    int countTeacherClassCourseSchedule(Map<String,Object> params);
+
+    /**
+     * @describe 统计乐团下班级的排课数
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param musicGroupId:
+     * @return java.util.List<java.util.Map<java.lang.Long,java.lang.Integer>>
+     */
+    List<Map<Long,Integer>> countClassCourseNumByMusicGroup(Long musicGroupId);
 }

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

@@ -79,7 +79,7 @@ public interface DemoGroupDao extends BaseDAO<Long, DemoGroup> {
      * @Date: 2019/9/26
      * 根据老师编号获取试听课
      */
-    DemoGroup findDemoGroupByTeacherId(Long teacherId);
+    DemoGroup findDemoGroupByTeacherId(Integer teacherId);
 
     /**
      * @Author: Joburgess

+ 14 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java

@@ -1,12 +1,12 @@
 package com.ym.mec.biz.dal.dao;
 
-import java.util.Date;
-import java.util.List;
-
-import org.apache.ibatis.annotations.Param;
-
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 public interface MusicGroupStudentFeeDao extends BaseDAO<Long, MusicGroupStudentFee> {
 
@@ -46,4 +46,13 @@ public interface MusicGroupStudentFeeDao extends BaseDAO<Long, MusicGroupStudent
 	 * @return
 	 */
 	int batchUpdate(List<MusicGroupStudentFee> updateList);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/17
+	 * @params [musicGroupIds]
+	 * @return java.util.List<java.util.Map<java.lang.Long,java.lang.Integer>>
+	 * @describe 统计乐团下连续旷课超过次数的学生人数
+	 */
+	List<Map<Long,Integer>> countContinuosAbsenteeismStudentNum(@Param("musicGroupIds") List<Long> musicGroupIds);
 }

+ 9 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SubjectDao.java

@@ -1,18 +1,15 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.ConditionDto;
-import com.ym.mec.biz.dal.dto.QueryConditionDto;
 import com.ym.mec.biz.dal.dto.SubjectApplyDetailDto;
 import com.ym.mec.biz.dal.dto.UserGoodsDto;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.common.dal.BaseDAO;
-
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 public interface SubjectDao extends BaseDAO<Integer, Subject> {
 
@@ -80,4 +77,13 @@ public interface SubjectDao extends BaseDAO<Integer, Subject> {
      * @return
      */
     List<Map<Integer, String>> queryNameByIds(@Param("subjectIds") String subjectIds);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/17
+     * @params [subjectIds]
+     * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.String>>
+     * @describe 根据科目编号获取部门编号,部门名称
+     */
+    List<Map<Long,String>> findBySubjecIds(@Param("subjectIds") List<String> subjectIds);
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java

@@ -41,4 +41,10 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
     TeacherAttendance findByTeacherAttendanceInfo(@Param("teacherId") Long teacherId,
                                                   @Param("courseScheduleId") Long courseScheduleId);
 	
+    /**
+     * 查询超过指定分钟数还未签退的用户
+     * @param minutes 分钟数
+     * @return
+     */
+    List<TeacherAttendance> queryNoSignOutListByOverMinutes(Integer minutes);
 }

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.NamesDto;
+import com.ym.mec.biz.dal.dto.TeacherCloseDto;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.common.dal.BaseDAO;
 
@@ -60,4 +61,18 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      * @return
      */
     List<Teacher> findTeachers(@Param("organId") Integer organId);
+
+    /**
+     * count上课结算列表
+     * @param params
+     * @return
+     */
+    int countCloses(Map<String, Object> params);
+
+    /**
+     * 获取教师上课结算列表
+     * @param params
+     * @return
+     */
+    List<TeacherCloseDto> queryCloses(Map<String, Object> params);
 }

+ 33 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseListDto.java

@@ -4,8 +4,6 @@ import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 
-import java.util.List;
-
 public class CourseListDto {
 
     @ApiModelProperty(value = "班级类型", required = true)
@@ -35,6 +33,15 @@ public class CourseListDto {
     @ApiModelProperty(value = "上课模式",required = true)
     private String teachMode;
 
+    @ApiModelProperty(value = "课程形式")
+    private int classMode;
+
+    @ApiModelProperty(value = "线上课数")
+    private Integer onlineClassesNum;
+
+    @ApiModelProperty(value = "线下课数")
+    private Integer offLineClassesNum;
+
     @ApiModelProperty(value = "单节课时",required = true)
     private Integer singleClassMinutes;
 
@@ -44,6 +51,30 @@ public class CourseListDto {
     //续费状态
     private MusicGroupStudentFee.PaymentStatus paymentStatus;
 
+    public Integer getOnlineClassesNum() {
+        return onlineClassesNum;
+    }
+
+    public void setOnlineClassesNum(Integer onlineClassesNum) {
+        this.onlineClassesNum = onlineClassesNum;
+    }
+
+    public Integer getOffLineClassesNum() {
+        return offLineClassesNum;
+    }
+
+    public void setOffLineClassesNum(Integer offLineClassesNum) {
+        this.offLineClassesNum = offLineClassesNum;
+    }
+
+    public int getClassMode() {
+        return classMode;
+    }
+
+    public void setClassMode(int classMode) {
+        this.classMode = classMode;
+    }
+
     public MusicGroupStudentFee.PaymentStatus getPaymentStatus() {
         return paymentStatus;
     }

+ 31 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CreateCourseScheduleDto.java

@@ -0,0 +1,31 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/18
+ */
+public class CreateCourseScheduleDto {
+    private Long musicGroupID;
+
+    private List<CourseSchedule> courseSchedules;
+
+    public Long getMusicGroupID() {
+        return musicGroupID;
+    }
+
+    public void setMusicGroupID(Long musicGroupID) {
+        this.musicGroupID = musicGroupID;
+    }
+
+    public List<CourseSchedule> getCourseSchedules() {
+        return courseSchedules;
+    }
+
+    public void setCourseSchedules(List<CourseSchedule> courseSchedules) {
+        this.courseSchedules = courseSchedules;
+    }
+}

+ 146 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassCourseSchudeleDto.java

@@ -0,0 +1,146 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/18
+ */
+public class TeacherClassCourseSchudeleDto {
+
+    @ApiModelProperty(value = "班级编号", required = false)
+    private Long classGroupId;
+
+    @ApiModelProperty(value = "课程编号")
+    private Long courseScheduleId;
+
+    @ApiModelProperty(value = "课程名称")
+    private String courseScheduleName;
+
+    @ApiModelProperty(value = "课程状态")
+    private CourseStatusEnum status;
+
+    @ApiModelProperty(value = "上课日期")
+    private java.util.Date classDate;
+
+    @ApiModelProperty(value = "上课时间")
+    private java.util.Date startClassTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private java.util.Date endClassTime;
+
+    @ApiModelProperty(value = "实际上课教师")
+    private Long actualTeacherId;
+
+    @ApiModelProperty(value = "实际上课教师名称")
+    private String actualTeacherName;
+
+    @ApiModelProperty(value = "课程类型")
+    private CourseSchedule.CourseScheduleType type;
+
+    @ApiModelProperty(value = "实际上课人数")
+    private Integer studentNum;
+
+    @ApiModelProperty(value = "请假人数")
+    private Integer leaveStudentNum;
+
+    public Integer getStudentNum() {
+        return studentNum;
+    }
+
+    public void setStudentNum(Integer studentNum) {
+        this.studentNum = studentNum;
+    }
+
+    public Integer getLeaveStudentNum() {
+        return leaveStudentNum;
+    }
+
+    public void setLeaveStudentNum(Integer leaveStudentNum) {
+        this.leaveStudentNum = leaveStudentNum;
+    }
+
+    public Long getClassGroupId() {
+        return classGroupId;
+    }
+
+    public void setClassGroupId(Long classGroupId) {
+        this.classGroupId = classGroupId;
+    }
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public String getCourseScheduleName() {
+        return courseScheduleName;
+    }
+
+    public void setCourseScheduleName(String courseScheduleName) {
+        this.courseScheduleName = courseScheduleName;
+    }
+
+    public CourseStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(CourseStatusEnum status) {
+        this.status = status;
+    }
+
+    public Date getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(Date classDate) {
+        this.classDate = classDate;
+    }
+
+    public Date getStartClassTime() {
+        return startClassTime;
+    }
+
+    public void setStartClassTime(Date startClassTime) {
+        this.startClassTime = startClassTime;
+    }
+
+    public Date getEndClassTime() {
+        return endClassTime;
+    }
+
+    public void setEndClassTime(Date endClassTime) {
+        this.endClassTime = endClassTime;
+    }
+
+    public Long getActualTeacherId() {
+        return actualTeacherId;
+    }
+
+    public void setActualTeacherId(Long actualTeacherId) {
+        this.actualTeacherId = actualTeacherId;
+    }
+
+    public String getActualTeacherName() {
+        return actualTeacherName;
+    }
+
+    public void setActualTeacherName(String actualTeacherName) {
+        this.actualTeacherName = actualTeacherName;
+    }
+
+    public CourseSchedule.CourseScheduleType getType() {
+        return type;
+    }
+
+    public void setType(CourseSchedule.CourseScheduleType type) {
+        this.type = type;
+    }
+}

+ 69 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassGroupDto.java

@@ -1,7 +1,10 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.Date;
+
 /**
  * @Author Joburgess
  * @Date 2019/10/17
@@ -44,6 +47,72 @@ public class TeacherClassGroupDto {
     @ApiModelProperty(value = "连续3节课未签到人数")
     private Integer threeClassNoAttendanceStudentNum;
 
+    @ApiModelProperty(value = "剩余课时数")
+    private Integer surplusClassTimes;
+
+    @ApiModelProperty(value = "预计缴费截止时间,课程开始时间")
+    private Date paymentExpireDate;
+
+    @ApiModelProperty(value = "课程结束时间")
+    private Date coursesExpireDate;
+
+    @ApiModelProperty(value = "单节课时")
+    private Integer singleClassTimes;
+
+    @ApiModelProperty(value = "班级类型(普通班级、合奏班级、提高课班级、VIP班级、试听课)")
+    private ClassGroupTypeEnum type;
+
+    @ApiModelProperty(value = "班级学生名称")
+    private String studentNames;
+
+    public String getStudentNames() {
+        return studentNames;
+    }
+
+    public void setStudentNames(String studentNames) {
+        this.studentNames = studentNames;
+    }
+
+    public ClassGroupTypeEnum getType() {
+        return type;
+    }
+
+    public void setType(ClassGroupTypeEnum type) {
+        this.type = type;
+    }
+
+    public Date getPaymentExpireDate() {
+        return paymentExpireDate;
+    }
+
+    public void setPaymentExpireDate(Date paymentExpireDate) {
+        this.paymentExpireDate = paymentExpireDate;
+    }
+
+    public Date getCoursesExpireDate() {
+        return coursesExpireDate;
+    }
+
+    public void setCoursesExpireDate(Date coursesExpireDate) {
+        this.coursesExpireDate = coursesExpireDate;
+    }
+
+    public Integer getSingleClassTimes() {
+        return singleClassTimes;
+    }
+
+    public void setSingleClassTimes(Integer singleClassTimes) {
+        this.singleClassTimes = singleClassTimes;
+    }
+
+    public Integer getSurplusClassTimes() {
+        return surplusClassTimes;
+    }
+
+    public void setSurplusClassTimes(Integer surplusClassTimes) {
+        this.surplusClassTimes = surplusClassTimes;
+    }
+
     public String getSubjectIdList() {
         return subjectIdList;
     }

+ 98 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassHeadInfo.java

@@ -0,0 +1,98 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/17
+ */
+public class TeacherClassHeadInfo {
+
+    @ApiModelProperty(value = "主教编号")
+    private Long bishopTeacherId;
+
+    @ApiModelProperty(value = "主教名称")
+    private String bishopTeacher;
+
+    @ApiModelProperty(value = "助教编号")
+    private Long teachingTeacherId;
+
+    @ApiModelProperty(value = "助教名称")
+    private String teachingTeacher;
+
+    @ApiModelProperty(value = "班级全部学生名称,vip课用")
+    private String studentNames;
+
+    @ApiModelProperty(value = "学生数量", required = false)
+    private Integer studentNum;
+
+    @ApiModelProperty(value = "总统课次",required = false)
+    private Integer totalClassTimes;
+
+    @ApiModelProperty(value = "当前课次",required = false)
+    private Integer currentClassTimes;
+
+    public Integer getTotalClassTimes() {
+        return totalClassTimes;
+    }
+
+    public void setTotalClassTimes(Integer totalClassTimes) {
+        this.totalClassTimes = totalClassTimes;
+    }
+
+    public Integer getCurrentClassTimes() {
+        return currentClassTimes;
+    }
+
+    public void setCurrentClassTimes(Integer currentClassTimes) {
+        this.currentClassTimes = currentClassTimes;
+    }
+
+    public Integer getStudentNum() {
+        return studentNum;
+    }
+
+    public void setStudentNum(Integer studentNum) {
+        this.studentNum = studentNum;
+    }
+
+    public String getStudentNames() {
+        return studentNames;
+    }
+
+    public void setStudentNames(String studentNames) {
+        this.studentNames = studentNames;
+    }
+
+    public Long getBishopTeacherId() {
+        return bishopTeacherId;
+    }
+
+    public void setBishopTeacherId(Long bishopTeacherId) {
+        this.bishopTeacherId = bishopTeacherId;
+    }
+
+    public String getBishopTeacher() {
+        return bishopTeacher;
+    }
+
+    public void setBishopTeacher(String bishopTeacher) {
+        this.bishopTeacher = bishopTeacher;
+    }
+
+    public Long getTeachingTeacherId() {
+        return teachingTeacherId;
+    }
+
+    public void setTeachingTeacherId(Long teachingTeacherId) {
+        this.teachingTeacherId = teachingTeacherId;
+    }
+
+    public String getTeachingTeacher() {
+        return teachingTeacher;
+    }
+
+    public void setTeachingTeacher(String teachingTeacher) {
+        this.teachingTeacher = teachingTeacher;
+    }
+}

+ 54 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassStudentDto.java

@@ -0,0 +1,54 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/18
+ */
+public class TeacherClassStudentDto {
+
+    @ApiModelProperty(value = "用户编号")
+    private Long userId;
+
+    @ApiModelProperty(value = "用户名")
+    private String userName;
+
+    @ApiModelProperty(value = "头像")
+    private String avatar;
+
+    @ApiModelProperty(value = "连续旷课次数")
+    private Integer continuousAbsenteeismTimes;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public Integer getContinuousAbsenteeismTimes() {
+        return continuousAbsenteeismTimes;
+    }
+
+    public void setContinuousAbsenteeismTimes(Integer continuousAbsenteeismTimes) {
+        this.continuousAbsenteeismTimes = continuousAbsenteeismTimes;
+    }
+}

+ 141 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherCloseDto.java

@@ -0,0 +1,141 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class TeacherCloseDto {
+
+    @ApiModelProperty(value = "上课日期")
+    private String classDate;
+
+    @ApiModelProperty(value = "上课时间")
+    private String classTime;
+
+    @ApiModelProperty(value = "班级名字")
+    private String className;
+
+    @ApiModelProperty(value = "课程类型")
+    private String courseScheduleType;
+
+    @ApiModelProperty(value = "上课类型(主教助教)")
+    private String teacherRole;
+
+    @ApiModelProperty(value = "总课时")
+    private Integer totalClassTimes;
+
+    @ApiModelProperty(value = "当前课时")
+    private Integer currentClassTimes;
+
+    @ApiModelProperty(value = "签到状态:0异常,1正常")
+    private Integer signInStatus;
+
+    @ApiModelProperty(value = "签退状态:0异常,1正常")
+    private Integer signOutStatus;
+
+    @ApiModelProperty(value = "实际结算薪水")
+    private BigDecimal actualSalary;
+
+    @ApiModelProperty(value = "实际结算时间")
+    private Date settlementTime;
+
+    @ApiModelProperty(value = "补贴")
+    private BigDecimal subsidy;
+
+    public String getClassTime() {
+        return classTime;
+    }
+
+    public void setClassTime(String classTime) {
+        this.classTime = classTime;
+    }
+
+    public String getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(String classDate) {
+        this.classDate = classDate;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
+    public String getCourseScheduleType() {
+        return courseScheduleType;
+    }
+
+    public void setCourseScheduleType(String courseScheduleType) {
+        this.courseScheduleType = courseScheduleType;
+    }
+
+    public String getTeacherRole() {
+        return teacherRole;
+    }
+
+    public void setTeacherRole(String teacherRole) {
+        this.teacherRole = teacherRole;
+    }
+
+    public Integer getTotalClassTimes() {
+        return totalClassTimes;
+    }
+
+    public void setTotalClassTimes(Integer totalClassTimes) {
+        this.totalClassTimes = totalClassTimes;
+    }
+
+    public Integer getCurrentClassTimes() {
+        return currentClassTimes;
+    }
+
+    public void setCurrentClassTimes(Integer currentClassTimes) {
+        this.currentClassTimes = currentClassTimes;
+    }
+
+    public Integer getSignInStatus() {
+        return signInStatus;
+    }
+
+    public void setSignInStatus(Integer signInStatus) {
+        this.signInStatus = signInStatus;
+    }
+
+    public Integer getSignOutStatus() {
+        return signOutStatus;
+    }
+
+    public void setSignOutStatus(Integer signOutStatus) {
+        this.signOutStatus = signOutStatus;
+    }
+
+    public BigDecimal getActualSalary() {
+        return actualSalary;
+    }
+
+    public void setActualSalary(BigDecimal actualSalary) {
+        this.actualSalary = actualSalary;
+    }
+
+    public Date getSettlementTime() {
+        return settlementTime;
+    }
+
+    public void setSettlementTime(Date settlementTime) {
+        this.settlementTime = settlementTime;
+    }
+
+    public BigDecimal getSubsidy() {
+        return subsidy;
+    }
+
+    public void setSubsidy(BigDecimal subsidy) {
+        this.subsidy = subsidy;
+    }
+}

+ 51 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherLeaveRecordDto.java

@@ -0,0 +1,51 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+public class TeacherLeaveRecordDto extends QueryInfo {
+
+    @ApiModelProperty(value = "开始时间",required = false)
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间",required = false)
+    private String endTime;
+
+    @ApiModelProperty(value = "请假类型",required = false)
+    private String leaveRecordType;
+
+    @ApiModelProperty(value = "教师编号",required = false)
+    private Integer teacherId;
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getLeaveRecordType() {
+        return leaveRecordType;
+    }
+
+    public void setLeaveRecordType(String leaveRecordType) {
+        this.leaveRecordType = leaveRecordType;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+}

+ 60 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -1,15 +1,17 @@
 package com.ym.mec.biz.dal.entity;
 
-import io.swagger.annotations.ApiModelProperty;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.common.enums.BaseEnum;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Objects;
 
 /**
  * 对应数据库表(course_schedule):
@@ -17,6 +19,9 @@ import java.math.BigDecimal;
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class CourseSchedule {
 
+	private SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
+	private SimpleDateFormat simpleDateFormat1=new SimpleDateFormat("yyyy-MM-dd HH:mm");
+
 	public enum CourseScheduleType implements BaseEnum<String, CourseScheduleType> {
 
 		SINGLE("SINGLE", "单技课"), MIX("MIX", "合奏课"), HIGH("HIGH", "小班课"), VIP("VIP", "vip课"), DEMO("DEMO", "试听课"), COMPREHENSIVE("COMPREHENSIVE", "综合课"), PRACTICE(
@@ -64,10 +69,16 @@ public class CourseSchedule {
 	@ApiModelProperty(value = "上课时间", required = false)
 	private java.util.Date startClassTime;
 
+	@ApiModelProperty(value = "上课时间字符")
+	private String startClassTimeStr;
+
 	/** 结束时间 */
 	@ApiModelProperty(value = "结束时间", required = false)
 	private java.util.Date endClassTime;
 
+	@ApiModelProperty(value = "结束时间字符")
+	private String endClassTimeStr;
+
 	/** 上课教师 */
 	@ApiModelProperty(value = "上课教师", required = false)
 	private Long teacherId;
@@ -94,6 +105,32 @@ public class CourseSchedule {
 	@ApiModelProperty(value = "请假人数")
 	private Integer leaveStudentNum;
 
+	public String getStartClassTimeStr() {
+		return startClassTimeStr;
+	}
+
+	public void setStartClassTimeStr(String startClassTimeStr) throws ParseException {
+		if(Objects.nonNull(this.classDate)){
+			String startTime = simpleDateFormat.format(this.classDate);
+			startTime=startTime+" "+startClassTimeStr;
+			this.startClassTime=simpleDateFormat1.parse(startTime);
+		}
+		this.startClassTimeStr = startClassTimeStr;
+	}
+
+	public String getEndClassTimeStr() {
+		return endClassTimeStr;
+	}
+
+	public void setEndClassTimeStr(String endClassTimeStr) throws ParseException {
+		if(Objects.nonNull(this.classDate)){
+			String endTime = simpleDateFormat.format(this.classDate);
+			endTime=endTime+" "+endClassTimeStr;
+			this.endClassTime=simpleDateFormat1.parse(endTime);
+		}
+		this.endClassTimeStr = endClassTimeStr;
+	}
+
 	public Integer getStudentNum() {
 		return studentNum;
 	}
@@ -142,7 +179,25 @@ public class CourseSchedule {
 		return this.subsidy;
 	}
 
-	public void setClassDate(java.util.Date classDate) {
+	public void setClassDate(java.util.Date classDate){
+		if(StringUtils.isNotEmpty(startClassTimeStr)){
+			String startTime = simpleDateFormat.format(classDate);
+			startTime=startTime+" "+startClassTimeStr;
+			try {
+				this.startClassTime=simpleDateFormat1.parse(startTime);
+			} catch (ParseException e) {
+				this.startClassTime=null;
+			}
+		}
+		if(StringUtils.isNotEmpty(endClassTimeStr)){
+			String endTime = simpleDateFormat.format(classDate);
+			endTime=endTime+" "+endClassTimeStr;
+			try {
+				this.endClassTime=simpleDateFormat1.parse(endTime);
+			} catch (ParseException e) {
+				this.endClassTime=null;
+			}
+		}
 		this.classDate = classDate;
 	}
 

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

@@ -13,7 +13,7 @@ import com.ym.mec.common.enums.BaseEnum;
 public class CourseScheduleRewardsRules {
 
 	public enum RewardMode implements BaseEnum<String, RewardMode> {
-		PER, TOTAL;
+		STAIR, PER, TOTAL;
 
 		@Override
 		public String getCode() {
@@ -45,6 +45,8 @@ public class CourseScheduleRewardsRules {
 
 	/**  */
 	private java.util.Date updateTime;
+	
+	private String organNameList;
 
 	public void setId(Integer id) {
 		this.id = id;
@@ -110,6 +112,14 @@ public class CourseScheduleRewardsRules {
 		return this.updateTime;
 	}
 
+	public String getOrganNameList() {
+		return organNameList;
+	}
+
+	public void setOrganNameList(String organNameList) {
+		this.organNameList = organNameList;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 11 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DemoGroup.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
@@ -10,15 +11,17 @@ import java.math.BigDecimal;
 public class DemoGroup {
 
 	/**  */
+	@ApiModelProperty(value = "试听课编号",required = false)
 	private Long id;
 	
 	/**  */
+	@ApiModelProperty(value = "试听课名称",required = false)
 	private String name;
 	
-	/** 单节课时 */
+	@ApiModelProperty(value = "单节课时",required = false)
 	private Integer singleClassMinutes;
 	
-	/** 所属分部列表 */
+	@ApiModelProperty(value = "老师和学生共有的分部列表集合",required = false)
 	private String organIdList;
 	
 	/**  */
@@ -27,18 +30,20 @@ public class DemoGroup {
 	/**  */
 	private java.util.Date updateTime;
 	
-	/** 老师编号 */
+	@ApiModelProperty(value = "老师编号",required = false)
 	private Integer userId;
 
+	@ApiModelProperty(value = "试听课单价",required = false)
 	private BigDecimal price;
 
-	private Long subjectId;
+	@ApiModelProperty(value = "科目编号",required = false)
+	private Integer subjectId;
 
-	public Long getSubjectId() {
+	public Integer getSubjectId() {
 		return subjectId;
 	}
 
-	public void setSubjectId(Long subjectId) {
+	public void setSubjectId(Integer subjectId) {
 		this.subjectId = subjectId;
 	}
 

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

@@ -44,7 +44,7 @@ public class TeacherAttendance {
 	@ApiModelProperty(value = "签退状态:0异常,1正常")
 	private YesOrNoEnum signOutStatus;
 
-	@ApiModelProperty(value = "签退使劲按")
+	@ApiModelProperty(value = "签退时间")
 	private Date signOutTime;
 	
 	/** 备注 */

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

@@ -24,7 +24,7 @@ public class TeacherDefaultMusicGroupSalary {
 	
 	/** 班级类型(参照 course_schedule表的type_字段) */
 	@ApiModelProperty(value = "课程类型",required = false)
-	private CourseScheduleType courseScheduleType;
+	private CourseSchedule.CourseScheduleType courseScheduleType;
 
 
 	@ApiModelProperty(value = "结算方式",required = false)

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
@@ -11,15 +12,23 @@ public class TeacherDefaultVipGroupSalary {
 	private Long id;
 	
 	/**  */
+	@ApiModelProperty(value = "教师编号", required = false)
 	private Integer userId;
 	
 	/** 课程类型 */
+	@ApiModelProperty(value = "课程类型编号", required = false)
 	private String vipGroupCategoryId;
+
+	/** 课程类型 */
+	@ApiModelProperty(value = "课程类型名称(1v1,1v2)", required = false)
+	private String vipGroupCategoryName;
 	
 	/** 线上课薪酬 */
+	@ApiModelProperty(value = "线上课薪酬", required = false)
 	private java.math.BigDecimal onlineClassesSalary;
 	
 	/** 线下课薪酬 */
+	@ApiModelProperty(value = "线下课薪酬", required = false)
 	private java.math.BigDecimal offlineClassesSalary;
 	
 	/**  */
@@ -27,7 +36,15 @@ public class TeacherDefaultVipGroupSalary {
 	
 	/**  */
 	private java.util.Date updateTime;
-	
+
+	public String getVipGroupCategoryName() {
+		return vipGroupCategoryName;
+	}
+
+	public void setVipGroupCategoryName(String vipGroupCategoryName) {
+		this.vipGroupCategoryName = vipGroupCategoryName;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}

+ 9 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SalarySettlementTypeEnum.java

@@ -6,23 +6,23 @@ import com.ym.mec.common.enums.BaseEnum;
  * @Author Joburgess
  * @Date 2019/10/1
  */
-public enum SalarySettlementTypeEnum implements BaseEnum<Integer,SalarySettlementTypeEnum> {
+public enum SalarySettlementTypeEnum implements BaseEnum<String,SalarySettlementTypeEnum> {
 
-    TEACHER_DEFAULT(1,"老师默认课酬"),
-    RATIO_DISCOUNT(2,"课程单价比例折扣"),
-    FIXED_SALARY(3,"固定课酬"),
-    GRADIENT_SALARY(4,"梯度课酬");
+    TEACHER_DEFAULT("TEACHER_DEFAULT","老师默认课酬"),
+    RATIO_DISCOUNT("RATIO_DISCOUNT","课程单价比例折扣"),
+    FIXED_SALARY("FIXED_SALARY","固定课酬"),
+    GRADIENT_SALARY("GRADIENT_SALARY","梯度课酬");
 
-    private Integer code;
+    private String code;
 
     private String msg;
 
-    SalarySettlementTypeEnum(Integer code, String msg) {
+    SalarySettlementTypeEnum(String code, String msg) {
         this.code = code;
         this.msg = msg;
     }
 
-    public void setCode(Integer code) {
+    public void setCode(String code) {
         this.code = code;
     }
 
@@ -35,7 +35,7 @@ public enum SalarySettlementTypeEnum implements BaseEnum<Integer,SalarySettlemen
     }
 
     @Override
-    public Integer getCode() {
+    public String getCode() {
         return this.code;
     }
 }

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseScheduleQueryInfo.java

@@ -17,6 +17,39 @@ public class CourseScheduleQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "上课日期")
     private Date date;
 
+    @ApiModelProperty(value = "班级编号")
+    private Long classGroupId;
+
+    @ApiModelProperty(value = "用户编号")
+    private Long userId;
+
+    @ApiModelProperty(value = "是否只查询历史数据")
+    private Integer onlyHistory;
+
+    public Integer getOnlyHistory() {
+        return onlyHistory;
+    }
+
+    public void setOnlyHistory(Integer onlyHistory) {
+        this.onlyHistory = onlyHistory;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getClassGroupId() {
+        return classGroupId;
+    }
+
+    public void setClassGroupId(Long classGroupId) {
+        this.classGroupId = classGroupId;
+    }
+
     public Long getOrganId() {
         return organId;
     }

+ 64 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCloseQueryInfo.java

@@ -0,0 +1,64 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.enums.TeachTypeEnum;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+public class TeacherCloseQueryInfo extends QueryInfo {
+    @ApiModelProperty(value = "教师编号")
+    private Integer teacherId;
+
+    @ApiModelProperty(value = "上课开始日期")
+    private String courseStartDate;
+
+    @ApiModelProperty(value = "上课结束日期")
+    private String courseEndDate;
+
+    @ApiModelProperty(value = "老师角色")
+    private String teacherRole;
+
+    @ApiModelProperty(value = "课程类型")
+    private String courseScheduleType;
+
+    public String getCourseStartDate() {
+        return courseStartDate;
+    }
+
+    public void setCourseStartDate(String courseStartDate) {
+        this.courseStartDate = courseStartDate;
+    }
+
+    public String getCourseEndDate() {
+        return courseEndDate;
+    }
+
+    public void setCourseEndDate(String courseEndDate) {
+        this.courseEndDate = courseEndDate;
+    }
+
+    public String getTeacherRole() {
+        return teacherRole;
+    }
+
+    public void setTeacherRole(String teacherRole) {
+        this.teacherRole = teacherRole;
+    }
+
+    public String getCourseScheduleType() {
+        return courseScheduleType;
+    }
+
+    public void setCourseScheduleType(String courseScheduleType) {
+        this.courseScheduleType = courseScheduleType;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+}

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherManageDemoGroupQueryInfo.java

@@ -10,13 +10,13 @@ import io.swagger.annotations.ApiModelProperty;
 public class TeacherManageDemoGroupQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "教师编号")
-    private Long teacherId;
+    private Integer teacherId;
 
-    public Long getTeacherId() {
+    public Integer getTeacherId() {
         return teacherId;
     }
 
-    public void setTeacherId(Long teacherId) {
+    public void setTeacherId(Integer teacherId) {
         this.teacherId = teacherId;
     }
 }

+ 24 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java

@@ -2,8 +2,8 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.VipGroup;
 import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
+import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPayLogQueryInfo;
 import com.ym.mec.biz.dal.page.VipClassQueryInfo;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -96,10 +96,10 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
     /**
      * 获取老师乐团课程信息列表
      *
-     * @param teacherId
+     * @param queryInfo
      * @return
      */
-    List<TeacherMusicClassInfoDto> getTeacherMusicClass(Integer teacherId);
+    PageInfo<TeacherMusicClassInfoDto> getTeacherMusicClass(QueryInfo queryInfo);
 
     /**
      * 获取老师VIP课程信息列表
@@ -200,14 +200,32 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @param teacherId
      * @param musicGroupId
      */
-    void addMusicGroupTeam(Integer teacherId, String musicGroupId) throws Exception;
+    void addMusicGroupTeam(Integer teacherId, String musicGroupId,Integer improventClassesNum) throws Exception;
 
     /**
      * @Author: Joburgess
      * @Date: 2019/10/17
-     * @params []
+     * @params [type]
      * @return java.util.List<com.ym.mec.biz.dal.dto.TeacherClassGroupDto>
      * @describe 获取老师所在班级列表
      */
-    List<TeacherClassGroupDto> findTeacherClassGroups();
+    List<TeacherClassGroupDto> findTeacherClassGroups(String type);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/18
+     * @params @param classGroupId:班级编号
+     * @return com.ym.mec.biz.dal.dto.TeacherClassHeadInfo
+     * @describe 获取班级信息
+     */
+    TeacherClassHeadInfo findTeacherClassGroupInfo(Long classGroupId);
+
+    /**
+     * @describe 获取班级对应学生列表
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param queryInfo:
+     * @return org.snaker.engine.access.Page
+     */
+    PageInfo findTeacherClassStudents(CourseScheduleQueryInfo queryInfo);
 }

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

@@ -168,4 +168,28 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
      * @return
      */
     boolean updateCourseScheduleToOverStatus();
+
+	/**
+	 * 推送未签到消息提醒
+	 * @return
+	 */
+	boolean pushNoSignInMessage();
+
+	/**
+	 * @describe 获取老师指定班级的排课
+	 * @author Joburgess
+	 * @date 2019/10/18
+	 * @param queryInfo: 参数
+	 * @return com.ym.mec.common.page.PageInfo
+	 */
+	PageInfo queryTeacherClassCourseSchedule(CourseScheduleQueryInfo queryInfo);
+
+	/**
+	 * @describe 检测指定乐团下所有班级是否已排课
+	 * @author Joburgess
+	 * @date 2019/10/18
+	 * @param musicGroupId: 乐团编号
+	 * @return void
+	 */
+	void checkMusicGroupClassCourse(Long musicGroupId);
 }

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

@@ -41,7 +41,7 @@ public interface DemoGroupService extends BaseService<Long, DemoGroup> {
      * @Date: 2019/9/26
      * 根据教师编号获取试听课信息
      */
-    DemoGroup getDemoGroupByTeacherId();
+    DemoGroup getDemoGroupByTeacherId() throws Exception;
 
     /**
      * @Author: Joburgess
@@ -57,4 +57,10 @@ public interface DemoGroupService extends BaseService<Long, DemoGroup> {
      */
     List<EducationDemoGroupListDto> findDemoGroupStartClassTimesWithWeekByTeacherId(Long teacherID);
 
+    /**
+     *
+     * @param teacherId
+     * @return
+     */
+    DemoGroup findByTeacherId(Integer teacherId);
 }

+ 10 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/SubjectService.java

@@ -1,18 +1,15 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.ConditionDto;
-import com.ym.mec.biz.dal.dto.QueryConditionDto;
 import com.ym.mec.biz.dal.dto.SubjectApplyDetailDto;
-import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.entity.SubjectGoodsMapper;
 import com.ym.mec.biz.dal.page.SubjectQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
-import org.apache.ibatis.annotations.Param;
-
 import java.util.List;
+import java.util.Map;
 
 public interface SubjectService extends BaseService<Integer, Subject> {
 
@@ -70,4 +67,13 @@ public interface SubjectService extends BaseService<Integer, Subject> {
     List<Subject> findTeacherSubjects();
 
     List<ConditionDto> findSubjectConditions();
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/17
+     * @params [subjectIdsList]
+     * @return java.util.Map<java.lang.Long,java.lang.String>
+     * @describe 根据部门编号列表获取部门编号,名称map
+     */
+    Map<Long,String> findSubjectMapBySubjectIdsList(List<String> subjectIdsList);
 }

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

@@ -71,6 +71,11 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
 	public static final String HIGH_GRADIENT_SETTLEMENT_RULE = "high_gradient_settlement_rule";
 
 	/**
+	 * 如果没有签退,{}分钟后自动发送推送信息
+	 */
+	public static final String SIGN_OUT_MESSAGE_PUSH_MINUTE = "sign_out_message_push_minute";
+
+	/**
 	 * @params paramName
 	 * @return com.ym.mec.biz.dal.entity.SysConfig
 	 * @describe 根据配置名称获取配置信息

+ 16 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java

@@ -10,17 +10,22 @@ import java.util.Map;
 
 public interface TeacherAttendanceService extends BaseService<Long, TeacherAttendance> {
 
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/9/10
-     * 添加教师签到记录
-     */
-    Map<String, Object> addTeacherAttendanceRecord(TeacherSignOutDto teacherSignOutDto);
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/9/10
+	 * 添加教师签到记录
+	 */
+	Map<String, Object> addTeacherAttendanceRecord(TeacherSignOutDto teacherSignOutDto);
 
-    /**
-     * 获取教师个人的签到记录
-     * @return
-     */
-    PageInfo getTeacherPersonalAttendances(TeacherAttendanceQueryInfo queryInfo);
+	/**
+	 * 获取教师个人的签到记录
+	 * @return
+	 */
+	PageInfo getTeacherPersonalAttendances(TeacherAttendanceQueryInfo queryInfo);
 
+	/**
+	 * 推送未签退消息提醒
+	 * @return
+	 */
+	boolean pushNoSignOutMessage();
 }

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

@@ -1,8 +1,11 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.TeacherCloseDto;
 import com.ym.mec.biz.dal.dto.TeacherUserDto;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary;
+import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherQueryInfo;
 import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.page.PageInfo;
@@ -77,4 +80,10 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
      */
     List<Teacher> findTeachers(@Param("organId") Integer organId);
 
+    /**
+     * 获取教师上课结算列表
+     * @param queryInfo
+     * @return
+     */
+    PageInfo<TeacherCloseDto> queryCloses(TeacherCloseQueryInfo queryInfo);
 }

+ 132 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -6,6 +6,7 @@ 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.*;
+import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPayLogQueryInfo;
 import com.ym.mec.biz.dal.page.VipClassQueryInfo;
 import com.ym.mec.biz.service.*;
@@ -23,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.time.Instant;
@@ -62,6 +64,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
     @Autowired
     private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SubjectService subjectService;
+    @Autowired
+    private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
 
     @Override
     public BaseDAO<Integer, ClassGroup> getDAO() {
@@ -236,19 +242,29 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
-    public List<TeacherMusicClassInfoDto> getTeacherMusicClass(Integer teacherId) {
-        List<TeacherMusicClassInfoDto> teacherMusics = classGroupDao.queryGroupCourses(teacherId);
-        //获取老师在当前乐团出勤次数
-        if(teacherMusics != null && teacherMusics.size() > 0){
+    public PageInfo<TeacherMusicClassInfoDto> getTeacherMusicClass(QueryInfo queryInfo) {
+        PageInfo<TeacherMusicClassInfoDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        List<TeacherMusicClassInfoDto> dataList = null;
+        int count = classGroupDao.countGroupCourses(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = classGroupDao.queryGroupCourses(params);
             HashMap<String,Object> param = new HashMap<>();
-            param.put("teacherId",teacherId);
+            param.put("teacherId",queryInfo.getSearch());
             param.put("attendanceStatus",YesOrNoEnum.YES);
-            teacherMusics.forEach(e->{
+            dataList.forEach(e->{
                 param.put("musicGroupId",e.getMusicGroupId());
                 e.setAttendanceNum(teacherAttendanceDao.getTeacherPersonalAttendancesCount(param));
             });
         }
-        return teacherMusics;
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
     }
 
     @Override
@@ -338,12 +354,20 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             params.put("offset", pageInfo.getOffset());
             courseListDtos = classGroupDao.queryCoursePage(params);
             courseListDtos.forEach(e -> {
-                if ("VIP".equals(e.getTeachMode())) {
+                if (ClassGroupTypeEnum.VIP==e.getType()) {
                     //获取vip课的学生名称列表
                     List<String> vipStuNames = classGroupDao.findVipStuNames(e.getMusicGroupId());
                     if (vipStuNames != null && vipStuNames.size() > 0) {
-                        StringUtils.join(vipStuNames, ",");
-                        e.setStudentNames(StringUtils.join());
+                        e.setStudentNames(StringUtils.join(vipStuNames, ","));
+                    }
+                    if(e.getOffLineClassesNum()>0&&e.getOffLineClassesNum()<=0){
+                        e.setClassMode(1);
+                    }else if(e.getOffLineClassesNum()>0&&e.getOffLineClassesNum()>0){
+                        e.setClassMode(3);
+                    }else if(e.getOnlineClassesNum()<0&&e.getOffLineClassesNum()>=0){
+                        e.setClassMode(2);
+                    }else{
+                        e.setClassMode(0);
                     }
                 } else {
                     //获取学员乐团课的续费状态
@@ -475,7 +499,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void addMusicGroupTeam(Integer teacherId, String musicGroupId) throws Exception {
+    public void addMusicGroupTeam(Integer teacherId, String musicGroupId,Integer improventClassesNum) throws Exception {
         //所有学员都已经分配
         List<StudentRegistration> students = studentRegistrationDao.getNoClassStuBySubjectId(musicGroupId, null);
         if(students != null && students.size() > 0){
@@ -490,21 +514,61 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         MusicGroup musicGroup = new MusicGroup();
         musicGroup.setId(musicGroupId);
         musicGroup.setDirectorUserId(teacherId);
+        musicGroup.setImproventClassesNum(improventClassesNum);
         musicGroup.setUpdateTime(new Date());
         musicGroupDao.update(musicGroup);
     }
 
     @Override
-    public List<TeacherClassGroupDto> findTeacherClassGroups() {
+    public List<TeacherClassGroupDto> findTeacherClassGroups(String type) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if(Objects.isNull(user)){
             throw new BizException("请登录");
         }
 
-        List<TeacherClassGroupDto> teacherMusicClassGroup = classGroupDao.findTeacherMusicClassGroup(user.getId().longValue());
+        List<TeacherClassGroupDto> teacherMusicClassGroup;
+        switch (type){
+            case "VIP":
+                teacherMusicClassGroup = classGroupDao.findTeacherVipClassGroup(user.getId().longValue());
+                break;
+            case "MUSIC_GROUP":
+                teacherMusicClassGroup = classGroupDao.findTeacherMusicClassGroup(user.getId().longValue());
+                break;
+            default:
+                throw new BizException("请指定课程类型");
+        }
+        if(CollectionUtils.isEmpty(teacherMusicClassGroup)){
+            return teacherMusicClassGroup;
+        }
+
+        List<String> subjectIdsList = teacherMusicClassGroup.stream().map(teacherClassGroupDto -> teacherClassGroupDto.getSubjectIdList()).collect(Collectors.toList());
+        Map<Long, String> subjectMapBySubjectIdsList = subjectService.findSubjectMapBySubjectIdsList(subjectIdsList);
 
+        List<Long> musicGroupIds = teacherMusicClassGroup.stream().map(teacherClassGroupDto -> teacherClassGroupDto.getMusicGroupId()).collect(Collectors.toList());
+        List<Map<Long, Integer>> musicGroupIdAndNumList = musicGroupStudentFeeDao.countContinuosAbsenteeismStudentNum(musicGroupIds);
+        Map<Long, Integer> musicGroupIdAndNum = MapUtil.convertMybatisMap(musicGroupIdAndNumList);
 
-        return null;
+        teacherMusicClassGroup.forEach(teacherClassGroupDto -> {
+
+            if(teacherClassGroupDto.getType()==ClassGroupTypeEnum.VIP){
+                String[] studentNums = classGroupStudentMapperDao.findStudentNumByClassGroupId(teacherClassGroupDto.getClassGroupId());
+                teacherClassGroupDto.setStudentNames(StringUtils.join(studentNums,","));
+            }
+            String subjectIdList=teacherClassGroupDto.getSubjectIdList();
+            if(StringUtils.isNotEmpty(subjectIdList)){
+                if(Objects.nonNull(musicGroupIdAndNum)&&Objects.nonNull(musicGroupIdAndNum.get(teacherClassGroupDto.getMusicGroupId()))){
+                    teacherClassGroupDto.setThreeClassNoAttendanceStudentNum(musicGroupIdAndNum.get(teacherClassGroupDto.getMusicGroupId()));
+                }
+                String[] subjectIds = subjectIdList.split(",");
+                List<String> subjectNameList=new ArrayList<>();
+                for (String subjectId : subjectIds) {
+                    subjectNameList.add(subjectMapBySubjectIdsList.get(Integer.parseInt(subjectId)));
+                }
+                teacherClassGroupDto.setSubjectNames(StringUtils.join(subjectNameList,","));
+            }
+        });
+
+        return teacherMusicClassGroup;
     }
 
     @Override
@@ -521,4 +585,58 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         return true;
     }
+
+    @Override
+    public TeacherClassHeadInfo findTeacherClassGroupInfo(Long classGroupId) {
+        if(Objects.isNull(classGroupId)){
+            throw new BizException("请指定班级");
+        }
+
+        ClassGroup classGroup = classGroupDao.get(classGroupId.intValue());
+
+        if(Objects.isNull(classGroup)){
+            throw new BizException("未找到该班级");
+        }
+
+        TeacherClassHeadInfo teacherClassHeadInfo=new TeacherClassHeadInfo();
+        teacherClassHeadInfo.setStudentNum(classGroup.getStudentNum());
+        teacherClassHeadInfo.setCurrentClassTimes(classGroup.getCurrentClassTimes());
+        teacherClassHeadInfo.setTotalClassTimes(classGroup.getTotalClassTimes());
+        ClassGroupTeacherMapper bishopTeacher = classGroupTeacherMapperDao.findByClassGroupAndRole(classGroupId, TeachTypeEnum.BISHOP);
+        if(Objects.nonNull(bishopTeacher)){
+            teacherClassHeadInfo.setBishopTeacherId(bishopTeacher.getId());
+            teacherClassHeadInfo.setBishopTeacher(bishopTeacher.getUserName());
+        }
+        ClassGroupTeacherMapper teachingTeacher = classGroupTeacherMapperDao.findByClassGroupAndRole(classGroupId, TeachTypeEnum.TEACHING);
+        if(Objects.nonNull(teachingTeacher)){
+            teacherClassHeadInfo.setTeachingTeacherId(teachingTeacher.getId());
+            teacherClassHeadInfo.setTeachingTeacher(teachingTeacher.getUserName());
+        }
+
+        if(classGroup.getType()==ClassGroupTypeEnum.VIP){
+            String[] studentNums = classGroupStudentMapperDao.findStudentNumByClassGroupId(classGroupId);
+            teacherClassHeadInfo.setStudentNames(StringUtils.join(studentNums,","));
+        }
+
+        return teacherClassHeadInfo;
+    }
+
+    @Override
+    public PageInfo findTeacherClassStudents(CourseScheduleQueryInfo queryInfo) {
+        PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        List dataList = null;
+        int count = classGroupStudentMapperDao.findClassStudentNum(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = classGroupStudentMapperDao.findClassStudent(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 }

+ 54 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleRewardsRulesServiceImpl.java

@@ -1,19 +1,27 @@
 package com.ym.mec.biz.service.impl;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.ym.mec.biz.dal.dao.CourseScheduleRewardsRulesDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
-import com.ym.mec.biz.dal.entity.CourseScheduleRewardsRules.RewardMode;
 import com.ym.mec.biz.dal.entity.CourseScheduleRewardsRules;
+import com.ym.mec.biz.dal.entity.CourseScheduleRewardsRules.RewardMode;
 import com.ym.mec.biz.service.CourseScheduleRewardsRulesService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.json.JsonUtil;
 
 @Service
@@ -21,6 +29,9 @@ public class CourseScheduleRewardsRulesServiceImpl extends BaseServiceImpl<Integ
 
 	@Autowired
 	private CourseScheduleRewardsRulesDao courseScheduleRewardsDao;
+	
+	@Autowired
+	private OrganizationDao organizationDao;
 
 	@Override
 	public BaseDAO<Integer, CourseScheduleRewardsRules> getDAO() {
@@ -28,6 +39,29 @@ public class CourseScheduleRewardsRulesServiceImpl extends BaseServiceImpl<Integ
 	}
 
 	@Override
+	public PageInfo<CourseScheduleRewardsRules> queryPage(QueryInfo queryInfo) {
+		PageInfo<CourseScheduleRewardsRules> pageInfo = new PageInfo<CourseScheduleRewardsRules>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+		
+		List<CourseScheduleRewardsRules> dataList = null;
+		int count = this.findCount(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = this.getDAO().queryPage(params);
+			for(CourseScheduleRewardsRules rules : dataList){
+				rules.setOrganNameList(organizationDao.findByOrganIds(rules.getOrganIdList()).stream().collect(Collectors.joining("、")));
+			}
+		}
+		if (count == 0) {
+			dataList = new ArrayList<CourseScheduleRewardsRules>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
 	public BigDecimal queryRewardsAmount(Integer organId, CourseScheduleType courseScheduleType, int coursesNum) {
 
 		List<CourseScheduleRewardsRules> CourseScheduleRewardsRulesList = courseScheduleRewardsDao.query(organId, courseScheduleType);
@@ -41,20 +75,32 @@ public class CourseScheduleRewardsRulesServiceImpl extends BaseServiceImpl<Integ
 		String json = courseScheduleRewardsRules.getRewardsRulesJson();
 
 		List<RewardsRules> rewardsRulesList = JsonUtil.parseArray(json, RewardsRules.class);
-		
+
 		Collections.sort(rewardsRulesList);
-		
+
 		RewardsRules rewardsRules = new RewardsRules();
-		
-		for(RewardsRules rule : rewardsRulesList){
-			if(rule.min >= coursesNum && rule.max < coursesNum){
+
+		for (RewardsRules rule : rewardsRulesList) {
+			if (rule.min >= coursesNum && rule.max <= coursesNum) {
 				rewardsRules = rule;
 				break;
 			}
 		}
-		
-		if(courseScheduleRewardsRules.getRewardMode() == RewardMode.TOTAL){
+
+		if (courseScheduleRewardsRules.getRewardMode() == RewardMode.TOTAL) {
 			return rewardsRules.getAmount();
+		} else if (courseScheduleRewardsRules.getRewardMode() == RewardMode.STAIR) {
+			BigDecimal amount = new BigDecimal(0);
+			for (RewardsRules rule : rewardsRulesList) {
+				if (coursesNum <= rule.max) {
+					amount = amount.add(new BigDecimal(coursesNum * rule.amount.doubleValue()));
+				} else {
+					amount = amount.add(new BigDecimal(rule.max * rule.amount.doubleValue()));
+					coursesNum = coursesNum - rule.max;
+				}
+			}
+
+			return amount;
 		}
 
 		return rewardsRules.getAmount().multiply(new BigDecimal(coursesNum));

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

@@ -13,20 +13,19 @@ import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
 import com.ym.mec.biz.dal.entity.SysConfig;
-import com.ym.mec.biz.dal.enums.AuditStatusEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.ParamEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
-
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.BeanUtils;
@@ -53,6 +52,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	private SysConfigDao sysConfigDao;
 	@Autowired
 	private StudentAttendanceDao studentAttendanceDao;
+	@Autowired
+	private SysConfigService sysConfigService;
+	
+	@Autowired
+	private SysMessageService sysMessageService;
 
 	@Override
 	public BaseDAO<Long, CourseSchedule> getDAO() {
@@ -514,18 +518,78 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	@Override
 	public boolean updateCourseScheduleToOverStatus() {
 		List<CourseSchedule> list = courseScheduleDao.queryFinishedWithNoUpdateStatus();
-		
+
 		List<CourseSchedule> updateList = new ArrayList<CourseSchedule>();
 		Date date = new Date();
-		for(CourseSchedule courseSchedule : list){
+		for (CourseSchedule courseSchedule : list) {
 			courseSchedule.setStatus(CourseStatusEnum.OVER);
 			courseSchedule.setUpdateTime(date);
 			updateList.add(courseSchedule);
 		}
-		
-		if(updateList.size()>0){
-			
+
+		if (updateList.size() > 0) {
+			courseScheduleDao.batchUpdate(updateList);
 		}
 		return true;
 	}
+
+	@Override
+	public boolean pushNoSignInMessage() {
+		Integer minutes = 30;
+		SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.SIGN_OUT_MESSAGE_PUSH_MINUTE);
+		if (sysConfig != null && StringUtils.isNotBlank(sysConfig.getParanValue())) {
+			minutes = Integer.parseInt(sysConfig.getParanValue());
+		}
+
+		List<CourseSchedule> list = courseScheduleDao.queryNoSignInListByBeforeMinutes(minutes);
+
+		String teacherList = list.stream().map(cs -> cs.getActualTeacherId().toString()).collect(Collectors.joining(","));
+
+		sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageSendMode.PUSH, "", "", teacherList, null, 0, "");
+		return true;
+	}
+
+	@Override
+	public PageInfo queryTeacherClassCourseSchedule(CourseScheduleQueryInfo queryInfo) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if(null==user){
+			throw new BizException("请登录");
+		}
+		queryInfo.setUserId(user.getId().longValue());
+		PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+
+		if(Objects.isNull(queryInfo.getDate())){
+			queryInfo.setDate(new Date());
+		}
+
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List dataList = null;
+		int count = courseScheduleDao.countTeacherClassCourseSchedule(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = courseScheduleDao.queryTeacherClassCourseSchedule(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
+	public void checkMusicGroupClassCourse(Long musicGroupId) {
+		if(Objects.isNull(musicGroupId)){
+			throw new BizException("请指定乐团");
+		}
+		List<Map<Long, Integer>> maps = courseScheduleDao.countClassCourseNumByMusicGroup(musicGroupId);
+		Map<Long,Integer> classCourseNumMap = MapUtil.convertMybatisMap(maps);
+		for (Long key:classCourseNumMap.keySet()){
+			if(classCourseNumMap.get(key)<=0){
+				throw new BizException("存在未排课的班级");
+			}
+		}
+	}
 }

+ 12 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DemoGroupServiceImpl.java

@@ -58,11 +58,12 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 	public void demoGroupApply(DemoGroupApplyDto demoGroupApplyDto) {
 		SysUser user = sysUserFeignService.queryUserInfo();
 
-		if(null!=demoGroupDao.findDemoGroupByTeacherId(user.getId().longValue())){
+		if(null!=demoGroupDao.findDemoGroupByTeacherId(user.getId())){
 			throw new BizException("请勿多次创建试听课!");
 		}
 
 		demoGroupApplyDto.setUserId(user.getId());
+		demoGroupApplyDto.setOrganIdList(user.getOrganId().toString());
 		demoGroupDao.insert(demoGroupApplyDto);
 		demoGroupCoursesPlanDao.batchInsertByDates(demoGroupApplyDto.getCourseDates(),
 				demoGroupApplyDto.getId(),
@@ -70,9 +71,12 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 	}
 
 	@Override
-	public DemoGroup getDemoGroupByTeacherId() {
+	public DemoGroup getDemoGroupByTeacherId() throws Exception {
 		SysUser user = sysUserFeignService.queryUserInfo();
-		return demoGroupDao.findDemoGroupByTeacherId(user.getId().longValue());
+		if(user == null){
+			throw new Exception("获取用户信息失败");
+		}
+		return demoGroupDao.findDemoGroupByTeacherId(user.getId());
 	}
 
 	@Override
@@ -192,4 +196,9 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 	public List<EducationDemoGroupListDto> findDemoGroupStartClassTimesWithWeekByTeacherId(Long teacherID) {
 		return demoGroupDao.findDemoGroupStartClassTimesWithWeekByTeacherId(teacherID);
 	}
+
+	@Override
+	public DemoGroup findByTeacherId(Integer teacherId) {
+		return demoGroupDao.findDemoGroupByTeacherId(teacherId);
+	}
 }

+ 17 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectServiceImpl.java

@@ -1,12 +1,10 @@
 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.biz.dal.dao.StudentRegistrationDao;
 import com.ym.mec.biz.dal.dao.SubjectDao;
 import com.ym.mec.biz.dal.dao.SubjectGoodsMapperDao;
 import com.ym.mec.biz.dal.dto.ConditionDto;
-import com.ym.mec.biz.dal.dto.QueryConditionDto;
 import com.ym.mec.biz.dal.dto.SubjectApplyDetailDto;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.entity.SubjectGoodsMapper;
@@ -16,14 +14,13 @@ import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-
 import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -143,4 +140,18 @@ public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject>  imple
     public List<ConditionDto> findSubjectConditions() {
         return subjectDao.findSubjectConditions();
     }
+
+    @Override
+    public Map<Long, String> findSubjectMapBySubjectIdsList(List<String> subjectIdsList) {
+        if(CollectionUtils.isEmpty(subjectIdsList)){
+            return new HashMap<>();
+        }
+        String subjectIdsString = StringUtils.join(subjectIdsList, ",");
+        String[] split = subjectIdsString.split(",");
+        List<String> subjectIds=new ArrayList<>(Arrays.asList(split));
+        subjectIds = subjectIds.stream().distinct().collect(Collectors.toList());
+        List<Map<Long, String>> bySubjecIds = subjectDao.findBySubjecIds(subjectIds);
+        Map<Long,String> subjectIdAndName = MapUtil.convertMybatisMap(bySubjecIds);
+        return subjectIdAndName;
+    }
 }

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

@@ -7,25 +7,31 @@ import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
 import com.ym.mec.biz.dal.dto.TeacherPersonalAttendanceDto;
 import com.ym.mec.biz.dal.dto.TeacherSignOutDto;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.enums.ParamEnum;
 import com.ym.mec.biz.dal.enums.SignStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.TeacherAttendanceQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
 import com.ym.mec.biz.service.CourseScheduleService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.biz.service.TeacherAttendanceService;
 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.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherAttendance>  implements TeacherAttendanceService {
@@ -46,6 +52,12 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	private ClassGroupDao classGroupDao;
 	@Autowired
 	private CourseScheduleService courseScheduleService;
+	
+	@Autowired
+	private SysConfigService sysConfigService;
+	
+	@Autowired
+	private SysMessageService sysMessageService;
 
 	@Override
 	public BaseDAO<Long, TeacherAttendance> getDAO() {
@@ -180,5 +192,21 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		return pageInfo;
 	}
 
+	@Override
+	public boolean pushNoSignOutMessage() {
+		
+		Integer minutes = 30;
+		SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.SIGN_OUT_MESSAGE_PUSH_MINUTE);
+		if(sysConfig != null && StringUtils.isNotBlank(sysConfig.getParanValue())){
+			minutes = Integer.parseInt(sysConfig.getParanValue());
+		}
+		
+		List<TeacherAttendance> list = teacherAttendanceDao.queryNoSignOutListByOverMinutes(minutes);
+		
+		String teacherList = list.stream().map(ta -> ta.getTeacherId().toString()).collect(Collectors.joining(","));
+		
+		sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageSendMode.PUSH, "", "", teacherList, null, 0, "");
+		return true;
+	}
 
 }

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

@@ -8,10 +8,12 @@ import com.ym.mec.auth.api.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.NamesDto;
+import com.ym.mec.biz.dal.dto.TeacherCloseDto;
 import com.ym.mec.biz.dal.dto.UserGoodsDto;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.entity.TeacherSchool;
+import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherQueryInfo;
 import com.ym.mec.biz.service.TeacherService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -162,7 +164,27 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 		return teacherDao.findTeachers(organId);
     }
 
-    @Override
+	@Override
+	public PageInfo<TeacherCloseDto> queryCloses(TeacherCloseQueryInfo queryInfo) {
+		PageInfo<TeacherCloseDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<TeacherCloseDto> dataList = null;
+		int count = teacherDao.countCloses(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = teacherDao.queryCloses(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
 	public PageInfo<Teacher> queryPageDetail(TeacherQueryInfo queryInfo) {
 		PageInfo<Teacher> pageInfo = queryPage(queryInfo);
 		List<Teacher> rows = pageInfo.getRows();

+ 24 - 85
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -1,93 +1,15 @@
 package com.ym.mec.biz.service.impl;
 
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
 import com.alibaba.fastjson.JSON;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.ClassGroupDao;
-import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
-import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
-import com.ym.mec.biz.dal.dao.ClassGroupTeacherSalaryDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
-import com.ym.mec.biz.dal.dao.StudentApplyRefundsDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentVipGroupPaymentDao;
-import com.ym.mec.biz.dal.dao.SubjectDao;
-import com.ym.mec.biz.dal.dao.SysUserCashAccountDetailDao;
-import com.ym.mec.biz.dal.dao.TeacherDefaultVipGroupSalaryDao;
-import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
-import com.ym.mec.biz.dal.dao.VipGroupCategoryDao;
-import com.ym.mec.biz.dal.dao.VipGroupClassGroupMapperDao;
-import com.ym.mec.biz.dal.dao.VipGroupDao;
-import com.ym.mec.biz.dal.dao.VipGroupDefaultClassesUnitPriceDao;
-import com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto;
-import com.ym.mec.biz.dal.dto.TeachingRecordBaseInfo;
-import com.ym.mec.biz.dal.dto.VipGroupApplyBaseInfoDto;
-import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
-import com.ym.mec.biz.dal.dto.VipGroupBuyParamsDto;
-import com.ym.mec.biz.dal.dto.VipGroupCostCountDto;
-import com.ym.mec.biz.dal.dto.VipGroupCostCountParamsDto;
-import com.ym.mec.biz.dal.dto.VipGroupManageDetailDto;
-import com.ym.mec.biz.dal.dto.VipGroupSalaryBaseInfo;
-import com.ym.mec.biz.dal.dto.VipGroupSalaryDto;
-import com.ym.mec.biz.dal.dto.VipGroupSalarySettlementDto;
-import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
-import com.ym.mec.biz.dal.entity.ClassGroupTeacherSalary;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
+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.entity.CourseSchedule.CourseScheduleType;
-import com.ym.mec.biz.dal.entity.StudentApplyRefunds;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.StudentVipGroupPayment;
-import com.ym.mec.biz.dal.entity.SysUserCashAccount;
-import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
-import com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary;
-import com.ym.mec.biz.dal.entity.VipGroup;
-import com.ym.mec.biz.dal.entity.VipGroupActivity;
-import com.ym.mec.biz.dal.entity.VipGroupCategory;
-import com.ym.mec.biz.dal.entity.VipGroupClassGroupMapper;
-import com.ym.mec.biz.dal.entity.VipGroupDefaultClassesUnitPrice;
-import com.ym.mec.biz.dal.enums.AuditStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
-import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.TeachModeEnum;
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
-import com.ym.mec.biz.dal.enums.VipGroupActivityTypeEnum;
-import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
-import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
-import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
-import com.ym.mec.biz.dal.page.VipGroupSalaryQueryInfo;
-import com.ym.mec.biz.dal.page.VipGroupTeachingRecordQueryInfo;
-import com.ym.mec.biz.service.ClassGroupService;
-import com.ym.mec.biz.service.CourseScheduleRewardsRulesService;
-import com.ym.mec.biz.service.CourseScheduleService;
-import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
-import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
-import com.ym.mec.biz.service.PayService;
-import com.ym.mec.biz.service.SysUserCashAccountDetailService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
-import com.ym.mec.biz.service.VipGroupService;
+import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -96,6 +18,16 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> implements VipGroupService {
@@ -187,7 +119,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             throw new BizException("线上课课时数量安排有误!");
         }
 
-        //获取活动信息
+		SysUser sysUser = sysUserFeignService.queryUserById(vipGroup.getVipGroupApplyBaseInfo().getUserId());
+
+        if(Objects.isNull(sysUser)){
+        	throw new BizException("该用户不存在");
+		}
+
+		//获取活动信息
         VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue());
 
 		//生成vip课信息
@@ -201,6 +139,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(),
 				vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice()).get("totalPrice"));
 		vipGroupApplyBaseInfoDto.setStatus(VipGroupStatusEnum.APPLYING);
+		vipGroupApplyBaseInfoDto.setOrganId(sysUser.getOrganId());
 		vipGroupDao.insert(vipGroupApplyBaseInfoDto);
 
 		//获取vip课类型信息

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

@@ -67,11 +67,11 @@
 
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="ChargeType" parameterType="map">
-        SELECT ct.*,s.id_ subject_id_,s.name_ subject_name_ FROM charge_type ct
+        SELECT ct.*,s.id_ subject_id_,s.name_ subject_name_
+        FROM (SELECT * FROM charge_type <include refid="global.limit"/>) ct
         LEFT JOIN charge_type_subject_mapper ctsm ON ct.id_ = ctsm.charge_type_id_
         LEFT JOIN `subject` s ON ctsm.subject_id_ = s.id_
-        ORDER BY id_
-        <include refid="global.limit"/>
+        ORDER BY ct.update_time_
     </select>
 
     <!-- 查询当前表的总记录数 -->

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

@@ -34,7 +34,8 @@
         VALUES(#{chargeTypeId},#{subjectId},#{kitGroupPurchaseTypeEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{depositFee},#{fee},now(),now())
     </insert>
     <insert id="batchAdd">
-        INSERT INTO charge_type_subject_mapper (charge_type_id_,subject_id_,create_time_,update_time_) VALUES
+        INSERT INTO charge_type_subject_mapper
+        (charge_type_id_,subject_id_,create_time_,update_time_) VALUES
         <foreach collection="subjectIds" item="item" separator=",">
             (#{chargeTypeId},#{item},now(),now())
         </foreach>

+ 68 - 11
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -202,7 +202,8 @@
         LEFT JOIN music_group mg ON cgtm.music_group_id_ = mg.id_
         LEFT JOIN class_group cg ON cg.id_ = cgtm.class_group_id_
 		LEFT JOIN teacher t ON t.id_ = cgtm.user_id_
-        WHERE cgtm.user_id_ = #{userId} AND cg.del_flag_ = 0 AND (cg.type_ = 'NORMAL' OR cg.type_ = 'MIX')
+        WHERE cgtm.user_id_ = #{search} AND cg.del_flag_ = 0 AND (cg.type_ = 'NORMAL' OR cg.type_ = 'MIX')
+        <include refid="global.limit"/>
     </select>
 
 
@@ -237,25 +238,31 @@
         <result column="current_class_times_" property="currentClassTimes"/>
         <result column="address_" property="address"/>
         <result column="single_class_minutes_" property="singleClassMinutes"/>
+        <result column="online_classes_num_" property="onlineClassesNum"/>
+        <result column="offline_classes_num_" property="offLineClassesNum"/>
     </resultMap>
     <select id="queryCoursePage" resultMap="CourseListDto">
         SELECT * FROM (
         SELECT cg.type_,s.address_,mg.name_ music_group_name_,
         cg.total_class_times_,cg.current_class_times_,'' single_class_minutes_,mg.id_
-        music_group_id_,cg.create_time_,cs.teach_mode_
+        music_group_id_,
+        0 online_classes_num_,
+        0 offline_classes_num_,
+        cg.create_time_
         FROM student_registration sr
         LEFT JOIN class_group cg ON cg.id_ = sr.class_group_id_
-        LEFT JOIN course_schedule cs ON cs.class_group_id_ = cg.id_
         LEFT JOIN music_group mg ON cg.music_group_id_ = mg.id_
         LEFT JOIN school s ON mg.school_id_ = s.id_
         WHERE sr.user_id_ = #{search} AND cg.type_ != 'VIP'
         UNION ALL
         SELECT cg.type_,ts.address_,vg.name_ music_group_name_,
         cg.total_class_times_,cg.current_class_times_,vg.single_class_minutes_,vg.id_
-        music_group_id_,cg.create_time_,cs.teach_mode_
+        music_group_id_,
+        IF(vg.online_classes_num_ IS NULL,0,vg.online_classes_num_) online_classes_num_,
+        IF(vg.offline_classes_num_ IS NULL,0,vg.offline_classes_num_) offline_classes_num_,
+        cg.create_time_
         FROM class_group_student_mapper cgsm
         LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_
-        LEFT JOIN course_schedule cs ON cs.class_group_id_ = cg.id_
         LEFT JOIN vip_group_class_group_mapper vgcgm ON vgcgm.class_group_id_ = cgsm.class_group_id_
         LEFT JOIN vip_group vg ON vg.id_ = vgcgm.vip_group_id_
         LEFT JOIN teacher_school ts ON vg.teacher_school_id_ = ts.id_
@@ -433,9 +440,14 @@
         <result property="schoolId" column="school_id_"/>
         <result property="schoolName" column="school_name_"/>
         <result property="subjectIdList" column="subject_id_list_"/>
+        <result property="surplusClassTimes" column="surplus_class_times_"/>
+        <result property="paymentExpireDate" column="payment_expire_date_"/>
+        <result property="coursesExpireDate" column="courses_expire_date_"/>
+        <result property="singleClassTimes" column="single_class_minutes_"/>
+        <result property="type" column="type_"/>
     </resultMap>
 
-    <select id="findTeacherMusicClassGroup" resultType="com.ym.mec.biz.dal.dto.TeacherClassGroupDto">
+    <select id="findTeacherMusicClassGroup" resultMap="TeacherClassGroupDto">
         SELECT
             cg.id_ class_group_id_,
             cg.name_ class_group_name_,
@@ -443,16 +455,61 @@
             cg.current_class_times_,
             cg.total_class_times_,
             cg.subject_id_list_,
+            cg.type_,
+            COUNT(cg.id_) surplus_class_times_,
+            mg.id_ music_group_id_,
+            mg.name_ music_group_name_,
+            s.id_ school_id_,
+            s.name_ school_name_
+        FROM
+            course_schedule_teacher_salary csts
+            LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
+            LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
+            LEFT JOIN music_group mg ON cg.music_group_id_ = mg.id_
+            LEFT JOIN school s ON mg.school_id_ = s.id_
+        WHERE
+            csts.user_id_ = #{teacherId}
+            AND cs.status_ != 'OVER'
+            AND cs.type_ != 'VIP'
+            AND cs.type_ != 'DEMO'
+            AND csts.expect_salary_!=0
+        GROUP BY cg.id_
+    </select>
+    <select id="findTeacherVipClassGroup" resultMap="TeacherClassGroupDto">
+        SELECT
+            cg.id_ class_group_id_,
+            cg.name_ class_group_name_,
+            cg.type_,
+            vg.payment_expire_date_,
+            vg.courses_expire_date_,
+            vg.single_class_minutes_,
+            cg.total_class_times_,
+            COUNT(vg.id_) surplus_class_times_,
             mg.id_ music_group_id_,
             mg.name_ music_group_name_,
             s.id_ school_id_,
             s.name_ school_name_
         FROM
-            class_group_teacher_mapper cgtm
-            LEFT JOIN class_group cg ON cgtm.class_group_id_=cg.id_
-            LEFT JOIN music_group mg ON cg.music_group_id_=mg.id_
-            LEFT JOIN school s ON mg.school_id_=s.id_
-        WHERE cgtm.user_id_=#{teacherId} AND cg.type_!="VIP" AND cg.type_!="DEMO"
+            vip_group vg
+            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_ = vgcgm.vip_group_id_
+            LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
+            LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
+            LEFT JOIN music_group mg ON cg.music_group_id_ = mg.id_
+            LEFT JOIN school s ON mg.school_id_ = s.id_
+        WHERE
+            cs.actual_teacher_id_ = #{teacherId}
+            AND cs.status_ != 'OVER'
+            AND cs.type_ = 'VIP'
+        GROUP BY
+            vg.id_,cg.id_
+    </select>
+    <select id="countGroupCourses" resultType="java.lang.Integer">
+        SELECT COUNT(DISTINCT mg.id_)
+        FROM class_group_teacher_mapper cgtm
+        LEFT JOIN music_group mg ON cgtm.music_group_id_ = mg.id_
+        LEFT JOIN class_group cg ON cg.id_ = cgtm.class_group_id_
+		LEFT JOIN teacher t ON t.id_ = cgtm.user_id_
+        WHERE cgtm.user_id_ = #{search} AND cg.del_flag_ = 0 AND (cg.type_ = 'NORMAL' OR cg.type_ = 'MIX')
     </select>
 
     <!-- 增加实际学生人数 -->

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

@@ -79,7 +79,47 @@
     <select id="query" resultMap="ClassGroupStudentMapper" parameterType="map">
 		SELECT * FROM class_group_student_mapper where class_group_id_ = #{classGroupId} and user_id_ = #{userId}
 	</select>
-	
+    <select id="findStudentNumByClassGroupId" resultType="string">
+        SELECT
+            su.username_
+        FROM
+            class_group_student_mapper cgsm
+            LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
+            WHERE cgsm.class_group_id_=#{classGroupId}
+    </select>
+
+    <resultMap id="teacherClassStudentDto" type="com.ym.mec.biz.dal.dto.TeacherClassStudentDto">
+        <result property="userId" column="user_id_"/>
+        <result property="userName" column="username_"/>
+        <result property="avatar" column="avatar_"/>
+        <result property="continuousAbsenteeismTimes" column="continuous_absenteeism_times_"/>
+    </resultMap>
+
+    <select id="findClassStudent" resultMap="teacherClassStudentDto">
+        SELECT
+            su.id_ user_id_,
+            su.username_,
+            su.avatar_,
+            mgsf.continuous_absenteeism_times_
+        FROM
+            class_group_student_mapper cgsm
+            LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_
+            LEFT JOIN sys_user su ON cgsm.user_id_ = su.id_
+            LEFT JOIN music_group_student_fee_ mgsf ON cg.music_group_id_=mgsf.music_group_id_
+        WHERE
+            cgsm.class_group_id_ = #{classGroupId}
+        ORDER BY su.id_
+        <include refid="global.limit"/>
+    </select>
+    <select id="findClassStudentNum" resultType="int">
+        SELECT
+            COUNT(*)
+        FROM
+            class_group_student_mapper cgsm
+        WHERE
+            cgsm.class_group_id_ = #{classGroupId}
+    </select>
+
     <delete id="deleteStudentByMusicGroupId" parameterType="map">
         DELETE FROM class_group_student_mapper WHERE class_group_id_ in (select id_ from class_group where music_group_id_ = #{musicGroupId}) and user_id_ = #{userId}
     </delete>

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

@@ -110,6 +110,22 @@
             #{item.id}
         </foreach>
     </select>
+    <select id="findByClassGroupAndRole" resultMap="ClassGroupTeacherMapper">
+        SELECT u.real_name_, ct.*
+        FROM sys_user u,
+        class_group_teacher_mapper ct
+        WHERE ct.class_group_id_ = #{classGroupId}
+        AND ct.user_id_=u.id_
+        AND teacher_role_=#{teacherRole,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+    </select>
+    <select id="findByMusicGroup" resultMap="ClassGroupTeacherMapper">
+        SELECT u.real_name_, ct.*
+        FROM sys_user u,
+        class_group_teacher_mapper ct
+        WHERE ct.music_group_id_ = #{musicGroupId}
+        AND ct.user_id_=u.id_
+        AND ct.teacher_role_="BISHOP"
+    </select>
 
     <!-- 删除对应乐团老师关联关系 -->
     <delete id="delMusicGroupTeacherMapper">

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

@@ -691,46 +691,120 @@
     	select * from course_schedule where CONCAT(class_date_,' ',end_class_time_) &lt;= now() and status_ != 'OVER'
     </select>
     
-    <update id="batchUpdate" parameterType="com.ym.mec.biz.dal.entity.CourseSchedule">
+    <update id="batchUpdate" parameterType="java.util.List">
+    	<foreach collection="list" item="item" index="index" open="" close="" separator=";">
         UPDATE course_schedule
         <set>
-            <if test="classDate != null">
-                class_date_ = #{classDate},
+            <if test="item.classDate != null">
+                class_date_ = #{item.classDate},
             </if>
-            <if test="endClassTime != null">
-                end_class_time_ = #{endClassTime},
+            <if test="item.endClassTime != null">
+                end_class_time_ = #{item.endClassTime},
             </if>
-            <if test="status != null">
-                status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            <if test="item.status != null">
+                status_ = #{item.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
-            <if test="type != null">
-                type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            <if test="item.type != null">
+                type_ = #{item.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
-            <if test="actualTeacherId != null">
-                actual_teacher_id_ = #{actualTeacherId},
+            <if test="item.actualTeacherId != null">
+                actual_teacher_id_ = #{item.actualTeacherId},
             </if>
-            <if test="subsidy != null">
-                subsidy_ = #{subsidy},
+            <if test="item.subsidy != null">
+                subsidy_ = #{item.subsidy},
             </if>
-            <if test="classGroupId != null">
-                class_group_id_ = #{classGroupId},
+            <if test="item.classGroupId != null">
+                class_group_id_ = #{item.classGroupId},
             </if>
-            <if test="startClassTime != null">
-                start_class_time_ = #{startClassTime},
+            <if test="item.startClassTime != null">
+                start_class_time_ = #{item.startClassTime},
             </if>
-            <if test="teacherId != null">
-                teacher_id_ = #{teacherId},
+            <if test="item.teacherId != null">
+                teacher_id_ = #{item.teacherId},
             </if>
-            <if test="updateTime != null">
-                update_time_ = #{updateTime},
+            <if test="item.updateTime != null">
+                update_time_ = #{item.updateTime},
             </if>
-            <if test="studentNum != null">
-                student_num_ = #{studentNum},
+            <if test="item.studentNum != null">
+                student_num_ = #{item.studentNum},
             </if>
-            <if test="leaveStudentNum != null">
-                leave_student_num_ = #{leaveStudentNum},
+            <if test="item.leaveStudentNum != null">
+                leave_student_num_ = #{item.leaveStudentNum},
             </if>
         </set>
-        WHERE id_ = #{id}
+        WHERE id_ = #{item.id}
+        </foreach>
     </update>
+
+    <select id="queryNoSignInListByBeforeMinutes" resultMap="CourseSchedule">
+        SELECT cs.* FROM course_schedule cs left join teacher_attendance ta on ta.course_schedule_id_ = cs.id_ WHERE ta.sign_in_time_ is null and SUBTIME(start_class_time_, CONCAT(#{minutes},'00')) &lt; CURRENT_TIME()
+    </select>
+
+    <resultMap id="teacherClassCourseSchedule" type="com.ym.mec.biz.dal.dto.TeacherClassCourseSchudeleDto">
+        <result property="classGroupId" column="class_group_id_"/>
+        <result property="courseScheduleId" column="course_schedule_id_"/>
+        <result property="courseScheduleName" column="course_schedule_name_"/>
+        <result property="status" column="status_"/>
+        <result property="classDate" column="class_date_"/>
+        <result property="startClassTime" column="start_class_time_"/>
+        <result property="endClassTime" column="end_class_time_"/>
+        <result property="actualTeacherId" column="actual_teacher_id_"/>
+        <result property="actualTeacherName" column="actual_teacher_id_"/>
+        <result property="type" column="type_"/>
+        <result property="studentNum" column="student_num_"/>
+        <result property="leaveStudentNum" column="leave_student_num_"/>
+    </resultMap>
+
+    <sql id="teacherClassCourseScheduleQueryCondition">
+        <where>
+            cs.class_group_id_ = #{classGroupId}
+            AND csts.user_id_ = #{userId}
+            AND csts.expect_salary_ != 0
+            <if test="onlyHistory!=null and onlyHistory==1">
+                AND CONCAT( cs.class_date_, ' ', cs.end_class_time_ )&lt;now()
+            </if>
+        </where>
+    </sql>
+
+    <select id="queryTeacherClassCourseSchedule" resultMap="teacherClassCourseSchedule">
+        SELECT
+            cs.class_group_id_,
+            cs.id_ course_schedule_id_,
+            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.name_ course_schedule_name_,
+            cs.student_num_,
+            cs.leave_student_num_,
+            cs.type_,
+            cs.status_,
+            cs.actual_teacher_id_,
+            su.username_
+        FROM
+            course_schedule_teacher_salary csts
+            LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
+            LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
+        <include refid="teacherClassCourseScheduleQueryCondition"/>
+        ORDER BY cs.id_
+        <include refid="global.limit"/>
+    </select>
+
+    <select id="countTeacherClassCourseSchedule" resultType="int">
+        SELECT
+            COUNT(cs.id_)
+        FROM
+          course_schedule_teacher_salary csts
+          LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
+        <include refid="teacherClassCourseScheduleQueryCondition"/>
+    </select>
+    <select id="countClassCourseNumByMusicGroup" resultType="java.util.Map">
+        SELECT
+            cg.id_,
+            COUNT(cs.id_)
+        FROM
+            class_group cg
+            LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
+            WHERE music_group_id_ = #{musicGroupId}
+            GROUP BY cg.id_
+    </select>
 </mapper>

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

@@ -34,7 +34,7 @@
 			AS ID FROM DUAL </selectKey> -->
 		INSERT INTO course_schedule_rewards_rules
 		(id_,name_,course_schedule_type_,reward_mode_,organ_id_list_,rewards_rules_json_,create_time_,update_time_)
-		VALUES(#{id},#{name},#{courseScheduleType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{rewardMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{organIdList},#{rewardsRulesJson},#{createTime},#{updateTime})
+		VALUES(#{id},#{name},#{courseScheduleType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{rewardMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{organIdList},#{rewardsRulesJson},now(),now())
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
@@ -53,7 +53,7 @@
 				id_ = #{id},
 			</if>
 			<if test="updateTime != null">
-				update_time_ = #{updateTime},
+				update_time_ = now(),
 			</if>
 			<if test="organIdList != null">
 				organ_id_list_ = #{organIdList},

+ 166 - 175
mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml

@@ -5,99 +5,100 @@
 不要修改此文件。所有改动将在下次重新自动生成时丢失。
 -->
 <mapper namespace="com.ym.mec.biz.dal.dao.DemoGroupDao">
-	
-	<resultMap type="com.ym.mec.biz.dal.entity.DemoGroup" id="DemoGroup">
-		<result column="id_" property="id" />
-		<result column="name_" property="name" />
-		<result column="single_class_minutes_" property="singleClassMinutes" />
-		<result column="organ_id_list_" property="organIdList" />
-		<result column="create_time_" property="createTime" />
-		<result column="update_time_" property="updateTime" />
-		<result column="user_id_" property="userId" />
-		<result column="price_" property="price"/>
-		<result column="subject_id_" property="subjectId"/>
-	</resultMap>
 
-	<resultMap id="studentDemoGroupListDto" type="com.ym.mec.biz.dal.dto.StudentDemoGroupListDto">
-		<result property="demoGroupId" column="demo_group_id_"/>
-		<result property="userId" column="user_id_"/>
-		<result property="userName" column="username_"/>
-		<result property="avatar" column="avatar_"/>
-		<result property="introduction" column="introduction_"/>
-		<result property="numberOfClasses" column="number_of_classes_"/>
-		<result property="subjectName" column="subject_name_"/>
-		<collection property="coursesPlans" resultMap="com.ym.mec.biz.dal.dao.DemoGroupCoursesPlanDao.DemoGroupCoursesPlan" column="dgcp.id_"/>
-	</resultMap>
-	
-	<!-- 根据主键查询一条记录 -->
-	<select id="get" resultMap="DemoGroup" >
+    <resultMap type="com.ym.mec.biz.dal.entity.DemoGroup" id="DemoGroup">
+        <result column="id_" property="id"/>
+        <result column="name_" property="name"/>
+        <result column="single_class_minutes_" property="singleClassMinutes"/>
+        <result column="organ_id_list_" property="organIdList"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+        <result column="user_id_" property="userId"/>
+        <result column="price_" property="price"/>
+        <result column="subject_id_" property="subjectId"/>
+    </resultMap>
+
+    <resultMap id="studentDemoGroupListDto" type="com.ym.mec.biz.dal.dto.StudentDemoGroupListDto">
+        <result property="demoGroupId" column="demo_group_id_"/>
+        <result property="userId" column="user_id_"/>
+        <result property="userName" column="username_"/>
+        <result property="avatar" column="avatar_"/>
+        <result property="introduction" column="introduction_"/>
+        <result property="numberOfClasses" column="number_of_classes_"/>
+        <result property="subjectName" column="subject_name_"/>
+        <collection property="coursesPlans"
+                    resultMap="com.ym.mec.biz.dal.dao.DemoGroupCoursesPlanDao.DemoGroupCoursesPlan" column="dgcp.id_"/>
+    </resultMap>
+
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="DemoGroup">
 		SELECT * FROM demo_group WHERE id_ = #{id} 
 	</select>
-	
-	<!-- 全查询 -->
-	<select id="findAll" resultMap="DemoGroup">
+
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="DemoGroup">
 		SELECT * FROM demo_group ORDER BY id_
 	</select>
-	
-	<!-- 向数据库增加一条记录 -->
-	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.DemoGroup" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!--
-		<selectKey resultClass="int" keyProperty="id" > 
-		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
-		</selectKey>
-		-->
-		INSERT INTO demo_group (id_,name_,single_class_minutes_,organ_id_list_,create_time_,update_time_,user_id_,price_,subject_id_) VALUES(#{id},#{name},#{singleClassMinutes},#{organIdList},#{createTime},#{updateTime},#{userId},#{price},#{subjectId})
-	</insert>
-	
-	<!-- 根据主键查询一条记录 -->
-	<update id="update" parameterType="com.ym.mec.biz.dal.entity.DemoGroup">
-		UPDATE demo_group <set>
-<if test="userId != null">
-user_id_ = #{userId},
-</if>
-<if test="id != null">
-id_ = #{id},
-</if>
-<if test="updateTime != null">
-update_time_ = #{updateTime},
-</if>
-<if test="singleClassMinutes != null">
-single_class_minutes_ = #{singleClassMinutes},
-</if>
-<if test="organIdList != null">
-organ_id_list_ = #{organIdList},
-</if>
-<if test="name != null">
-name_ = #{name},
-</if>
-<if test="createTime != null">
-create_time_ = #{createTime},
-</if>
-		<if test="price != null">
-			price_ = #{price},
-		</if>
-		<if test="subjectId != null">
-			subject_id_ = #{subjectId},
-		</if>
-</set> WHERE id_ = #{id} 
-	</update>
-	
-	<!-- 根据主键删除一条记录 -->
-	<delete id="delete" >
+
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.DemoGroup" useGeneratedKeys="true" keyColumn="id"
+            keyProperty="id">
+        <!--
+        <selectKey resultClass="int" keyProperty="id" >
+        SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
+        </selectKey>
+        -->
+        INSERT INTO demo_group
+        (name_,single_class_minutes_,organ_id_list_,create_time_,update_time_,user_id_,price_,subject_id_)
+        VALUES(#{name},#{singleClassMinutes},#{organIdList},now(),now(),#{userId},#{price},#{subjectId})
+    </insert>
+
+    <!-- 根据主键查询一条记录 -->
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.DemoGroup">
+        UPDATE demo_group
+        <set>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime},
+            </if>
+            <if test="singleClassMinutes != null">
+                single_class_minutes_ = #{singleClassMinutes},
+            </if>
+            <if test="organIdList != null">
+                organ_id_list_ = #{organIdList},
+            </if>
+            <if test="name != null">
+                name_ = #{name},
+            </if>
+            <if test="price != null">
+                price_ = #{price},
+            </if>
+            <if test="subjectId != null">
+                subject_id_ = #{subjectId},
+            </if>
+        </set>
+        WHERE id_ = #{id}
+    </update>
+
+    <!-- 根据主键删除一条记录 -->
+    <delete id="delete">
 		DELETE FROM demo_group WHERE id_ = #{id} 
 	</delete>
-	
-	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="DemoGroup" parameterType="map">
-		SELECT * FROM demo_group ORDER BY id_ <include refid="global.limit"/>
-	</select>
-	
-	<!-- 查询当前表的总记录数 -->
-	<select id="queryCount" resultType="int">
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="DemoGroup" parameterType="map">
+        SELECT * FROM demo_group ORDER BY id_
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM demo_group
 	</select>
 
-	<select id="organIdListByDemoGroupId" resultType="int">
+    <select id="organIdListByDemoGroupId" resultType="int">
 		SELECT
 			su.organ_id_
 		FROM
@@ -106,10 +107,11 @@ create_time_ = #{createTime},
 			LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
 		WHERE dgcgm.demo_group_id_=#{demoGroupId}
 	</select>
-	<select id="getOrganIdByUserId" resultType="java.lang.Integer">
+    <select id="getOrganIdByUserId" resultType="java.lang.Integer">
 		select organ_id_ from sys_user where id_=#{userId}
 	</select>
-	<select id="createCourseSchedulesByDemoGroup" parameterType="com.ym.mec.biz.dal.entity.DemoGroup" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
+    <select id="createCourseSchedulesByDemoGroup" parameterType="com.ym.mec.biz.dal.entity.DemoGroup"
+            resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
 		SELECT
 			#{classGroupId} class_group_id_,
 			'NOT_START' status_,
@@ -123,7 +125,8 @@ create_time_ = #{createTime},
 			demo_group_courses_plan dgcp
 			WHERE dgcp.demo_group_id_=#{demoGroup.id} AND dgcp.courses_start_time_ = #{startTime}
 	</select>
-	<select id="createCourseScheduleByDemoGroupPlan" parameterType="com.ym.mec.biz.dal.entity.DemoGroup" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
+    <select id="createCourseScheduleByDemoGroupPlan" parameterType="com.ym.mec.biz.dal.entity.DemoGroup"
+            resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
 		SELECT
 			#{classGroupId} class_group_id_,
 			'NOT_START' status_,
@@ -131,13 +134,14 @@ create_time_ = #{createTime},
 			CONCAT(dgcp.course_date_,' ',dgcp.start_time_) start_class_time_,
 			DATE_ADD( CONCAT(dgcp.course_date_,' ',dgcp.start_time_),INTERVAL #{demoGroup.singleClassMinutes} MINUTE) end_class_time_,
 			#{demoGroup.userId} teacher_id_,
+			#{demoGroup.userId} actual_teacher_id_,
 			'ONLINE' teach_mode_,
-			'demo' type_
+			'DEMO' type_
 		FROM
 			demo_group_courses_plan dgcp
 			WHERE dgcp.id_=#{coursePlanId}
 	</select>
-	<select id="countDemoGroupStudents" resultType="java.lang.Integer">
+    <select id="countDemoGroupStudents" resultType="java.lang.Integer">
 		SELECT
 			count(cgsm.user_id_)
 		FROM
@@ -146,61 +150,61 @@ create_time_ = #{createTime},
 		WHERE dgcgm.demo_group_id_=#{demoGroupId}
 	</select>
 
-	<sql id="demoGroupQueryCondition">
-		<where>
-			dgcp.status_=0
-			<if test="search!=null">
-				AND su.username_ like concat('%',#{search},'%')
-			</if>
-			<if test="subjectIds!=null and subjectIds!=''">
-				AND FIND_IN_SET(dg.subject_id_,#{subjectIds})
-			</if>
-			<if test="startTime!=null and endTime==null">
-				AND CONCAT(dgcp.course_date_,' ',dgcp.start_time_)&gt;=#{startTime}
-			</if>
-			<if test="startTime!=null and endTime!=null">
-				AND (CONCAT(dgcp.course_date_,' ',dgcp.start_time_) BETWEEN #{startTime} AND #{endTime})
-			</if>
-		</where>
-	</sql>
+    <sql id="demoGroupQueryCondition">
+        <where>
+            dgcp.status_=0
+            <if test="search!=null">
+                AND su.username_ like concat('%',#{search},'%')
+            </if>
+            <if test="subjectIds!=null and subjectIds!=''">
+                AND FIND_IN_SET(dg.subject_id_,#{subjectIds})
+            </if>
+            <if test="startTime!=null and endTime==null">
+                AND CONCAT(dgcp.course_date_,' ',dgcp.start_time_)&gt;=#{startTime}
+            </if>
+            <if test="startTime!=null and endTime!=null">
+                AND (CONCAT(dgcp.course_date_,' ',dgcp.start_time_) BETWEEN #{startTime} AND #{endTime})
+            </if>
+        </where>
+    </sql>
 
-	<select id="findDemoGroupList" resultMap="studentDemoGroupListDto">
-		SELECT
-		dg.id_ demo_group_id_,
-		su.username_,
-		su.avatar_,
-		t.introduction_,
-		s.name_ subject_name_,
-		COUNT(dgcgm.class_group_id_) number_of_classes_,
-		dgcp.id_,
-		dgcp.demo_group_id_,
-		dgcp.create_time_,
-		dgcp.status_,
-		dgcp.course_date_,
-		CONCAT(dgcp.course_date_,' ',dgcp.start_time_) start_time_,
-		CONCAT(dgcp.course_date_,' ',dgcp.end_time_) end_time_
-		FROM
-		demo_group dg
-		LEFT JOIN demo_group_courses_plan dgcp ON dg.id_=dgcp.demo_group_id_
-		LEFT JOIN teacher t ON dg.user_id_=t.id_
-		LEFT JOIN sys_user su ON dg.user_id_=su.id_
-		LEFT JOIN `subject` s ON dg.subject_id_=s.id_
-		LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
-		<include refid="demoGroupQueryCondition"/>
-		GROUP BY dgcp.id_,dg.id_
-		ORDER BY dgcp.start_time_
-		<include refid="global.limit"/>
-	</select>
-	<select id="countDemoGroupList" resultType="java.lang.Integer">
-		SELECT
-			count(*)
-		FROM
-			demo_group dg
-			LEFT JOIN demo_group_courses_plan dgcp ON dg.id_=dgcp.demo_group_id_
-			LEFT JOIN sys_user su ON dg.user_id_=su.id_
-		<include refid="demoGroupQueryCondition"/>
-	</select>
-	<select id="findClassGroupIDByDemoGroupId" resultType="java.lang.Integer">
+    <select id="findDemoGroupList" resultMap="studentDemoGroupListDto">
+        SELECT
+        dg.id_ demo_group_id_,
+        su.username_,
+        su.avatar_,
+        t.introduction_,
+        s.name_ subject_name_,
+        COUNT(dgcgm.class_group_id_) number_of_classes_,
+        dgcp.id_,
+        dgcp.demo_group_id_,
+        dgcp.create_time_,
+        dgcp.status_,
+        dgcp.course_date_,
+        CONCAT(dgcp.course_date_,' ',dgcp.start_time_) start_time_,
+        CONCAT(dgcp.course_date_,' ',dgcp.end_time_) end_time_
+        FROM
+        demo_group dg
+        LEFT JOIN demo_group_courses_plan dgcp ON dg.id_=dgcp.demo_group_id_
+        LEFT JOIN teacher t ON dg.user_id_=t.id_
+        LEFT JOIN sys_user su ON dg.user_id_=su.id_
+        LEFT JOIN `subject` s ON dg.subject_id_=s.id_
+        LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
+        <include refid="demoGroupQueryCondition"/>
+        GROUP BY dgcp.id_,dg.id_
+        ORDER BY dgcp.start_time_
+        <include refid="global.limit"/>
+    </select>
+    <select id="countDemoGroupList" resultType="java.lang.Integer">
+        SELECT
+        count(*)
+        FROM
+        demo_group dg
+        LEFT JOIN demo_group_courses_plan dgcp ON dg.id_=dgcp.demo_group_id_
+        LEFT JOIN sys_user su ON dg.user_id_=su.id_
+        <include refid="demoGroupQueryCondition"/>
+    </select>
+    <select id="findClassGroupIDByDemoGroupId" resultType="java.lang.Integer">
 		SELECT
 			class_group_id_
 		FROM
@@ -211,40 +215,27 @@ create_time_ = #{createTime},
 		SELECT * FROM demo_group WHERE user_id_=#{teacherId}
 	</select>
 
-	<sql id="teacherDemoGroupsQueryCondition">
-		<where>
-			dg.user_id_=#{teacherId}
-		</where>
-	</sql>
-
-	<select id="findTeacherDemoGroups" resultType="com.ym.mec.biz.dal.dto.TeacherManageDemoGroupListDto">
-		SELECT
-			cs.class_date_ classDate,
-			GROUP_CONCAT(DISTINCT CONCAT(cs.start_class_time_,' ',cs.end_class_time_)) startTimes,
-			GROUP_CONCAT(s.name_) subjectNames
-		FROM
-			demo_group dg
-		LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
-		LEFT JOIN class_group cg ON dgcgm.class_group_id_=cg.id_
-		LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
-		LEFT JOIN `subject` s ON FIND_IN_SET(s.id_,cg.subject_id_list_)
-		<include refid="teacherDemoGroupsQueryCondition"/>
-		GROUP BY cs.class_date_
-		<include refid="global.limit"/>
-	</select>
-	<select id="countTeacherDemoGroups" resultType="int">
-		SELECT
-			count(*)
-		FROM
-			demo_group dg
-		LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
-		LEFT JOIN class_group cg ON dgcgm.class_group_id_=cg.id_
-		LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
-		<include refid="teacherDemoGroupsQueryCondition"/>
-		GROUP BY cs.class_date_
+    <select id="findTeacherDemoGroups" resultType="com.ym.mec.biz.dal.dto.TeacherManageDemoGroupListDto">
+        SELECT
+        cs.class_date_ classDate,
+        GROUP_CONCAT(DISTINCT CONCAT(cs.start_class_time_,' ',cs.end_class_time_)) startTimes,
+        GROUP_CONCAT(s.name_) subjectNames
+        FROM
+        demo_group dg
+        LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
+        LEFT JOIN class_group cg ON dgcgm.class_group_id_=cg.id_
+        LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
+        LEFT JOIN `subject` s ON s.id_ = dg.subject_id_
+        WHERE cs.type_ = 'DEMO' AND dg.user_id_ = #{teacherId}
+        GROUP BY cs.class_date_
+        <include refid="global.limit"/>
+    </select>
+    <select id="countTeacherDemoGroups" resultType="Integer">
+		SELECT COUNT(DISTINCT cs.class_date_) FROM course_schedule cs WHERE cs.type_ = 'DEMO' AND cs.actual_teacher_id_ = #{teacherId}
 	</select>
 
-	<select id="findDemoGroupStartClassTimesWithWeekByTeacherId" resultType="com.ym.mec.biz.dal.dto.EducationDemoGroupListDto">
+    <select id="findDemoGroupStartClassTimesWithWeekByTeacherId"
+            resultType="com.ym.mec.biz.dal.dto.EducationDemoGroupListDto">
 		SELECT
 			class_date_ classDate,
 			GROUP_CONCAT(start_class_time_) startClassTimes
@@ -254,7 +245,7 @@ create_time_ = #{createTime},
 			YEARWEEK(class_date_) = YEARWEEK( now( ) )
 		GROUP BY class_date_
 	</select>
-	<select id="countTeacherDemoGroupNum" resultType="java.util.Map">
+    <select id="countTeacherDemoGroupNum" resultType="java.util.Map">
 		SELECT dg.user_id_ `key`,COUNT(dg.id_) `value` FROM demo_group dg
         WHERE FIND_IN_SET(dg.user_id_,#{teacherIds}) GROUP BY user_id_
 	</select>

+ 17 - 2
mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml

@@ -114,7 +114,22 @@
     <select id="queryWillRenewList" resultMap="MusicGroupStudentFee">
         SELECT * FROM music_group_student_fee_ WHERE payment_status_ = 'PAID_COMPLETED' and date_add(now(), interval #{days} day) >= next_payment_date_
     </select>
-    
+
+    <select id="countContinuosAbsenteeismStudentNum" resultType="java.util.Map">
+        SELECT
+            music_group_id_ AS 'key',
+            COUNT( id_ ) AS 'value'
+        FROM
+            music_group_student_fee_
+        WHERE
+            continuous_absenteeism_times_ &gt;=3
+            AND music_group_id_ IN
+            <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
+                #{musicGroupId}
+            </foreach>
+        GROUP BY music_group_id_
+    </select>
+
     <update id="batchUpdate" parameterType="java.util.List">
     	<foreach collection="list" item="item" index="index" open="" close="" separator=";">
         UPDATE music_group_student_fee_
@@ -150,7 +165,7 @@
                 temporary_course_fee_ = #{item.temporaryCourseFee},
             </if>
         </set>
-        WHERE id_ = #{id}
+        WHERE id_ = #{item.id}
         </foreach>
     </update>
 </mapper>

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

@@ -132,6 +132,12 @@
     <select id="queryNameByIds" resultType="java.util.Map">
         select id_ `key`,name_ `value` FROM `subject` s WHERE FIND_IN_SET(s.id_,#{subjectIds})
     </select>
+    <select id="findBySubjecIds" resultType="java.util.Map">
+        select id_ `key`,name_ `value` FROM `subject` s WHERE s.id_ IN
+        <foreach collection="subjectIds" item="subjectId" open="(" close=")" separator=",">
+            #{subjectId}
+        </foreach>
+    </select>
 
     <sql id="querySubPageSql">
         <where>

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

@@ -132,7 +132,7 @@
             cs.start_class_time_,
             cg.name_,
             cg.type_,
-            ta.status_,
+            ta.sign_in_status_ status_,
             ta.remark_
         FROM
             teacher_attendance ta
@@ -156,9 +156,9 @@
     <select id="countClassTime" resultType="java.lang.Integer">
         select count(*) from teacher_attendance where class_group_id_=#{classGroupId} for update
     </select>
+    
     <select id="findByTeacherAttendanceInfo" resultMap="TeacherAttendance">
         SELECT * FROM teacher_attendance WHERE teacher_id_=#{teacherId} AND course_schedule_id_=#{courseScheduleId}
     </select>
 
-
 </mapper>

+ 18 - 19
mec-biz/src/main/resources/config/mybatis/TeacherDefaultMusicGroupSalaryMapper.xml

@@ -3,12 +3,11 @@
 <!-- 这个文件是自动生成的。 不要修改此文件。所有改动将在下次重新自动生成时丢失。 -->
 <mapper namespace="com.ym.mec.biz.dal.dao.TeacherDefaultMusicGroupSalaryDao">
 
-	<resultMap type="com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary"
-		id="TeacherDefaultMusicGroupSalary">
+	<resultMap type="com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary" id="TeacherDefaultMusicGroupSalary">
 		<result column="id_" property="id" />
-		<result column="user_id_" property="userId" />
-		<result column="course_schedule_type_" property="courseScheduleType" />
-		<result column="settlement_type_" property="settlementType" />
+		<result column="user_id_" property="userId"/>
+		<result column="course_schedule_type_" property="courseScheduleType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="settlement_type_" property="settlementType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result column="duration_min_" property="durationMin" />
 		<result column="duration_max_" property="durationMax" />
 		<result column="main_teacher_salary_" property="mainTeacherSalary" />
@@ -32,11 +31,12 @@
 	<insert id="insert"
 		parameterType="com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary"
 		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
-			AS ID FROM DUAL </selectKey> -->
 		INSERT INTO teacher_default_music_group_salary
-		(id_,user_id_,course_schedule_type_,settlement_type_,duration_min_,duration_max_,main_teacher_salary_,assistant_teacher_salary_,create_time_,update_time_)
-		VALUES(#{id},#{userId},#{courseScheduleType},#{settlementType},#{durationMin},#{durationMax},#{mainTeacherSalary},#{assistantTeacherSalary},now(),now())
+		(user_id_,course_schedule_type_,settlement_type_,duration_min_,duration_max_,main_teacher_salary_,
+		assistant_teacher_salary_,create_time_,update_time_)
+		VALUES(#{userId},#{courseScheduleType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+		#{settlementType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{durationMin},#{durationMax},
+		#{mainTeacherSalary},#{assistantTeacherSalary},now(),now())
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
@@ -51,10 +51,10 @@
 				update_time_ = #{updateTime},
 			</if>
 			<if test="courseScheduleType != null">
-				course_schedule_type_ = #{courseScheduleType},
+				course_schedule_type_ = #{courseScheduleType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>
 			<if test="settlementType != null">
-				settlement_type_ = #{settlementType},
+				settlement_type_ = #{settlementType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>
 			<if test="duration_min_ != null">
 				duration_min_ = #{durationMin},
@@ -74,25 +74,24 @@
 
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete">
-		DELETE FROM
-		teacher_default_music_group_salary WHERE id_ = #{id}
+		DELETE FROM teacher_default_music_group_salary WHERE id_ = #{id}
 	</delete>
 
 	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="TeacherDefaultMusicGroupSalary"
-		parameterType="map">
+	<select id="queryPage" resultMap="TeacherDefaultMusicGroupSalary" parameterType="map">
 		SELECT * FROM teacher_default_music_group_salary ORDER BY id_
-		<include refid="global.limit" />
+		<include refid="global.limit"/>
 	</select>
 
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM
-		teacher_default_music_group_salary
+		SELECT COUNT(*) FROM teacher_default_music_group_salary
 	</select>
 
 	<!-- 根据user_id 获取老师的默认薪酬 -->
 	<select id="getTeacherSalaryByUserIdAndType" resultMap="TeacherDefaultMusicGroupSalary">
-		SELECT * FROM teacher_default_music_group_salary WHERE user_id_=#{userId} AND course_schedule_type_ = #{classGroupType} AND settlement_type_ = #{settlementType}
+		SELECT * FROM teacher_default_music_group_salary
+		WHERE user_id_=#{userId} AND course_schedule_type_ = #{classGroupType}
+		AND settlement_type_ = #{settlementType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 	</select>
 </mapper>

+ 76 - 67
mec-biz/src/main/resources/config/mybatis/TeacherDefaultVipGroupSalaryMapper.xml

@@ -5,79 +5,88 @@
 不要修改此文件。所有改动将在下次重新自动生成时丢失。
 -->
 <mapper namespace="com.ym.mec.biz.dal.dao.TeacherDefaultVipGroupSalaryDao">
-	
-	<resultMap type="com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary" id="TeacherDefaultVipGroupSalary">
-		<result column="id_" property="id" />
-		<result column="user_id_" property="userId" />
-		<result column="vip_group_category_id_" property="vipGroupCategoryId" />
-		<result column="online_classes_salary_" property="onlineClassesSalary" />
-		<result column="offline_classes_salary_" property="offlineClassesSalary" />
-		<result column="create_time_" property="createTime" />
-		<result column="update_time_" property="updateTime" />
-	</resultMap>
-	
-	<!-- 根据主键查询一条记录 -->
-	<select id="get" resultMap="TeacherDefaultVipGroupSalary" >
+
+    <resultMap type="com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary" id="TeacherDefaultVipGroupSalary">
+        <result column="id_" property="id"/>
+        <result column="user_id_" property="userId"/>
+        <result column="vip_group_category_id_" property="vipGroupCategoryId"/>
+        <result column="vip_group_category_name_" property="vipGroupCategoryName"/>
+        <result column="online_classes_salary_" property="onlineClassesSalary"/>
+        <result column="offline_classes_salary_" property="offlineClassesSalary"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+    </resultMap>
+
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="TeacherDefaultVipGroupSalary">
 		SELECT * FROM teacher_default_vip_group_salary WHERE id_ = #{id} 
 	</select>
-	
-	<!-- 全查询 -->
-	<select id="findAll" resultMap="TeacherDefaultVipGroupSalary">
+
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="TeacherDefaultVipGroupSalary">
 		SELECT * FROM teacher_default_vip_group_salary ORDER BY id_
 	</select>
-	
-	<!-- 向数据库增加一条记录 -->
-	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!--
-		<selectKey resultClass="int" keyProperty="id" > 
-		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
-		</selectKey>
-		-->
-		INSERT INTO teacher_default_vip_group_salary (id_,user_id_,vip_group_category_id_,online_classes_salary_,offline_classes_salary_,create_time_,update_time_) VALUES(#{id},#{userId},#{vipGroupCategoryId},#{onlineClassesSalary},#{offlineClassesSalary},#{createTime},#{updateTime})
-	</insert>
-	
-	<!-- 根据主键查询一条记录 -->
-	<update id="update" parameterType="com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary">
-		UPDATE teacher_default_vip_group_salary <set>
-<if test="userId != null">
-user_id_ = #{userId},
-</if>
-<if test="id != null">
-id_ = #{id},
-</if>
-<if test="onlineClassesSalary != null">
-online_classes_salary_ = #{onlineClassesSalary},
-</if>
-<if test="updateTime != null">
-update_time_ = #{updateTime},
-</if>
-<if test="offlineClassesSalary != null">
-offline_classes_salary_ = #{offlineClassesSalary},
-</if>
-<if test="vipGroupCategoryId != null">
-vip_group_category_id_ = #{vipGroupCategoryId},
-</if>
-<if test="createTime != null">
-create_time_ = #{createTime},
-</if>
-</set> WHERE id_ = #{id} 
-	</update>
-	
-	<!-- 根据主键删除一条记录 -->
-	<delete id="delete" >
+
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary" useGeneratedKeys="true"
+            keyColumn="id" keyProperty="id">
+        INSERT INTO teacher_default_vip_group_salary
+        (user_id_,vip_group_category_id_,online_classes_salary_,offline_classes_salary_,create_time_,update_time_)
+        VALUES(#{userId},#{vipGroupCategoryId},#{onlineClassesSalary},#{offlineClassesSalary},now(),now())
+    </insert>
+
+    <!-- 根据主键查询一条记录 -->
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary">
+        UPDATE teacher_default_vip_group_salary
+        <set>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
+            <if test="onlineClassesSalary != null">
+                online_classes_salary_ = #{onlineClassesSalary},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime},
+            </if>
+            <if test="offlineClassesSalary != null">
+                offline_classes_salary_ = #{offlineClassesSalary},
+            </if>
+            <if test="vipGroupCategoryId != null">
+                vip_group_category_id_ = #{vipGroupCategoryId},
+            </if>
+        </set>
+        WHERE id_ = #{id}
+    </update>
+
+    <!-- 根据主键删除一条记录 -->
+    <delete id="delete">
 		DELETE FROM teacher_default_vip_group_salary WHERE id_ = #{id} 
 	</delete>
-	
-	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="TeacherDefaultVipGroupSalary" parameterType="map">
-		SELECT * FROM teacher_default_vip_group_salary ORDER BY id_ <include refid="global.limit"/>
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="TeacherDefaultVipGroupSalary" parameterType="map">
+        SELECT tdvgs.*,vgc.name_ vip_group_category_name_ FROM teacher_default_vip_group_salary tdvgs
+        LEFT JOIN  vip_group_category vgc ON tdvgs.vip_group_category_id_ = vgc.id_
+        <where>
+            <if test="search != null and search != ''">
+                tdvgs.user_id_ = #{search}
+            </if>
+        </where>
+        ORDER BY tdvgs.id_
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+		SELECT COUNT(tdvgs.id_) FROM teacher_default_vip_group_salary tdvgs
+        <where>
+            <if test="search != null and search != ''">
+                tdvgs.user_id_ = #{search}
+            </if>
+        </where>
 	</select>
-	
-	<!-- 查询当前表的总记录数 -->
-	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM teacher_default_vip_group_salary
-	</select>
-	<select id="findByTeacherAndCategory" resultMap="TeacherDefaultVipGroupSalary">
-		select * from teacher_default_vip_group_salary where user_id_=#{userId} and vip_group_category_id_=#{categoryId}
+    <select id="findByTeacherAndCategory" resultMap="TeacherDefaultVipGroupSalary">
+		select * from teacher_default_vip_group_salary
+		where user_id_=#{userId} and vip_group_category_id_=#{categoryId}
 	</select>
 </mapper>

+ 20 - 5
mec-biz/src/main/resources/config/mybatis/TeacherLeaveRecordMapper.xml

@@ -96,15 +96,30 @@
 	</delete>
 
 	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="TeacherLeaveRecord"
-		parameterType="map">
-		SELECT * FROM teacher_leave_record ORDER BY id_
+	<select id="queryPage" resultMap="TeacherLeaveRecord" parameterType="map">
+		SELECT * FROM teacher_leave_record tlr
+		<include refid="queryLeavePage"/>
+		ORDER BY tlr.id_
 		<include refid="global.limit" />
 	</select>
 
+	<sql id="queryLeavePage">
+		<where>
+			<if test="startTime != null and startTime != ''">
+				AND tlr.create_time_ &gt;= #{startTime}
+			</if>
+			<if test="endTime != null and endTime != ''">
+				AND tlr.create_time_ &lt;= #{endTime}
+			</if>
+			<if test="leaveCategoryId != null">
+				AND tlr.leave_category_id_ = #{leaveCategoryId}
+			</if>
+		</where>
+	</sql>
+
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM
-		teacher_leave_record
+		SELECT COUNT(tlr.id_) FROM teacher_leave_record tlr
+		<include refid="queryLeavePage"/>
 	</select>
 </mapper>

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

@@ -260,4 +260,56 @@
             AND t.organ_id_ = #{organId}
         </if>
     </select>
+    <select id="countCloses" resultType="java.lang.Integer">
+        SELECT COUNT(cs.id_)
+        FROM course_schedule cs
+        LEFT JOIN course_schedule_teacher_salary csts ON cs.id_ = csts.course_schedule_id_
+        LEFT JOIN teacher_attendance ta ON cs.id_ = ta.course_schedule_id_
+        LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
+        <include refid="queryCloses"/>
+    </select>
+    <resultMap id="TeacherCloseDto" type="com.ym.mec.biz.dal.dto.TeacherCloseDto">
+        <result property="classDate" column="class_date_"/>
+        <result property="classTime" column="start_class_time_"/>
+        <result property="className" column="class_name_"/>
+        <result property="courseScheduleType" column="class_type_"/>
+        <result property="teacherRole" column="teacher_role_"/>
+        <result property="currentClassTimes" column="current_class_times_"/>
+        <result property="totalClassTimes" column="total_class_times_"/>
+        <result property="signInStatus" column="sign_in_status_"/>
+        <result property="signOutStatus" column="sign_out_status_"/>
+        <result property="actualSalary" column="actual_salary_"/>
+        <result property="subsidy" column="subsidy_"/>
+        <result property="settlementTime" column="settlement_time_"/>
+    </resultMap>
+    <select id="queryCloses" resultMap="TeacherCloseDto">
+        SELECT cs.class_date_,cs.start_class_time_,cg.name_ class_name_,cs.type_ class_type_,
+        csts.teacher_role_,cg.current_class_times_,cg.total_class_times_,
+        ta.sign_in_status_,ta.sign_out_status_,csts.actual_salary_,csts.settlement_time_,csts.subsidy_
+        FROM course_schedule cs
+        LEFT JOIN course_schedule_teacher_salary csts ON cs.id_ = csts.course_schedule_id_
+        LEFT JOIN teacher_attendance ta ON cs.id_ = ta.course_schedule_id_
+        LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
+        <include refid="queryCloses"/>
+        <include refid="global.limit"/>
+    </select>
+    <sql id="queryCloses">
+        <where>
+            <if test="teacherId != null">
+                AND cs.actual_teacher_id_ = #{teacherId}
+            </if>
+            <if test="courseStartDate != null and courseStartDate != ''">
+                AND cs.class_date_ &gt;= #{courseStartDate}
+            </if>
+            <if test="courseEndDate != null and courseEndDate != ''">
+                AND cs.class_date_ &lt;= #{courseEndDate}
+            </if>
+            <if test="courseScheduleType != null and courseScheduleType != ''">
+                AND cs.type_ = #{courseScheduleType}
+            </if>
+            <if test="teacherRole != null and teacherRole != ''">
+                AND csts.teacher_role_ = #{teacherRole}
+            </if>
+        </where>
+    </sql>
 </mapper>

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

@@ -14,4 +14,15 @@ public interface TaskRemoteService {
 
 	@GetMapping(value = "task/vipGroupAwardedMonthlyRewards")
 	public void vipGroupAwardedMonthlyRewards();
+	
+	@GetMapping(value = "task/updateCourseScheduleToOverStatus")
+    boolean updateCourseScheduleToOverStatus();
+	
+	@GetMapping("task/pushNoSignInMessage")
+	// 推送未签到消息提醒
+	public void pushNoSignInMessage();
+	
+	@GetMapping("task/pushNoSignOutMessage")
+	// 推送未签退消息提醒
+	public void pushNoSignOutMessage();
 }

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

@@ -21,4 +21,20 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 		logger.info("vip课月度奖励的服务调用失败");
 	}
 
+	@Override
+	public boolean updateCourseScheduleToOverStatus() {
+		logger.info("更新课程状态至已结束服务调用失败");
+		return false;
+	}
+
+	@Override
+	public void pushNoSignInMessage() {
+		logger.info("推送未签到消息提醒的服务调用失败");
+	}
+
+	@Override
+	public void pushNoSignOutMessage() {
+		logger.info("推送未签退消息提醒的服务调用失败");
+	}
+
 }

+ 9 - 2
mec-common/common-core/src/main/java/com/ym/mec/common/security/PermissionCheckService.java

@@ -5,18 +5,25 @@ import java.util.Collection;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Component;
 
 @Component("pcs")
 public class PermissionCheckService {
 
 	public boolean hasPermissions(String... permissions) {
-		Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+		Authentication authentication = SecurityUtils.getAuthentication();
 		if (authentication == null) {
 			return false;
 		}
 
+		String username = authentication.getName();
+
+		if (StringUtils.startsWith(username, SecurityConstants.USERNAME_PRINCIPAL_PREFIX)) {
+			if ("admin".equals(StringUtils.removeStart(username, SecurityConstants.USERNAME_PRINCIPAL_PREFIX))) {
+				return true;
+			}
+		}
+
 		Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
 
 		for (String perm : permissions) {

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/constant/SecurityConstants.java → mec-common/common-core/src/main/java/com/ym/mec/common/security/SecurityConstants.java

@@ -1,4 +1,4 @@
-package com.ym.mec.auth.config.constant;
+package com.ym.mec.common.security;
 
 public interface SecurityConstants {
 

+ 16 - 14
mec-education/src/main/java/com/ym/mec/education/config/ResourceServerConfig.java

@@ -2,33 +2,35 @@ package com.ym.mec.education.config;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
 import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
+
 import com.ym.mec.common.security.BaseAccessDeniedHandler;
 import com.ym.mec.common.security.BaseAuthenticationEntryPoint;
 
 @Configuration
 @EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true)
 public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
-    @Autowired
-    private BaseAccessDeniedHandler baseAccessDeniedHandler;
+	@Autowired
+	private BaseAccessDeniedHandler baseAccessDeniedHandler;
 
-    @Autowired
-    private BaseAuthenticationEntryPoint baseAuthenticationEntryPoint;
+	@Autowired
+	private BaseAuthenticationEntryPoint baseAuthenticationEntryPoint;
 
-    @Override
-    public void configure(HttpSecurity http) throws Exception {
-        http.csrf().disable().authorizeRequests().antMatchers("/v2/api-docs").permitAll()
-                .antMatchers("/api/**").permitAll()
-                .anyRequest().authenticated().and().httpBasic();
-    }
+	@Override
+	public void configure(HttpSecurity http) throws Exception {
+		http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
+				.authorizeRequests().antMatchers("/v2/api-docs").permitAll().antMatchers("/api/**").permitAll().anyRequest().authenticated().and().httpBasic();
+	}
 
-    @Override
-    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
-        resources.authenticationEntryPoint(baseAuthenticationEntryPoint).accessDeniedHandler(baseAccessDeniedHandler);
-    }
+	@Override
+	public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
+		resources.authenticationEntryPoint(baseAuthenticationEntryPoint).accessDeniedHandler(baseAccessDeniedHandler);
+	}
 
 }

+ 4 - 1
mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java

@@ -2,6 +2,7 @@ package com.ym.mec.student.config;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
@@ -12,6 +13,7 @@ import com.ym.mec.common.security.BaseAuthenticationEntryPoint;
 
 @Configuration
 @EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true)
 public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Autowired
@@ -22,7 +24,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Override
 	public void configure(HttpSecurity http) throws Exception {
-		http.csrf().disable().authorizeRequests().antMatchers("/v2/api-docs", "/register/getMusicGroupRegInfo", "/register/add","musicGroup/getSubjectGoodsAndInfo","/musicGroup/test","/studentOrder/notify").permitAll().anyRequest().authenticated().and().httpBasic();
+		http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
+				.authorizeRequests().antMatchers("/v2/api-docs").permitAll().anyRequest().authenticated().and().httpBasic();
 	}
 
 	@Override

+ 26 - 7
mec-student/src/main/java/com/ym/mec/student/config/WebMvcConfig.java

@@ -3,19 +3,25 @@ package com.ym.mec.student.config;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.format.FormatterRegistry;
 import org.springframework.http.MediaType;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import com.ym.mec.common.config.EnumConverterFactory;
 import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
+import com.ym.mec.student.interceptor.RequestInterceptor;
 
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {
 
+	@Autowired
+	private RequestInterceptor requestInterceptor;
+
 	/**
 	 * 枚举类的转换器 addConverterFactory
 	 */
@@ -23,14 +29,27 @@ public class WebMvcConfig implements WebMvcConfigurer {
 	public void addFormatters(FormatterRegistry registry) {
 		registry.addConverterFactory(new EnumConverterFactory());
 	}
-	
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		// addPathPatterns 用于添加拦截规则, 这里假设拦截 /url 后面的全部链接
+		List<String> includePathPatterns = new ArrayList<String>();
+		includePathPatterns.add("/**");
+
+		// excludePathPatterns 用户排除拦截
+		List<String> excludePathPatterns = new ArrayList<String>();
+		excludePathPatterns.add("/login");
+
+		registry.addInterceptor(requestInterceptor).addPathPatterns(includePathPatterns).excludePathPatterns(excludePathPatterns);
+	}
+
 	@Bean
-    public HttpMessageConverters fastJsonHttpMessageConverters(){
+	public HttpMessageConverters fastJsonHttpMessageConverters() {
 		LocalFastJsonHttpMessageConverter converter = new LocalFastJsonHttpMessageConverter();
-        List<MediaType> fastMediaTypes =  new ArrayList<MediaType>();
-        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
-        converter.setSupportedMediaTypes(fastMediaTypes);
-        return new HttpMessageConverters(converter);
-    }
+		List<MediaType> fastMediaTypes = new ArrayList<MediaType>();
+		fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
+		converter.setSupportedMediaTypes(fastMediaTypes);
+		return new HttpMessageConverters(converter);
+	}
 
 }

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

@@ -1,54 +1,31 @@
 package com.ym.mec.student.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.Map;
-
-import javax.annotation.Resource;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
 import com.ym.mec.biz.dal.dto.MusicGroupSubjectGoodsAndInfoDto;
 import com.ym.mec.biz.dal.dto.RegisterPayDto;
-import com.ym.mec.biz.dal.entity.Goods;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.StudentRegistration;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GoodsType;
-import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.biz.service.GoodsService;
-import com.ym.mec.biz.service.MusicGroupService;
-import com.ym.mec.biz.service.MusicGroupSubjectGoodsGroupService;
-import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
-import com.ym.mec.biz.service.PayService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
-import com.ym.mec.biz.service.StudentRegistrationService;
+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 com.ym.mec.common.exception.BizException;
 import com.ym.mec.util.string.IdWorker;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 
 @RequestMapping("musicGroup")
 @Api(tags = "乐团服务")
@@ -176,7 +153,7 @@ public class MusicGroupController extends BaseController {
 	}
 
     @ApiOperation(value = "退团")
-    @GetMapping("/quitMusicGroup")
+    @PostMapping("/quitMusicGroup")
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String")})
 	public HttpResponseResult quitMusicGroup(String musicGroupId) throws Exception {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();

+ 36 - 0
mec-student/src/main/java/com/ym/mec/student/interceptor/RequestInterceptor.java

@@ -0,0 +1,36 @@
+package com.ym.mec.student.interceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import com.ym.mec.util.web.WebUtil;
+
+@Component
+public class RequestInterceptor extends HandlerInterceptorAdapter {
+
+	private static final String IP = "ip";
+
+	private static final String USERNAME = "username";
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+
+		String username = "";
+		String userId = "";
+		// 存储userId以及IP
+		MDC.put(USERNAME, username + "@" + userId);
+		MDC.put(IP, WebUtil.getRemoteIp(request));
+
+		return true;
+	}
+
+	@Override
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+		MDC.remove(USERNAME);
+		MDC.remove(IP);
+	}
+}

+ 4 - 1
mec-task/src/main/java/com/ym/mec/task/config/ResourceServerConfig.java

@@ -2,6 +2,7 @@ package com.ym.mec.task.config;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
@@ -12,6 +13,7 @@ import com.ym.mec.common.security.BaseAuthenticationEntryPoint;
 
 @Configuration
 @EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true)
 public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Autowired
@@ -22,7 +24,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Override
 	public void configure(HttpSecurity http) throws Exception {
-		http.authorizeRequests().antMatchers("/v2/api-docs").permitAll().anyRequest().authenticated().and().csrf().disable();
+		http.authorizeRequests().antMatchers("/v2/api-docs").permitAll().anyRequest().authenticated().and().csrf().disable().exceptionHandling()
+				.accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and();
 	}
 
 	@Override

+ 24 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/UpdateCourseScheduleToOverStatusTask.java

@@ -0,0 +1,24 @@
+package com.ym.mec.task.jobs;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+
+/**
+ * 更新课程状态至已结束
+ */
+@Service
+public class UpdateCourseScheduleToOverStatusTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.updateCourseScheduleToOverStatus();
+	}
+
+}

+ 4 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/config/ResourceServerConfig.java

@@ -2,6 +2,7 @@ package com.ym.mec.teacher.config;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
@@ -12,6 +13,7 @@ import com.ym.mec.common.security.BaseAuthenticationEntryPoint;
 
 @Configuration
 @EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true)
 public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Autowired
@@ -22,7 +24,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Override
 	public void configure(HttpSecurity http) throws Exception {
-		http.csrf().disable().authorizeRequests().antMatchers("/v2/api-docs").permitAll().anyRequest().authenticated().and().httpBasic();
+		http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
+				.authorizeRequests().antMatchers("/v2/api-docs").permitAll().anyRequest().authenticated().and().httpBasic();
 	}
 
 	@Override

+ 44 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ClassGroupController.java

@@ -0,0 +1,44 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
+import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/17
+ */
+@Api(tags = "班级服务")
+@RequestMapping("classGroup")
+@RestController
+public class ClassGroupController extends BaseController {
+
+    @Autowired
+    private ClassGroupService classGroupService;
+
+    @ApiOperation(value = "教师课程获取")
+    @GetMapping("/findTeacherClassGroups")
+    public Object findTeacherClassGroups(@ApiParam(value = "课程类型:MUSIC_GROUP,VIP", required = true)String type){
+        return succeed(classGroupService.findTeacherClassGroups(type));
+    }
+
+    @ApiOperation(value = "获取教师班级详情界面头部信息")
+    @GetMapping("/findTeacherClassGroupInfo")
+    public Object findTeacherClassGroupInfo(@ApiParam(value = "班级编号", required = true)Long classGroupId){
+        return succeed(classGroupService.findTeacherClassGroupInfo(classGroupId));
+    }
+
+    @ApiOperation(value = "获取班级对应学生列表")
+    @GetMapping("/findTeacherClassStudents")
+    public Object findTeacherClassStudents(CourseScheduleQueryInfo queryInfo){
+        return succeed(classGroupService.findTeacherClassStudents(queryInfo));
+    }
+
+}

+ 25 - 2
mec-teacher/src/main/java/com/ym/mec/teacher/controller/DemoGroupController.java

@@ -1,6 +1,8 @@
 package com.ym.mec.teacher.controller;
 
 import com.ym.mec.biz.dal.dto.DemoGroupApplyDto;
+import com.ym.mec.biz.dal.entity.DemoGroup;
+import com.ym.mec.biz.dal.page.TeacherManageDemoGroupQueryInfo;
 import com.ym.mec.biz.service.DemoGroupService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
@@ -27,10 +29,31 @@ public class DemoGroupController extends BaseController {
         return succeed();
     }
 
-    @ApiOperation(value = "获取试听课")
+    @ApiOperation(value = "获取老师试听课")
     @GetMapping("/getDemoGroupByTeacherId")
-    public Object getDemoGroupByTeacherId(){
+    public Object getDemoGroupByTeacherId() throws Exception {
         return succeed(demoGroupService.getDemoGroupByTeacherId());
     }
 
+    @ApiOperation(value = "获取指定老师试听课")
+    @GetMapping("/findByTeacherId")
+    public Object findByTeacherId(Integer teacherId){
+        if(teacherId == null){
+            return failed("参数校验失败");
+        }
+        return succeed(demoGroupService.findByTeacherId(teacherId));
+    }
+
+    @ApiOperation(value = "修改试听课")
+    @PostMapping("/update")
+    public Object findByTeacherId(DemoGroup demoGroup){
+        return succeed(demoGroupService.update(demoGroup));
+    }
+
+    @ApiOperation(value = "获取教师试听课安排列表")
+    @GetMapping("/findTeacherDemoGroups")
+    public Object findTeacherDemoGroups(TeacherManageDemoGroupQueryInfo queryInfo){
+        return succeed(demoGroupService.findTeacherDemoGroups(queryInfo));
+    }
+
 }

+ 0 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherAttendanceController.java

@@ -55,5 +55,4 @@ public class TeacherAttendanceController extends BaseController {
         studentAttendanceService.addStudentAttendances(studentAttendances);
         return succeed();
     }
-
 }

+ 9 - 2
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java

@@ -3,6 +3,8 @@ package com.ym.mec.teacher.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary;
+import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherQueryInfo;
 import com.ym.mec.biz.dal.page.VipClassQueryInfo;
 import com.ym.mec.biz.service.ClassGroupService;
@@ -76,8 +78,8 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "获取老师乐团课程信息列表")
     @GetMapping("/getTeacherMusicClass")
     @ApiParam(value = "教师编号", required = true)
-    public Object getTeacherMusicClass(Integer teacherId){
-        return succeed(classGroupService.getTeacherMusicClass(teacherId));
+    public Object getTeacherMusicClass(QueryInfo queryInfo){
+        return succeed(classGroupService.getTeacherMusicClass(queryInfo));
     }
 
     @ApiOperation(value = "获取老师VIP课程信息列表")
@@ -106,4 +108,9 @@ public class TeacherController extends BaseController {
         return succeed(teacherService.queryGroupStudents(sysUser.getId(),search));
     }
 
+    @ApiOperation(value = "获取教师上课结算列表")
+    @GetMapping("/queryCloses")
+    public Object queryCloses(TeacherCloseQueryInfo queryInfo){
+        return succeed(teacherService.queryCloses(queryInfo));
+    }
 }

+ 7 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

@@ -3,6 +3,7 @@ package com.ym.mec.teacher.controller;
 import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
 import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
+import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.StudentAttendanceService;
@@ -62,6 +63,12 @@ public class TeacherCourseScheduleController extends BaseController {
         return succeed(scheduleService.getCurrentCourseDetail(courseID));
     }
 
+    @ApiOperation(value = "获取老师指定班级的排课")
+    @GetMapping("/queryTeacherClassCourseSchedule")
+    public Object queryTeacherClassCourseSchedule(CourseScheduleQueryInfo queryInfo){
+        return succeed(scheduleService.queryTeacherClassCourseSchedule(queryInfo));
+    }
+
     @ApiOperation(value = "根据班级ID获取当前课程的学生列表")
     @GetMapping("/getCurrentCourseStudents")
     public Object getCurrentCourseStudents(StudentAttendanceQueryInfo queryInfo){

+ 3 - 1
mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java

@@ -2,6 +2,7 @@ package com.ym.mec.web.config;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
@@ -12,6 +13,7 @@ import com.ym.mec.common.security.BaseAuthenticationEntryPoint;
 
 @Configuration
 @EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true)
 public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Autowired
@@ -22,7 +24,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Override
 	public void configure(HttpSecurity http) throws Exception {
-		http.csrf().disable().authorizeRequests().antMatchers("/v2/api-docs","/classGroup/findMusicGroupClassTeacherSalary","/classGroup/findMusicGroupClassTeacher","/teacher/findTeachers").permitAll().anyRequest().authenticated().and().httpBasic();
+		http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and().authorizeRequests().antMatchers("/v2/api-docs").permitAll().anyRequest().authenticated().and().httpBasic();
 	}
 
 	@Override

+ 6 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ChargeTypeController.java

@@ -4,10 +4,13 @@ import com.ym.mec.biz.dal.entity.ChargeType;
 import com.ym.mec.biz.service.ChargeTypeService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.page.QueryInfo;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 @RequestMapping("chargeType")
@@ -20,6 +23,7 @@ public class ChargeTypeController extends BaseController {
 
     @ApiOperation(value = "新增、修改收费类型")
     @PostMapping("/upSet")
+    @PreAuthorize("@pcs.hasPermissions('chargeType/upSet')")
     public Object upSet(@RequestBody ChargeType chargeType) {
         chargeTypeService.upSet(chargeType);
         return succeed();
@@ -27,6 +31,7 @@ public class ChargeTypeController extends BaseController {
 
     @ApiOperation(value = "删除收费类型")
     @PostMapping("/del/{id}")
+    @PreAuthorize("@pcs.hasPermissions('chargeType/del')")
     public Object del(@ApiParam(value = "收费类型编号", required = true) @PathVariable("id") Integer id) {
         chargeTypeService.del(id);
         return succeed();
@@ -34,6 +39,7 @@ public class ChargeTypeController extends BaseController {
 
     @ApiOperation(value = "分页查询收费类型列表")
     @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('chargeType/queryPage')")
     public Object queryPage(QueryInfo queryInfo) {
         return succeed(chargeTypeService.queryPage(queryInfo));
     }

+ 26 - 5
mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java

@@ -9,9 +9,12 @@ import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.QueryInfo;
+
 import io.swagger.annotations.*;
+
 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.*;
 
 import java.util.Date;
@@ -29,12 +32,14 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "新增单技班班级")
     @PostMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/add')")
     public Object add(@RequestBody ClassGroup classGroup) throws Exception {
         return succeed(classGroupService.addClassGroup(classGroup));
     }
 
     @ApiOperation(value = "新增合奏班")
     @PostMapping("/addMixClass")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/addMixClass')")
     public Object addMixClass(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId,
                               @ApiParam(value = "班级名称", required = true) String name,
                               @ApiParam(value = "班级编号,号分割", required = true) String classGroupIds) throws Exception {
@@ -43,8 +48,8 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "新增提高班")
     @PostMapping("/addHighClass")
-    @ApiParam(value = "乐团提高班json", required = true)
-    public Object addHighClass(@RequestBody List<HighClassGroupDto> highClassGroupDtoList) throws Exception {
+    @PreAuthorize("@pcs.hasPermissions('classGroup/addHighClass')")
+    public Object addHighClass(@ApiParam(value = "乐团提高班json", required = true) @RequestParam List<HighClassGroupDto> highClassGroupDtoList) throws Exception {
         if (highClassGroupDtoList.size() <= 0) {
             return failed("参数不合法");
         }
@@ -53,6 +58,7 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "删除单技班")
     @PostMapping("/delSingle")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/delSingle')")
     public Object delSingle(Integer classGroupId) {
         classGroupService.delete(classGroupId);
         return succeed();
@@ -60,6 +66,7 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "删除合奏班")
     @PostMapping("/delMix")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/delMix')")
     public Object delMix(Integer classGroupId) {
         classGroupService.delete(classGroupId);
         return succeed();
@@ -67,6 +74,7 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "修改班级")
     @PostMapping("/update")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/update')")
     public Object update(ClassGroup classGroup) {
         classGroup.setUpdateTime(new Date());
         classGroupService.update(classGroup);
@@ -75,12 +83,14 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "分页查询班级列表")
     @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/queryPage')")
     public Object queryPage(QueryInfo queryInfo) {
         return succeed(classGroupService.queryPage(queryInfo));
     }
 
     @ApiOperation(value = "合奏班相关班级获取")
     @GetMapping("/findClassGroupAboutMix")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/findClassGroupAboutMix')")
     public HttpResponseResult findClassGroupAboutMix(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId,
                                          @ApiParam(value = "班级编号", required = false) Integer mixClassGroupId) {
         return succeed(classGroupService.findClassGroup(musicGroupId, mixClassGroupId));
@@ -88,24 +98,28 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "乐团单技班列表")
     @GetMapping("/findMusicGroupClass")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/findMusicGroupClass')")
     public HttpResponseResult findMusicGroupClass(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
         return succeed(classGroupService.findAllNormalClassGroupByMusicGroupId(musicGroupId));
     }
 
     @ApiOperation(value = "获取未分班的单技班列表")
     @GetMapping("/findNoClassSubjects")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/findNoClassSubjects')")
     public HttpResponseResult findNoClassSubjects(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
         return succeed(classGroupService.findNoClassSubjects(musicGroupId));
     }
 
     @ApiOperation(value = "乐团合奏班列表")
     @GetMapping("/findMixMusicGroupClass")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/findMixMusicGroupClass')")
     public HttpResponseResult findMixMusicGroupClass(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
         return succeed(classGroupService.findAllMixClassGroupByMusicGroupId(musicGroupId));
     }
 
     @ApiOperation(value = "乐团所有班列表")
     @GetMapping("/findAllClassGroupByMusicGroup")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/findAllClassGroupByMusicGroup')")
     public HttpResponseResult findAllClassGroupByMusicGroup(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
         return succeed(classGroupService.findAllClassGroupByMusicGroup(musicGroupId));
     }
@@ -113,6 +127,7 @@ public class ClassGroupController extends BaseController {
     @ApiOperation(value = "乐团班级老师设置")
     @PostMapping("/addClassGroupTeacher")
     @ApiParam(value = "乐团班级老师json", required = true)
+    @PreAuthorize("@pcs.hasPermissions('classGroup/addClassGroupTeacher')")
     public HttpResponseResult addClassGroupTeacher(@RequestBody List<ClassGroupTeacherMapper> classGroupTeacherMapperList) {
         if (classGroupTeacherMapperList.size() <= 0) {
             return failed("参数不合法");
@@ -122,12 +137,14 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "获取乐团班级老师")
     @GetMapping("/findMusicGroupClassTeacher")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/findMusicGroupClassTeacher')")
     public HttpResponseResult findMusicGroupClassTeacher(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
         return succeed(classGroupService.getClassGroupAndTeachers(musicGroupId,"NORMAL,MIX"));
     }
 
     @ApiOperation(value = "获取乐团班级老师课酬")
     @GetMapping("/findMusicGroupClassTeacherSalary")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/findMusicGroupClassTeacherSalary')")
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String"),
             @ApiImplicitParam(name = "type", value = "结算类型(1-基准课酬,4-梯度课酬)", required = true, dataType = "Integer")})
     public HttpResponseResult findMusicGroupClassTeacherSalary(String musicGroupId, SalarySettlementTypeEnum type) {
@@ -140,6 +157,7 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "乐团班级老师课酬确认")
     @PostMapping("/setClassGroupTeacherSalary")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/setClassGroupTeacherSalary')")
     @ApiParam(value = "乐团班级老师<包含相应课酬>json", required = true)
     public Object setClassGroupTeacherSalary(@RequestBody List<ClassGroupTeacherMapper> classGroupTeacherMapperList) throws Exception {
         if (classGroupTeacherMapperList.size() <= 0) {
@@ -150,6 +168,7 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "根据群编号,获取群组所有成员基本信息")
     @GetMapping("/findGroupUsers")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/findGroupUsers')")
     public Object findGroupUsers(String groupId) {
         if (StringUtils.isEmpty(groupId)) {
             return failed("参数校验错误");
@@ -159,19 +178,21 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "乐团班级设置,成团确认")
     @PostMapping("/addMusicGroupTeam")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/addMusicGroupTeam')")
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String"),
             @ApiImplicitParam(name = "teacherId", value = "老师编号", required = true, dataType = "Integer")})
-    public Object addMusicGroupTeam(Integer teacherId,String musicGroupId) throws Exception {
-        if(teacherId == null || StringUtils.isEmpty(musicGroupId)){
+    public Object addMusicGroupTeam(Integer teacherId,String musicGroupId,Integer improventClassesNum) throws Exception {
+        if(teacherId == null || StringUtils.isEmpty(musicGroupId) || improventClassesNum == null){
             return failed("参数校验错误");
         }
-        classGroupService.addMusicGroupTeam(teacherId,musicGroupId);
+        classGroupService.addMusicGroupTeam(teacherId,musicGroupId,improventClassesNum);
         return succeed();
     }
 
 
     @ApiOperation(value = "合并班级")
     @PostMapping("/mergeClassGroup")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/mergeClassGroup')")
     @ApiImplicitParams({@ApiImplicitParam(name = "classGroupIds", value = "班级编号,号分割", required = true, dataType = "String")})
     public HttpResponseResult mergeClassGroup(String classGroupIds) throws Exception {
         //软删除班级

+ 8 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CooperationOrganController.java

@@ -4,10 +4,13 @@ import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.service.CooperationOrganService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.page.QueryInfo;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
@@ -22,6 +25,7 @@ public class CooperationOrganController extends BaseController {
 
     @ApiOperation(value = "新增合作单位(教学点)")
     @PostMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('cooperationOrgan/add')")
     public Object add(CooperationOrgan cooperationOrgan) {
         cooperationOrganService.insert(cooperationOrgan);
         return succeed();
@@ -29,6 +33,7 @@ public class CooperationOrganController extends BaseController {
 
     @ApiOperation(value = "删除合作单位(教学点)")
     @PostMapping("/del/{id}")
+    @PreAuthorize("@pcs.hasPermissions('cooperationOrgan/del')")
     public Object del(@ApiParam(value = "合作单位(教学点)编号", required = true) @PathVariable("id") Integer id) {
         cooperationOrganService.delete(id);
         return succeed();
@@ -36,6 +41,7 @@ public class CooperationOrganController extends BaseController {
 
     @ApiOperation(value = "修改合作单位(教学点)")
     @PutMapping("/update")
+    @PreAuthorize("@pcs.hasPermissions('cooperationOrgan/update')")
     public Object update(CooperationOrgan cooperationOrgan) {
         cooperationOrgan.setUpdateTime(new Date());
         cooperationOrganService.update(cooperationOrgan);
@@ -44,12 +50,14 @@ public class CooperationOrganController extends BaseController {
 
     @ApiOperation(value = "分页查询合作单位(教学点)列表")
     @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('cooperationOrgan/queryPage')")
     public Object queryPage(QueryInfo queryInfo) {
         return succeed(cooperationOrganService.queryPage(queryInfo));
     }
 
     @ApiOperation(value = "根据机构编号获取合作单位(教学点)列表")
     @GetMapping("/queryByOrganId")
+    @PreAuthorize("@pcs.hasPermissions('cooperationOrgan/queryByOrganId')")
     public Object queryByOrganId(Integer organId){
         return succeed(cooperationOrganService.queryByOrganId(organId));
     }

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

@@ -1,21 +1,30 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
 import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
+import com.ym.mec.biz.dal.dto.CreateCourseScheduleDto;
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.StudentAttendanceService;
 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.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @Author Joburgess
@@ -30,17 +39,34 @@ public class CourseScheduleController extends BaseController {
     private CourseScheduleService scheduleService;
     @Autowired
     private StudentAttendanceService studentAttendanceService;
+    @Autowired
+    private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
 
     @ApiOperation(value = "排课")
-    @PostMapping("/batchAddCourseSchedule/{musicGroupID}")
-    public Object batchAddCourseSchedule(@RequestBody List<CourseSchedule> courseSchedules,
-                                         @ApiParam(value = "乐团编号", required = true) @PathVariable("musicGroupID") Long musicGroupID){
-        scheduleService.batchAddCourseSchedule(courseSchedules);
+    @PostMapping("/batchAddCourseSchedule")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchAddCourseSchedule')")
+    public Object batchAddCourseSchedule(@RequestBody CreateCourseScheduleDto createCourseScheduleDto){
+        if(Objects.isNull(createCourseScheduleDto.getMusicGroupID())){
+            throw new BizException("请指定乐团");
+        }
+        List<ClassGroupTeacherMapper> byMusicGroup = classGroupTeacherMapperDao.findByMusicGroup(createCourseScheduleDto.getMusicGroupID());
+        Map<Integer, List<ClassGroupTeacherMapper>> teacherByClassGroup = byMusicGroup.stream().collect(Collectors.groupingBy(ClassGroupTeacherMapper::getClassGroupId));
+
+        createCourseScheduleDto.getCourseSchedules().forEach(courseSchedule -> {
+            List<ClassGroupTeacherMapper> classGroupTeacherMappers = teacherByClassGroup.get(courseSchedule.getClassGroupId());
+            if(CollectionUtils.isEmpty(classGroupTeacherMappers)){
+                throw new BizException("乐团老师设置有误");
+            }
+            courseSchedule.setTeacherId(classGroupTeacherMappers.get(0).getUserId().longValue());
+        });
+
+        scheduleService.batchAddCourseSchedule(createCourseScheduleDto.getCourseSchedules());
         return succeed();
     }
 
     @ApiOperation(value = "批量跟新排课")
     @PostMapping("/batchUpdateCourseSchedule/{musicGroupID}")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchUpdateCourseSchedule')")
     public Object batchUpdateCourseSchedule(@RequestBody List<CourseSchedule> courseSchedules,
                                             @ApiParam(value = "乐团编号", required = true) @PathVariable("musicGroupID") Long musicGroupID){
         scheduleService.batchUpdateCourseSchedule(courseSchedules,musicGroupID);
@@ -49,6 +75,7 @@ public class CourseScheduleController extends BaseController {
 
     @ApiOperation(value = "根据月份获取乐团在该月有课的日期")
     @GetMapping("/getCourseScheduleDateByMonth")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/getCourseScheduleDateByMonth')")
         public Object getCourseScheduleDateByMonth(@ApiParam(value = "乐团编号", required = true) @RequestParam Long musicGroupID,
                                                    @ApiParam(value = "月份", required = true) @RequestParam Date month) {
         return succeed(scheduleService.getCourseScheduleDateByMonth(musicGroupID,month));
@@ -56,23 +83,27 @@ public class CourseScheduleController extends BaseController {
 
     @ApiOperation(value = "根据日期获取当日排课")
     @GetMapping("/getCourseSchedulesWithDate")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/getCourseSchedulesWithDate')")
     public Object getCourseSchedulesWithDate(@ApiParam(value = "日期", required = true) Date date){
         return succeed(scheduleService.getCourseSchedulesWithDate(date));
     }
 
     @ApiOperation(value = "根据课程ID查询正在或即将开始的课程")
     @GetMapping("/getCurrentCourseDetail/{courseID}")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/getCurrentCourseDetail')")
     public Object getCurrentCourseDetail(@ApiParam(value = "课程ID", required = true) @PathVariable("courseID") Long courseID){
         return succeed(scheduleService.getCurrentCourseDetail(courseID));
     }
 
     @ApiOperation(value = "根据班级ID获取当前课程的学生")
     @GetMapping("/getCurrentCourseStudents")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/getCurrentCourseStudents')")
     public Object getCurrentCourseStudents(@RequestBody StudentAttendanceQueryInfo queryInfo){
         return succeed(studentAttendanceService.getCurrentCourseStudents(queryInfo));
     }
 
     @ApiOperation(value = "课时调整")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/classStartDateAdjust')")
     @PostMapping(value = "/classStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     public Object classStartDateAdjust(ClassDateAdjustDto classDateAdjustDto){
         scheduleService.classStartDateAdjust(classDateAdjustDto);
@@ -80,6 +111,7 @@ public class CourseScheduleController extends BaseController {
     }
 
     @ApiOperation(value = "课时交换")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/courseSwap')")
     @GetMapping(value = "/courseSwap",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     public Object courseSwap(Long courseScheduleId1,Long courseScheduleId2){
         scheduleService.courseSwap(courseScheduleId1,courseScheduleId2);
@@ -88,9 +120,17 @@ public class CourseScheduleController extends BaseController {
 
     @ApiOperation(value = "课程投诉审核")
     @GetMapping(value = "/courseScheduleCommplaintAudit")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/courseScheduleCommplaintAudit')")
     public Object courseScheduleCommplaintAudit(CourseScheduleComplaints courseScheduleComplaints){
         scheduleService.courseScheduleCommplaintAudit(courseScheduleComplaints);
         return succeed();
     }
 
+    @ApiOperation(value = "检测乐团下所有的班级是否都已排课")
+    @PostMapping(value = "/checkMusicGroupClassCourse")
+    public Object checkMusicGroupClassCourse(Long musicGroupId){
+        scheduleService.checkMusicGroupClassCourse(musicGroupId);
+        return succeed();
+    }
+
 }

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

@@ -4,6 +4,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -14,7 +15,7 @@ import com.ym.mec.biz.service.CourseScheduleRewardsRulesService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.page.QueryInfo;
 
-@RequestMapping("courseSchedule")
+@RequestMapping("courseScheduleRewards")
 @Api(tags = "课程奖励规则")
 @RestController
 public class CourseScheduleRewardsRulesController extends BaseController {
@@ -24,19 +25,36 @@ public class CourseScheduleRewardsRulesController extends BaseController {
 
 	@ApiOperation(value = "查询规则列表")
 	@GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('courseScheduleRewards/queryPage')")
 	public Object queryPage(QueryInfo queryInfo) {
 		return succeed(courseScheduleRewardsRulesService.queryPage(queryInfo));
 	}
 
 	@ApiOperation(value = "单查询")
 	@GetMapping("/query")
+    @PreAuthorize("@pcs.hasPermissions('courseScheduleRewards/query')")
 	public Object query(Integer id) {
 		return succeed(courseScheduleRewardsRulesService.get(id));
 	}
 
 	@ApiOperation(value = "新增")
 	@PostMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('courseScheduleRewards/add')")
 	public Object add(CourseScheduleRewardsRules courseScheduleRewardsRules) {
 		return succeed(courseScheduleRewardsRulesService.insert(courseScheduleRewardsRules));
 	}
+
+	@ApiOperation(value = "修改")
+	@PostMapping("/update")
+    @PreAuthorize("@pcs.hasPermissions('courseScheduleRewards/update')")
+	public Object update(CourseScheduleRewardsRules courseScheduleRewardsRules) {
+		return succeed(courseScheduleRewardsRulesService.update(courseScheduleRewardsRules));
+	}
+
+	@ApiOperation(value = "删除")
+	@PostMapping("/delete")
+    @PreAuthorize("@pcs.hasPermissions('courseScheduleRewards/delete')")
+	public Object delete(Integer id) {
+		return succeed(courseScheduleRewardsRulesService.delete(id));
+	}
 }

+ 6 - 0
mec-web/src/main/java/com/ym/mec/web/controller/GoodsCategoryController.java

@@ -4,9 +4,12 @@ import com.ym.mec.biz.dal.entity.GoodsCategory;
 import com.ym.mec.biz.dal.page.GoodsCategoryQueryInfo;
 import com.ym.mec.biz.service.GoodsCategoryService;
 import com.ym.mec.common.controller.BaseController;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 @RequestMapping("category")
@@ -19,12 +22,14 @@ public class GoodsCategoryController extends BaseController {
 
     @ApiOperation(value = "删除商品分类")
     @PostMapping("/del")
+    @PreAuthorize("@pcs.hasPermissions('category/del')")
     public Object del(Integer id) {
         return succeed(goodsCategoryService.delete(id));
     }
 
     @ApiOperation(value = "新增、修改商品类型")
     @PostMapping("/upset")
+    @PreAuthorize("@pcs.hasPermissions('category/upset')")
     public Object upset(@RequestBody GoodsCategory goodsCategory){
         goodsCategoryService.upsetGoodsCategory(goodsCategory);
         return succeed();
@@ -32,6 +37,7 @@ public class GoodsCategoryController extends BaseController {
 
     @ApiOperation(value = "分页查询商品分类列表")
     @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('category/queryPage')")
     public Object queryPage(GoodsCategoryQueryInfo queryInfo) {
         return succeed(goodsCategoryService.queryPage(queryInfo));
     }

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

@@ -1,6 +1,5 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.biz.dal.entity.SubjectGoodsMapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -10,10 +9,10 @@ import io.swagger.annotations.ApiParam;
 import java.util.Date;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -32,6 +31,7 @@ public class GoodsController extends BaseController {
 
     @ApiOperation(value = "新增商品(教材、辅件)")
     @PostMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('goods/add')")
     public Object add(Goods goods){
         goodsService.insert(goods);
         return succeed();
@@ -39,6 +39,7 @@ public class GoodsController extends BaseController {
 
     @ApiOperation(value = "删除商品(教材、辅件)")
     @PostMapping("/del/{id}")
+    @PreAuthorize("@pcs.hasPermissions('goods/del')")
     public Object del(@ApiParam(value = "商品(教材、辅件)编号", required = true) @PathVariable("id") Integer id){
         goodsService.delete(id);
         return succeed();
@@ -46,6 +47,7 @@ public class GoodsController extends BaseController {
 
     @ApiOperation(value = "修改商品(教材、辅件)")
     @PostMapping("/update")
+    @PreAuthorize("@pcs.hasPermissions('goods/update')")
     public Object update(Goods goods){
         goods.setUpdateTime(new Date());
         goodsService.update(goods);
@@ -54,18 +56,21 @@ public class GoodsController extends BaseController {
 
     @ApiOperation(value = "根据商品(教材、辅件)编号查询商品(教材、辅件)")
     @GetMapping("/get/{id}")
+    @PreAuthorize("@pcs.hasPermissions('goods/get')")
     public Object get(@ApiParam(value = "商品(教材、辅件)编号", required = true) @PathVariable("id") Integer id){
         return succeed(goodsService.get(id));
     }
 
     @ApiOperation(value = "分页查询商品(教材、辅件)列表")
     @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('goods/queryPage')")
     public Object queryPage(GoodsQueryInfo queryInfo){
         return succeed(goodsService.queryPage(queryInfo));
     }
 
     @ApiOperation(value = "通过科目编号、商品分类 查询商品(教材、辅件)列表")
     @GetMapping("/queryGoodsBySubId")
+    @PreAuthorize("@pcs.hasPermissions('goods/queryGoodsBySubId')")
     @ApiImplicitParams({ @ApiImplicitParam(name = "subjectId", value = "科目编号", required = true, dataType = "Integer"),
             @ApiImplicitParam(name = "type", value = "INSTRUMENT 乐器, ACCESSORIES 教辅", required = true, dataType = "String")})
     public Object findGoodsBySubId(Integer subjectId,String type){

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

@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiParam;
 import java.util.Date;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -30,10 +31,9 @@ public class HotWordLabelManageController extends BaseController {
     @Autowired
     private HotWordsLabelService hotWordsLabelService;
 
-
-
     @ApiOperation(value = "新增热词标签")
     @PostMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('hotWordLabelManage/add')")
     public Object add(HotWordsLabel hotWordsLabel) {
         hotWordsLabelService.insert(hotWordsLabel);
         return succeed();
@@ -41,6 +41,7 @@ public class HotWordLabelManageController extends BaseController {
 
     @ApiOperation(value = "删除热词标签")
     @PostMapping("/del/{id}")
+    @PreAuthorize("@pcs.hasPermissions('hotWordLabelManage/del')")
     public Object del(@ApiParam(value = "热词标签编号", required = true) @PathVariable("id") Integer id) {
         hotWordsLabelService.delete(id);
         return succeed();
@@ -48,6 +49,7 @@ public class HotWordLabelManageController extends BaseController {
 
     @ApiOperation(value = "修改热词标签")
     @PostMapping("/update")
+    @PreAuthorize("@pcs.hasPermissions('hotWordLabelManage/update')")
     public Object update(HotWordsLabel hotWordsLabel) {
         hotWordsLabel.setUpdateTime(new Date());
         hotWordsLabelService.update(hotWordsLabel);
@@ -57,6 +59,7 @@ public class HotWordLabelManageController extends BaseController {
 
     @ApiOperation("分页查询热词列表")
     @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('hotWordLabelManage/queryPage')")
     public Object queryPage(QueryInfo queryInfo){
         return succeed(hotWordsLabelService.queryPage(queryInfo));
     }

+ 5 - 0
mec-web/src/main/java/com/ym/mec/web/controller/LeaveCategoryController.java

@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiParam;
 import java.util.Date;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -27,6 +28,7 @@ public class LeaveCategoryController extends BaseController {
 
     @ApiOperation(value = "新增请假类型")
     @PostMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('leaveCategory/add')")
     public Object add(LeaveCategory leaveCategory) {
         leaveCategoryService.insert(leaveCategory);
         return succeed();
@@ -34,6 +36,7 @@ public class LeaveCategoryController extends BaseController {
 
     @ApiOperation(value = "删除请假类型")
     @PostMapping("/del/{id}")
+    @PreAuthorize("@pcs.hasPermissions('leaveCategory/del')")
     public Object del(@ApiParam(value = "请假类型编号", required = true) @PathVariable("id") Integer id) {
         leaveCategoryService.delete(id);
         return succeed();
@@ -41,6 +44,7 @@ public class LeaveCategoryController extends BaseController {
 
     @ApiOperation(value = "修改请假类型")
     @PostMapping("/update")
+    @PreAuthorize("@pcs.hasPermissions('leaveCategory/update')")
     public Object update(LeaveCategory leaveCategory) {
         leaveCategory.setUpdateTime(new Date());
         leaveCategoryService.update(leaveCategory);
@@ -49,6 +53,7 @@ public class LeaveCategoryController extends BaseController {
 
     @ApiOperation(value = "分页查询请假类型列表")
     @PostMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('leaveCategory/queryPage')")
     public Object queryPage(QueryInfo queryInfo) {
         return succeed(leaveCategoryService.queryPage(queryInfo));
     }

部分文件因文件數量過多而無法顯示