Explorar o código

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan %!s(int64=5) %!d(string=hai) anos
pai
achega
3448637b3a
Modificáronse 41 ficheiros con 1007 adicións e 147 borrados
  1. 8 2
      cms/src/main/java/com/ym/mec/cms/config/ResourceServerConfig.java
  2. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/PhoneLoginAuthenticationFilter.java
  3. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/UsernameAuthenticationFilter.java
  4. 10 9
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/AuthenticationFailureListener.java
  5. 1 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  6. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java
  7. 2 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/DefaultUserDetailsService.java
  8. 19 10
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/RoleController.java
  9. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/SmsCodeController.java
  10. 19 9
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java
  11. 29 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java
  12. 20 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java
  13. 78 33
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  14. 31 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CreateCourseScheduleDto.java
  15. 146 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassCourseSchudeleDto.java
  16. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassGroupDto.java
  17. 34 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassHeadInfo.java
  18. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassStudentDto.java
  19. 60 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  20. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseScheduleQueryInfo.java
  21. 13 3
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  22. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  23. 58 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  24. 57 27
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  25. 3 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  26. 41 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  27. 16 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  28. 68 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  29. 8 1
      mec-common/common-core/src/main/java/com/ym/mec/common/security/PermissionCheckService.java
  30. 1 1
      mec-common/common-core/src/main/java/com/ym/mec/common/security/SecurityConstants.java
  31. 16 14
      mec-education/src/main/java/com/ym/mec/education/config/ResourceServerConfig.java
  32. 4 1
      mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java
  33. 26 7
      mec-student/src/main/java/com/ym/mec/student/config/WebMvcConfig.java
  34. 36 0
      mec-student/src/main/java/com/ym/mec/student/interceptor/RequestInterceptor.java
  35. 4 1
      mec-task/src/main/java/com/ym/mec/task/config/ResourceServerConfig.java
  36. 4 1
      mec-teacher/src/main/java/com/ym/mec/teacher/config/ResourceServerConfig.java
  37. 15 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ClassGroupController.java
  38. 7 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  39. 3 1
      mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java
  40. 34 6
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  41. 4 1
      mec-workflow/src/main/java/com/ym/mec/workfow/config/ResourceServerConfig.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

+ 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 {

+ 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")

+ 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);
 }

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

@@ -1,6 +1,7 @@
 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;
 
@@ -20,7 +21,7 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
     /**
      * 查询班级老师
      *
-     * @param ClassGroupList
+     * @param classGroupList
      * @return
      */
     List<ClassGroupTeacherMapper> findClassGroupTeachers(@Param("classGroupList") List classGroupList);
@@ -32,6 +33,24 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      */
     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);
 
 }

+ 78 - 33
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 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);
 
@@ -256,4 +274,31 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @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);
 }

+ 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;
+    }
+}

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.Date;
@@ -58,6 +59,28 @@ public class TeacherClassGroupDto {
     @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;
     }

+ 34 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassHeadInfo.java

@@ -1,13 +1,12 @@
 package com.ym.mec.biz.dal.dto;
 
-import com.ym.mec.biz.dal.entity.ClassGroup;
 import io.swagger.annotations.ApiModelProperty;
 
 /**
  * @Author Joburgess
  * @Date 2019/10/17
  */
-public class TeacherClassHeadInfo extends ClassGroup {
+public class TeacherClassHeadInfo {
 
     @ApiModelProperty(value = "主教编号")
     private Long bishopTeacherId;
@@ -24,6 +23,39 @@ public class TeacherClassHeadInfo extends ClassGroup {
     @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;
     }

+ 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;
+    }
+}

+ 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;
 	}
 

+ 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;
     }

+ 13 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java

@@ -3,6 +3,7 @@ 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.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;
@@ -212,10 +213,19 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
 
     /**
      * @Author: Joburgess
-     * @Date: 2019/10/17
-     * @params [classGroupId]
+     * @Date: 2019/10/18
+     * @params @param classGroupId:班级编号
      * @return com.ym.mec.biz.dal.dto.TeacherClassHeadInfo
      * @describe 获取班级信息
      */
-    TeacherClassHeadInfo findTeaherClassGroupInfo(Long classGroupId);
+    TeacherClassHeadInfo findTeacherClassGroupInfo(Long classGroupId);
+
+    /**
+     * @describe 获取班级对应学生列表
+     * @author Joburgess
+     * @date 2019/10/18
+     * @param queryInfo:
+     * @return org.snaker.engine.access.Page
+     */
+    PageInfo findTeacherClassStudents(CourseScheduleQueryInfo queryInfo);
 }

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

@@ -174,4 +174,22 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @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);
 }

+ 58 - 2
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.*;
@@ -65,6 +66,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private SubjectService subjectService;
+    @Autowired
+    private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
 
     @Override
     public BaseDAO<Integer, ClassGroup> getDAO() {
@@ -546,6 +549,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         Map<Long, Integer> musicGroupIdAndNum = MapUtil.convertMybatisMap(musicGroupIdAndNumList);
 
         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()))){
@@ -579,8 +587,56 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
-    public TeacherClassHeadInfo findTeaherClassGroupInfo(Long classGroupId) {
+    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());
+        }
 
-        return null;
+        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;
     }
 }

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

@@ -1,27 +1,5 @@
 package com.ym.mec.biz.service.impl;
 
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.TreeSet;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.time.DateUtils;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CourseScheduleComplaintsDao;
@@ -35,11 +13,7 @@ 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.MessageSendMode;
-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;
@@ -52,6 +26,18 @@ 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;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSchedule>  implements CourseScheduleService {
@@ -562,4 +548,48 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		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("存在未排课的班级");
+			}
+		}
+	}
 }

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

@@ -444,6 +444,7 @@
         <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" resultMap="TeacherClassGroupDto">
@@ -454,6 +455,7 @@
             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_,
@@ -477,6 +479,7 @@
         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_,

+ 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">

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

@@ -739,4 +739,72 @@
     <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>

+ 8 - 1
mec-common/common-core/src/main/java/com/ym/mec/common/security/PermissionCheckService.java

@@ -5,7 +5,6 @@ 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")
@@ -17,6 +16,14 @@ public class PermissionCheckService {
 			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);
+	}
 
 }

+ 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

+ 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

+ 15 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ClassGroupController.java

@@ -1,9 +1,11 @@
 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;
@@ -23,8 +25,20 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "教师课程获取")
     @GetMapping("/findTeacherClassGroups")
-    public Object findTeacherClassGroups(String type){
+    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));
+    }
+
 }

+ 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

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

@@ -1,24 +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
@@ -33,13 +39,28 @@ public class CourseScheduleController extends BaseController {
     private CourseScheduleService scheduleService;
     @Autowired
     private StudentAttendanceService studentAttendanceService;
+    @Autowired
+    private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
 
     @ApiOperation(value = "排课")
-    @PostMapping("/batchAddCourseSchedule/{musicGroupID}")
+    @PostMapping("/batchAddCourseSchedule")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchAddCourseSchedule')")
-    public Object batchAddCourseSchedule(@RequestBody List<CourseSchedule> courseSchedules,
-                                         @ApiParam(value = "乐团编号", required = true) @PathVariable("musicGroupID") Long musicGroupID){
-        scheduleService.batchAddCourseSchedule(courseSchedules);
+    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();
     }
 
@@ -105,4 +126,11 @@ public class CourseScheduleController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "检测乐团下所有的班级是否都已排课")
+    @PostMapping(value = "/checkMusicGroupClassCourse")
+    public Object checkMusicGroupClassCourse(Long musicGroupId){
+        scheduleService.checkMusicGroupClassCourse(musicGroupId);
+        return succeed();
+    }
+
 }

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

@@ -2,6 +2,7 @@ package com.ym.mec.workfow.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
@@ -25,7 +27,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 		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