浏览代码

Merge remote-tracking branch 'origin/master'

周箭河 4 年之前
父节点
当前提交
d9c1a9b02c
共有 22 个文件被更改,包括 347 次插入36 次删除
  1. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  3. 35 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/EmployeeDao.java
  4. 51 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EmployeeLevelDto.java
  5. 6 6
      mec-biz/src/main/java/com/ym/mec/biz/event/listener/CourseEventListener.java
  6. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/service/EmployeeService.java
  7. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  8. 41 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  10. 59 17
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  11. 13 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  12. 3 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  13. 43 0
      mec-biz/src/main/resources/config/mybatis/EmployeeMapper.xml
  14. 1 1
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml
  15. 5 4
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  16. 8 0
      mec-client-api/src/main/java/com/ym/mec/im/ImFeignService.java
  17. 5 0
      mec-client-api/src/main/java/com/ym/mec/im/fallback/ImFeignServiceFallback.java
  18. 5 0
      mec-im/src/main/java/com/ym/controller/GroupController.java
  19. 8 0
      mec-im/src/main/java/com/ym/service/GroupService.java
  20. 16 0
      mec-im/src/main/java/com/ym/service/Impl/GroupServiceImpl.java
  21. 1 1
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/JiguangPushPlugin.java
  22. 20 0
      mec-web/src/main/java/com/ym/mec/web/controller/EmployeeController.java

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

@@ -227,6 +227,14 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     List<ImGroupModel> queryTeacherGroups(@Param("userId") Integer userId, @Param("search") String search);
 
     /**
+     * 获取员工离职时需要退出的群组列表
+     *
+     * @param userId
+     * @return
+     */
+    List<ImGroupModel> queryTeacherQuitGroups(@Param("userId") Integer userId);
+
+    /**
      * 获取未分配合奏的单技班列表
      *
      * @param musicGroupId

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

@@ -451,5 +451,6 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      */
     CourseSchedule getStudentHistoryLastCourse(@Param("studentId") Integer studentId,
                                                @Param("monday") String monday,
+                                               @Param("groupId") String groupId,
                                                @Param("courseType")CourseSchedule.CourseScheduleType courseType);
 }

+ 35 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/EmployeeDao.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.EmployeeDto;
+import com.ym.mec.biz.dal.dto.EmployeeLevelDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.common.dal.BaseDAO;
@@ -117,4 +118,38 @@ public interface EmployeeDao extends BaseDAO<Integer, Employee> {
      * @return
      */
     Integer hasCourseSchedule(Integer employeeId);
+
+    /**
+     * 获取维修技师所在分部
+     * @param userId
+     * @return
+     */
+    List<Integer> queryRepairOrganList(Integer userId);
+
+    /**
+     * 教务老师所在分部列表
+     * @param userId
+     * @return
+     */
+    List<Integer> queryEducationOrganList(Integer userId);
+
+    /**
+     * 运营主管所在分部列表
+     * @param userId
+     * @return
+     */
+    List<Integer> queryTeamTeacherOrganList(Integer userId);
+
+    /**
+     * 乐队指导所在分部列表
+     * @param userId
+     * @return
+     */
+    List<Integer> queryDirectorOrganList(Integer userId);
+
+    /**
+     * 员工离职
+     * @param employeeLevelDtos
+     */
+    void employeeLevel(List<EmployeeLevelDto> employeeLevelDtos);
 }

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

@@ -0,0 +1,51 @@
+package com.ym.mec.biz.dal.dto;
+
+
+import io.swagger.annotations.ApiModelProperty;
+
+public class EmployeeLevelDto {
+
+	@ApiModelProperty(value = "分部编号", required = true)
+	private Integer organId;
+
+	@ApiModelProperty(value = "交接人编号", required = true)
+	private Integer transferUserId;
+
+	@ApiModelProperty(value = "离职人编号", required = true)
+	private Integer levelUserId;
+
+	@ApiModelProperty(value = "角色名称(维修技师repair   教务老师education  运营主管teamTeacher  乐队指导director)", required = true)
+	private String roleName;
+
+	public Integer getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(Integer organId) {
+		this.organId = organId;
+	}
+
+	public Integer getTransferUserId() {
+		return transferUserId;
+	}
+
+	public void setTransferUserId(Integer transferUserId) {
+		this.transferUserId = transferUserId;
+	}
+
+	public Integer getLevelUserId() {
+		return levelUserId;
+	}
+
+	public void setLevelUserId(Integer levelUserId) {
+		this.levelUserId = levelUserId;
+	}
+
+	public String getRoleName() {
+		return roleName;
+	}
+
+	public void setRoleName(String roleName) {
+		this.roleName = roleName;
+	}
+}

+ 6 - 6
mec-biz/src/main/java/com/ym/mec/biz/event/listener/CourseEventListener.java

@@ -76,12 +76,12 @@ public class CourseEventListener {
 
 
         try{
-            List<CourseScheduleStudentPayment> cssps = courseScheduleStudentPaymentDao.findByCourseScheduleIds(new ArrayList<>(courseStatusChangeEvent.getCourseIds()));
-            if(CollectionUtils.isEmpty(cssps)){
-                return;
-            }
-            List<Integer> studentIds = cssps.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toList());
-            studentServeService.exercisesSituationStatistics2(null,studentIds);
+//            List<CourseScheduleStudentPayment> cssps = courseScheduleStudentPaymentDao.findByCourseScheduleIds(new ArrayList<>(courseStatusChangeEvent.getCourseIds()));
+//            if(CollectionUtils.isEmpty(cssps)){
+//                return;
+//            }
+//            List<Integer> studentIds = cssps.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toList());
+//            studentServeService.exercisesSituationStatistics2(null,studentIds);
         } finally {
             redisCache.delete("exercisesSituationStatistics2");
         }

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/EmployeeService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.EmployeeLevelDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.enums.EmployeeOperateEnum;
@@ -9,6 +10,7 @@ import com.ym.mec.common.service.BaseService;
 
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public interface EmployeeService extends BaseService<Integer, Employee> {
 
@@ -68,4 +70,17 @@ public interface EmployeeService extends BaseService<Integer, Employee> {
      * @param targetUserId
      */
     void updateEducationTeacherId(Integer currentUserId, Integer targetUserId);
+
+    /**
+     * 获取员工离职时对应角色所在分部
+     * @param userId
+     * @return
+     */
+    Map<String,Object> levelDetail(Integer userId);
+
+    /**
+     * 员工离职交接
+     * @param employeeLevelDtos
+     */
+    void level(List<EmployeeLevelDto> employeeLevelDtos);
 }

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

@@ -1927,7 +1927,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 								preTeachingTeacherIdList.addAll(integerAndIntegerListDto.getIds());
 							}
 						}
-                        if (CollectionUtils.isEmpty(preTeachingTeacherIdList)) {
+                        if (CollectionUtils.isEmpty(preTeachingTeacherIdList)&&Objects.isNull(preCourseSchedule.getId())) {
                             IntegerAndIntegerListDto integerAndIntegerListDto = classGroupTeachingTeacherMap.get(preCourseSchedule.getClassGroupId().longValue());
                             if (Objects.nonNull(integerAndIntegerListDto)) {
 								preTeachingTeacherIdList.addAll(integerAndIntegerListDto.getIds());
@@ -1943,7 +1943,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                         if (CollectionUtils.isEmpty(backTeachingTeacherIdList)) {
                             IntegerAndIntegerListDto integerAndIntegerListDto = classGroupTeachingTeacherMap.get(backCourseSchedule.getClassGroupId().longValue());
                             if (Objects.nonNull(integerAndIntegerListDto)) {
-								backTeachingTeacherIdList.addAll(integerAndIntegerListDto.getIds());
+//								backTeachingTeacherIdList.addAll(integerAndIntegerListDto.getIds());
                             }
                         }
 

+ 41 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -3,11 +3,14 @@ package com.ym.mec.biz.service.impl;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.EmployeeDto;
+import com.ym.mec.biz.dal.dto.EmployeeLevelDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.enums.EmployeeOperateEnum;
@@ -28,10 +31,8 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  implements EmployeeService {
@@ -46,6 +47,8 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	private TeacherDao teacherDao;
 	@Autowired
 	private SysUserCashAccountDao sysUserCashAccountDao;
+	@Autowired
+	private ClassGroupDao classGroupDao;
 
 	@Override
 	public BaseDAO<Integer, Employee> getDAO() {
@@ -192,4 +195,38 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	public void updateEducationTeacherId(Integer currentUserId, Integer targetUserId) {
 		employeeDao.updateEducationTeacherId(currentUserId,targetUserId);
 	}
+
+	@Override
+	public Map<String, Object> levelDetail(Integer userId) {
+		Map<String,Object> resultMap = new HashMap<>(4);
+		//维修技师所在分部列表
+		List<Integer> repairOrgans = employeeDao.queryRepairOrganList(userId);
+		resultMap.put("repairOrgans",repairOrgans);
+		//教务老师所在分部列表
+		List<Integer> educationOrgans = employeeDao.queryEducationOrganList(userId);
+		resultMap.put("educationOrgans",educationOrgans);
+		//运营主管所在分部列表
+		List<Integer> teamTeacherOrgans = employeeDao.queryTeamTeacherOrganList(userId);
+		resultMap.put("teamTeacherOrgans",teamTeacherOrgans);
+		//乐队指导所在分部列表
+		List<Integer> directorOrgans = employeeDao.queryDirectorOrganList(userId);
+		resultMap.put("directorOrgans",directorOrgans);
+		return resultMap;
+	}
+
+	@Override
+	public void level(List<EmployeeLevelDto> employeeLevelDtos) {
+		//获取用户需要加入的群组列表
+//		Map<String, List<EmployeeLevelDto>> collect = employeeLevelDtos.stream().collect(Collectors.groupingBy(e -> e.getRoleName()));
+//		Set<String> roleNames = collect.keySet();
+//		for (String roleName : roleNames) {
+//			if("repair" != roleName){
+//				List<EmployeeLevelDto> levelDtoList = collect.get(roleName);
+//
+//			}
+//		}
+//		imFeignService.groupBatchJoin();
+//		employeeDao.employeeLevel(employeeLevelDtos);
+		//用户退群和加群
+	}
 }

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

@@ -168,7 +168,7 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 		extracurricularExercises.setCompletedNum(submitStudentNum);
 		extracurricularExercisesDao.update(extracurricularExercises);
 
-		studentServeService.updateExercisesSituation(extracurricularExercises.getCreateTime(), Arrays.asList(extracurricularExercisesReply.getUserId()), extracurricularExercises.getTeacherId());
+		studentServeService.updateExercisesSituation(extracurricularExercises.getCreateTime(), Arrays.asList(existExtra.getUserId()), extracurricularExercises.getTeacherId());
 
 		if(push){
 			Map<Integer, String> userMap = new HashMap<>();

+ 59 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -294,6 +294,11 @@ public class StudentServeServiceImpl implements StudentServeService {
     public void exercisesSituationStatistics2(String monday, List<Integer> studentIds) {
         LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
 
+        int lastWeekTodayUpdateNum = studentExtracurricularExercisesSituationDao.findLastWeekTodayUpdateNum(nowDate.plusDays(-nowDate.getDayOfWeek().getValue()).toString());
+        if(lastWeekTodayUpdateNum<=0){
+            nowDate = nowDate.plusDays(-nowDate.getDayOfWeek().getValue());
+        }
+
         if(StringUtils.isNotBlank(monday)){
             nowDate=LocalDate.parse(monday, DateUtil.dateFormatter);
         }
@@ -323,12 +328,24 @@ public class StudentServeServiceImpl implements StudentServeService {
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.SINGLE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(CollectionUtils.isEmpty(weekCourseInfo)){
                     Map<String, List<StudentServeCourseDto>> groupCourseInfo = futureCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getMusicGroupId));
+
+                    Map<Integer, Integer> teacherNumMap = new HashMap<>();
                     for (Map.Entry<String, List<StudentServeCourseDto>> groupCourseInfoEntry : groupCourseInfo.entrySet()) {
                         StudentServeCourseDto courseInfo = groupCourseInfoEntry.getValue().stream().min(Comparator.comparing(StudentServeCourseDto::getCourseStartTime)).get();
+
+                        if(!teacherNumMap.containsKey(courseInfo.getActualTeacherId())){
+                            teacherNumMap.put(courseInfo.getActualTeacherId(), 1);
+                        }else{
+                            teacherNumMap.put(courseInfo.getActualTeacherId(), teacherNumMap.get(courseInfo.getActualTeacherId())+1);
+                        }
+                    }
+
+                    for (Map.Entry<Integer, Integer> teacherNumMapEntry : teacherNumMap.entrySet()) {
                         StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
-                                courseInfo.getActualTeacherId(),nowDate.get(DateUtil.weekFields.weekOfYear()),
+                                teacherNumMapEntry.getKey(),nowDate.get(DateUtil.weekFields.weekOfYear()),
                                 DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
                                 "EXERCISE", null);
+                        studentExtracurricularExercisesSituation.setExpectExercisesNum(teacherNumMapEntry.getValue());
                         results.add(studentExtracurricularExercisesSituation);
                     }
                 }else{
@@ -382,16 +399,41 @@ public class StudentServeServiceImpl implements StudentServeService {
                     }
                 }
             }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.MIX)){
-                CourseSchedule studentHistoryLastCourse = courseScheduleStudentPaymentDao.getStudentHistoryLastCourse(studentCourseMapEntry.getKey(), monDayDate.toString(), CourseSchedule.CourseScheduleType.SINGLE);
-                StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
-                        Objects.isNull(studentHistoryLastCourse)?studentCourseMapEntry.getValue().get(0).getLeadTeacherId():studentHistoryLastCourse.getActualTeacherId(),
-                        nowDate.get(DateUtil.weekFields.weekOfYear()),
-                        DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
-                        "EXERCISE", null);
-                if(Objects.isNull(studentExtracurricularExercisesSituation.getTeacherId())){
-                    continue;
+                List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.MIX);
+                List<StudentServeCourseDto> weekCourseInfo = futureCourseInfo.stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
+                List<StudentServeCourseDto> serveCourseInfo;
+                if(CollectionUtils.isEmpty(weekCourseInfo)){
+                    serveCourseInfo = futureCourseInfo;
+                }else{
+                    serveCourseInfo = weekCourseInfo;
+                }
+                Map<String, List<StudentServeCourseDto>> groupCourseInfo = serveCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getMusicGroupId));
+
+                Map<Integer, Integer> teacherNumMap = new HashMap<>();
+                for (String groupId : groupCourseInfo.keySet()) {
+                    CourseSchedule studentHistoryLastCourse = courseScheduleStudentPaymentDao.getStudentHistoryLastCourse(studentCourseMapEntry.getKey(), monDayDate.toString(), groupId, CourseSchedule.CourseScheduleType.SINGLE);
+                    Integer teacherId = Objects.isNull(studentHistoryLastCourse)?studentCourseMapEntry.getValue().get(0).getLeadTeacherId():studentHistoryLastCourse.getActualTeacherId();
+                    if(Objects.isNull(teacherId)){
+                        continue;
+                    }
+
+                    if(!teacherNumMap.containsKey(teacherId)){
+                        teacherNumMap.put(teacherId, 1);
+                    }else{
+                        teacherNumMap.put(teacherId, teacherNumMap.get(teacherId)+1);
+                    }
+
+                }
+
+                for (Map.Entry<Integer, Integer> teacherNumMapEntry : teacherNumMap.entrySet()) {
+                    StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
+                            teacherNumMapEntry.getKey(),
+                            nowDate.get(DateUtil.weekFields.weekOfYear()),
+                            DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
+                            "EXERCISE", null);
+                    studentExtracurricularExercisesSituation.setExpectExercisesNum(teacherNumMapEntry.getValue());
+                    results.add(studentExtracurricularExercisesSituation);
                 }
-                results.add(studentExtracurricularExercisesSituation);
             }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.PRACTICE)){
                 List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.PRACTICE);
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.PRACTICE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
@@ -476,7 +518,7 @@ public class StudentServeServiceImpl implements StudentServeService {
                     Set<String> courseIds = Arrays.stream(weekServiceWithStudent.getCourseIds().split(",")).collect(Collectors.toSet());
                     List<StudentServeCourseHomeworkDto> studentHomeworks = studentAllHomeworks.stream().filter(s -> courseIds.contains(s.getCourseScheduleId().toString())).collect(Collectors.toList());
                     if(!CollectionUtils.isEmpty(studentHomeworks)){
-                        weekServiceWithStudent.setActualExercisesNum(1);
+                        weekServiceWithStudent.setActualExercisesNum(studentHomeworks.size()>weekServiceWithStudent.getExpectExercisesNum()?weekServiceWithStudent.getExpectExercisesNum():studentHomeworks.size());
                         long replyNum = studentHomeworks.stream().filter(e -> YesOrNoEnum.YES.equals(e.getStatus())).count();
                         weekServiceWithStudent.setExercisesReplyNum(replyNum>0?1:0);
                         long haveSubmitTimes = studentHomeworks.stream().filter(e -> Objects.nonNull(e.getSubmitTime())).count();
@@ -507,7 +549,7 @@ public class StudentServeServiceImpl implements StudentServeService {
                 if(!CollectionUtils.isEmpty(studentAllExercises)&&weekServiceWithStudent.getServeType().equals("EXERCISE")){
                     List<ExtracurricularExercisesReply> studentExercises = studentAllExercises.stream().filter(s -> weekServiceWithStudent.getTeacherId().equals(s.getExtracurricularExercises().getTeacherId())).collect(Collectors.toList());
                     if(!CollectionUtils.isEmpty(studentExercises)){
-                        weekServiceWithStudent.setActualExercisesNum(1);
+                        weekServiceWithStudent.setActualExercisesNum(studentExercises.size()>weekServiceWithStudent.getExpectExercisesNum()?weekServiceWithStudent.getExpectExercisesNum():studentExercises.size());
                         long replyNum = studentExercises.stream().filter(e -> e.getStatus()==1).count();
                         if(weekServiceWithStudent.getExercisesReplyNum()<=0){
                             weekServiceWithStudent.setExercisesReplyNum(replyNum>0?1:0);
@@ -608,9 +650,9 @@ public class StudentServeServiceImpl implements StudentServeService {
 
     @Override
     public void updateExercisesSituation(Date date,List<Integer> studentIds, Integer teacherId) {
-        if(true){
-            return;
-        }
+//        if(true){
+//            return;
+//        }
         LocalDate nowDate = LocalDateTime.ofInstant(date.toInstant(), DateUtil.zoneId).toLocalDate();
         if(Objects.isNull(date)){
             nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
@@ -668,7 +710,7 @@ public class StudentServeServiceImpl implements StudentServeService {
                 Set<String> courseIds = Arrays.stream(weekServiceWithStudent.getCourseIds().split(",")).collect(Collectors.toSet());
                 List<StudentServeCourseHomeworkDto> studentHomeworks = studentAllHomeworks.stream().filter(s -> courseIds.contains(s.getCourseScheduleId())).collect(Collectors.toList());
                 if(!CollectionUtils.isEmpty(studentHomeworks)){
-                    weekServiceWithStudent.setActualExercisesNum(1);
+                    weekServiceWithStudent.setActualExercisesNum(studentHomeworks.size()>weekServiceWithStudent.getExpectExercisesNum()?weekServiceWithStudent.getExpectExercisesNum():studentHomeworks.size());
                     long replyNum = studentHomeworks.stream().filter(e -> YesOrNoEnum.YES.equals(e.getStatus())).count();
                     weekServiceWithStudent.setExercisesReplyNum(replyNum>0?1:0);
                     long haveSubmitTimes = studentHomeworks.stream().filter(e -> Objects.nonNull(e.getSubmitTime())).count();
@@ -699,7 +741,7 @@ public class StudentServeServiceImpl implements StudentServeService {
             if(!CollectionUtils.isEmpty(studentAllExercises)&&weekServiceWithStudent.getServeType().equals("EXERCISE")){
                 List<ExtracurricularExercisesReply> studentExercises = studentAllExercises.stream().filter(s -> weekServiceWithStudent.getTeacherId().equals(s.getExtracurricularExercises().getTeacherId())).collect(Collectors.toList());
                 if(!CollectionUtils.isEmpty(studentExercises)){
-                    weekServiceWithStudent.setActualExercisesNum(1);
+                    weekServiceWithStudent.setActualExercisesNum(studentExercises.size()>weekServiceWithStudent.getExpectExercisesNum()?weekServiceWithStudent.getExpectExercisesNum():studentExercises.size());
                     long replyNum = studentExercises.stream().filter(e -> e.getStatus()==1).count();
                     if(weekServiceWithStudent.getExercisesReplyNum()<=0){
                         weekServiceWithStudent.setExercisesReplyNum(replyNum>0?1:0);

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

@@ -483,6 +483,19 @@
         GROUP BY cg.id_
     </select>
 
+    <select id="queryTeacherQuitGroups" resultMap="imGroupModel">
+        SELECT cg.id_,CASE WHEN cg.group_name_ IS NULL OR cg.group_name_ = '' THEN cg.name_ ELSE cg.group_name_ END name_
+        FROM class_group_teacher_mapper cgtm
+        LEFT JOIN class_group cg ON cgtm.class_group_id_ = cg.id_
+        LEFT JOIN music_group mg ON mg.id_ = cg.music_group_id_ AND cg.group_type_ = 'MUSIC'
+        LEFT JOIN vip_group vg ON vg.id_ = cg.music_group_id_ AND cg.group_type_ = 'VIP'
+        LEFT JOIN courses_group csg ON csg.id_ = cg.music_group_id_ AND cg.group_type_ = 'COMM'
+        WHERE cgtm.user_id_ != #{userId} AND (mg.team_teacher_id_ = #{userId} OR mg.educational_teacher_id_ = #{userId} OR mg.director_user_id_ = #{userId})
+        AND cg.del_flag_ = 0 AND ((mg.status_ = 'PROGRESS' OR vg.group_status_ = 2 OR csg.status_ = 'NORMAL')
+        OR (vg.group_status_ = 2 AND vg.educational_teacher_id_ =  #{userId}) OR (csg.status_ = 'NORMAL' AND csg.educational_teacher_id_ =  #{userId}))
+        GROUP BY cg.id_
+    </select>
+
     <select id="findNoClassSubjects" resultMap="ClassGroup">
         SELECT cg.* FROM class_group cg LEFT JOIN class_group_relation cgr ON cgr.sub_class_group_id_=cg.id_
         WHERE cg.music_group_id_=#{musicGroupId} AND cg.type_ = 'NORMAL'

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

@@ -679,6 +679,9 @@
 		SELECT cs.* FROM course_schedule_student_payment cssp
 		LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_
 		WHERE cssp.user_id_=#{studentId}
+		  <if test="groupId!=null">
+			  AND cs.music_group_id_=#{groupId}
+		  </if>
 		  AND cs.class_date_&lt;#{monday}
 		  AND cs.type_=#{courseType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 		  AND (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)

+ 43 - 0
mec-biz/src/main/resources/config/mybatis/EmployeeMapper.xml

@@ -288,4 +288,47 @@
         AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW() AND cs.del_flag_ = 0
         WHERE csts.user_id_ = #{employeeId}
     </select>
+
+    <select id="queryRepairOrganList" resultType="java.lang.Integer">
+        SELECT DISTINCT organ_id_ FROM music_group mg
+        WHERE repair_user_id_ = #{userId}
+    </select>
+    <select id="queryEducationOrganList" resultType="java.lang.Integer">
+        SELECT DISTINCT c.organ_id_ FROM (
+             SELECT organ_id_ FROM music_group
+             WHERE educational_teacher_id_ = #{userId}
+             UNION
+             SELECT organ_id_ FROM practice_group
+             WHERE educational_teacher_id_ = #{userId}
+             UNION
+             SELECT organ_id_ FROM vip_group
+             WHERE educational_teacher_id_ = #{userId}) c
+    </select>
+    <select id="queryTeamTeacherOrganList" resultType="java.lang.Integer">
+        SELECT DISTINCT organ_id_ FROM music_group
+        WHERE team_teacher_id_ = #{userId}
+    </select>
+    <select id="queryDirectorOrganList" resultType="java.lang.Integer">
+        SELECT DISTINCT organ_id_ FROM music_group
+        WHERE director_user_id_ = #{userId}
+    </select>
+
+    <update id="employeeLevel">
+        <foreach collection="employeeLevelDtos" item="item" open="(" close=")" separator=";">
+            <if test="employeeLevelDto.roleName == 'repair'">
+                UPDATE music_group SET repair_user_id_ = #{item.transferUserId} WHERE repair_user_id_ = #{item.levelUserId} AND organ_id_ = #{item.organId}
+            </if>
+            <if test="employeeLevelDto.roleName == 'education'">
+                UPDATE music_group SET educational_teacher_id_ = #{item.transferUserId} WHERE educational_teacher_id_ = #{item.levelUserId} AND organ_id_ = #{item.organId};
+                UPDATE practice_group SET educational_teacher_id_ = #{item.transferUserId} WHERE educational_teacher_id_ = #{item.levelUserId} AND organ_id_ = #{item.organId};
+                UPDATE vip_group SET educational_teacher_id_ = #{item.transferUserId} WHERE educational_teacher_id_ = #{item.levelUserId} AND organ_id_ = #{item.organId}
+            </if>
+            <if test="employeeLevelDto.roleName == 'teamTeacher'">
+                UPDATE music_group SET team_teacher_id_ = #{item.transferUserId} WHERE team_teacher_id_ = #{item.levelUserId} AND organ_id_ = #{item.organId}
+            </if>
+            <if test="employeeLevelDto.roleName == 'director'">
+                UPDATE music_group SET director_user_id_ = #{item.transferUserId} WHERE director_user_id_ = #{item.levelUserId} AND organ_id_ = #{item.organId}
+            </if>
+        </foreach>
+    </update>
 </mapper>

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

@@ -175,7 +175,7 @@
 		WHERE
 			sees.monday_ = #{startDate}
 			AND sees.teacher_id_ = #{teacherId}
-			AND sees.actual_exercises_num_ = 0
+			AND sees.actual_exercises_num_ &lt; sees.exercises_reply_num_
 			AND sees.serve_type_ = 'EXERCISE'
 		<if test="search!=null">
 				AND (su.username_ LIKE CONCAT('%', #{search}, '%') OR su.phone_ LIKE CONCAT(#{search}, '%'))

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

@@ -722,9 +722,10 @@
     	select sr.*,s.name_ subject_name_,mg.status_ music_group_status_,mg.name_ music_group_name_,mgq.status_ music_group_quit_status_ 
     	from student_registration sr left join subject s on s.id_ = sr.actual_subject_id_
     	left join music_group mg on sr.music_group_id_ = mg.id_
-    	left join (select mgq.* from music_group_quit mgq LEFT JOIN student_registration sr ON mgq.music_group_id_ = sr.music_group_id_ AND mgq.user_id_ = sr.user_id_ AND mgq.join_date_ = sr.create_time_
-		 where mgq.id_ in (select max(id_) from music_group_quit group by music_group_id_,user_id_)) mgq  on mgq.music_group_id_ = mg.id_
-    	where sr.user_id_ = #{userId}
-    	order by sr.id_
+    	left join (select mgq.* from music_group_quit mgq 
+		 where mgq.id_ in (select max(id_) from music_group_quit group by music_group_id_,user_id_)) mgq  ON mgq.music_group_id_ = sr.music_group_id_ 
+		 AND mgq.user_id_ = sr.user_id_ AND mgq.join_date_ = sr.create_time_
+    	where sr.user_id_ = #{userId} 
+    	order by sr.id_ 
     </select>
 </mapper>

+ 8 - 0
mec-client-api/src/main/java/com/ym/mec/im/ImFeignService.java

@@ -56,6 +56,14 @@ public interface ImFeignService {
 	Object groupJoin(@RequestBody ImGroupModel groupModel);
 
 	/**
+	 * 批量加入群组
+	 * @param groupModels
+	 * @return
+	 */
+	@PostMapping(value = "group/batchJoin")
+	Object groupBatchJoin(@RequestBody List<ImGroupModel> groupModels);
+
+	/**
 	 * 退出群组
 	 * @param groupModel
 	 * @return

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/im/fallback/ImFeignServiceFallback.java

@@ -38,6 +38,11 @@ public class ImFeignServiceFallback implements ImFeignService {
     }
 
     @Override
+    public Object groupBatchJoin(List<ImGroupModel> groupModels) {
+        return null;
+    }
+
+    @Override
     public Object groupQuit(ImGroupModel groupModel) {
         return null;
     }

+ 5 - 0
mec-im/src/main/java/com/ym/controller/GroupController.java

@@ -90,6 +90,11 @@ public class GroupController{
         return groupService.groupJoin(groupModel);
     }
 
+    @RequestMapping(value = "/batchJoin", method = RequestMethod.POST)
+    public void batchJoin(@RequestBody List<GroupModel> groupModels) throws Exception {
+        groupService.groupBatchJoin(groupModels);
+    }
+
     @RequestMapping(value = "/quit", method = RequestMethod.POST)
     public Object quit(@RequestBody GroupModel groupModel) throws Exception {
         return groupService.groupQuit(groupModel);

+ 8 - 0
mec-im/src/main/java/com/ym/service/GroupService.java

@@ -74,4 +74,12 @@ public interface GroupService {
      * @param groupModels
      */
     void groupBatchQuit(List<GroupModel> groupModels);
+
+    /**
+     * 批量加入
+     * @param groupModels
+     * @return
+     * @throws Exception
+     */
+    void groupBatchJoin(List<GroupModel> groupModels) throws Exception;
 }

+ 16 - 0
mec-im/src/main/java/com/ym/service/Impl/GroupServiceImpl.java

@@ -190,4 +190,20 @@ public class GroupServiceImpl implements GroupService {
             });
         }
     }
+
+    @Override
+    public void groupBatchJoin(List<GroupModel> groupModels){
+        if(groupModels != null && groupModels.size() > 0){
+            Group group = getGroup();
+            GroupMember[] groupMember = {new GroupMember("1",null,null)};
+            groupModels.forEach(e->{
+                try {
+                    e.setMembers(groupMember);
+                    group.join(e);
+                } catch (Exception e1) {
+                    e1.printStackTrace();
+                }
+            });
+        }
+    }
 }

+ 1 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/JiguangPushPlugin.java

@@ -127,7 +127,7 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
 				base64_auth_string = encryptBASE64(this.teacherAppKey + ":" + this.teacherMasterSecret);
 				break;
 			default:
-				base64_auth_string = encryptBASE64(this.studentAppKey + ":" + this.studentMasterSecret);
+				base64_auth_string = encryptBASE64(this.systemAppKey + ":" + this.systemMasterSecret);
 				break;
 		}
 		String authorization = "Basic " + base64_auth_string;

+ 20 - 0
mec-web/src/main/java/com/ym/mec/web/controller/EmployeeController.java

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dto.EmployeeLevelDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.enums.EmployeeOperateEnum;
 import com.ym.mec.biz.dal.page.EmployeeQueryInfo;
@@ -211,4 +212,23 @@ public class EmployeeController extends BaseController {
         }
         return succeed(employeeService.findByRole("37",organIds));
     }
+
+    @ApiOperation(value = "获取所选用户离职所需交接信息")
+    @GetMapping("/levelDetail")
+    @PreAuthorize("@pcs.hasPermissions('employee/levelDetail')")
+    public HttpResponseResult levelDetail(Integer userId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(employeeService.levelDetail(userId));
+    }
+
+    @ApiOperation(value = "员工离职交接")
+    @GetMapping("/level")
+    @PreAuthorize("@pcs.hasPermissions('employee/level')")
+    public HttpResponseResult level(@RequestBody List<EmployeeLevelDto> employeeLevelDtos){
+        employeeService.level(employeeLevelDtos);
+        return succeed();
+    }
 }