Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master_saas' into master_saas

shangke 2 gadi atpakaļ
vecāks
revīzija
2adc326afa
18 mainītis faili ar 258 papildinājumiem un 26 dzēšanām
  1. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupDao.java
  2. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupMemberDao.java
  3. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImUserFriendDao.java
  4. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroup.java
  5. 29 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupWrapper.java
  6. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SchoolActivityDetailWrapper.java
  7. 11 3
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java
  8. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImUserFriendService.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  10. 82 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java
  11. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java
  12. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolActivityDetailServiceImpl.java
  14. 10 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolStaffServiceImpl.java
  15. 18 0
      mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml
  16. 12 0
      mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml
  17. 28 0
      mec-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml
  18. 16 0
      mec-web/src/main/java/com/ym/mec/web/controller/ImGroupController.java

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupDao.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
 import com.ym.mec.biz.dal.dto.NameDto;
 import com.ym.mec.biz.dal.entity.ImGroup;
+import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
@@ -54,4 +55,6 @@ public interface ImGroupDao extends BaseDAO<String, ImGroup> {
      * @param i
      */
     void addMemberNum(@Param("imGroupIds") List<String> imGroupIds, @Param("num") int i);
+
+    List<ImGroup> getByUserId(@Param("param") ImGroupWrapper.ImQuery query);
 }

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

@@ -39,4 +39,21 @@ public interface ImGroupMemberDao extends BaseDAO<Long, ImGroupMember> {
     List<ImGroupMember> queryMembersByUserId(@Param("userId") Long userId);
 
     void deleteByUserId(Long userId);
+
+    /**
+     *  查询群组
+     *
+     * @param imGroupId 群组id
+     */
+    ImGroupMember getAdmin(@Param("imGroupId") String imGroupId);
+
+    void updateAdmin(@Param("imGroupId") String imGroupId, @Param("userId") Integer userId);
+
+    /**
+     * 查询一个群组成员
+     *
+     * @param imGroupId 群组id
+     * @param userId    用户id
+     */
+    ImGroupMember queryOneByGroupIdAndNotUser(@Param("imGroupId") String imGroupId, @Param("userId") Long userId);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImUserFriendDao.java

@@ -4,6 +4,7 @@ import java.util.Collection;
 import java.util.List;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.NameDto;
+import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 import com.ym.mec.biz.dal.dto.ImUserFriendDto;
 import com.ym.mec.biz.dal.entity.ImUserFriend;
@@ -50,4 +51,6 @@ public interface ImUserFriendDao extends BaseDAO<Long, ImUserFriend> {
      * @param userId 用户id
      */
     void deleteByUserIdAndFriendId(Long userId);
+
+    List<ImUserFriendDto> getFriendListByUserId(@Param("param") ImGroupWrapper.ImQuery query);
 }

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

@@ -39,7 +39,7 @@ public class ImGroup extends BaseEntity {
 		VIP("VIP", "vip课"), DEMO("DEMO", "试听课"), PRACTICE("PRACTICE", "网管课"),
 		SNAP("SNAP","临时班级"), COMM("COMM", "对外课程"), HIGH_ONLINE("HIGH_ONLINE", "线上基础技能课"),
 		MUSIC_NETWORK("MUSIC_NETWORK","乐团网管课"),PARENT_MEETING("PARENT_MEETING","家长会"),
-		TRAINING("TRAINING","训练营"),REPERTOIRE_PLAY("REPERTOIRE_PLAY","曲目演奏课"),SHOOL("SCHOOL","学校衔接群");
+		TRAINING("TRAINING","训练营"),REPERTOIRE_PLAY("REPERTOIRE_PLAY","曲目演奏课"), SCHOOL("SCHOOL","学校衔接群");
 
 		private String code;
 

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupWrapper.java

@@ -0,0 +1,29 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.ym.mec.biz.dal.entity.ImGroup;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+public class ImGroupWrapper {
+
+    @Data
+    public static class ImQuery {
+
+        @ApiModelProperty("群名称/用户名")
+        private String keyword;
+
+        @ApiModelProperty("群类型  ")
+        private ImGroup.GroupTypeEnum groupType;
+
+        @ApiModelProperty("乐团ID")
+        private String musicGroupId;
+
+        @ApiModelProperty("角色 SCHOOLMASTER:校长 ORCHESTRA_LEADER:乐团领队 SCHOOL_LEADER:分管领导 TEACHER:负责老师 STUDENT:学生")
+        private String roleType;
+
+        @ApiModelProperty("当前用户ID")
+        private Integer userId;
+    }
+
+
+}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SchoolActivityDetailWrapper.java

@@ -83,7 +83,7 @@ public class SchoolActivityDetailWrapper {
 
         @ApiModelProperty(value = "乐团ID",required = true)
         @NotNull(message = "乐团ID不能为空")
-        private Long musicGroupId;
+        private String musicGroupId;
 
         @ApiModelProperty("乐团名称")
         private String musicGroupName;

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

@@ -6,9 +6,9 @@ import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
 import com.ym.mec.biz.dal.dto.NameDto;
 import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
+import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.common.service.BaseService;
 
-import java.util.Arrays;
 import java.util.List;
 
 public interface ImGroupService extends BaseService<String, ImGroup> {
@@ -104,7 +104,7 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
      *
      * @param userId 用户id
      */
-    void quit(Long userId);
+    void quitSchoolGroup(Long userId);
 
     /**
      * 用户加入群
@@ -113,7 +113,7 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
      * @param userId 用户id
      * @param leader 是否是群主
      */
-    void addSchoolStaffGroup(Long schoolId, Integer userId, ESchoolStaffType leader) throws Exception;
+    void addSchoolStaffGroup(Long schoolId, Integer userId,String name,String avatar, ESchoolStaffType leader) throws Exception;
 
     /**
      * 加群
@@ -122,4 +122,12 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
      * @param user 用户信息
      */
     void addImGroup(List<String> musicGroupIds, SysUser user);
+
+    /**
+     * 查询群组
+     *
+     * @param query 查询条件
+     * @return 群组列表
+     */
+    List<ImGroup> queryByUserId(ImGroupWrapper.ImQuery query);
 }

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

@@ -7,6 +7,7 @@ import java.util.Set;
 import com.ym.mec.biz.dal.dto.ImUserFriendDto;
 import com.ym.mec.biz.dal.entity.ImUserFriend;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.common.service.BaseService;
 
 public interface ImUserFriendService extends BaseService<Long, ImUserFriend> {
@@ -83,4 +84,10 @@ public interface ImUserFriendService extends BaseService<Long, ImUserFriend> {
 	void refreshGroupImUserFriend(String musicGroupId,GroupType groupType);
 
     List<ImUserFriendDto> queryFriendListByUserIdV2(Integer userId, String search, String musicGroupId, Integer subjectId, Boolean vipFlag);
+
+    /**
+     * 根据条件查询指定用户的好友列表
+     *
+     */
+    List<ImUserFriendDto> queryFriendListByUserId(ImGroupWrapper.ImQuery query);
 }

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

@@ -470,7 +470,7 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
     /**
      * 获取乐团信息
      */
-    Map<Long,MusicGroup> getMapByIds(List<Long> musicGroupIds);
+    Map<Long,MusicGroup> getMapByIds(List<String> musicGroupIds);
 
     /**
      * 获取乐团信息

+ 82 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.microsvc.toolkit.middleware.im.ImPluginContext;
 import com.microsvc.toolkit.middleware.im.ImPluginService;
 import com.microsvc.toolkit.middleware.im.message.ImGroupMemberWrapper;
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ImGroupDao;
 import com.ym.mec.biz.dal.dao.ImGroupMemberDao;
@@ -16,6 +15,7 @@ import com.ym.mec.biz.dal.dto.NameDto;
 import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.entity.ImGroupMember;
 import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
+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;
@@ -271,14 +271,17 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
 
     /**
      * 用户退出所有群
-     *
+     * <p>
+     * 删除时判断是否群主,
+     * 如果是,则随机分配一个群主,
+     * 如果删除的是最后一个群成员,那么解散群
      * @param userId 用户id
      */
     @Override
-    public void quit(Long userId) {
+    @Transactional(rollbackFor = Exception.class)
+    public void quitSchoolGroup(Long userId) {
 
         // 退出群组
-        // 查询用户默认头象
         String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
 
         ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
@@ -289,17 +292,47 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             return;
         }
         for (ImGroupMember imGroupMember : imGroupMembers) {
+            // 如果是群主,随机分配一个群主
+            if (imGroupMember.getIsAdmin()) {
+                try {
+                    // 获取一个群成员
+                    ImGroupMember imGroupMember1 = imGroupMemberDao.queryOneByGroupIdAndNotUser(imGroupMember.getImGroupId(), userId);
+                    if (Objects.nonNull(imGroupMember1)) {
+                        groupChangeOwner(imGroupMember1.getUserId(),imGroupMember.getImGroupId());
+                    }
+                } catch (Exception e) {
+                    log.error("更换群主失败{},{}", userId, imGroupMember.getImGroupId(), e);
+                }
+            }
             try {
                 imPluginService.groupQuit(imGroupMember.getImGroupId(), ImGroupMemberWrapper.ImGroupMember.builder().userId(userId).build());
             } catch (Exception e) {
                 log.error("用户退出群失败{},{}", userId, imGroupMember.getImGroupId(), e);
             }
         }
+        List<String> imGroupIds = imGroupMembers.stream().map(ImGroupMember::getImGroupId).collect(Collectors.toList());
+        // 群组没人,删除群组
+        List<ImGroup> imGroups = imGroupDao.queryByUserId(userId.intValue(),null, ImGroup.GroupTypeEnum.SCHOOL.getCode());
+
+
         imGroupMemberDao.deleteByUserId(userId);
         // 更新群组人员数
-        imGroupDao.addMemberNum(imGroupMembers.stream().map(ImGroupMember::getImGroupId).collect(Collectors.toList()),-1);
+        imGroupDao.addMemberNum(imGroupIds,-1);
+
+        if (CollectionUtils.isEmpty(imGroups)) {
+            return;
+        }
+
 
-         // TODO 群组没人,删除群组
+        List<ImGroup> groups = imGroups.stream().filter(imGroup -> imGroup.getMemberNum().equals(1)).collect(Collectors.toList());
+        for (ImGroup group : groups) {
+            try {
+                imPluginService.groupDismiss(group.getId(), new ArrayList<>());
+            } catch (Exception e) {
+                log.error("解散群组失败{},{}", userId, group.getId(), e);
+            }
+            imGroupDao.delete(group.getId());
+        }
     }
 
     /**
@@ -311,7 +344,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void addSchoolStaffGroup(Long schoolId, Integer userId, ESchoolStaffType schoolStaffType) throws Exception {
+    public void addSchoolStaffGroup(Long schoolId, Integer userId,String name,String avatar, ESchoolStaffType schoolStaffType) throws Exception {
 
         // 查询群是否存在
         ImGroup imGroup = imGroupDao.queryBySchoolId(schoolId);
@@ -320,6 +353,9 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
 
         ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
 
+
+        // 注册主播用户信息到三方平台
+        imPluginService.register(userId.toString(), name, avatar);
         if (Objects.isNull(imGroup)) {
             imGroup = new ImGroup();
             imGroup.setSchoolId(schoolId);
@@ -327,8 +363,8 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             imGroup.setName("教学团队衔接群");
             imGroup.setIntroduce(imGroup.getName());
             imGroup.setMemberNum(1);
-            imGroup.setType(ImGroup.GroupTypeEnum.SHOOL.getCode());
-            imGroup.setGroupType(ImGroup.GroupTypeEnum.SHOOL);
+            imGroup.setType(ImGroup.GroupTypeEnum.SCHOOL.getCode());
+            imGroup.setGroupType(ImGroup.GroupTypeEnum.SCHOOL);
             imGroup.setCreateTime(new Date());
             imGroup.setUpdateTime(new Date());
             imGroup.setTenantId(TenantContextHolder.getTenantId());
@@ -339,8 +375,10 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             if (!schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER)) {
                 imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), ImGroupMemberWrapper.ImGroupMember.builder().userId(userId.longValue()).build());
             } else {
-
+                groupChangeOwner(userId, imGroup.getId());
             }
+            imGroup.setMemberNum(imGroup.getMemberNum() + 1);
+            imGroupDao.update(imGroup);
         }
         ImGroupMember imGroupMember = new ImGroupMember();
         imGroupMember.setImGroupId(imGroup.getId());
@@ -349,8 +387,25 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         imGroupMember.setRoleType(schoolStaffType.getDescribe());
         imGroupMember.setTenantId(imGroup.getTenantId());
         imGroupMemberDao.insert(imGroupMember);
+    }
 
+    /**
+     * 群主移交
+     * @param userId 用户id
+     * @param imGroupId     群组id
+     */
+    private void groupChangeOwner(Integer userId, String imGroupId) throws Exception {
+
+        String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
 
+        ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
+
+        ImGroupMember imGroupMember = imGroupMemberDao.getAdmin(imGroupId);
+        imPluginService.changeGroupOwner(imGroupId, userId.toString(),imGroupMember.getUserId().toString());
+        imGroupMember.setIsAdmin(false);
+        imGroupMemberDao.update(imGroupMember);
+
+        imGroupMemberDao.updateAdmin(imGroupId, userId);
     }
 
     /**
@@ -360,6 +415,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
      * @param user          用户信息
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void addImGroup(List<String> musicGroupIds, SysUser user) {
         if (CollectionUtils.isEmpty(musicGroupIds)) {
             return;
@@ -388,4 +444,20 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
 
         }
     }
+
+    /**
+     * 查询群组
+     *
+     * @param query 查询条件
+     * @return 群组列表
+     */
+    @Override
+    public List<ImGroup> queryByUserId(ImGroupWrapper.ImQuery query) {
+        if (query.getGroupType() != null && StringUtils.isNotBlank(query.getMusicGroupId())) {
+            if (query.getGroupType().equals(ImGroup.GroupTypeEnum.SCHOOL)) {
+                return new ArrayList<>();
+            }
+        }
+        return imGroupDao.getByUserId(query);
+    }
 }

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java

@@ -11,8 +11,10 @@ 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.enums.GroupType;
+import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.TeacherService;
 import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
@@ -203,6 +205,21 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
 
     }
 
+
+    /**
+     * 根据条件查询指定用户的好友列表
+     */
+    @Override
+    public List<ImUserFriendDto> queryFriendListByUserId(ImGroupWrapper.ImQuery query) {
+        if (StringUtils.isNotBlank(query.getRoleType()) && StringUtils.isNotBlank(query.getMusicGroupId())) {
+            if (!query.getRoleType().equals("STUDENT")) {
+                return new ArrayList<>();
+            }
+        }
+        return imUserFriendDao.getFriendListByUserId(query);
+
+    }
+
     public List<ImUserFriend> saveImUserFriends(Set<Integer> studentIds,Set<Integer> teacherIds,GroupType groupType,String musicGroupId){
 		List<ImUserFriend> imUserFriends = new ArrayList<>();
 		Set<Integer> educationIds = new HashSet<>();

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

@@ -4258,7 +4258,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
      * 获取乐团信息
      */
     @Override
-    public Map<Long, MusicGroup> getMapByIds(List<Long> musicGroupIds) {
+    public Map<Long, MusicGroup> getMapByIds(List<String> musicGroupIds) {
         if(CollectionUtils.isEmpty(musicGroupIds)){
             return new HashMap<>();
         }

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

@@ -120,7 +120,7 @@ public class SchoolActivityDetailServiceImpl extends ServiceImpl<SchoolActivityD
 
         // 设置乐团名
         // 乐团ID集合
-        List<Long> musicGroupIds = schoolActivityDetails.stream()
+        List<String> musicGroupIds = schoolActivityDetails.stream()
                 .map(SchoolActivityDetailWrapper.SchoolActivityDetail::getMusicGroupId)
                 .collect(Collectors.toList());
 

+ 10 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolStaffServiceImpl.java

@@ -6,8 +6,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
-import com.microsvc.toolkit.middleware.im.ImPluginContext;
-import com.microsvc.toolkit.middleware.im.ImPluginService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.SysUserType;
 import com.ym.mec.auth.api.enums.YesOrNoEnum;
@@ -21,7 +19,6 @@ import com.ym.mec.biz.dal.wrapper.StatGroupWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
-import com.ym.mec.util.string.MessageFormatter;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -164,7 +161,7 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
         }
 
         // 合作单位状态判断
-        if (!cooperation.getIsEnable()) {
+        if (Boolean.FALSE.equals(cooperation.getIsEnable())) {
             // 删除缓存锁
             redissonClient.getBucket(submitLockKey).delete();
 
@@ -185,6 +182,7 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
             // 校长或乐团领队,需要校验人数是否葡,默认最多添加一人
             Integer exists = lambdaQuery()
                     .eq(SchoolStaff::getSchoolId, schoolStaff.getSchoolId())
+                    .ne(SchoolStaff::getStatus, "-1")
                     .eq(SchoolStaff::getUserType, schoolStaff.getUserType().getCode()).count();
             if (exists > 0) {
                 // 删除缓存锁
@@ -199,6 +197,7 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
             Integer exists = lambdaQuery()
                     //.ne(SchoolStaff::getSchoolId, schoolStaff.getSchoolId())
                     .eq(SchoolStaff::getUserId, user.getId())
+                    .ne(SchoolStaff::getStatus, "-1")
                     .count();
             if (exists > 0) {
                 // 删除缓存锁
@@ -209,14 +208,15 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
         }
 
         // 添加学校员工信息
+        schoolStaff.setStatus("1");
         this.save(JSON.parseObject(schoolStaff.jsonString(), SchoolStaff.class));
 
 
         // 自动创建学校管理IM群 自动添加员工到学校乐团群
         try {
-            imGroupService.addSchoolStaffGroup(schoolStaff.getSchoolId(), user.getId(),ESchoolStaffType.ORCHESTRA_LEADER);
+            imGroupService.addSchoolStaffGroup(schoolStaff.getSchoolId(), user.getId(),user.getUsername(),user.getAvatar(),schoolStaff.getUserType());
         } catch (Exception e) {
-            log.error("加入群组失败 {}",e);
+            log.error("加入群组失败 ",e);
             throw new BizException("加入群组失败");
         }
 
@@ -495,8 +495,10 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
         // 解除im好友关联
         imUserFriendDao.deleteByUserIdAndFriendId(schoolStaff.getUserId());
 
-
-        imGroupService.quit(schoolStaff.getUserId());
+        // 删除时判断是否群主,
+        //1)如果是,则随机分配一个群主,
+        //2)如果删除的是最后一个群成员,那么解散群
+        imGroupService.quitSchoolGroup(schoolStaff.getUserId());
 
 
         return true;

+ 18 - 0
mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml

@@ -256,4 +256,22 @@
             #{item}
         </foreach>
     </update>
+
+	<select id="getByUserId" resultMap="ImGroup">
+        SELECT ig.* FROM im_group_member igm
+        LEFT JOIN im_group ig ON igm.im_group_id_ = ig.id_
+        where 1 =1
+        <if test="param.userId != null">
+            AND igm.user_id_ = #{param.userId}
+        </if>
+        <if test="param.keyword != null and param.keyword != ''">
+            AND (ig.name_ like concat('%',#{param.keyword},'%') or ig.tags_ like concat('%',#{param.keyword},'%'))
+        </if>
+        <if test="param.musicGroupId != null and param.musicGroupId != ''">
+            and ig.id_ = #{param.musicGroupId}
+        </if>
+        <if test="param.groupType != null">
+            and ig.group_type_ = #{param.groupType.code}
+        </if>
+    </select>
 </mapper>

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

@@ -182,4 +182,16 @@
 	<delete id="deleteByUserId">
         DELETE FROM im_group_member WHERE user_id_ = #{userId}
     </delete>
+
+	<select id="getAdmin" resultMap="ImGroupMember">
+        SELECT * FROM im_group_member WHERE im_group_id_ = #{imGroupId} AND is_admin_ = 1 LIMIT 1
+    </select>
+
+	<update id="updateAdmin">
+        UPDATE im_group_member SET is_admin_ = 1 WHERE im_group_id_ = #{imGroupId} and user_id_ = #{userId}
+    </update>
+
+	<select id="queryOneByGroupIdAndNotUser" resultMap="ImGroupMember">
+        SELECT * FROM im_group_member WHERE im_group_id_ = #{imGroupId} AND user_id_ != #{userId} LIMIT 1
+    </select>
 </mapper>

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

@@ -162,4 +162,32 @@
 	<delete id="deleteByUserIdAndFriendId">
         DELETE FROM im_user_friend WHERE user_id_ = #{userId} or friend_id_ = #{userId}
     </delete>
+
+	<select id="getFriendListByUserId" resultMap="ImUserFriendDto">
+        SELECT distinct iuf.*, ifnull(u.real_name_,username_) as real_name_,u.avatar_,u.phone_,u.user_type_
+
+        <if test="param.musicGroupId != null and param.musicGroupId != '' or param.roleType != null and param.roleType == 'STUDENT'">
+        ,st.member_rank_setting_id_,s.name_ subject_name_,st.subject_id_list_ subject_id_
+        </if>
+        FROM im_user_friend iuf
+        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'">
+            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 `subject` s ON s.id_ = st.subject_id_list_
+        </if>
+        <if test="param.roleType != null and param.roleType != ''">
+            <if test="param.roleType != 'STUDENT'">
+              JOIN school_staff st ON st.user_id_ = u.id_ and st.user_type_ = #{param.roleType}
+            </if>
+        </if>
+        WHERE iuf.user_id_ = #{param.userId}
+        <if test="param.keyword != null and param.keyword != ''">
+            and (u.real_name_ like concat('%',#{param.keyword},'%') or iuf.friend_nickname_ like concat('%',#{param.keyword},'%'))
+        </if>
+
+        <if test="param.musicGroupId != null and param.musicGroupId != ''">
+            and cgs.music_group_id_ = #{param.musicGroupId}
+        </if>
+    </select>
 </mapper>

+ 16 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ImGroupController.java

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.dto.NameDto;
 import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
 import com.ym.mec.biz.dal.page.ImGroupQueryInfo;
+import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -183,4 +184,19 @@ public class ImGroupController extends BaseController {
 	public HttpResponseResult<List<NameDto>> queryDetail(@RequestBody List<NameDto> nameDto) {
 		return succeed(imGroupService.queryDetail(nameDto));
 	}
+
+
+    @ApiOperation("查询好友列表")
+    @PostMapping(value = "/schoolQueryFriendList")
+    public HttpResponseResult<List<ImUserFriendDto>> schoolQueryFriendList(@RequestBody ImGroupWrapper.ImQuery query) {
+        return succeed(imUserFriendService.queryFriendListByUserId(query));
+    }
+
+
+    @ApiOperation("查询群列表")
+    @GetMapping(value = "/schoolQueryGroupList")
+    public HttpResponseResult<List<ImGroup>> schoolQueryGroupList(@RequestBody ImGroupWrapper.ImQuery query) {
+        return succeed(imGroupService.queryByUserId(query));
+    }
+
 }