liujc 2 years ago
parent
commit
5d655987f9
19 changed files with 522 additions and 301 deletions
  1. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupMemberDao.java
  2. 15 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImSendGroupMessage.java
  3. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/SchoolStaffMapper.java
  4. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/StudentWrapper.java
  5. 3 2
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java
  6. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImUserFriendService.java
  7. 19 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java
  8. 357 273
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java
  9. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolStaffServiceImpl.java
  10. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  11. 47 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  12. 4 0
      mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml
  13. 5 2
      mec-biz/src/main/resources/config/mybatis/ImSendGroupMessageMapper.xml
  14. 1 1
      mec-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml
  15. 14 0
      mec-biz/src/main/resources/config/mybatis/SchoolStaffMapper.xml
  16. 2 1
      mec-biz/src/main/resources/config/mybatis/StudentPlusMapper.xml
  17. 1 1
      mec-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  18. 3 1
      mec-web/src/main/java/com/ym/mec/web/controller/ImGroupController.java
  19. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/ImSendGroupMessageController.java

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

@@ -56,4 +56,6 @@ public interface ImGroupMemberDao extends BaseDAO<Long, ImGroupMember> {
      * @param userId    用户id
      * @param userId    用户id
      */
      */
     ImGroupMember queryOneByGroupIdAndNotUser(@Param("imGroupId") String imGroupId, @Param("userId") Long userId);
     ImGroupMember queryOneByGroupIdAndNotUser(@Param("imGroupId") String imGroupId, @Param("userId") Long userId);
+
+    List<ImGroupMember> getByGroupId(@Param("musicGroupId") String musicGroupId);
 }
 }

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

@@ -22,9 +22,14 @@ public class ImSendGroupMessage {
     private String extra;
     private String extra;
 
 
     @ApiModelProperty(value = "目标用户(群组)")
     @ApiModelProperty(value = "目标用户(群组)")
-    @NotNull(message = "目标用户(群组)不能为空")
+//    @NotNull(message = "目标用户(群组)不能为空")
     private String targetIds;
     private String targetIds;
 
 
+
+    @ApiModelProperty(value = "目标用户(个人)")
+//    @NotNull(message = "目标用户(群组)不能为空")
+    private String userTargetIds;
+
     @ApiModelProperty(value = "文件地址")
     @ApiModelProperty(value = "文件地址")
     private String fileUrl;
     private String fileUrl;
 
 
@@ -58,6 +63,15 @@ public class ImSendGroupMessage {
 
 
     private Date updateTime;
     private Date updateTime;
 
 
+
+    public String getUserTargetIds() {
+        return userTargetIds;
+    }
+
+    public void setUserTargetIds(String userTargetIds) {
+        this.userTargetIds = userTargetIds;
+    }
+
     public Integer getIsIncludeSender() {
     public Integer getIsIncludeSender() {
         return isIncludeSender;
         return isIncludeSender;
     }
     }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/SchoolStaffMapper.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
 import com.ym.mec.biz.dal.wrapper.StatGroupWrapper;
 import com.ym.mec.biz.dal.wrapper.StatGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Repository;
@@ -41,4 +42,6 @@ public interface SchoolStaffMapper extends BaseMapper<SchoolStaff> {
     void updateStatusAndRecoveryStatus(@Param("status") Boolean status, @Param("cooperationOrganId") Integer cooperationOrganId);
     void updateStatusAndRecoveryStatus(@Param("status") Boolean status, @Param("cooperationOrganId") Integer cooperationOrganId);
 
 
     void delUser(@Param("userId") Long userId);
     void delUser(@Param("userId") Long userId);
+
+    List<SchoolStaff> getByCoopIdAndType(@Param("cooperationOrganId") Integer cooperationOrganId, @Param("staffType") ESchoolStaffType staffType);
 }
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/StudentWrapper.java

@@ -123,6 +123,12 @@ public class StudentWrapper {
         @ApiModelProperty("学生头像")
         @ApiModelProperty("学生头像")
         private String studentAvatar;
         private String studentAvatar;
 
 
+        @ApiModelProperty("声部ID")
+        private Integer subjectId;
+
+        @ApiModelProperty("声部名称")
+        private String subjectName;
+
         @ApiModelProperty("是否vip")
         @ApiModelProperty("是否vip")
         private Boolean vipFlag;
         private Boolean vipFlag;
 
 

+ 3 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java

@@ -119,9 +119,10 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
      * 加群
      * 加群
      *
      *
      * @param musicGroupIds 群组ID
      * @param musicGroupIds 群组ID
-     * @param user 用户信息
+     * @param user          用户信息
+     * @param userType
      */
      */
-    void addImGroup(List<String> musicGroupIds, SysUser user);
+    void addImGroup(List<String> musicGroupIds, SysUser user, ESchoolStaffType userType);
 
 
     /**
     /**
      * 查询群组
      * 查询群组

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

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.entity.ImUserFriend;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.common.service.BaseService;
 import com.ym.mec.common.service.BaseService;
+import org.springframework.transaction.annotation.Transactional;
 
 
 public interface ImUserFriendService extends BaseService<Long, ImUserFriend> {
 public interface ImUserFriendService extends BaseService<Long, ImUserFriend> {
 
 
@@ -90,4 +91,7 @@ public interface ImUserFriendService extends BaseService<Long, ImUserFriend> {
      *
      *
      */
      */
     List<ImUserFriendDto> queryFriendListByUserId(ImGroupWrapper.ImQuery query);
     List<ImUserFriendDto> queryFriendListByUserId(ImGroupWrapper.ImQuery query);
+
+    @Transactional(rollbackFor = Exception.class)
+    void refreshSchoolStaffFriend(Integer coopId);
 }
 }

+ 19 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java

@@ -12,14 +12,12 @@ import com.ym.mec.biz.dal.dao.ImUserFriendDao;
 import com.ym.mec.biz.dal.dto.ImGroupDto;
 import com.ym.mec.biz.dal.dto.ImGroupDto;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
 import com.ym.mec.biz.dal.dto.NameDto;
 import com.ym.mec.biz.dal.dto.NameDto;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.entity.ImGroupMember;
 import com.ym.mec.biz.dal.entity.ImGroupMember;
 import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
 import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
-import com.ym.mec.biz.service.ImGroupMemberService;
-import com.ym.mec.biz.service.ImGroupService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.exception.BizException;
@@ -69,6 +67,9 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
     @Autowired
     @Autowired
     private ImPluginContext imPluginContext;
     private ImPluginContext imPluginContext;
 
 
+    @Autowired
+    private CooperationOrganService cooperationOrganService;
+
     @Override
     @Override
     public BaseDAO<String, ImGroup> getDAO() {
     public BaseDAO<String, ImGroup> getDAO() {
         return imGroupDao;
         return imGroupDao;
@@ -357,11 +358,13 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         // 注册主播用户信息到三方平台
         // 注册主播用户信息到三方平台
         imPluginService.register(userId.toString(), name, avatar);
         imPluginService.register(userId.toString(), name, avatar);
         if (Objects.isNull(imGroup)) {
         if (Objects.isNull(imGroup)) {
+            CooperationOrgan cooperationOrgan = cooperationOrganService.get(schoolId.intValue());
             imGroup = new ImGroup();
             imGroup = new ImGroup();
             imGroup.setSchoolId(schoolId);
             imGroup.setSchoolId(schoolId);
             imGroup.setId(IdWorker.getIdStr());
             imGroup.setId(IdWorker.getIdStr());
             imGroup.setName("教学团队衔接群");
             imGroup.setName("教学团队衔接群");
             imGroup.setIntroduce(imGroup.getName());
             imGroup.setIntroduce(imGroup.getName());
+            imGroup.setMemo(cooperationOrgan.getName());
             imGroup.setMemberNum(1);
             imGroup.setMemberNum(1);
             imGroup.setType(ImGroup.GroupTypeEnum.SCHOOL.getCode());
             imGroup.setType(ImGroup.GroupTypeEnum.SCHOOL.getCode());
             imGroup.setGroupType(ImGroup.GroupTypeEnum.SCHOOL);
             imGroup.setGroupType(ImGroup.GroupTypeEnum.SCHOOL);
@@ -373,7 +376,8 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         } else {
         } else {
 
 
             if (!schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER)) {
             if (!schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER)) {
-                imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), ImGroupMemberWrapper.ImGroupMember.builder().userId(userId.longValue()).build());
+                imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), ImGroupMemberWrapper.ImGroupMember.builder()
+                        .userId(userId.longValue()).imUserIdFormat(false).build());
             } else {
             } else {
                 groupChangeOwner(userId, imGroup.getId());
                 groupChangeOwner(userId, imGroup.getId());
             }
             }
@@ -413,10 +417,11 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
      *
      *
      * @param musicGroupIds 群组ID
      * @param musicGroupIds 群组ID
      * @param user          用户信息
      * @param user          用户信息
+     * @param userType
      */
      */
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public void addImGroup(List<String> musicGroupIds, SysUser user) {
+    public void addImGroup(List<String> musicGroupIds, SysUser user, ESchoolStaffType userType) {
         if (CollectionUtils.isEmpty(musicGroupIds)) {
         if (CollectionUtils.isEmpty(musicGroupIds)) {
             return;
             return;
         }
         }
@@ -438,6 +443,14 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             }
             }
             try {
             try {
                 imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), ImGroupMemberWrapper.ImGroupMember.builder().userId(user.getId().longValue()).build());
                 imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), ImGroupMemberWrapper.ImGroupMember.builder().userId(user.getId().longValue()).build());
+
+                ImGroupMember imGroupMember = new ImGroupMember();
+                imGroupMember.setImGroupId(imGroup.getId());
+                imGroupMember.setUserId(user.getId());
+                imGroupMember.setIsAdmin(false);
+                imGroupMember.setRoleType(userType.getDescribe());
+                imGroupMember.setTenantId(imGroup.getTenantId());
+                imGroupMemberDao.insert(imGroupMember);
             } catch (Exception e) {
             } catch (Exception e) {
                 log.error("加入群聊失败",e);
                 log.error("加入群聊失败",e);
             }
             }

+ 357 - 273
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java

@@ -1,19 +1,18 @@
 package com.ym.mec.biz.service.impl;
 package com.ym.mec.biz.service.impl;
 
 
 import java.util.*;
 import java.util.*;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
+import com.google.common.collect.Lists;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.ClassGroupStudentInfoDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
+import com.ym.mec.biz.dal.mapper.SchoolStaffMapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.TeacherService;
 import com.ym.mec.biz.service.TeacherService;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -31,178 +30,210 @@ import static com.ym.mec.biz.dal.enums.GroupType.*;
 @Service
 @Service
 public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend> implements ImUserFriendService {
 public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend> implements ImUserFriendService {
 
 
-	@Autowired
-	private ImUserFriendDao imUserFriendDao;
-	@Autowired
-	private TeacherService teacherService;
-	@Autowired
-	private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
-	@Autowired
-	private ClassGroupStudentMapperDao classGroupStudentMapperDao;
-	@Autowired
-	private MusicGroupDao musicGroupDao;
-	@Autowired
-	private VipGroupDao vipGroupDao;
-	@Autowired
-	private PracticeGroupDao practiceGroupDao;
-	@Autowired
-	private TeacherDao teacherDao;
-	@Autowired
-	private CourseScheduleDao courseScheduleDao;
-	@Autowired
-	private StudentRegistrationDao studentRegistrationDao;
-	@Autowired
-	private ClassGroupDao classGroupDao;
-	@Autowired
-	private RedisTemplate<String,String> redisTemplate;
-
-	@Override
-	public BaseDAO<Long, ImUserFriend> getDAO() {
-		return imUserFriendDao;
-	}
-
-	@Override
-	public boolean addFriend(Integer userId, Integer friendUserId, String nickname, String memo) {
-		// 检查是否已经是好友
-		ImUserFriend userFriend = imUserFriendDao.query(userId, friendUserId);
-		if (userFriend != null) {
-			throw new BizException("好友已存在");
-		}
-
-		Date date = new Date();
-
-		userFriend = new ImUserFriend();
-		userFriend.setFriendId(friendUserId);
-		userFriend.setUserId(friendUserId);
-		userFriend.setFriendNickname(nickname);
-		userFriend.setMemo(memo);
-		userFriend.setCreateTime(date);
-		userFriend.setUpdateTime(date);
-		imUserFriendDao.insert(userFriend);
-
-		return true;
-	}
-
-	@Override
-	public boolean deleteFriend(Integer userId, Integer friendUserId) {
-		ImUserFriend userFriend = imUserFriendDao.query(userId, friendUserId);
-		if (userFriend == null) {
-			throw new BizException("好友不存在");
-		}
-		imUserFriendDao.delete(userFriend.getId());
-		return true;
-	}
-
-	@Override
-	public boolean updateFriendNickname(Integer userId, Integer friendUserId, String nickname, String memo) {
-		ImUserFriend userFriend = imUserFriendDao.query(userId, friendUserId);
-		if (userFriend == null) {
-			throw new BizException("好友不存在");
-		}
-		Date date = new Date();
-		userFriend.setFriendNickname(nickname);
-		userFriend.setMemo(memo);
-		userFriend.setUpdateTime(date);
-		imUserFriendDao.update(userFriend);
-
-		return true;
-	}
-
-	@Override
-	public List<ImUserFriendDto> queryFriendListByUserId(Integer userId, String search) {
-		String syncImUserFriendKey = "syncImUserFriend:" + userId;
-		if(redisTemplate.hasKey(syncImUserFriendKey)){
-			return imUserFriendDao.queryFriendListByUserId(userId, search);
-		}else {
-			return teacherService.queryGroupStudents1(userId,null);
-		}
-	}
-
-	@Override
-	public ImUserFriendDto queryFriendDetail(Integer userId, Integer friendUserId) {
-		return imUserFriendDao.queryFriendDetail(userId, friendUserId);
-	}
-
-	@Override
-	public void batchInsert(List<ImUserFriend> imUserFriends) {
-		for (ImUserFriend imUserFriend : imUserFriends) {
-			if(imUserFriend.getUserId() == imUserFriend.getFriendId()){
-				continue;
-			}
-			// 检查是否已经是好友
-			ImUserFriend userFriend = imUserFriendDao.query(imUserFriend.getUserId(), imUserFriend.getFriendId());
-			if (userFriend != null) {
-				continue;
-			}
-			imUserFriendDao.insert(imUserFriend);
-		}
-	}
-
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void refreshCourseImUserFriend(Long courseId) {
-		CourseSchedule courseSchedule = courseScheduleDao.get(courseId);
-		//获取班级关联的老师列表
-		Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(courseSchedule.getClassGroupId(),null,null);
-		//获取班级关联的学员列表
-		Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(courseSchedule.getClassGroupId(),null,null);
-		ClassGroup classGroup = classGroupDao.get(courseSchedule.getClassGroupId());
-		if(classGroup == null){
-			return;
-		}
-		GroupType groupType = classGroup.getGroupType();
-		List<ImUserFriend> imUserFriends = saveImUserFriends(studentIds, teacherIds, groupType, classGroup.getMusicGroupId());
-		if(imUserFriends.size() > 0){
-			batchInsert(imUserFriends);
-		}
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void refreshClassImUserFriend(Integer classGroupId) {
-		//获取班级关联的老师列表
-		Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(classGroupId,null,null);
-		//获取班级关联的学员列表
-		Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(classGroupId,null,null);
-		ClassGroup classGroup = classGroupDao.get(classGroupId);
-		GroupType groupType = classGroup.getGroupType();
-		List<ImUserFriend> imUserFriends = saveImUserFriends(studentIds, teacherIds, groupType, classGroup.getMusicGroupId());
-		if(imUserFriends.size() > 0){
-			batchInsert(imUserFriends);
-		}
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void refreshGroupImUserFriend(String musicGroupId,GroupType groupType) {
+    @Autowired
+    private ImUserFriendDao imUserFriendDao;
+    @Autowired
+    private TeacherService teacherService;
+    @Autowired
+    private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
+    @Autowired
+    private ClassGroupStudentMapperDao classGroupStudentMapperDao;
+    @Autowired
+    private MusicGroupDao musicGroupDao;
+    @Autowired
+    private VipGroupDao vipGroupDao;
+    @Autowired
+    private PracticeGroupDao practiceGroupDao;
+    @Autowired
+    private TeacherDao teacherDao;
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
+    @Autowired
+    private StudentRegistrationDao studentRegistrationDao;
+    @Autowired
+    private ClassGroupDao classGroupDao;
+    @Autowired
+    private RedisTemplate<String,String> redisTemplate;
+
+    @Autowired
+    private SchoolStaffMapper schoolStaffMapper;
+
+    @Autowired
+    private ImGroupMemberDao imGroupMemberDao;
+
+    @Override
+    public BaseDAO<Long, ImUserFriend> getDAO() {
+        return imUserFriendDao;
+    }
+
+    @Override
+    public boolean addFriend(Integer userId, Integer friendUserId, String nickname, String memo) {
+        // 检查是否已经是好友
+        ImUserFriend userFriend = imUserFriendDao.query(userId, friendUserId);
+        if (userFriend != null) {
+            throw new BizException("好友已存在");
+        }
+
+        Date date = new Date();
+
+        userFriend = new ImUserFriend();
+        userFriend.setFriendId(friendUserId);
+        userFriend.setUserId(friendUserId);
+        userFriend.setFriendNickname(nickname);
+        userFriend.setMemo(memo);
+        userFriend.setCreateTime(date);
+        userFriend.setUpdateTime(date);
+        imUserFriendDao.insert(userFriend);
+
+        return true;
+    }
+
+    @Override
+    public boolean deleteFriend(Integer userId, Integer friendUserId) {
+        ImUserFriend userFriend = imUserFriendDao.query(userId, friendUserId);
+        if (userFriend == null) {
+            throw new BizException("好友不存在");
+        }
+        imUserFriendDao.delete(userFriend.getId());
+        return true;
+    }
+
+    @Override
+    public boolean updateFriendNickname(Integer userId, Integer friendUserId, String nickname, String memo) {
+        ImUserFriend userFriend = imUserFriendDao.query(userId, friendUserId);
+        if (userFriend == null) {
+            throw new BizException("好友不存在");
+        }
+        Date date = new Date();
+        userFriend.setFriendNickname(nickname);
+        userFriend.setMemo(memo);
+        userFriend.setUpdateTime(date);
+        imUserFriendDao.update(userFriend);
+
+        return true;
+    }
+
+    @Override
+    public List<ImUserFriendDto> queryFriendListByUserId(Integer userId, String search) {
+        String syncImUserFriendKey = "syncImUserFriend:" + userId;
+        if(redisTemplate.hasKey(syncImUserFriendKey)){
+            return imUserFriendDao.queryFriendListByUserId(userId, search);
+        }else {
+            return teacherService.queryGroupStudents1(userId,null);
+        }
+    }
+
+    @Override
+    public ImUserFriendDto queryFriendDetail(Integer userId, Integer friendUserId) {
+        return imUserFriendDao.queryFriendDetail(userId, friendUserId);
+    }
+
+    @Override
+    public void batchInsert(List<ImUserFriend> imUserFriends) {
+        for (ImUserFriend imUserFriend : imUserFriends) {
+            if(imUserFriend.getUserId() == imUserFriend.getFriendId()){
+                continue;
+            }
+            // 检查是否已经是好友
+            ImUserFriend userFriend = imUserFriendDao.query(imUserFriend.getUserId(), imUserFriend.getFriendId());
+            if (userFriend != null) {
+                continue;
+            }
+            imUserFriendDao.insert(imUserFriend);
+        }
+    }
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void refreshCourseImUserFriend(Long courseId) {
+        CourseSchedule courseSchedule = courseScheduleDao.get(courseId);
+        //获取班级关联的老师列表
+        Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(courseSchedule.getClassGroupId(),null,null);
+        //获取班级关联的学员列表
+        Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(courseSchedule.getClassGroupId(),null,null);
+        ClassGroup classGroup = classGroupDao.get(courseSchedule.getClassGroupId());
+        if(classGroup == null){
+            return;
+        }
+        GroupType groupType = classGroup.getGroupType();
+        List<ImUserFriend> imUserFriends = saveImUserFriends(studentIds, teacherIds, groupType, classGroup.getMusicGroupId());
+        if(imUserFriends.size() > 0){
+            batchInsert(imUserFriends);
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void refreshClassImUserFriend(Integer classGroupId) {
+        //获取班级关联的老师列表
+        Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(classGroupId,null,null);
+        //获取班级关联的学员列表
+        Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(classGroupId,null,null);
+        ClassGroup classGroup = classGroupDao.get(classGroupId);
+        GroupType groupType = classGroup.getGroupType();
+        List<ImUserFriend> imUserFriends = saveImUserFriends(studentIds, teacherIds, groupType, classGroup.getMusicGroupId());
+        if(imUserFriends.size() > 0){
+            batchInsert(imUserFriends);
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void refreshGroupImUserFriend(String musicGroupId,GroupType groupType) {
 //		ExecutorService executor = Executors.newCachedThreadPool();
 //		ExecutorService executor = Executors.newCachedThreadPool();
 //		CompletableFuture.runAsync(()->{
 //		CompletableFuture.runAsync(()->{
-			List<ClassGroup> classGroups = classGroupDao.queryClassGroups(musicGroupId, groupType.getCode());
-			List<ImUserFriend> imUserFriends = new ArrayList<>();
-			classGroups.forEach(e->{
-				//获取班级关联的老师列表
-				Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(e.getId(),null,null);
-				//获取班级关联的学员列表
-				Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(e.getId(),null,null);
-				imUserFriends.addAll(saveImUserFriends(studentIds,teacherIds,groupType,musicGroupId));
-			});
-			if(imUserFriends.size() > 0){
-				batchInsert(imUserFriends);
-			}
-			//更新用户朋友昵称是空的历史数据(线上没有发现这种问题)
-			imUserFriendDao.updateNullNickName();
+        List<ClassGroup> classGroups = classGroupDao.queryClassGroups(musicGroupId, groupType==null?null:groupType.getCode());
+        List<ImUserFriend> imUserFriends = new ArrayList<>();
+        classGroups.forEach(e->{
+            //获取班级关联的老师列表
+            Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(e.getId(),null,null);
+            //获取班级关联的学员列表
+            Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(e.getId(),null,null);
+            imUserFriends.addAll(saveImUserFriends(studentIds,teacherIds,groupType,musicGroupId));
+        });
+
+
+        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+        // 更新学校端乐团主管的群好友列表
+        if (musicGroup.getCooperationOrganId() != null) {
+            // 获取乐团主管
+            List<SchoolStaff> schoolStaffs = schoolStaffMapper.getByCoopIdAndType(musicGroup.getCooperationOrganId(), ESchoolStaffType.ORCHESTRA_LEADER);
+
+            if (CollectionUtils.isNotEmpty(schoolStaffs)) {
+                SchoolStaff schoolStaff = schoolStaffs.get(0);
+                // 获取乐团群的人员列表
+                List<ImGroupMember> memberList = imGroupMemberDao.getByGroupId(musicGroupId);
+                if (CollectionUtils.isNotEmpty(memberList)) {
+                    Long staffUserId = schoolStaff.getUserId();
+
+                    Set<Integer> userIds = memberList.stream().map(o -> o.getUserId())
+                            .collect(Collectors.toSet());
+                    userFriends(imUserFriends, musicGroup.getName(), staffUserId, userIds);
+                }
+            }
+
+        }
+        // 更新学校端好友列表
+        if (musicGroup.getCooperationOrganId() != null) {
+            imUserFriends.addAll(schoolStaffFriend(musicGroup.getCooperationOrganId()));
+        }
+
+
+        if(imUserFriends.size() > 0){
+            batchInsert(imUserFriends);
+        }
+        //更新用户朋友昵称是空的历史数据(线上没有发现这种问题)
+        imUserFriendDao.updateNullNickName();
 //		},executor);
 //		},executor);
 //		executor.shutdown();
 //		executor.shutdown();
-	}
+    }
 
 
     @Override
     @Override
     public List<ImUserFriendDto> queryFriendListByUserIdV2(Integer userId, String search, String musicGroupId, Integer subjectId, Boolean vipFlag) {
     public List<ImUserFriendDto> queryFriendListByUserIdV2(Integer userId, String search, String musicGroupId, Integer subjectId, Boolean vipFlag) {
         // 逻辑过于复杂 拿出数据后筛选
         // 逻辑过于复杂 拿出数据后筛选
         return imUserFriendDao.queryFriendListByUserIdV2(userId, search,musicGroupId,subjectId,vipFlag);
         return imUserFriendDao.queryFriendListByUserIdV2(userId, search,musicGroupId,subjectId,vipFlag);
 
 
-
-
     }
     }
 
 
 
 
@@ -221,110 +252,163 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
     }
     }
 
 
     public List<ImUserFriend> saveImUserFriends(Set<Integer> studentIds,Set<Integer> teacherIds,GroupType groupType,String musicGroupId){
     public List<ImUserFriend> saveImUserFriends(Set<Integer> studentIds,Set<Integer> teacherIds,GroupType groupType,String musicGroupId){
-		List<ImUserFriend> imUserFriends = new ArrayList<>();
-		Set<Integer> educationIds = new HashSet<>();
-		Integer repairUserId = null;
-		String repairUserName = null;
-		MusicGroup musicGroup = new MusicGroup();
-		//获取当前学员声部
-		Map<Integer,String> studentSubjectName = new HashMap<>();
-		Map<Integer, String> teacherSubjectNameMap = new HashMap<>();
-		if(teacherIds.size() > 0){
-			teacherSubjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(teacherIds)));
-		}
-		if(groupType == MUSIC){
-			//学员关联乐团管理人员通讯录
-			musicGroup = musicGroupDao.get(musicGroupId);
-			educationIds.add(musicGroup.getDirectorUserId());
-			educationIds.add(musicGroup.getEducationalTeacherId());
-			educationIds.add(musicGroup.getTeamTeacherId());
-			if(musicGroup.getRepairUserId() != null){
-				repairUserId = musicGroup.getRepairUserId();
-				repairUserName = teacherDao.queryNameById(repairUserId);
-			}
-			if(studentIds.size() > 0){
-				studentSubjectName = MapUtil.convertMybatisMap(studentRegistrationDao.getStudentSubjectNameByStuIds(musicGroup.getId(),studentIds));
-			}
-		}else if(groupType == VIP){
-			VipGroup vipGroup = vipGroupDao.get(Long.parseLong(musicGroupId));
-			educationIds.add(vipGroup.getEducationalTeacherId());
-		}else if(groupType == PRACTICE){
-			PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(musicGroupId));
-			educationIds.add(practiceGroup.getEducationalTeacherId());
-		}
-		studentIds.removeAll(Collections.singleton(null));
-		teacherIds.removeAll(Collections.singleton(null));
-		educationIds.removeAll(Collections.singleton(null));
-		Map<Integer, String> usernameMap = new HashMap<>();
-		if(studentIds.size() > 0){
-			usernameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(studentIds)));
-		}
-		Map<Integer, String> teacherRealNameMap = new HashMap<>();
-		if(teacherIds.size() > 0){
-			teacherRealNameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(teacherIds)));
-		}
-		Map<Integer, String> educationRealNameMap = new HashMap<>();
-		if(educationIds.size() > 0){
-			educationRealNameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(educationIds)));
-		}
-		//老师关联教务、学员
-		for (Integer teacherId : teacherIds) {
-			//老师关联学员
-			this.addImUserFriend(studentIds,studentSubjectName,usernameMap,musicGroup.getName(),teacherId,imUserFriends);
-			//老师关联教务
-			this.addImUserFriend(educationIds,null,educationRealNameMap,null,teacherId,imUserFriends);
-		}
-		//教务关联的老师、学员
-		for (Integer educationId : educationIds) {
-			//教务关联学员
-			this.addImUserFriend(studentIds,studentSubjectName,usernameMap,musicGroup.getName(),educationId,imUserFriends);
-			//教务关联老师
-			this.addImUserFriend(teacherIds,teacherSubjectNameMap,teacherRealNameMap,musicGroup.getName(),educationId,imUserFriends);
-		}
-		//学员关联的老师、教务、维修技师
-		for (Integer studentId : studentIds) {
-			//学员关联的老师
-			this.addImUserFriend(teacherIds,teacherSubjectNameMap,teacherRealNameMap,musicGroup.getName(),studentId,imUserFriends);
-			//学员关联的教务
-			this.addImUserFriend(educationIds,null,educationRealNameMap,null,studentId,imUserFriends);
-			//学员关联维修技师
-			if(repairUserId != null){
-				if(repairUserId == studentId){
-					continue;
-				}
-				ImUserFriend imUserFriend = new ImUserFriend();
-				imUserFriend.setUserId(studentId);
-				imUserFriend.setFriendId(repairUserId);
-				imUserFriend.setFriendNickname(repairUserName);
-				imUserFriend.setMemo(musicGroup.getName());
-				imUserFriend.setTags("维修技师");
-				imUserFriends.add(imUserFriend);
-			}
-		}
-		//维修技师关联学员
-		if(repairUserId != null){
-			this.addImUserFriend(studentIds,studentSubjectName,usernameMap,musicGroup.getName(),repairUserId,imUserFriends);
-		}
-		return imUserFriends;
-	}
-
-	public void addImUserFriend(Set<Integer> friendUserIds,Map<Integer,String> tagsMap,
-								Map<Integer,String> nameMap,String memo,Integer userId,List<ImUserFriend> imUserFriends){
-		if(friendUserIds != null && friendUserIds.size() > 0){
-			for (Integer friendId : friendUserIds) {
-				if(userId == friendId){
-					continue;
-				}
-				ImUserFriend imUserFriend = new ImUserFriend();
-				imUserFriend.setUserId(userId);
-				imUserFriend.setFriendId(friendId);
-				imUserFriend.setFriendNickname(nameMap.get(friendId));
-				imUserFriend.setMemo(memo);
-				if(tagsMap != null){
-					imUserFriend.setTags(tagsMap.get(friendId));
-				}
-				imUserFriends.add(imUserFriend);
-			}
-		}
-	}
+        List<ImUserFriend> imUserFriends = new ArrayList<>();
+        Set<Integer> educationIds = new HashSet<>();
+        Integer repairUserId = null;
+        String repairUserName = null;
+        MusicGroup musicGroup = new MusicGroup();
+        //获取当前学员声部
+        Map<Integer,String> studentSubjectName = new HashMap<>();
+        Map<Integer, String> teacherSubjectNameMap = new HashMap<>();
+        if(teacherIds.size() > 0){
+            teacherSubjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(teacherIds)));
+        }
+        if(groupType == MUSIC){
+            //学员关联乐团管理人员通讯录
+            musicGroup = musicGroupDao.get(musicGroupId);
+            educationIds.add(musicGroup.getDirectorUserId());
+            educationIds.add(musicGroup.getEducationalTeacherId());
+            educationIds.add(musicGroup.getTeamTeacherId());
+            if(musicGroup.getRepairUserId() != null){
+                repairUserId = musicGroup.getRepairUserId();
+                repairUserName = teacherDao.queryNameById(repairUserId);
+            }
+            if(studentIds.size() > 0){
+                studentSubjectName = MapUtil.convertMybatisMap(studentRegistrationDao.getStudentSubjectNameByStuIds(musicGroup.getId(),studentIds));
+            }
+        }else if(groupType == VIP){
+            VipGroup vipGroup = vipGroupDao.get(Long.parseLong(musicGroupId));
+            educationIds.add(vipGroup.getEducationalTeacherId());
+        }else if(groupType == PRACTICE){
+            PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(musicGroupId));
+            educationIds.add(practiceGroup.getEducationalTeacherId());
+        }
+        studentIds.removeAll(Collections.singleton(null));
+        teacherIds.removeAll(Collections.singleton(null));
+        educationIds.removeAll(Collections.singleton(null));
+        Map<Integer, String> usernameMap = new HashMap<>();
+        if(studentIds.size() > 0){
+            usernameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(studentIds)));
+        }
+        Map<Integer, String> teacherRealNameMap = new HashMap<>();
+        if(teacherIds.size() > 0){
+            teacherRealNameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(teacherIds)));
+        }
+        Map<Integer, String> educationRealNameMap = new HashMap<>();
+        if(educationIds.size() > 0){
+            educationRealNameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(educationIds)));
+        }
+        //老师关联教务、学员
+        for (Integer teacherId : teacherIds) {
+            //老师关联学员
+            this.addImUserFriend(studentIds,studentSubjectName,usernameMap,musicGroup.getName(),teacherId,imUserFriends);
+            //老师关联教务
+            this.addImUserFriend(educationIds,null,educationRealNameMap,null,teacherId,imUserFriends);
+        }
+        //教务关联的老师、学员
+        for (Integer educationId : educationIds) {
+            //教务关联学员
+            this.addImUserFriend(studentIds,studentSubjectName,usernameMap,musicGroup.getName(),educationId,imUserFriends);
+            //教务关联老师
+            this.addImUserFriend(teacherIds,teacherSubjectNameMap,teacherRealNameMap,musicGroup.getName(),educationId,imUserFriends);
+        }
+        //学员关联的老师、教务、维修技师
+        for (Integer studentId : studentIds) {
+            //学员关联的老师
+            this.addImUserFriend(teacherIds,teacherSubjectNameMap,teacherRealNameMap,musicGroup.getName(),studentId,imUserFriends);
+            //学员关联的教务
+            this.addImUserFriend(educationIds,null,educationRealNameMap,null,studentId,imUserFriends);
+            //学员关联维修技师
+            if(repairUserId != null){
+                if(repairUserId == studentId){
+                    continue;
+                }
+                ImUserFriend imUserFriend = new ImUserFriend();
+                imUserFriend.setUserId(studentId);
+                imUserFriend.setFriendId(repairUserId);
+                imUserFriend.setFriendNickname(repairUserName);
+                imUserFriend.setMemo(musicGroup.getName());
+                imUserFriend.setTags("维修技师");
+                imUserFriends.add(imUserFriend);
+            }
+        }
+        //维修技师关联学员
+        if(repairUserId != null){
+            this.addImUserFriend(studentIds,studentSubjectName,usernameMap,musicGroup.getName(),repairUserId,imUserFriends);
+        }
+
+        return imUserFriends;
+    }
+
+    private List<ImUserFriend> schoolStaffFriend(Integer coopId) {
+        List<ImUserFriend> imUserFriends = new ArrayList<>();
+        Map<Integer, String> usernameMap;
+        // 获取乐团主管
+        List<SchoolStaff> schoolStaffs = schoolStaffMapper.getByCoopIdAndType(coopId,null);
+
+        if (CollectionUtils.isNotEmpty(schoolStaffs)) {
+
+            Set<Integer> userIds = schoolStaffs.stream().map(o -> o.getUserId().intValue())
+                    .collect(Collectors.toSet());
+            usernameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(userIds)));
+
+            // 设置好友关系
+            for (Integer userId : userIds) {
+                this.addImUserFriend(userIds, null, usernameMap, null, userId, imUserFriends);
+            }
+        }
+        return imUserFriends;
+    }
+
+    /**
+     * 刷新学校端好友列表
+     *
+     * @param coopId 合作商id
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void refreshSchoolStaffFriend(Integer coopId) {
+        List<ImUserFriend> imUserFriends = schoolStaffFriend(coopId);
+
+        if(imUserFriends.size() > 0){
+            batchInsert(imUserFriends);
+        }
+    }
+
+
+    private void userFriends(List<ImUserFriend> imUserFriends, String musicGroupName, Long userId, Set<Integer> userIds) {
+        Map<Integer, String> usernameMap;
+        if (CollectionUtils.isNotEmpty(userIds)) {
+            usernameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(userIds)));
+
+            // 设置好友关系
+            this.addImUserFriend(userIds,null,usernameMap, musicGroupName, userId.intValue(), imUserFriends);
+
+            for (Integer user : userIds) {
+                // 设置好友关系
+                this.addImUserFriend(new HashSet<>(Lists.newArrayList(
+                        userId.intValue())),null,usernameMap, musicGroupName,user, imUserFriends);
+            }
+        }
+    }
+
+    public void addImUserFriend(Set<Integer> friendUserIds,Map<Integer,String> tagsMap,
+                                Map<Integer,String> nameMap,String memo,Integer userId,List<ImUserFriend> imUserFriends){
+        if(friendUserIds != null && friendUserIds.size() > 0){
+            for (Integer friendId : friendUserIds) {
+                if(userId == friendId){
+                    continue;
+                }
+                ImUserFriend imUserFriend = new ImUserFriend();
+                imUserFriend.setUserId(userId);
+                imUserFriend.setFriendId(friendId);
+                imUserFriend.setFriendNickname(nameMap.get(friendId));
+                imUserFriend.setMemo(memo);
+                if(tagsMap != null){
+                    imUserFriend.setTags(tagsMap.get(friendId));
+                }
+                imUserFriends.add(imUserFriend);
+            }
+        }
+    }
 }
 }

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

@@ -80,6 +80,9 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
     @Autowired
     @Autowired
     private ImGroupService imGroupService;
     private ImGroupService imGroupService;
 
 
+    @Autowired
+    private ImUserFriendService imUserFriendService;
+
     /**
     /**
      * 查询详情
      * 查询详情
      * @param id 详情ID
      * @param id 详情ID
@@ -223,9 +226,16 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
         // 乐团领队添加到所有乐团群
         // 乐团领队添加到所有乐团群
         List<MusicGroup> musicGroups = cooperationOrganService.musicGroupPage(schoolStaff.getSchoolId().intValue());
         List<MusicGroup> musicGroups = cooperationOrganService.musicGroupPage(schoolStaff.getSchoolId().intValue());
 
 
+        // 创建学校im好友
+        imUserFriendService.refreshSchoolStaffFriend(schoolStaff.getSchoolId().intValue());
+        // 创建乐团im好友
+        for (MusicGroup musicGroup : musicGroups) {
+            imUserFriendService.refreshGroupImUserFriend(musicGroup.getId(),null);
+        }
+
         // id 集合
         // id 集合
         List<String> musicGroupIds = musicGroups.stream().map(o -> o.getId()).collect(Collectors.toList());
         List<String> musicGroupIds = musicGroups.stream().map(o -> o.getId()).collect(Collectors.toList());
-        imGroupService.addImGroup(musicGroupIds,user);
+        imGroupService.addImGroup(musicGroupIds,user,schoolStaff.getUserType());
 
 
 
 
         // 删除缓存锁
         // 删除缓存锁

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

@@ -109,6 +109,10 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Autowired
     @Autowired
     private MusicGroupQuitDao musicGroupQuitDao;
     private MusicGroupQuitDao musicGroupQuitDao;
 
 
+    @Autowired
+    private SubjectService subjectService;
+
+
     @Override
     @Override
     public BaseDAO<Integer, Student> getDAO() {
     public BaseDAO<Integer, Student> getDAO() {
         return studentDao;
         return studentDao;
@@ -1344,13 +1348,25 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 
 
         Map<Integer, Student> studentMap = getMapByIds(studentIds);
         Map<Integer, Student> studentMap = getMapByIds(studentIds);
 
 
+        // 设置学生声部
+
+        // 声部ID集合
+        List<Integer> subjectIds = studentLists.stream().map(StudentWrapper.StudentList::getSubjectId).collect(Collectors.toList());
+
+        Map<Integer, Subject> subjectMap = subjectService.getMapByIds(subjectIds);
+
         studentLists.forEach(studentList -> {
         studentLists.forEach(studentList -> {
             Student student = studentMap.get(studentList.getStudentId());
             Student student = studentMap.get(studentList.getStudentId());
             if (student != null) {
             if (student != null) {
                 studentList.setStudentName(student.getUsername());
                 studentList.setStudentName(student.getUsername());
                 studentList.setStudentAvatar(student.getAvatar());
                 studentList.setStudentAvatar(student.getAvatar());
             }
             }
+            Subject subject = subjectMap.get(studentList.getSubjectId());
+            if (subject != null) {
+                studentList.setSubjectName(subject.getName());
+            }
         });
         });
+
         // 时间为本学期
         // 时间为本学期
         String startTerm = DateUtil.getStartTerm(new Date());
         String startTerm = DateUtil.getStartTerm(new Date());
         String endTerm = DateUtil.getEndTerm(new Date());
         String endTerm = DateUtil.getEndTerm(new Date());

+ 47 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java

@@ -263,8 +263,15 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	@Override
 	@Override
 	public void batchSendImGroupTxtMessage(ImSendGroupMessage messageDto) {
 	public void batchSendImGroupTxtMessage(ImSendGroupMessage messageDto) {
 		messageDto.setObjectName("RC:TxtMsg");
 		messageDto.setObjectName("RC:TxtMsg");
-		ImMessageDto imGroupMessage = this.getImGroupMessage(messageDto);
-		this.sendGroupMessage(imGroupMessage);
+        if (StringUtils.isNotBlank(messageDto.getTargetIds())) {
+            ImMessageDto imGroupMessage = this.getImGroupMessage(messageDto);
+            this.sendGroupMessage(imGroupMessage);
+        }
+        if (StringUtils.isNotBlank(messageDto.getUserTargetIds())) {
+            messageDto.setTargetIds(messageDto.getUserTargetIds());
+            ImMessageDto imGroupMessage = this.getImGroupMessage(messageDto);
+            this.sendImMessage(imGroupMessage);
+        }
 	}
 	}
 
 
 	@Override
 	@Override
@@ -300,10 +307,19 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 			throw new BizException("文件过大请调整 像素 或 文件大小");
 			throw new BizException("文件过大请调整 像素 或 文件大小");
 		}
 		}
 		messageDto.setObjectName("RC:ImgMsg");
 		messageDto.setObjectName("RC:ImgMsg");
-		ImMessageDto imMessageDto = this.getImGroupMessage(messageDto);
-		imMessageDto.setMessageContent(imageToBase64(bufferedImage, "png"));
-		imMessageDto.setFileUrl(messageDto.getFileUrl());
-		this.sendGroupMessage(imMessageDto);
+        if (StringUtils.isNotBlank(messageDto.getTargetIds())) {
+            ImMessageDto imMessageDto = this.getImGroupMessage(messageDto);
+            imMessageDto.setMessageContent(imageToBase64(bufferedImage, "png"));
+            imMessageDto.setFileUrl(messageDto.getFileUrl());
+            this.sendGroupMessage(imMessageDto);
+        }
+        if (StringUtils.isNotBlank(messageDto.getUserTargetIds())) {
+            messageDto.setTargetIds(messageDto.getUserTargetIds());
+            ImMessageDto imMessageDto = this.getImGroupMessage(messageDto);
+            imMessageDto.setMessageContent(imageToBase64(bufferedImage, "png"));
+            imMessageDto.setFileUrl(messageDto.getFileUrl());
+            this.sendImMessage(imMessageDto);
+        }
 	}
 	}
 
 
 	public void sendGroupMessage(ImMessageDto imMessageDto){
 	public void sendGroupMessage(ImMessageDto imMessageDto){
@@ -313,15 +329,34 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		},executor);
 		},executor);
 	}
 	}
 
 
+
+    public void sendImMessage(ImMessageDto imMessageDto){
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            imFeignService.privateSend(imMessageDto);
+        },executor);
+    }
+
 	@Override
 	@Override
 	public void batchSendImGroupFileMessage(ImSendGroupMessage messageDto) {
 	public void batchSendImGroupFileMessage(ImSendGroupMessage messageDto) {
 		messageDto.setObjectName("RC:FileMsg");
 		messageDto.setObjectName("RC:FileMsg");
-		ImMessageDto imMessageDto = this.getImGroupMessage(messageDto);
-		imMessageDto.setMessageContent("");
-		imMessageDto.setFileUrl(messageDto.getFileUrl());
-		imMessageDto.setFileSize(messageDto.getFileSize());
-		imMessageDto.setFileName(messageDto.getFileName());
-		this.sendGroupMessage(imMessageDto);
+        if (StringUtils.isNotBlank(messageDto.getTargetIds())) {
+            ImMessageDto imMessageDto = this.getImGroupMessage(messageDto);
+            imMessageDto.setMessageContent("");
+            imMessageDto.setFileUrl(messageDto.getFileUrl());
+            imMessageDto.setFileSize(messageDto.getFileSize());
+            imMessageDto.setFileName(messageDto.getFileName());
+            this.sendGroupMessage(imMessageDto);
+        }
+        if (StringUtils.isNotBlank(messageDto.getUserTargetIds())) {
+            messageDto.setTargetIds(messageDto.getUserTargetIds());
+            ImMessageDto imMessageDto = this.getImGroupMessage(messageDto);
+            imMessageDto.setMessageContent("");
+            imMessageDto.setFileUrl(messageDto.getFileUrl());
+            imMessageDto.setFileSize(messageDto.getFileSize());
+            imMessageDto.setFileName(messageDto.getFileName());
+            this.sendImMessage(imMessageDto);
+        }
 	}
 	}
 
 
 	private String checkMessageConfig(MessageTypeEnum type){
 	private String checkMessageConfig(MessageTypeEnum type){

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

@@ -194,4 +194,8 @@
 	<select id="queryOneByGroupIdAndNotUser" resultMap="ImGroupMember">
 	<select id="queryOneByGroupIdAndNotUser" resultMap="ImGroupMember">
         SELECT * FROM im_group_member WHERE im_group_id_ = #{imGroupId} AND user_id_ != #{userId} LIMIT 1
         SELECT * FROM im_group_member WHERE im_group_id_ = #{imGroupId} AND user_id_ != #{userId} LIMIT 1
     </select>
     </select>
+
+	<select id="getByGroupId" resultMap="ImGroupMember">
+        SELECT * FROM im_group_member WHERE im_group_id_ = #{musicGroupId}
+    </select>
 </mapper>
 </mapper>

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

@@ -39,9 +39,9 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImSendGroupMessage" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImSendGroupMessage" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO im_send_group_message (message_content_,sender_id_,extra,target_ids_,file_url_,file_name_,
 		INSERT INTO im_send_group_message (message_content_,sender_id_,extra,target_ids_,file_url_,file_name_,
 		                                   file_size_,message_type_,send_flag_,send_time_,
 		                                   file_size_,message_type_,send_flag_,send_time_,
-		                                   create_time_,update_time_,operator_,send_type_,is_include_sender_)
+		                                   create_time_,update_time_,operator_,send_type_,is_include_sender_,user_target_ids_)
 		VALUES(#{messageContent},#{senderId},#{extra},#{targetIds},#{fileUrl},#{fileName},#{fileSize},
 		VALUES(#{messageContent},#{senderId},#{extra},#{targetIds},#{fileUrl},#{fileName},#{fileSize},
-		       #{messageType},#{sendFlag},#{sendTime},NOW(),NOW(),#{operator},#{sendType},#{isIncludeSender})
+		       #{messageType},#{sendFlag},#{sendTime},NOW(),NOW(),#{operator},#{sendType},#{isIncludeSender},#{userTargetIds})
 	</insert>
 	</insert>
 	
 	
 	<!-- 根据主键查询一条记录 -->
 	<!-- 根据主键查询一条记录 -->
@@ -71,6 +71,9 @@
 			<if test="targetIds != null">
 			<if test="targetIds != null">
 			target_ids_ = #{targetIds},
 			target_ids_ = #{targetIds},
 			</if>
 			</if>
+        <if test="userTargetIds != null">
+            user_target_ids_ = #{userTargetIds},
+        </if>
 			<if test="fileName != null">
 			<if test="fileName != null">
 			file_name_ = #{fileName},
 			file_name_ = #{fileName},
 			</if>
 			</if>

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

@@ -173,7 +173,7 @@
         LEFT JOIN sys_user u ON iuf.friend_id_ = u.id_
         LEFT JOIN sys_user u ON iuf.friend_id_ = u.id_
         <if test="param.musicGroupId != null and param.musicGroupId != '' or param.roleType != null and param.roleType == 'STUDENT'">
         <if test="param.musicGroupId != null and param.musicGroupId != '' or param.roleType != null and param.roleType == 'STUDENT'">
             LEFT JOIN student st ON st.user_id_ = u.id_
             LEFT JOIN student st ON st.user_id_ = u.id_
-            left join class_group_student_mapper cgs on cgs.user_id_ = st.user_id_
+            left join student_registration cgs on cgs.user_id_ = st.user_id_
             LEFT JOIN `subject` s ON s.id_ = st.subject_id_list_
             LEFT JOIN `subject` s ON s.id_ = st.subject_id_list_
         </if>
         </if>
         <if test="param.roleType != null and param.roleType != ''">
         <if test="param.roleType != null and param.roleType != ''">

+ 14 - 0
mec-biz/src/main/resources/config/mybatis/SchoolStaffMapper.xml

@@ -70,6 +70,20 @@
     <delete id="delUser">
     <delete id="delUser">
         update sys_user set user_type_ = '' ,del_flag_ = 1 where id_ = #{userId}
         update sys_user set user_type_ = '' ,del_flag_ = 1 where id_ = #{userId}
     </delete>
     </delete>
+
+    <select id="getByCoopIdAndType" resultType="com.ym.mec.biz.dal.entity.SchoolStaff">
+        select * from school_staff
+        <where>
+            <if test="cooperationOrganId != null">
+                school_id_ = #{cooperationOrganId}
+            </if>
+            <if test="staffType != null">
+                and user_type_ = #{staffType}
+            </if>
+            and status_ != -1
+        </where>
+
+    </select>
     <!--学校员工身份数统计-->
     <!--学校员工身份数统计-->
 
 
 </mapper>
 </mapper>

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

@@ -6,6 +6,7 @@
         select
         select
         distinct s.user_id_ as studentId
         distinct s.user_id_ as studentId
         ,if(s.member_rank_setting_id_ is not null, true, false) as vipFlag,
         ,if(s.member_rank_setting_id_ is not null, true, false) as vipFlag,
+        s.subject_id_list_ as subjectId,
         group_concat(sr.music_group_id_) as musicGroupIds
         group_concat(sr.music_group_id_) as musicGroupIds
         from student s
         from student s
 
 
@@ -40,7 +41,7 @@
                 </if>
                 </if>
             </if>
             </if>
         </where>
         </where>
-        group by su.username_ ,s.user_id_
+        group by su.username_ ,s.user_id_,s.subject_id_list_
     </select>
     </select>
 
 
 </mapper>
 </mapper>

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

@@ -274,7 +274,7 @@
 
 
     <select id="getSubjectListByIdAndCoopId" resultType="com.ym.mec.biz.dal.entity.Subject">
     <select id="getSubjectListByIdAndCoopId" resultType="com.ym.mec.biz.dal.entity.Subject">
         SELECT
         SELECT
-            s.id_ as id
+            distinct s.id_ as id
         ,s.name_ as name
         ,s.name_ as name
         FROM
         FROM
             `subject` s
             `subject` s

+ 3 - 1
mec-web/src/main/java/com/ym/mec/web/controller/ImGroupController.java

@@ -189,13 +189,15 @@ public class ImGroupController extends BaseController {
     @ApiOperation("查询好友列表")
     @ApiOperation("查询好友列表")
     @PostMapping(value = "/schoolQueryFriendList")
     @PostMapping(value = "/schoolQueryFriendList")
     public HttpResponseResult<List<ImUserFriendDto>> schoolQueryFriendList(@RequestBody ImGroupWrapper.ImQuery query) {
     public HttpResponseResult<List<ImUserFriendDto>> schoolQueryFriendList(@RequestBody ImGroupWrapper.ImQuery query) {
+        query.setUserId(sysUserService.getUserId());
         return succeed(imUserFriendService.queryFriendListByUserId(query));
         return succeed(imUserFriendService.queryFriendListByUserId(query));
     }
     }
 
 
 
 
     @ApiOperation("查询群列表")
     @ApiOperation("查询群列表")
-    @GetMapping(value = "/schoolQueryGroupList")
+    @PostMapping(value = "/schoolQueryGroupList")
     public HttpResponseResult<List<ImGroup>> schoolQueryGroupList(@RequestBody ImGroupWrapper.ImQuery query) {
     public HttpResponseResult<List<ImGroup>> schoolQueryGroupList(@RequestBody ImGroupWrapper.ImQuery query) {
+        query.setUserId(sysUserService.getUserId());
         return succeed(imGroupService.queryByUserId(query));
         return succeed(imGroupService.queryByUserId(query));
     }
     }
 
 

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

@@ -140,4 +140,13 @@ public class ImSendGroupMessageController extends BaseController {
         }
         }
         return succeed(imGroupService.queryPage(imGroupQueryInfo));
         return succeed(imGroupService.queryPage(imGroupQueryInfo));
     }
     }
+
+
+    @ApiOperation("发送群聊消息")
+    @PostMapping(value = "/schoolSend")
+    public HttpResponseResult schoolSend(@RequestBody ImSendGroupMessage imSendGroupMessage) throws Exception {
+        imSendGroupMessageService.sendGroupMessage(imSendGroupMessage);
+        return succeed();
+    }
+
 }
 }