소스 검색

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

zouxuan 5 년 전
부모
커밋
2d412bd0f4
39개의 변경된 파일648개의 추가작업 그리고 40개의 파일을 삭제
  1. 74 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/aspects/UserLog.java
  2. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/aspects/UserLogAnnotation.java
  3. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  4. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java
  5. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  6. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CoursesGroupModifyLogDao.java
  7. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  8. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  9. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupDto.java
  10. 27 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherMusicClassInfoDto.java
  11. 0 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  12. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleModifyLog.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CoursesGroup.java
  14. 79 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CoursesGroupModifyLog.java
  15. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java
  16. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Teacher.java
  17. 36 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ProbationPeriodEnum.java
  18. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupTeacherMapperService.java
  19. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  20. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CoursesGroupModifyLogService.java
  21. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java
  22. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java
  23. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java
  24. 93 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  25. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupModifyLogServiceImpl.java
  26. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  27. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  28. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  29. 11 6
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  30. 6 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  31. 6 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  32. 70 0
      mec-biz/src/main/resources/config/mybatis/CoursesGroupModifyLogDao.xml
  33. 5 2
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  34. 3 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  35. 10 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  36. 0 2
      mec-web/src/main/java/com/ym/mec/web/controller/ChargeTypeController.java
  37. 18 0
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  38. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java
  39. 10 0
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java

+ 74 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/aspects/UserLog.java

@@ -0,0 +1,74 @@
+package com.ym.mec.biz.dal.aspects;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.common.exception.BizException;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import java.lang.reflect.Method;
+
+@Aspect
+@Component
+public class UserLog {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Pointcut("@annotation(com.ym.mec.biz.dal.aspects.UserLogAnnotation)")
+    public void userLogPoint(){
+    }
+
+    @Before("userLogPoint()")
+    public void saveUserLog(JoinPoint joinPoint){
+        //从切面织入点处通过反射机制获取织入点处的方法
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        //获取切入点所在的方法
+        Method method = signature.getMethod();
+        UserLogAnnotation logAnnotation = method.getAnnotation(UserLogAnnotation.class);
+        String operationType = "";
+        String describe = "";
+        if(logAnnotation != null){
+            describe = logAnnotation.describe();
+            operationType = logAnnotation.operationType();
+        }
+        //获取请求的类名
+        String className = joinPoint.getTarget().getClass().getName();
+        //获取请求的方法名
+        String methodName = method.getName();
+        //请求的参数
+        Object[] args = joinPoint.getArgs();
+        Object[] arguments  = new Object[args.length];
+        for (int i = 0; i < args.length; i++) {
+            if (args[i] instanceof ServletRequest || args[i] instanceof ServletResponse || args[i] instanceof MultipartFile) {
+                //ServletRequest不能序列化,从入参里排除,否则报异常:java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false)
+                //ServletResponse不能序列化 从入参里排除,否则报异常:java.lang.IllegalStateException: getOutputStream() has already been called for this response
+                continue;
+            }
+            arguments[i] = args[i];
+        }
+        //将参数所在的数组转换成json
+        String params = "";
+        if (arguments != null) {
+            try {
+                params = JSONObject.toJSONString(arguments);
+            } catch (Exception e) {
+                params = arguments.toString();
+            }
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("获取用户信息失败");
+        }
+        System.out.println("记录用户操作日志: {}" + params);
+    }
+}

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/aspects/UserLogAnnotation.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.aspects;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface UserLogAnnotation {
+    //操作类型
+    String operationType() default "";
+
+    //操作描述
+    String describe() default "";
+}

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

@@ -724,4 +724,12 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      * @return
      */
     List<HighClassGroupDto> findHighClassGroup(@Param("musicGroupId") String musicGroupId, @Param("classGroupIds") String classGroupIds);
+
+    /**
+     * 获取班级列表
+     * @param practiceGroupId
+     * @param groupType
+     * @return
+     */
+    List<ClassGroup> queryClassGroups(@Param("practiceGroupId") String practiceGroupId, @Param("groupType") String groupType);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java

@@ -128,4 +128,11 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      * @return
      */
     List<ClassGroupTeacherMapper> findByClassGroupIdsAndType(@Param("classGroupIds") List<Integer> classGroupIds, @Param("teacherRole") String teacherRole);
+
+    /**
+     * 批量修改班级关联的老师
+     * @param classGroupIds
+     * @param newTeacherId
+     */
+    void batchUpdateTeacherByClassId(@Param("classGroupIds") List<Integer> classGroupIds, @Param("newTeacherId") Integer newTeacherId);
 }

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

@@ -1521,4 +1521,13 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @param courseScheduleId
      */
     void resetStudentNum(@Param("courseScheduleId") List<Long> courseScheduleId);
+
+    /**
+     * 获取当前班级列表的所有未开始的课程
+     * @param classGroupIds
+     * @param teacherId
+     * @param teacherRole
+     * @return
+     */
+    List<CourseSchedule> queryNoStartCourseByTeacherId(@Param("classGroupIds") String classGroupIds, @Param("teacherId") Integer teacherId, @Param("teacherRole") String teacherRole);
 }

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

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.CoursesGroupModifyLog;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface CoursesGroupModifyLogDao extends BaseDAO<Long, CoursesGroupModifyLog> {
+
+}

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -126,4 +126,9 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
                                            @Param("studentIds") List<Integer> studentIds,
                                            @Param("serviceTag") Integer serviceTag);
 
+    /**
+     * 修改学员的指导老师
+     * @param teacherId
+     */
+    void batchUpdateAdviser(@Param("teacherId") Integer teacherId, @Param("studentIds") String studentIds);
 }

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

@@ -458,4 +458,17 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      * @return
      */
     List<String> queryMusicLeaderIds(Integer teacherId);
+
+    /**
+     * 获取和当前指导老师关联的学员
+     * @return
+     */
+    List<BasicUserDto> queryStudent(Map<String, Object> params);
+
+    /**
+     * COUNT当前指导老师关联的学员
+     * @param params
+     * @return
+     */
+    int countStudent(Map<String, Object> params);
 }

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

@@ -28,8 +28,18 @@ public class PracticeGroupDto extends PracticeGroup {
 
     private Integer evaluateStatus;
 
+    private Integer hasRestClass;
+
     private String educationalTeacherName;
 
+    public Integer getHasRestClass() {
+        return hasRestClass;
+    }
+
+    public void setHasRestClass(Integer hasRestClass) {
+        this.hasRestClass = hasRestClass;
+    }
+
     public String getEducationalTeacherName() {
         return educationalTeacherName;
     }

+ 27 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherMusicClassInfoDto.java

@@ -1,13 +1,12 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.enums.JobNatureEnum;
 import com.ym.mec.biz.dal.enums.JobTypeEnum;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.List;
 
-import com.ym.mec.biz.dal.enums.JobNatureEnum;
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
-
 /**
  * 老师乐团课程信息
  */
@@ -31,7 +30,10 @@ public class TeacherMusicClassInfoDto {
     private String teacherRole;
 
     @ApiModelProperty(value = "执教班级名称", required = false)
-    private List<String> classGroupNames;
+    private String classGroupNames;
+
+    @ApiModelProperty(value = "执教班级编号", required = false)
+    private String classGroupIds;
 
     @ApiModelProperty(value = "教师乐团职务类型", required = false)
     private JobTypeEnum jobType;
@@ -42,6 +44,17 @@ public class TeacherMusicClassInfoDto {
     @ApiModelProperty(value = "出勤次数",required = false)
     private Integer attendanceNum;
 
+    @ApiModelProperty(value = "是否又剩余课时",required = false)
+    private Integer hasRestClass;
+
+    public Integer getHasRestClass() {
+        return hasRestClass;
+    }
+
+    public void setHasRestClass(Integer hasRestClass) {
+        this.hasRestClass = hasRestClass;
+    }
+
     public String getTeacherRole() {
         return teacherRole;
     }
@@ -106,14 +119,22 @@ public class TeacherMusicClassInfoDto {
         this.teamTeacherId = teamTeacherId;
     }
 
-    public List<String> getClassGroupNames() {
+    public String getClassGroupNames() {
         return classGroupNames;
     }
 
-    public void setClassGroupNames(List<String> classGroupNames) {
+    public void setClassGroupNames(String classGroupNames) {
         this.classGroupNames = classGroupNames;
     }
 
+    public String getClassGroupIds() {
+        return classGroupIds;
+    }
+
+    public void setClassGroupIds(String classGroupIds) {
+        this.classGroupIds = classGroupIds;
+    }
+
     public MusicGroupStatusEnum getStatus() {
         return status;
     }

+ 0 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -4,9 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.enums.*;
 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;
 

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleModifyLog.java

@@ -21,10 +21,10 @@ public class CourseScheduleModifyLog {
 	
 	/**  */
 	private String currentCourseSchedule;
-	
+
 	/**  */
 	private java.util.Date createTime;
-	
+
 	public void setId(Long id){
 		this.id = id;
 	}

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

@@ -8,7 +8,7 @@ import java.math.BigDecimal;
 /**
  * 对应数据库表(courses_group):
  */
-public class CoursesGroup {
+public class CoursesGroup{
 
 	/**  */
 	private Long id;

+ 79 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CoursesGroupModifyLog.java

@@ -0,0 +1,79 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(courses_group_modify_log):
+ */
+public class CoursesGroupModifyLog{
+
+	private Long id;
+
+	private String groupId;
+
+	private Integer operatorId;
+
+	private String groupType;
+
+	private String previousGroup;
+
+	private String currentGroup;
+
+	private Date createTime;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public Integer getOperatorId() {
+		return operatorId;
+	}
+
+	public void setOperatorId(Integer operatorId) {
+		this.operatorId = operatorId;
+	}
+
+	public String getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(String groupType) {
+		this.groupType = groupType;
+	}
+
+	public String getPreviousGroup() {
+		return previousGroup;
+	}
+
+	public void setPreviousGroup(String previousGroup) {
+		this.previousGroup = previousGroup;
+	}
+
+	public String getCurrentGroup() {
+		return currentGroup;
+	}
+
+	public void setCurrentGroup(String currentGroup) {
+		this.currentGroup = currentGroup;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+}

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

@@ -15,7 +15,7 @@ import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 /**
  * 对应数据库表(music_group):
  */
-public class MusicGroup{
+public class MusicGroup {
 
 	/**  */
 	private String id;

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Teacher.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.entity;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.enums.JobNatureEnum;
 import com.ym.mec.biz.dal.enums.JobTypeEnum;
+import com.ym.mec.biz.dal.enums.ProbationPeriodEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -26,7 +27,7 @@ public class Teacher extends SysUser {
 
 	/** 是否试用期 */
 	@ApiModelProperty(value = "是否试用期1是,0否", required = false)
-	private YesOrNoEnum isProbationPeriod;
+	private ProbationPeriodEnum isProbationPeriod;
 
 	/** 学历 */
 	@ApiModelProperty(value = "学历", required = false)
@@ -214,11 +215,11 @@ public class Teacher extends SysUser {
 		this.jobType = jobType;
 	}
 
-	public YesOrNoEnum getIsProbationPeriod() {
+	public ProbationPeriodEnum getIsProbationPeriod() {
 		return isProbationPeriod;
 	}
 
-	public void setIsProbationPeriod(YesOrNoEnum isProbationPeriod) {
+	public void setIsProbationPeriod(ProbationPeriodEnum isProbationPeriod) {
 		this.isProbationPeriod = isProbationPeriod;
 	}
 

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ProbationPeriodEnum.java

@@ -0,0 +1,36 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+//人事状态(1-试用 0-正式,2离职)',
+public enum ProbationPeriodEnum implements BaseEnum<Integer, ProbationPeriodEnum> {
+    NORMAL(0,"正式"),
+    TRY(1,"试用"),
+    LEAVE(2,"离职");
+
+    private Integer code;
+
+    private String msg;
+
+    ProbationPeriodEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public Integer getCode() {
+        return this.code;
+    }
+}

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupTeacherMapperService.java

@@ -68,4 +68,11 @@ public interface ClassGroupTeacherMapperService extends BaseService<Long, ClassG
      * @param teacherId
      */
     void updateTeacher(String groupId, Integer teacherId,String groupType);
+
+    /**
+     * 批量修改班级关联的老师
+     * @param classGroupIds
+     * @param newTeacherId
+     */
+    void batchUpdateTeacherByClassId(@Param("classGroupIds") List<Integer> classGroupIds, @Param("newTeacherId") Integer newTeacherId);
 }

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

@@ -513,4 +513,30 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param coursesExpireDate
 	 */
 	void updateCoursesExpireDate(String practiceGroupId, Date coursesExpireDate);
+
+	/**
+	 * 获取当前班级列表的所有未开始的课程
+	 * @param classGroupIds
+	 * @param teacherId
+	 * @param teacherRole
+	 * @return
+	 */
+	List<CourseSchedule> queryNoStartCourseByTeacherId(String classGroupIds, Integer teacherId, String teacherRole);
+
+	/**
+	 * 根据班级列表调整课程
+	 * @param classGroupIds
+	 * @param teacherId
+	 * @param targetTeacherId
+	 */
+	void classGroupTeacherAdjust(String classGroupIds, Integer teacherId, Integer targetTeacherId);
+
+	/**
+	 * 网管课批量调整
+	 * @param practiceGroupId
+	 * @param teacherId
+	 * @param subjectId
+	 * @param educationalTeacherId
+	 */
+	void batchPracticeGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId, Integer educationalTeacherId,Integer oldTeacherId);
 }

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

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.CoursesGroupModifyLog;
+import com.ym.mec.common.service.BaseService;
+
+public interface CoursesGroupModifyLogService extends BaseService<Long, CoursesGroupModifyLog> {
+
+}

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java

@@ -27,4 +27,10 @@ public interface StudentService extends BaseService<Integer, Student> {
      * @return void
      */
     void initTeacherId();
+
+    /**
+     * 修改学员的指导老师
+     * @param teacherId
+     */
+    void batchUpdateAdviser(Integer teacherId,String studentIds);
 }

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

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 import org.apache.ibatis.annotations.Param;
 
@@ -180,4 +181,9 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
      */
 	boolean realNameAuthentication(Integer userId, String realName, String idcardNo, String idcardFrontImg, String idcardBackImg, String idcardHandImg);
 
+    /**
+     * 获取和当前指导老师关联的学员
+     * @return
+     */
+    PageInfo<BasicUserDto> queryStudent(QueryInfo queryInfo);
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java

@@ -621,4 +621,10 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
     public void updateTeacher(String groupId, Integer teacherId, String groupType) {
         classGroupTeacherMapperDao.updateTeacher(groupId, teacherId, groupType);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchUpdateTeacherByClassId(List<Integer> classGroupIds, Integer newTeacherId) {
+        classGroupTeacherMapperDao.batchUpdateTeacherByClassId(classGroupIds,newTeacherId);
+    }
 }

+ 93 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -23,14 +23,12 @@ 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.im.ImFeignService;
-import com.ym.mec.jiari.JiaRiFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.ListUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.json.JsonUtil;
 import org.apache.commons.collections.ListUtils;
-import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -52,7 +50,6 @@ import java.util.stream.Stream;
 import static com.ym.mec.biz.dal.enums.GroupType.MUSIC;
 import static com.ym.mec.biz.dal.enums.GroupType.PRACTICE;
 import static com.ym.mec.biz.dal.enums.PracticeGroupType.*;
-import static com.ym.mec.biz.dal.enums.SignInStatusEnum.*;
 
 @Service
 public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSchedule> implements CourseScheduleService {
@@ -75,10 +72,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     private StudentAttendanceDao studentAttendanceDao;
     @Autowired
     private ClassGroupStudentMapperDao classGroupStudentMapperDao;
-
     @Autowired
     private TeacherDefaultPracticeGroupSalaryDao teacherDefaultPracticeGroupSalaryDao;
-
     @Autowired
     private SysMessageService sysMessageService;
     @Autowired
@@ -112,8 +107,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     @Autowired
     private PracticeGroupDao practiceGroupDao;
     @Autowired
-    private JiaRiFeignService jiaRiFeignService;
-    @Autowired
     private VipGroupService vipGroupService;
     @Autowired
     private MusicGroupService musicGroupService;
@@ -123,10 +116,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     private SchoolDao schoolDao;
     @Autowired
 	private ImFeignService imFeignService;
-
     @Autowired
     private CourseHomeworkService courseHomeworkService;
-
     @Autowired
     private GroupDao groupDao;
     @Autowired
@@ -135,6 +126,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	private CourseScheduleReviewDao courseScheduleReviewDao;
     @Autowired
 	private PracticeGroupService practiceGroupService;
+    @Autowired
+	private CoursesGroupModifyLogDao coursesGroupModifyLogDao;
 
     private final Logger LOGGER = LoggerFactory
             .getLogger(this.getClass());
@@ -2599,12 +2592,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						Map<CourseScheduleType, TeacherDefaultMusicGroupSalary> map = musicGroupSalaryMap.get(teacherId);
 
 						if (map == null) {
-							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
+							throw new BizException("老师{}没有设置默认课酬,请先设置", teacherId);
 						}
 
 						TeacherDefaultMusicGroupSalary tdms = map.get(newCourseSchedule.getType());
 						if (tdms == null) {
-							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
+							throw new BizException("老师{}没有设置默认课酬,请先设置", teacherId);
 						}
 
 						// 乐团结算方式
@@ -3764,6 +3757,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         }
 
         PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(oldCourseSchedule.getMusicGroupId()));
+        CoursesGroupModifyLog coursesGroupModifyLog = new CoursesGroupModifyLog();
+        coursesGroupModifyLog.setGroupId(oldCourseSchedule.getMusicGroupId());
+        coursesGroupModifyLog.setGroupType(PRACTICE.getCode());
+        coursesGroupModifyLog.setOperatorId(user.getId());
+        coursesGroupModifyLog.setPreviousGroup(JSONObject.toJSONString(practiceGroup));
         String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
         String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
         Date startDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
@@ -3828,6 +3826,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			practiceGroup.setCoursesExpireDate(courseScheduleDao.getLastTime(practiceGroup.getId(),PRACTICE.getCode()));
 			practiceGroup.setUpdateTime(date);
 			practiceGroupDao.update(practiceGroup);
+			coursesGroupModifyLog.setCurrentGroup(JSONObject.toJSONString(practiceGroup));
+			coursesGroupModifyLogDao.insert(coursesGroupModifyLog);
 		}
     }
 
@@ -3923,6 +3923,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             courseSchedules = courseSchedules.stream().filter(courseSchedule -> !courseSchedule.getActualTeacherId().equals(teacherId)).collect(Collectors.toList());
         }
 		PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(practiceGroupId));
+		CoursesGroupModifyLog coursesGroupModifyLog = new CoursesGroupModifyLog();
+		coursesGroupModifyLog.setGroupId(practiceGroupId);
+		coursesGroupModifyLog.setGroupType(PRACTICE.getCode());
+		coursesGroupModifyLog.setOperatorId(user.getId());
+		coursesGroupModifyLog.setPreviousGroup(JSONObject.toJSONString(practiceGroup));
 		ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(practiceGroupId, PRACTICE.getCode());
         if(Objects.nonNull(educationalTeacherId)&&!educationalTeacherId.equals(practiceGroup.getEducationalTeacherId())){
 			if(Objects.nonNull(practiceGroup.getEducationalTeacherId())){
@@ -3947,10 +3952,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			classGroupDao.update(classGroup);
 			courseScheduleDao.updateCourseNameByGroup(practiceGroupId, PRACTICE,groupName);
 		}
+		practiceGroup.setUserId(teacherId);
 		practiceGroupDao.update(practiceGroup);
+		coursesGroupModifyLog.setCurrentGroup(JSONObject.toJSONString(practiceGroup));
+		coursesGroupModifyLogDao.insert(coursesGroupModifyLog);
         classGroupTeacherMapperService.updateTeacher(practiceGroupId,teacherId, PRACTICE.getCode());
         classGroupTeacherSalaryDao.updateTeacher(practiceGroupId,teacherId, PRACTICE.getCode());
-        practiceGroupDao.updateUserId(practiceGroupId,teacherId);
+//        practiceGroupDao.updateUserId(practiceGroupId,teacherId);
         if(courseSchedules == null || courseSchedules.size() == 0){
             return;
         }
@@ -4201,6 +4209,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void updateCoursesExpireDate(String practiceGroupId, Date coursesExpireDate) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (null == user) {
+			throw new BizException("获取用户信息失败");
+		}
     	if(practiceGroupId == null || coursesExpireDate == null ){
     		throw new BizException("参数校验失败");
 		}
@@ -4211,7 +4223,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		if(practiceGroup.getCoursesStartDate().after(coursesExpireDate)){
 			throw new BizException("课程有效时间不能早于开始时间");
 		}
-
 		if(Objects.nonNull(practiceGroup.getBuyMonths())){
 			LocalDate courseStartDay = LocalDateTime.ofInstant(practiceGroup.getCoursesStartDate().toInstant(), DateUtil.zoneId).toLocalDate();
 			LocalDate currentExpiredDay = courseStartDay.plusMonths(practiceGroup.getBuyMonths()).plusDays(-1);
@@ -4220,10 +4231,78 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				throw new BizException("课程结束时间不得早于,{}", DateUtil.dateToString(courseExpiredDateTemp, "yyyy年MM月dd日"));
 			}
 		}
-
+		CoursesGroupModifyLog coursesGroupModifyLog = new CoursesGroupModifyLog();
+		coursesGroupModifyLog.setGroupId(practiceGroupId);
+		coursesGroupModifyLog.setGroupType(PRACTICE.getCode());
+		coursesGroupModifyLog.setOperatorId(user.getId());
+		coursesGroupModifyLog.setPreviousGroup(JSONObject.toJSONString(practiceGroup));
 		practiceGroup.setCoursesExpireDate(DateUtil.addSeconds(DateUtil.addDays(coursesExpireDate, 1),-1));
 		practiceGroup.setUpdateTime(new Date());
 		practiceGroupDao.update(practiceGroup);
+		coursesGroupModifyLog.setCurrentGroup(JSONObject.toJSONString(practiceGroup));
+		coursesGroupModifyLogDao.insert(coursesGroupModifyLog);
+	}
+
+	@Override
+	public List<CourseSchedule> queryNoStartCourseByTeacherId(String classGroupIds, Integer teacherId, String teacherRole) {
+		return courseScheduleDao.queryNoStartCourseByTeacherId(classGroupIds,teacherId,teacherRole);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void classGroupTeacherAdjust(String classGroupIds, Integer teacherId, Integer targetTeacherId) {
+		List<CourseSchedule> courseSchedules = this.queryNoStartCourseByTeacherId(classGroupIds,teacherId,"BISHOP");
+		if(courseSchedules.size() > 0){
+			courseSchedules.forEach(e->{
+				e.setActualTeacherId(targetTeacherId);
+			});
+			this.courseAdjust(courseSchedules);
+			//修改关联班级老师
+			List<Integer> collect = courseSchedules.stream().map(e -> e.getClassGroupId()).collect(Collectors.toList());
+			batchUpdateClassTeacher(collect,teacherId,targetTeacherId);
+		}
+		List<CourseSchedule> courseSchedules1 = this.queryNoStartCourseByTeacherId(classGroupIds, teacherId, "TEACHING");
+		if(courseSchedules1.size() > 0){
+			List<Integer> teachingTeacherIdList = new ArrayList<Integer>();
+			teachingTeacherIdList.add(targetTeacherId);
+			courseSchedules.forEach(e->{
+				e.setTeachingTeacherIdList(teachingTeacherIdList);
+			});
+			this.courseAdjust(courseSchedules1);
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void batchPracticeGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId, Integer educationalTeacherId,Integer oldTeacherId) {
+		String[] split = practiceGroupId.split(",");
+		for (int i = 0; i < split.length; i++) {
+			this.practiceGroupTeacherAdjust(split[i],teacherId,subjectId,educationalTeacherId);
+		}
+		List<ClassGroup> classGroups = classGroupDao.queryClassGroups(practiceGroupId,"PRACTICE");
+		if(classGroups.size() > 0){
+			List<Integer> collect = classGroups.stream().map(e -> e.getId()).collect(Collectors.toList());
+			batchUpdateClassTeacher(collect,oldTeacherId,teacherId);
+		}
+	}
+
+	@Transactional(rollbackFor = Exception.class)
+	public void batchUpdateClassTeacher(List<Integer> classGroupIds,Integer oldTeacherId,Integer newTeacherId){
+		//修改班级老师
+		List<ClassGroup> classGroupList = classGroupDao.findByClassGroupIds(classGroupIds);
+		classGroupList.forEach(e->{
+			e.setUserIds(newTeacherId.toString());
+		});
+		classGroupTeacherMapperService.batchUpdateTeacherByClassId(classGroupIds,newTeacherId);
+		//旧老师退群,新老师加群
+		if(classGroupList != null && classGroupIds.size() > 0){
+			ImGroupMember[] oldImGroupMembers = {new ImGroupMember(oldTeacherId.toString())};
+			ImGroupMember[] imGroupMembers = {new ImGroupMember(newTeacherId.toString())};
+			for (ClassGroup classGroup:classGroupList) {
+				imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), oldImGroupMembers, classGroup.getName()));
+				imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+			}
+		}
 	}
 
 	@Override

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupModifyLogServiceImpl.java

@@ -0,0 +1,22 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.CoursesGroupModifyLogDao;
+import com.ym.mec.biz.dal.entity.CoursesGroupModifyLog;
+import com.ym.mec.biz.service.CoursesGroupModifyLogService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CoursesGroupModifyLogServiceImpl extends BaseServiceImpl<Long, CoursesGroupModifyLog>  implements CoursesGroupModifyLogService {
+	
+	@Autowired
+	private CoursesGroupModifyLogDao coursesGroupModifyLogDao;
+
+	@Override
+	public BaseDAO<Long, CoursesGroupModifyLog> getDAO() {
+		return coursesGroupModifyLogDao;
+	}
+
+}

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

@@ -162,4 +162,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 		studentCoursesMap=null;
 		allStudentCourseInfo=null;
 	}
+
+	@Override
+	public void batchUpdateAdviser(Integer teacherId,String studentIds) {
+		studentDao.batchUpdateAdviser(teacherId,studentIds);
+	}
 }

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java

@@ -18,6 +18,7 @@ import com.ym.mec.common.entity.ImResult;
 import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.exception.BizException;
 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.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
@@ -557,4 +558,24 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 		return true;
 	}
 
+	@Override
+	public PageInfo<BasicUserDto> queryStudent(QueryInfo queryInfo) {
+		PageInfo<BasicUserDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<BasicUserDto> dataList = null;
+		int count = teacherDao.countStudent(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = teacherDao.queryStudent(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
 }

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

@@ -24,7 +24,6 @@ import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
-
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

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

@@ -253,25 +253,27 @@
         <result column="educational_teacher_id_" property="educationalTeacherId"/>
         <result column="team_teacher_id_" property="teamTeacherId"/>
         <result column="teacher_role_" property="teacherRole"/>
+        <result column="class_group_name_" property="classGroupNames"/>
+        <result column="class_group_id_" property="classGroupIds"/>
+        <result column="hasRestClass" property="hasRestClass"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="job_type_" property="jobType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="job_nature_" property="jobNature" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <collection property="classGroupNames" ofType="string">
-            <result column="class_group_name_"/>
-        </collection>
     </resultMap>
     <select id="queryGroupCourses" resultMap="getTeaCourseInfosMap">
         SELECT mg.id_ music_group_id_,mg.name_ music_group_name_,
-        mg.team_teacher_id_,mg.educational_teacher_id_,cg.name_ class_group_name_,
-        mg.status_,t.job_type_,t.job_nature_,cgtm.teacher_role_
+        mg.team_teacher_id_,mg.educational_teacher_id_,GROUP_CONCAT(DISTINCT cg.name_) class_group_name_,GROUP_CONCAT(DISTINCT cg.id_) class_group_id_,
+        mg.status_,t.job_type_,t.job_nature_,cgtm.teacher_role_,CASE WHEN COUNT(cs.id_) > 0 THEN 1 ELSE 0 END hasRestClass
         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_
+        LEFT JOIN course_schedule cs ON (FIND_IN_SET(cs.class_group_id_,cg.id_) AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW())
         WHERE cgtm.user_id_ = #{search} AND cg.del_flag_ = 0 AND cg.group_type_ = 'MUSIC'
         <if test="status != null">
             AND mg.status_ = #{status}
         </if>
+        GROUP BY cgtm.id_
         <include refid="global.limit"/>
     </select>
 
@@ -1098,7 +1100,7 @@
         WHERE su.id_ IS NOT NULL
     </select>
     <select id="findByGroupAndType" resultMap="ClassGroup">
-        SELECT * FROM class_group WHERE music_group_id_=#{groupId} AND group_type_=#{groupType}
+        SELECT * FROM class_group WHERE music_group_id_=#{groupId} AND group_type_=#{groupType} LIMIT 1
     </select>
 
     <update id="batchUpdateStudentNumMinusOne" parameterType="java.util.List">
@@ -1295,4 +1297,7 @@
         </if>
         AND type_ IN ('HIGH','HIGH_ONLINE') AND del_flag_ = '0'
     </select>
+    <select id="queryClassGroups" resultMap="ClassGroup">
+        SELECT cg.* FROM class_group cg WHERE cg.music_group_id_ = #{practiceGroupId} AND cg.group_type_ = #{groupType}
+    </select>
 </mapper>

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

@@ -83,6 +83,12 @@
         UPDATE class_group_teacher_mapper SET user_id_ = #{teacherId},update_time_ = NOW()
         WHERE teacher_role_ = 'BISHOP' AND music_group_id_ = #{groupId} AND group_type_ = #{groupType}
     </update>
+    <update id="batchUpdateTeacherByClassId">
+      UPDATE class_group_teacher_mapper SET user_id_ = #{newTeacherId},update_time_ = NOW() WHERE class_group_id_ IN
+        <foreach collection="classGroupIds" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </update>
 
     <!-- 根据主键删除一条记录 -->
     <delete id="delete">

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

@@ -3106,5 +3106,11 @@
         GROUP BY
         cssp.user_id_
     </select>
+    <select id="queryNoStartCourseByTeacherId" resultMap="CourseSchedule">
+        SELECT cs.* FROM course_schedule cs
+        LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
+        WHERE FIND_IN_SET(cs.class_group_id_,#{classGroupIds}) AND csts.teacher_role_ = #{teacherRole}
+        AND csts.user_id_ = #{teacherId} AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW() AND cs.del_flag_ = 0
+    </select>
 
 </mapper>

+ 70 - 0
mec-biz/src/main/resources/config/mybatis/CoursesGroupModifyLogDao.xml

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.CoursesGroupModifyLogDao">
+
+    <resultMap type="com.ym.mec.biz.dal.entity.CoursesGroupModifyLog" id="CoursesGroupModifyLog">
+        <result column="id_" property="id"/>
+        <result column="group_id_" property="groupId"/>
+        <result column="group_type_" property="groupType"/>
+        <result column="operator_id_" property="operatorId"/>
+        <result column="previous_group_" property="previousGroup"/>
+        <result column="current_group_" property="currentGroup"/>
+        <result column="create_time_" property="createTime"/>
+    </resultMap>
+
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="CoursesGroupModifyLog">
+		SELECT * FROM courses_group_modify_log WHERE id_ = #{id}
+	</select>
+
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="CoursesGroupModifyLog">
+		SELECT * FROM courses_group_modify_log ORDER BY id_
+	</select>
+
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CoursesGroupModifyLog" useGeneratedKeys="true" keyColumn="id"
+            keyProperty="id">
+        INSERT INTO courses_group_modify_log (group_id_,group_type_,operator_id_,previous_group_,current_group_,create_time_)
+        VALUES(#{groupId},#{groupType},#{operatorId},#{previousGroup},#{currentGroup},now())
+    </insert>
+
+    <!-- 根据主键查询一条记录 -->
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.CoursesGroupModifyLog">
+        UPDATE courses_group_modify_log
+        <set>
+            <if test="groupId != null">
+                group_id_ = #{groupId},
+            </if>
+            <if test="groupType != null">
+                group_type_ = #{groupType},
+            </if>
+            <if test="operatorId != null">
+                operator_id_ = #{operatorId},
+            </if>
+            <if test="previousGroup != null">
+                previous_group_ = #{previousGroup},
+            </if>
+            <if test="currentGroup != null">
+                current_group_ = #{currentGroup},
+            </if>
+        </set>
+        WHERE id_ = #{id}
+    </update>
+
+    <!-- 根据主键删除一条记录 -->
+    <delete id="delete">
+	</delete>
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="CoursesGroupModifyLog" parameterType="map">
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+	</select>
+</mapper>

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

@@ -54,6 +54,7 @@
         <result column="teacher_name_" property="teacherName"/>
         <result column="evaluate_id_" property="evaluateId"/>
         <result column="evaluate_status_" property="evaluateStatus"/>
+        <result column="hasRestClass" property="hasRestClass"/>
     </resultMap>
     <update id="updateUserId">
         UPDATE practice_group
@@ -179,12 +180,14 @@
     </select>
     <select id="findAllByOrgan" resultMap="PracticeGroupDto">
         SELECT pg.*,
-        su.real_name_ teacher_name_
+        su.real_name_ teacher_name_,
+        CASE WHEN COUNT(cs.id_) > 0 THEN 1 ELSE 0 END hasRestClass
         FROM
         practice_group pg
         LEFT JOIN sys_user su ON pg.user_id_ = su.id_
+        LEFT JOIN course_schedule cs ON (FIND_IN_SET(cs.music_group_id_,pg.id_) AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW() AND cs.group_type_ = 'PRACTICE')
         <include refid="practiceGroupQueryCondition"/>
-        ORDER BY pg.id_ DESC
+        GROUP BY pg.id_ ORDER BY pg.id_ DESC
         <include refid="global.limit"/>
     </select>
     <select id="countPracticeGroupOverCourse" resultType="java.util.Map">

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

@@ -210,6 +210,9 @@
             </foreach>
         </if>
     </update>
+    <update id="batchUpdateAdviser">
+      UPDATE student s SET s.teacher_id_ = #{teacherId},s.update_time_ = NOW() WHERE FIND_IN_SET(s.user_id_,#{studentIds})
+    </update>
 
     <resultMap id="student4operating" type="com.ym.mec.biz.dal.dto.Student4operating">
         <result column="organ_name_" property="organName"/>

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

@@ -1098,4 +1098,14 @@
         WHERE cgtm.user_id_ = #{teacherId} AND cgtm.group_type_ = 'MUSIC' AND mg.status_ = 'PROGRESS'
         GROUP BY mg.id_
     </select>
+    <select id="queryStudent" resultMap="com.ym.mec.biz.dal.dao.MusicGroupDao.BasicUserDto">
+        SELECT su.username_,s.user_id_,su.phone_ FROM student s
+        LEFT JOIN sys_user su ON s.user_id_ = su.id_
+        WHERE s.teacher_id_ = #{search}
+        <include refid="global.limit"/>
+    </select>
+    <select id="countStudent" resultType="java.lang.Integer">
+        SELECT COUNT(s.user_id_) FROM student s
+        WHERE s.teacher_id_ = #{search}
+    </select>
 </mapper>

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

@@ -4,11 +4,9 @@ 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.*;

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

@@ -28,6 +28,7 @@ import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
@@ -170,6 +171,14 @@ public class CourseScheduleController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "根据班级列表调整课程")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/classGroupTeacherAdjust','system')")
+    @PostMapping(value = "/classGroupTeacherAdjust")
+    public Object classGroupTeacherAdjust(String classGroupIds,Integer teacherId,Integer targetTeacherId){
+        scheduleService.classGroupTeacherAdjust(classGroupIds,teacherId,targetTeacherId);
+        return succeed();
+    }
+
     @ApiOperation(value = "课时调整-批量")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchClassStartDateAdjust')")
     @PostMapping(value = "/batchClassStartDateAdjust")
@@ -357,6 +366,15 @@ public class CourseScheduleController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "陪练课课程组老师批量调整")
+    @PostMapping("/batchPracticeGroupTeacherAdjust")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchPracticeGroupTeacherAdjust')")
+    @Transactional(rollbackFor = Exception.class)
+    public Object batchPracticeGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId, Integer educationalTeacherId,Integer oldTeacherId){
+        scheduleService.batchPracticeGroupTeacherAdjust(practiceGroupId,teacherId,subjectId,educationalTeacherId,oldTeacherId);
+        return succeed();
+    }
+
     @ApiOperation(value = "陪练课课程组有效期调整")
     @PostMapping("/updateCoursesExpireDate")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/updateCoursesExpireDate')")

+ 9 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -295,6 +295,7 @@ public class StudentManageController extends BaseController {
 
     @ApiOperation(value = "初始化教师编号")
     @GetMapping("/initTeacherId")
+    @PreAuthorize("@pcs.hasPermissions('studentManage/initTeacherId')")
     public HttpResponseResult initTeacherId(){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
@@ -303,4 +304,12 @@ public class StudentManageController extends BaseController {
         studentService.initTeacherId();
         return succeed();
     }
+
+    @ApiOperation(value = "修改学员的指导老师")
+    @PostMapping("/batchUpdateAdviser")
+    @PreAuthorize("@pcs.hasPermissions('studentManage/batchUpdateAdviser')")
+    public Object batchUpdateAdviser(Integer teacherId,String studentIds){
+        studentService.batchUpdateAdviser(teacherId,studentIds);
+        return succeed();
+    }
 }

+ 10 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java

@@ -10,16 +10,19 @@ import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.TeacherService;
 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.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 
 @RequestMapping("teacher")
@@ -221,4 +224,11 @@ public class TeacherController extends BaseController {
     public Object getCourseScheduleHomework(Integer courseScheduleId){
         return succeed(teacherService.getCourseScheduleHomework(courseScheduleId));
     }
+
+    @ApiOperation(value = "获取老师指导的学员列表")
+    @GetMapping("/queryStudent")
+    @PreAuthorize("@pcs.hasPermissions('teacher/queryStudent')")
+    public Object queryStudent(QueryInfo queryInfo){
+        return succeed(teacherService.queryStudent(queryInfo));
+    }
 }