Explorar el Código

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into zx_saas_message

zouxuan hace 1 año
padre
commit
8d6e0f129d
Se han modificado 30 ficheros con 1562 adiciones y 528 borrados
  1. 81 38
      mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupController.java
  2. 71 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupMemberController.java
  3. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  4. 30 29
      mec-application/src/main/java/com/ym/mec/web/controller/ImGroupController.java
  5. 53 2
      mec-application/src/main/java/com/ym/mec/web/controller/ImGroupMemberController.java
  6. 304 0
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupController.java
  7. 71 0
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupMemberController.java
  8. 8 8
      mec-biz/pom.xml
  9. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupMemberDao.java
  10. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroup.java
  11. 76 82
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMember.java
  12. 3 30
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMemberPlus.java
  13. 13 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EFriendRoleType.java
  14. 39 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/im/EImGroupRoleType.java
  15. 6 14
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/GroupMemberQueryInfo.java
  16. 79 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupMemberWrapper.java
  17. 48 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupWrapper.java
  18. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  19. 16 24
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupMemberService.java
  20. 6 3
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java
  21. 0 17
      mec-biz/src/main/java/com/ym/mec/biz/service/im/ImGroupCoreService.java
  22. 79 72
      mec-biz/src/main/java/com/ym/mec/biz/service/im/impl/ImGroupCoreServiceImpl.java
  23. 11 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  24. 11 20
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  25. 314 90
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java
  26. 160 69
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java
  27. 4 0
      mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml
  28. 48 13
      mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml
  29. 4 2
      mec-biz/src/main/resources/config/mybatis/ImGroupMemberPlusMapper.xml
  30. 1 0
      pom.xml

+ 81 - 38
mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupController.java

@@ -1,29 +1,33 @@
 package com.ym.mec.teacher.controller;
 package com.ym.mec.teacher.controller;
 
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.dto.ImGroupNoticeDto;
 import com.ym.mec.biz.dal.dto.ImUserFriendDto;
 import com.ym.mec.biz.dal.dto.ImUserFriendDto;
 import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.entity.ImGroupMemberPlus;
 import com.ym.mec.biz.dal.entity.ImGroupMemberPlus;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
 import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
+import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.vo.ImUserWrapper;
 import com.ym.mec.vo.ImUserWrapper;
+import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
 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.http.HttpStatus;
 import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 
+import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 import java.util.Objects;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Optional;
@@ -34,40 +38,79 @@ import java.util.stream.Collectors;
 @RestController
 @RestController
 public class ImGroupController extends BaseController {
 public class ImGroupController extends BaseController {
 
 
-	@Autowired
+	@Resource
 	private ImGroupService imGroupService;
 	private ImGroupService imGroupService;
-
-	@Autowired
+	@Resource
 	private ImUserFriendService imUserFriendService;
 	private ImUserFriendService imUserFriendService;
-
-	@Autowired
+	@Resource
+	private ImGroupMemberService imGroupMemberService;
+	@Resource
 	private ImGroupNoticeService imGroupNoticeService;
 	private ImGroupNoticeService imGroupNoticeService;
+	@Resource
+	private SysUserService sysUserService;
+    @Resource
+    private ImGroupMemberPlusService imGroupMemberPlusService;
 
 
-	@Autowired
-	private SysUserService userLoginService;
+	@ApiOperation(value = "全体禁言/解除禁言")
+	@PostMapping("/muteAll")
+	public HttpResponseResult<Object> muteAll(@RequestBody ImGroupWrapper.GroupMuteAll groupMuteAll) {
+		if (StringUtils.isEmpty(groupMuteAll.getGroupId()) || groupMuteAll.getMuteAll() == null){
+			throw new BizException("参数错误");
+		}
+		imGroupService.muteAll(groupMuteAll);
+		return succeed();
+	}
 
 
-    @Autowired
-    private ImGroupMemberPlusService imGroupMemberPlusService;
+	@ApiOperation(" 移交群主")
+	@PostMapping(value = "/groupChangeOwner")
+	public Object groupChangeOwner(@RequestBody ImGroupWrapper.GroupTransferOwner groupTransferOwner) {
+		if (StringUtils.isEmpty(groupTransferOwner.getImGroupId()) || StringUtils.isEmpty(groupTransferOwner.getUserId())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("参数错误");
+		}
+		groupTransferOwner.setCurrentOwner(sysUserService.getUserId().toString());
+		if(StringUtils.equals(groupTransferOwner.getUserId(),groupTransferOwner.getCurrentOwner())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("不能转交给自己");
+		}
+		imGroupService.transferOwner(groupTransferOwner);
+		return succeed();
+	}
+
+	@ApiOperation("解散群")
+	@PostMapping(value = "/dismissGroup")
+	@ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String")
+	public HttpResponseResult<Object> dismissGroup(String imGroupId) {
+		imGroupService.dismissGroup(imGroupId,sysUserService.getUserId().toString());
+		return succeed();
+	}
+
+	@ApiOperation("退群")
+	@PostMapping(value = "/quitGroup")
+	@ApiImplicitParams({ @ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String"),
+			@ApiImplicitParam(name = "userId", value = "用户编号", required = true, dataType = "String")})
+	public Object quitGroup(String imGroupId, String userId) {
+		List<Integer> userIds = Arrays.stream(userId.split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
+		return succeed(imGroupMemberService.quit(imGroupId,userIds));
+	}
 
 
 	@ApiOperation("查询群列表")
 	@ApiOperation("查询群列表")
 	@GetMapping(value = "/queryGroupList")
 	@GetMapping(value = "/queryGroupList")
-	public Object queryGroupList(String search,String groupType) {
-		return succeed(imGroupService.queryByUserId(userLoginService.getUserId(), search,groupType));
+	public HttpResponseResult<List<ImGroup>> queryGroupList(String search, String groupType) {
+		return succeed(imGroupService.queryByUserId(sysUserService.getUserId(), search,groupType));
 	}
 	}
 
 
 
 
     @ApiOperation("查询群列表-v2")
     @ApiOperation("查询群列表-v2")
     @GetMapping(value = "/queryGroupList/v2")
     @GetMapping(value = "/queryGroupList/v2")
-    public Object queryGroupListV2(String search,String groupType,String musicGroupId,String classType) {
+    public HttpResponseResult<List<ImGroup>> queryGroupListV2(String search, String groupType, String musicGroupId, String classType) {
         if (StringUtils.isNotBlank(classType) && classType.equals("SINGLE")) {
         if (StringUtils.isNotBlank(classType) && classType.equals("SINGLE")) {
             classType = "NORMAL";
             classType = "NORMAL";
         }
         }
-        return succeed(imGroupService.queryByUserIdV2(userLoginService.getUserId(), search,groupType,musicGroupId,classType));
+        return succeed(imGroupService.queryByUserIdV2(sysUserService.getUserId(), search,groupType,musicGroupId,classType));
     }
     }
 
 
 	@ApiOperation("查询群详情")
 	@ApiOperation("查询群详情")
 	@GetMapping(value = "/queryGroupDetail")
 	@GetMapping(value = "/queryGroupDetail")
-	public Object queryGroupDetail(String imGroupId) {
+	public HttpResponseResult<ImGroup> queryGroupDetail(String imGroupId) {
 		if (imGroupId.contains("S") || imGroupId.contains("I")){
 		if (imGroupId.contains("S") || imGroupId.contains("I")){
 			imGroupId = imGroupId.substring(1);
 			imGroupId = imGroupId.substring(1);
 		}
 		}
@@ -78,7 +121,7 @@ public class ImGroupController extends BaseController {
         }
         }
         ImGroupMemberPlus admin = imGroupMemberPlusService.lambdaQuery()
         ImGroupMemberPlus admin = imGroupMemberPlusService.lambdaQuery()
             .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
             .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
-            .eq(ImGroupMemberPlus::getUserId, userLoginService.getUser().getId())
+            .eq(ImGroupMemberPlus::getUserId, sysUserService.getUser().getId())
             .last("limit 1").one();
             .last("limit 1").one();
         if (admin == null) {
         if (admin == null) {
             // 该用户不在该群,无权限查看,处理用户退出群后,查看历史消息校验
             // 该用户不在该群,无权限查看,处理用户退出群后,查看历史消息校验
@@ -107,7 +150,7 @@ public class ImGroupController extends BaseController {
         }
         }
         ImGroupMemberPlus admin = imGroupMemberPlusService.lambdaQuery()
         ImGroupMemberPlus admin = imGroupMemberPlusService.lambdaQuery()
             .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
             .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
-            .eq(ImGroupMemberPlus::getUserId, userLoginService.getUser().getId())
+            .eq(ImGroupMemberPlus::getUserId, sysUserService.getUser().getId())
             .last("limit 1").one();
             .last("limit 1").one();
         if (admin == null) {
         if (admin == null) {
             // 该用户不在该群,无权限查看,处理用户退出群后,查看历史消息校验
             // 该用户不在该群,无权限查看,处理用户退出群后,查看历史消息校验
@@ -118,36 +161,36 @@ public class ImGroupController extends BaseController {
 
 
 	@ApiOperation("查询群成员列表")
 	@ApiOperation("查询群成员列表")
 	@GetMapping(value = "/queryGroupMemberList")
 	@GetMapping(value = "/queryGroupMemberList")
-	public Object queryGroupMemberList(String imGroupId) {
+	public HttpResponseResult<List<ImGroupMemberDto>> queryGroupMemberList(String imGroupId) {
 		return succeed(imGroupService.queryMemberById(imGroupId));
 		return succeed(imGroupService.queryMemberById(imGroupId));
 	}
 	}
 
 
 	@ApiOperation("查询群学生列表")
 	@ApiOperation("查询群学生列表")
 	@GetMapping(value = "/queryGroupStudentList")
 	@GetMapping(value = "/queryGroupStudentList")
-	public Object queryGroupStudentList(String imGroupId) {
+	public HttpResponseResult<List<ImGroupMemberDto>> queryGroupStudentList(String imGroupId) {
 		return succeed(imGroupService.queryMemberById(imGroupId).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
 		return succeed(imGroupService.queryMemberById(imGroupId).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
 	}
 	}
 
 
 
 
     @ApiOperation("查询群学生列表v2")
     @ApiOperation("查询群学生列表v2")
     @GetMapping(value = "/queryGroupStudentList/v2")
     @GetMapping(value = "/queryGroupStudentList/v2")
-    public Object queryGroupStudentListV2(String imGroupId,String search,Integer subjectId,Boolean vipFlag) {
+    public HttpResponseResult<List<ImGroupMemberDto>> queryGroupStudentListV2(String imGroupId, String search, Integer subjectId, Boolean vipFlag) {
         return succeed(imGroupService.queryMemberByIdV2(imGroupId,search,subjectId,vipFlag).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
         return succeed(imGroupService.queryMemberByIdV2(imGroupId,search,subjectId,vipFlag).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
     }
     }
 
 
 	@ApiOperation("查询群成员详情")
 	@ApiOperation("查询群成员详情")
 	@GetMapping(value = "/queryGroupMemberDetail")
 	@GetMapping(value = "/queryGroupMemberDetail")
-	public Object queryGroupMemberDetail(String imGroupId, Integer userId) {
+	public HttpResponseResult<ImGroupMemberDto> queryGroupMemberDetail(String imGroupId, Integer userId) {
 		return succeed(imGroupService.queryMember(imGroupId, userId));
 		return succeed(imGroupService.queryMember(imGroupId, userId));
 	}
 	}
 
 
 	@ApiOperation("查询好友详情")
 	@ApiOperation("查询好友详情")
 	@GetMapping(value = "/queryFriendDetail")
 	@GetMapping(value = "/queryFriendDetail")
-	public Object queryFriendDetail(Integer userId) {
-		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(userLoginService.getUserId(), userId);
+	public HttpResponseResult<ImUserFriendDto> queryFriendDetail(Integer userId) {
+		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(sysUserService.getUserId(), userId);
 		if (dto == null) {
 		if (dto == null) {
 			dto = new ImUserFriendDto();
 			dto = new ImUserFriendDto();
-			SysUser user = userLoginService.queryUserById(userId);
+			SysUser user = sysUserService.queryUserById(userId);
 			dto.setFriend(user);
 			dto.setFriend(user);
 
 
 			List<String> userTypes = Lists.newArrayList(user.getUserType().split(","));
 			List<String> userTypes = Lists.newArrayList(user.getUserType().split(","));
@@ -172,10 +215,10 @@ public class ImGroupController extends BaseController {
 	})
 	})
 	@GetMapping(value = "/imUserFriend/getDetail/{userId}")
 	@GetMapping(value = "/imUserFriend/getDetail/{userId}")
 	public HttpResponseResult<ImUserWrapper.ImUserFriend> getImUserFriendDetail(@PathVariable("userId") Integer userId) {
 	public HttpResponseResult<ImUserWrapper.ImUserFriend> getImUserFriendDetail(@PathVariable("userId") Integer userId) {
-		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(userLoginService.getUserId(), userId);
+		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(sysUserService.getUserId(), userId);
 		if (dto == null) {
 		if (dto == null) {
 			dto = new ImUserFriendDto();
 			dto = new ImUserFriendDto();
-			SysUser user = userLoginService.queryUserById(userId);
+			SysUser user = sysUserService.queryUserById(userId);
 			dto.setFriend(user);
 			dto.setFriend(user);
 			if (user.getUserType().contains("STUDENT") || user.getUserType().contains("SCHOOL")) {
 			if (user.getUserType().contains("STUDENT") || user.getUserType().contains("SCHOOL")) {
 				dto.setFriendNickname(user.getUsername());
 				dto.setFriendNickname(user.getUsername());
@@ -203,8 +246,8 @@ public class ImGroupController extends BaseController {
 
 
 	@ApiOperation("查询好友列表")
 	@ApiOperation("查询好友列表")
 	@GetMapping(value = "/queryFriendList")
 	@GetMapping(value = "/queryFriendList")
-	public Object queryFriendList(String search) {
-		return succeed(imUserFriendService.queryFriendListByUserId(userLoginService.getUserId(), search));
+	public HttpResponseResult<List<ImUserFriendDto>> queryFriendList(String search) {
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search));
 	}
 	}
 
 
 	@ApiOperation("查询好友列表(重构版)")
 	@ApiOperation("查询好友列表(重构版)")
@@ -212,7 +255,7 @@ public class ImGroupController extends BaseController {
 	public HttpResponseResult<List<ImUserWrapper.ImUserFriend>> queryImUserFriendList(String search) {
 	public HttpResponseResult<List<ImUserWrapper.ImUserFriend>> queryImUserFriendList(String search) {
 
 
 		// 好友关系列表
 		// 好友关系列表
-		List<ImUserFriendDto> friendDtos = imUserFriendService.queryFriendListByUserId(userLoginService.getUserId(), search);
+		List<ImUserFriendDto> friendDtos = imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search);
 
 
 		List<ImUserWrapper.ImUserFriend> wrappers = Lists.newArrayList();
 		List<ImUserWrapper.ImUserFriend> wrappers = Lists.newArrayList();
 		if (CollectionUtils.isNotEmpty(friendDtos)) {
 		if (CollectionUtils.isNotEmpty(friendDtos)) {
@@ -240,23 +283,23 @@ public class ImGroupController extends BaseController {
 
 
 	@ApiOperation("查询好友中的学生列表")
 	@ApiOperation("查询好友中的学生列表")
 	@GetMapping(value = "/queryFriendStudentList")
 	@GetMapping(value = "/queryFriendStudentList")
-	public Object queryFriendStudentList(String search) {
-		return succeed(imUserFriendService.queryFriendListByUserId(userLoginService.getUserId(), search).stream().filter(e -> StringUtils.isBlank(e.getTags()))
+	public HttpResponseResult<List<ImUserFriendDto>> queryFriendStudentList(String search) {
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search).stream().filter(e -> StringUtils.isBlank(e.getTags()))
 				.collect(Collectors.toList()));
 				.collect(Collectors.toList()));
 	}
 	}
 
 
 
 
     @ApiOperation("查询好友中的学生列表-v2")
     @ApiOperation("查询好友中的学生列表-v2")
     @GetMapping(value = "/queryFriendStudentList/v2")
     @GetMapping(value = "/queryFriendStudentList/v2")
-    public Object queryFriendStudentListV2(String search,String musicGroupId,Integer subjectId,Boolean vipFlag) {
-        return succeed(imUserFriendService.queryFriendListByUserIdV2(userLoginService.getUserId(), search,musicGroupId,subjectId,vipFlag)
+    public HttpResponseResult<List<ImUserFriendDto>> queryFriendStudentListV2(String search, String musicGroupId, Integer subjectId, Boolean vipFlag) {
+        return succeed(imUserFriendService.queryFriendListByUserIdV2(sysUserService.getUserId(), search,musicGroupId,subjectId,vipFlag)
                 .stream().filter(e -> StringUtils.isBlank(e.getTags()))
                 .stream().filter(e -> StringUtils.isBlank(e.getTags()))
                 .collect(Collectors.toList()));
                 .collect(Collectors.toList()));
     }
     }
 
 
 	@ApiOperation("查询群公告列表")
 	@ApiOperation("查询群公告列表")
 	@GetMapping(value = "/queryNoticeList")
 	@GetMapping(value = "/queryNoticeList")
-	public Object queryNoticeList(ImGroupNoticeQueryInfo queryInfo) {
+	public HttpResponseResult<PageInfo<ImGroupNoticeDto>> queryNoticeList(ImGroupNoticeQueryInfo queryInfo) {
 		return succeed(imGroupNoticeService.queryPage(queryInfo));
 		return succeed(imGroupNoticeService.queryPage(queryInfo));
 	}
 	}
 }
 }

+ 71 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupMemberController.java

@@ -0,0 +1,71 @@
+package com.ym.mec.teacher.controller;
+
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
+import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
+import com.ym.mec.biz.service.ImGroupMemberService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.Optional;
+
+@RequestMapping("${app-config.url.teacher:}/imGroupMember")
+@Api(tags = "IM群成员服务")
+@RestController
+public class ImGroupMemberController extends BaseController {
+
+	@Resource
+	private ImGroupMemberService imGroupMemberService;
+
+	@ApiOperation(value = "群成员禁言", notes = "群成员禁言- 传入 ImGroupMemberVo.GroupMemberMute")
+	@PostMapping("/groupMute")
+	public HttpResponseResult<Object> groupMemberMute(@RequestBody ImGroupMemberWrapper.GroupMemberMute member) {
+		// 群成员不能为空
+		if (CollectionUtils.isEmpty(member.getUserIds())) {
+			throw BizException.from("群成员不能为空");
+		}
+		// 更新群成员禁言
+		imGroupMemberService.groupMemberMute(member);
+		return succeed();
+	}
+
+	@ApiOperation(value = "群成员身份设置", notes = "群成员身份设置- 传入 ImGroupMemberVo.GroupMemberRole")
+	@PostMapping("/groupRole")
+	public HttpResponseResult<Object> groupMemberRole(@RequestBody ImGroupMemberWrapper.GroupMemberRole member) {
+		// 群成员不能为空
+		if (CollectionUtils.isEmpty(member.getUserIds())) {
+			throw BizException.from("群成员不能为空");
+		}
+		// 更新群成员禁言
+		imGroupMemberService.groupMemberRole(member);
+		return succeed();
+	}
+
+	@ApiOperation("分页查询群成员列表")
+	@PostMapping(value = "/queryGroupMemberPage")
+	public HttpResponseResult<PageInfo<ImGroupMemberDto>> queryGroupMemberPage(GroupMemberQueryInfo queryInfo) {
+		return succeed(imGroupMemberService.queryGroupMemberPage(queryInfo));
+	}
+
+	@ApiOperation("添加群成员")
+	@PostMapping(value = "/addGroupMember")
+	@ApiImplicitParams({ @ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String"),
+			@ApiImplicitParam(name = "roleType", value = "指导老师,乐队指导,乐团主管,运营主管,学员不传", required = true, dataType = "String"),
+			@ApiImplicitParam(name = "userId", value = "用户编号(多个逗号分割)", required = true, dataType = "String")})
+	public Object addGroupMember(String imGroupId, String userId, String roleType) {
+		imGroupMemberService.batchJoin(imGroupId,userId,roleType);
+		return succeed();
+	}
+}

+ 1 - 1
mec-application/src/main/java/com/ym/mec/web/controller/ClassGroupController.java

@@ -74,7 +74,7 @@ public class ClassGroupController extends BaseController {
     @ApiOperation(value = "班级基本信息修改")
     @ApiOperation(value = "班级基本信息修改")
     @PostMapping("/update")
     @PostMapping("/update")
     @PreAuthorize("@pcs.hasPermissions('classGroup/update')")
     @PreAuthorize("@pcs.hasPermissions('classGroup/update')")
-    public HttpResponseResult update(ClassGroup classGroup) throws Exception {
+    public HttpResponseResult<Integer> update(ClassGroup classGroup) throws Exception {
         classGroup.setUpdateTime(new Date());
         classGroup.setUpdateTime(new Date());
         return succeed(classGroupService.updateClassGroup(classGroup));
         return succeed(classGroupService.updateClassGroup(classGroup));
     }
     }

+ 30 - 29
mec-application/src/main/java/com/ym/mec/web/controller/ImGroupController.java

@@ -7,16 +7,13 @@ import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
 import com.ym.mec.biz.dal.dto.ImUserFriendDto;
 import com.ym.mec.biz.dal.dto.ImUserFriendDto;
 import com.ym.mec.biz.dal.dto.NameDto;
 import com.ym.mec.biz.dal.dto.NameDto;
 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.ImGroupMemberPlus;
 import com.ym.mec.biz.dal.entity.ImGroupMemberPlus;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
 import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
-import com.ym.mec.biz.dal.vo.ImGroupVo;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.exception.BizException;
 import com.ym.mec.vo.ImUserWrapper;
 import com.ym.mec.vo.ImUserWrapper;
 import com.yonge.log.model.AuditLogAnnotation;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
@@ -25,15 +22,11 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
 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.http.HttpStatus;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import javax.annotation.Resource;
+import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -43,24 +36,34 @@ import java.util.stream.Collectors;
 @RestController
 @RestController
 public class ImGroupController extends BaseController {
 public class ImGroupController extends BaseController {
 
 
-	@Autowired
+	@Resource
 	private ImGroupService imGroupService;
 	private ImGroupService imGroupService;
 
 
-	@Autowired
+	@Resource
 	private ImUserFriendService imUserFriendService;
 	private ImUserFriendService imUserFriendService;
 
 
-	@Autowired
+	@Resource
 	private ImGroupMemberService imGroupMemberService;
 	private ImGroupMemberService imGroupMemberService;
 
 
-    @Autowired
+    @Resource
     private ImGroupMemberPlusService imGroupMemberPlusService;
     private ImGroupMemberPlusService imGroupMemberPlusService;
 
 
-	@Autowired
+	@Resource
 	private ImGroupNoticeService imGroupNoticeService;
 	private ImGroupNoticeService imGroupNoticeService;
 
 
-	@Autowired
+	@Resource
 	private SysUserService sysUserService;
 	private SysUserService sysUserService;
 
 
+	@ApiOperation(value = "全体禁言/解除禁言")
+	@PostMapping("/muteAll")
+	public HttpResponseResult<Object> muteAll(@RequestBody ImGroupWrapper.GroupMuteAll groupMuteAll) {
+		if (StringUtils.isEmpty(groupMuteAll.getGroupId()) || groupMuteAll.getMuteAll() == null){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("参数错误");
+		}
+		imGroupService.muteAll(groupMuteAll);
+		return succeed();
+	}
+
 	@ApiOperation("查询群列表")
 	@ApiOperation("查询群列表")
 	@GetMapping(value = "/queryGroupList")
 	@GetMapping(value = "/queryGroupList")
 	public HttpResponseResult<List<ImGroup>> queryGroupList(String search,String groupType) {
 	public HttpResponseResult<List<ImGroup>> queryGroupList(String search,String groupType) {
@@ -69,7 +72,7 @@ public class ImGroupController extends BaseController {
 
 
 	@ApiOperation("创建群聊")
 	@ApiOperation("创建群聊")
 	@PostMapping(value = "/createGroup")
 	@PostMapping(value = "/createGroup")
-	public HttpResponseResult queryGroupList(@RequestBody ImGroupDto imGroupDto) {
+	public HttpResponseResult<String> queryGroupList(@RequestBody ImGroupDto imGroupDto) {
 		return succeed(imGroupService.createGroup(imGroupDto));
 		return succeed(imGroupService.createGroup(imGroupDto));
 	}
 	}
 
 
@@ -294,27 +297,25 @@ public class ImGroupController extends BaseController {
 
 
     @ApiOperation(" 移交群主")
     @ApiOperation(" 移交群主")
     @AuditLogAnnotation(operateName = "移交群主",interfaceURL = "imGroup/groupChangeOwner")
     @AuditLogAnnotation(operateName = "移交群主",interfaceURL = "imGroup/groupChangeOwner")
-    /*@ApiImplicitParams({
-			@ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "userId", value = "用户编号", required = true, dataType = "integer")
-	})*/
     @PostMapping(value = "/groupChangeOwner")
     @PostMapping(value = "/groupChangeOwner")
-    public Object groupChangeOwner(@RequestBody ImGroupVo.GroupChangeOwner info) throws Exception {
-
-		// 校验参数合法性
-		if (StringUtils.isBlank(info.getImGroupId()) || Objects.isNull(info.getUserId())) {
-			throw new BizException("请求参数错误");
+    public Object groupChangeOwner(@RequestBody ImGroupWrapper.GroupTransferOwner groupTransferOwner) {
+		if (StringUtils.isEmpty(groupTransferOwner.getImGroupId()) || StringUtils.isEmpty(groupTransferOwner.getUserId())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("参数错误");
 		}
 		}
-
-        return succeed(imGroupService.groupChangeOwner(info.getUserId(), info.getImGroupId()));
+		groupTransferOwner.setCurrentOwner(sysUserService.getUserId().toString());
+		if(StringUtils.equals(groupTransferOwner.getUserId(),groupTransferOwner.getCurrentOwner())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("不能转交给自己");
+		}
+		imGroupService.transferOwner(groupTransferOwner);
+		return succeed();
     }
     }
 
 
 	@ApiOperation("解散群")
 	@ApiOperation("解散群")
 	@PostMapping(value = "/dismissGroup")
 	@PostMapping(value = "/dismissGroup")
 	@AuditLogAnnotation(operateName = "解散群",interfaceURL = "imGroup/dismissGroup")
 	@AuditLogAnnotation(operateName = "解散群",interfaceURL = "imGroup/dismissGroup")
 	@ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String")
 	@ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String")
-	public Object dismissGroup(String imGroupId) {
-		imGroupService.dismissGroup(imGroupId);
+	public HttpResponseResult<Object> dismissGroup(String imGroupId) {
+		imGroupService.dismissGroup(imGroupId,sysUserService.getUserId().toString());
 		return succeed();
 		return succeed();
 	}
 	}
 
 

+ 53 - 2
mec-application/src/main/java/com/ym/mec/web/controller/ImGroupMemberController.java

@@ -1,7 +1,10 @@
 package com.ym.mec.web.controller;
 package com.ym.mec.web.controller;
 
 
+import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
+import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.service.ImGroupMemberService;
 import com.ym.mec.biz.service.ImGroupMemberService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -10,19 +13,67 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
 @RequestMapping("${app-config.url.web:}/imGroupMember")
 @RequestMapping("${app-config.url.web:}/imGroupMember")
 @Api(tags = "IM群成员服务")
 @Api(tags = "IM群成员服务")
 @RestController
 @RestController
 public class ImGroupMemberController extends BaseController {
 public class ImGroupMemberController extends BaseController {
 
 
-	@Autowired
+	@Resource
 	private ImGroupMemberService imGroupMemberService;
 	private ImGroupMemberService imGroupMemberService;
 
 
+	@ApiOperation(value = "群成员禁言", notes = "群成员禁言- 传入 ImGroupMemberVo.GroupMemberMute")
+	@PostMapping("/groupMute")
+	public HttpResponseResult<Object> groupMemberMute(@RequestBody ImGroupMemberWrapper.GroupMemberMute member) {
+		// 群成员不能为空
+		if (CollectionUtils.isEmpty(member.getUserIds())) {
+			throw BizException.from("群成员不能为空");
+		}
+		// 更新群成员禁言
+		imGroupMemberService.groupMemberMute(member);
+		return succeed();
+	}
+
+	@ApiOperation(value = "群成员身份初始化")
+	@PostMapping("/groupRoleInit")
+	public HttpResponseResult<Object> groupRoleInit(String groupRoleType) {
+		List<ImGroupMemberWrapper.GroupMemberRole1> memberRoles = imGroupMemberService.getDao().groupRoleInit(groupRoleType);
+		if(CollectionUtils.isNotEmpty(memberRoles)){
+			memberRoles.stream().collect(Collectors.groupingBy(ImGroupMemberWrapper.GroupMemberRole1::getGroupId)).forEach((k,v)->{
+				ImGroupMemberWrapper.GroupMemberRole memberRole = new ImGroupMemberWrapper.GroupMemberRole();
+				memberRole.setGroupId(k);
+				memberRole.setUserIds(v.stream().map(e->e.getUserId().toString()).collect(Collectors.toList()));
+				memberRole.setGroupRoleType(EImGroupRoleType.valueOf(v.get(0).getGroupRoleType()));
+				imGroupMemberService.groupMemberRole1(memberRole);
+			});
+			return succeed();
+		}
+		return failed("没有需要初始化的数据");
+	}
+
+	@ApiOperation(value = "群成员身份设置", notes = "群成员身份设置- 传入 ImGroupMemberVo.GroupMemberRole")
+	@PostMapping("/groupRole")
+	public HttpResponseResult<Object> groupMemberRole(@RequestBody ImGroupMemberWrapper.GroupMemberRole member) {
+		// 群成员不能为空
+		if (CollectionUtils.isEmpty(member.getUserIds())) {
+			throw BizException.from("群成员不能为空");
+		}
+		// 更新群成员禁言
+		imGroupMemberService.groupMemberRole(member);
+		return succeed();
+	}
+
 	@ApiOperation("分页查询群成员列表")
 	@ApiOperation("分页查询群成员列表")
 	@PostMapping(value = "/queryGroupMemberPage")
 	@PostMapping(value = "/queryGroupMemberPage")
 	public HttpResponseResult<PageInfo<ImGroupMemberDto>> queryGroupMemberPage(GroupMemberQueryInfo queryInfo) {
 	public HttpResponseResult<PageInfo<ImGroupMemberDto>> queryGroupMemberPage(GroupMemberQueryInfo queryInfo) {

+ 304 - 0
mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupController.java

@@ -0,0 +1,304 @@
+package com.ym.mec.web.controller.education;
+
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.dto.ImGroupNoticeDto;
+import com.ym.mec.biz.dal.dto.ImUserFriendDto;
+import com.ym.mec.biz.dal.entity.ImGroup;
+import com.ym.mec.biz.dal.entity.ImGroupMemberPlus;
+import com.ym.mec.biz.dal.enums.im.ClientEnum;
+import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
+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;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.vo.ImUserWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+@RequestMapping("${app-config.url.web:}/eduImGroup")
+@Api(tags = "IM群服务")
+@RestController
+public class EduImGroupController extends BaseController {
+
+	@Resource
+	private ImGroupService imGroupService;
+	@Resource
+	private ImUserFriendService imUserFriendService;
+	@Resource
+	private ImGroupMemberService imGroupMemberService;
+	@Resource
+	private ImGroupNoticeService imGroupNoticeService;
+	@Resource
+	private SysUserService sysUserService;
+    @Resource
+    private ImGroupMemberPlusService imGroupMemberPlusService;
+
+	@ApiOperation(value = "全体禁言/解除禁言")
+	@PostMapping("/muteAll")
+	public HttpResponseResult<Object> muteAll(@RequestBody ImGroupWrapper.GroupMuteAll groupMuteAll) {
+		if (StringUtils.isEmpty(groupMuteAll.getGroupId()) || groupMuteAll.getMuteAll() == null){
+			throw new BizException("参数错误");
+		}
+		imGroupService.muteAll(groupMuteAll);
+		return succeed();
+	}
+
+	@ApiOperation(" 移交群主")
+	@PostMapping(value = "/groupChangeOwner")
+	public Object groupChangeOwner(@RequestBody ImGroupWrapper.GroupTransferOwner groupTransferOwner) {
+		if (StringUtils.isEmpty(groupTransferOwner.getImGroupId()) || StringUtils.isEmpty(groupTransferOwner.getUserId())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("参数错误");
+		}
+		groupTransferOwner.setCurrentOwner(sysUserService.getUserId().toString());
+		if(StringUtils.equals(groupTransferOwner.getUserId(),groupTransferOwner.getCurrentOwner())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("不能转交给自己");
+		}
+		imGroupService.transferOwner(groupTransferOwner);
+		return succeed();
+	}
+
+	@ApiOperation("解散群")
+	@PostMapping(value = "/dismissGroup")
+	@ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String")
+	public HttpResponseResult<Object> dismissGroup(String imGroupId) {
+		imGroupService.dismissGroup(imGroupId,sysUserService.getUserId().toString());
+		return succeed();
+	}
+
+	@ApiOperation("退群")
+	@PostMapping(value = "/quitGroup")
+	@ApiImplicitParams({ @ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String"),
+			@ApiImplicitParam(name = "userId", value = "用户编号", required = true, dataType = "String")})
+	public Object quitGroup(String imGroupId, String userId) {
+		List<Integer> userIds = Arrays.stream(userId.split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
+		return succeed(imGroupMemberService.quit(imGroupId,userIds));
+	}
+
+	@ApiOperation("查询群列表")
+	@GetMapping(value = "/queryGroupList")
+	public HttpResponseResult<List<ImGroup>> queryGroupList(String search, String groupType) {
+		return succeed(imGroupService.queryByUserId(sysUserService.getUserId(), search,groupType));
+	}
+
+
+    @ApiOperation("查询群列表-v2")
+    @GetMapping(value = "/queryGroupList/v2")
+    public HttpResponseResult<List<ImGroup>> queryGroupListV2(String search, String groupType, String musicGroupId, String classType) {
+        if (StringUtils.isNotBlank(classType) && classType.equals("SINGLE")) {
+            classType = "NORMAL";
+        }
+        return succeed(imGroupService.queryByUserIdV2(sysUserService.getUserId(), search,groupType,musicGroupId,classType));
+    }
+
+	@ApiOperation("查询群详情")
+	@GetMapping(value = "/queryGroupDetail")
+	public HttpResponseResult<ImGroup> queryGroupDetail(String imGroupId) {
+		if (imGroupId.contains("S") || imGroupId.contains("I")){
+			imGroupId = imGroupId.substring(1);
+		}
+        ImGroup imGroup = imGroupService.get(imGroupId);
+
+        if (imGroup == null) {
+            return failed(HttpStatus.NO_CONTENT, "群组不存在");
+        }
+        ImGroupMemberPlus admin = imGroupMemberPlusService.lambdaQuery()
+            .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
+            .eq(ImGroupMemberPlus::getUserId, sysUserService.getUser().getId())
+            .last("limit 1").one();
+        if (admin == null) {
+            // 该用户不在该群,无权限查看,处理用户退出群后,查看历史消息校验
+            return failed(HttpStatus.NO_CONTENT, "群组不存在");
+        }
+		// 设置默认头像
+		if (Objects.nonNull(imGroup) && Objects.nonNull(imGroup.getGroupType()) && StringUtils.isBlank(imGroup.getImg())) {
+			imGroup.setImg(imGroup.getGroupType().getAvatar());
+		}
+		return succeed(imGroup);
+	}
+
+	@ApiOperation("查询群详情(重构版)")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "groupId", value = "群编号", required = true, dataType = "String")
+	})
+	@GetMapping(value = "/getDetail/{groupId}")
+	public HttpResponseResult<ImGroup> groupDetail(@PathVariable("groupId") String imGroupId) {
+		if (imGroupId.contains("S") || imGroupId.contains("I")){
+			imGroupId = imGroupId.substring(1);
+		}
+        ImGroup imGroup = imGroupService.get(imGroupId);
+
+        if (imGroup == null) {
+            return failed(HttpStatus.NO_CONTENT, "群组不存在");
+        }
+        ImGroupMemberPlus admin = imGroupMemberPlusService.lambdaQuery()
+            .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
+            .eq(ImGroupMemberPlus::getUserId, sysUserService.getUser().getId())
+            .last("limit 1").one();
+        if (admin == null) {
+            // 该用户不在该群,无权限查看,处理用户退出群后,查看历史消息校验
+            return failed(HttpStatus.NO_CONTENT, "群组不存在");
+        }
+		return succeed(imGroupService.get(imGroupId));
+	}
+
+	@ApiOperation("查询群成员列表")
+	@GetMapping(value = "/queryGroupMemberList")
+	public HttpResponseResult<List<ImGroupMemberDto>> queryGroupMemberList(String imGroupId) {
+		return succeed(imGroupService.queryMemberById(imGroupId));
+	}
+
+	@ApiOperation("查询群学生列表")
+	@GetMapping(value = "/queryGroupStudentList")
+	public HttpResponseResult<List<ImGroupMemberDto>> queryGroupStudentList(String imGroupId) {
+		return succeed(imGroupService.queryMemberById(imGroupId).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
+	}
+
+
+    @ApiOperation("查询群学生列表v2")
+    @GetMapping(value = "/queryGroupStudentList/v2")
+    public HttpResponseResult<List<ImGroupMemberDto>> queryGroupStudentListV2(String imGroupId, String search, Integer subjectId, Boolean vipFlag) {
+        return succeed(imGroupService.queryMemberByIdV2(imGroupId,search,subjectId,vipFlag).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
+    }
+
+	@ApiOperation("查询群成员详情")
+	@GetMapping(value = "/queryGroupMemberDetail")
+	public HttpResponseResult<ImGroupMemberDto> queryGroupMemberDetail(String imGroupId, Integer userId) {
+		return succeed(imGroupService.queryMember(imGroupId, userId));
+	}
+
+	@ApiOperation("查询好友详情")
+	@GetMapping(value = "/queryFriendDetail")
+	public HttpResponseResult<ImUserFriendDto> queryFriendDetail(Integer userId) {
+		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(sysUserService.getUserId(), userId);
+		if (dto == null) {
+			dto = new ImUserFriendDto();
+			SysUser user = sysUserService.queryUserById(userId);
+			dto.setFriend(user);
+
+			List<String> userTypes = Lists.newArrayList(user.getUserType().split(","));
+			if (userTypes.size() > 1
+				|| userTypes.contains(ClientEnum.TEACHER.getCode())
+				|| userTypes.contains(ClientEnum.SYSTEM.getCode())) {
+				// 增加用户身份数量 > 1 或者包含老师身份,统一使用实名
+				dto.setFriendNickname(Optional.ofNullable(user.getRealName()).filter(StringUtils::isNotBlank).orElse(user.getUsername()));
+			} else if (user.getUserType().contains("STUDENT") || user.getUserType().contains("SCHOOL")) {
+				dto.setFriendNickname(user.getUsername());
+			} else {
+				dto.setFriendNickname(user.getRealName());
+			}
+			dto.setFriendId(userId);
+		}
+		return succeed(dto);
+	}
+
+	@ApiOperation("查询好友详情(重构版)")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "userId", value = "用户编号", required = true, dataType = "Integer")
+	})
+	@GetMapping(value = "/imUserFriend/getDetail/{userId}")
+	public HttpResponseResult<ImUserWrapper.ImUserFriend> getImUserFriendDetail(@PathVariable("userId") Integer userId) {
+		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(sysUserService.getUserId(), userId);
+		if (dto == null) {
+			dto = new ImUserFriendDto();
+			SysUser user = sysUserService.queryUserById(userId);
+			dto.setFriend(user);
+			if (user.getUserType().contains("STUDENT") || user.getUserType().contains("SCHOOL")) {
+				dto.setFriendNickname(user.getUsername());
+			} else {
+				dto.setFriendNickname(user.getRealName());
+			}
+			dto.setFriendId(userId);
+		}
+
+		// 返回数据结构封装
+		ImUserWrapper.ImUserFriend userFriend = ImUserWrapper.ImUserFriend.builder()
+			.id(dto.getId())
+			.userId(dto.getUserId().longValue())
+			.friendId(dto.getFriendId().longValue())
+			.friendAvatar(dto.getFriend().getAvatar())
+			.friendNickname(dto.getFriendNickname())
+			.memo(dto.getMemo())
+			.updateTime(dto.getUpdateTime())
+			.createTime(dto.getCreateTime())
+			.roleType(dto.getRoleType())
+			.friendType(dto.getRoleType())
+			.build();
+		return succeed(userFriend);
+	}
+
+	@ApiOperation("查询好友列表")
+	@GetMapping(value = "/queryFriendList")
+	public HttpResponseResult<List<ImUserFriendDto>> queryFriendList(String search) {
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search));
+	}
+
+	@ApiOperation("查询好友列表(重构版)")
+	@GetMapping(value = "/imUserFriend/queryAll")
+	public HttpResponseResult<List<ImUserWrapper.ImUserFriend>> queryImUserFriendList(String search) {
+
+		// 好友关系列表
+		List<ImUserFriendDto> friendDtos = imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search);
+
+		List<ImUserWrapper.ImUserFriend> wrappers = Lists.newArrayList();
+		if (CollectionUtils.isNotEmpty(friendDtos)) {
+
+			// 封装返回数据结构
+			for (ImUserFriendDto item : friendDtos) {
+
+				wrappers.add(ImUserWrapper.ImUserFriend.builder()
+					.id(item.getId())
+					.userId(item.getUserId().longValue())
+					.friendId(item.getFriendId().longValue())
+					.friendAvatar(item.getFriend().getAvatar())
+					.friendNickname(item.getFriendNickname())
+					.memo(item.getMemo())
+					.roleType(item.getRoleType())
+					.friendType(item.getRoleType())
+					.updateTime(item.getUpdateTime())
+					.createTime(item.getCreateTime())
+					.build());
+			}
+		}
+
+		return succeed(wrappers);
+	}
+
+	@ApiOperation("查询好友中的学生列表")
+	@GetMapping(value = "/queryFriendStudentList")
+	public HttpResponseResult<List<ImUserFriendDto>> queryFriendStudentList(String search) {
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search).stream().filter(e -> StringUtils.isBlank(e.getTags()))
+				.collect(Collectors.toList()));
+	}
+
+
+    @ApiOperation("查询好友中的学生列表-v2")
+    @GetMapping(value = "/queryFriendStudentList/v2")
+    public HttpResponseResult<List<ImUserFriendDto>> queryFriendStudentListV2(String search, String musicGroupId, Integer subjectId, Boolean vipFlag) {
+        return succeed(imUserFriendService.queryFriendListByUserIdV2(sysUserService.getUserId(), search,musicGroupId,subjectId,vipFlag)
+                .stream().filter(e -> StringUtils.isBlank(e.getTags()))
+                .collect(Collectors.toList()));
+    }
+
+	@ApiOperation("查询群公告列表")
+	@GetMapping(value = "/queryNoticeList")
+	public HttpResponseResult<PageInfo<ImGroupNoticeDto>> queryNoticeList(ImGroupNoticeQueryInfo queryInfo) {
+		return succeed(imGroupNoticeService.queryPage(queryInfo));
+	}
+}

+ 71 - 0
mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupMemberController.java

@@ -0,0 +1,71 @@
+package com.ym.mec.web.controller.education;
+
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
+import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
+import com.ym.mec.biz.service.ImGroupMemberService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.Optional;
+
+@RequestMapping("${app-config.url.web:}/eduImGroupMember")
+@Api(tags = "IM群成员服务")
+@RestController
+public class EduImGroupMemberController extends BaseController {
+
+	@Resource
+	private ImGroupMemberService imGroupMemberService;
+
+	@ApiOperation(value = "群成员禁言", notes = "群成员禁言- 传入 ImGroupMemberVo.GroupMemberMute")
+	@PostMapping("/groupMute")
+	public HttpResponseResult<Object> groupMemberMute(@RequestBody ImGroupMemberWrapper.GroupMemberMute member) {
+		// 群成员不能为空
+		if (CollectionUtils.isEmpty(member.getUserIds())) {
+			throw BizException.from("群成员不能为空");
+		}
+		// 更新群成员禁言
+		imGroupMemberService.groupMemberMute(member);
+		return succeed();
+	}
+
+	@ApiOperation(value = "群成员身份设置", notes = "群成员身份设置- 传入 ImGroupMemberVo.GroupMemberRole")
+	@PostMapping("/groupRole")
+	public HttpResponseResult<Object> groupMemberRole(@RequestBody ImGroupMemberWrapper.GroupMemberRole member) {
+		// 群成员不能为空
+		if (CollectionUtils.isEmpty(member.getUserIds())) {
+			throw BizException.from("群成员不能为空");
+		}
+		// 更新群成员禁言
+		imGroupMemberService.groupMemberRole(member);
+		return succeed();
+	}
+
+	@ApiOperation("分页查询群成员列表")
+	@PostMapping(value = "/queryGroupMemberPage")
+	public HttpResponseResult<PageInfo<ImGroupMemberDto>> queryGroupMemberPage(GroupMemberQueryInfo queryInfo) {
+		return succeed(imGroupMemberService.queryGroupMemberPage(queryInfo));
+	}
+
+	@ApiOperation("添加群成员")
+	@PostMapping(value = "/addGroupMember")
+	@ApiImplicitParams({ @ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String"),
+			@ApiImplicitParam(name = "roleType", value = "指导老师,乐队指导,乐团主管,运营主管,学员不传", required = true, dataType = "String"),
+			@ApiImplicitParam(name = "userId", value = "用户编号(多个逗号分割)", required = true, dataType = "String")})
+	public Object addGroupMember(String imGroupId, String userId, String roleType) {
+		imGroupMemberService.batchJoin(imGroupId,userId,roleType);
+		return succeed();
+	}
+}

+ 8 - 8
mec-biz/pom.xml

@@ -49,17 +49,17 @@
 		<dependency>
 		<dependency>
 			<groupId>com.microsvc.toolkit.middleware</groupId>
 			<groupId>com.microsvc.toolkit.middleware</groupId>
 			<artifactId>microsvc-middleware-live</artifactId>
 			<artifactId>microsvc-middleware-live</artifactId>
-			<version>1.0.0</version>
+			<version>${com.microsvc.toolkit.version}</version>
 		</dependency>
 		</dependency>
 		<dependency>
 		<dependency>
 			<groupId>com.microsvc.toolkit.common</groupId>
 			<groupId>com.microsvc.toolkit.common</groupId>
 			<artifactId>microsvc-common-response</artifactId>
 			<artifactId>microsvc-common-response</artifactId>
-			<version>1.0.0</version>
+			<version>${com.microsvc.toolkit.version}</version>
 		</dependency>
 		</dependency>
 		<dependency>
 		<dependency>
 			<groupId>com.microsvc.toolkit.middleware</groupId>
 			<groupId>com.microsvc.toolkit.middleware</groupId>
 			<artifactId>microsvc-middleware-rtc</artifactId>
 			<artifactId>microsvc-middleware-rtc</artifactId>
-			<version>1.0.0</version>
+			<version>${com.microsvc.toolkit.version}</version>
 		</dependency>
 		</dependency>
 
 
 		<!--修复依赖冲突-->
 		<!--修复依赖冲突-->
@@ -70,22 +70,22 @@
 		<dependency>
 		<dependency>
 			<groupId>com.microsvc.toolkit.config</groupId>
 			<groupId>com.microsvc.toolkit.config</groupId>
 			<artifactId>microsvc-config-validator</artifactId>
 			<artifactId>microsvc-config-validator</artifactId>
-			<version>1.0.0</version>
+			<version>${com.microsvc.toolkit.version}</version>
 		</dependency>
 		</dependency>
         <dependency>
         <dependency>
             <groupId>com.microsvc.toolkit.config</groupId>
             <groupId>com.microsvc.toolkit.config</groupId>
             <artifactId>microsvc-config-jwt</artifactId>
             <artifactId>microsvc-config-jwt</artifactId>
-            <version>1.0.0</version>
+            <version>${com.microsvc.toolkit.version}</version>
         </dependency>
         </dependency>
 		<dependency>
 		<dependency>
 			<groupId>com.microsvc.toolkit.middleware</groupId>
 			<groupId>com.microsvc.toolkit.middleware</groupId>
 			<artifactId>microsvc-middleware-im</artifactId>
 			<artifactId>microsvc-middleware-im</artifactId>
-			<version>1.0.0</version>
+			<version>${com.microsvc.toolkit.version}</version>
 		</dependency>
 		</dependency>
 		<dependency>
 		<dependency>
 			<groupId>com.microsvc.toolkit.middleware</groupId>
 			<groupId>com.microsvc.toolkit.middleware</groupId>
 			<artifactId>microsvc-middleware-oss</artifactId>
 			<artifactId>microsvc-middleware-oss</artifactId>
-			<version>1.0.0</version>
+			<version>${com.microsvc.toolkit.version}</version>
 		</dependency>
 		</dependency>
 
 
 		<dependency>
 		<dependency>
@@ -106,7 +106,7 @@
 				</exclusion>
 				</exclusion>
 			</exclusions>
 			</exclusions>
 			<groupId>com.microsvc.toolkit.common</groupId>
 			<groupId>com.microsvc.toolkit.common</groupId>
-			<version>1.0.0</version>
+			<version>${com.microsvc.toolkit.version}</version>
 		</dependency>
 		</dependency>
 		<dependency>
 		<dependency>
 			<groupId>com.yonge.log</groupId>
 			<groupId>com.yonge.log</groupId>

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

@@ -5,6 +5,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.Set;
 
 
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 import com.ym.mec.biz.dal.entity.ImGroupMember;
 import com.ym.mec.biz.dal.entity.ImGroupMember;
@@ -60,4 +61,10 @@ public interface ImGroupMemberDao extends BaseDAO<Long, ImGroupMember> {
     List<ImGroupMember> getByGroupId(@Param("musicGroupIds") List<String> musicGroupId);
     List<ImGroupMember> getByGroupId(@Param("musicGroupIds") List<String> musicGroupId);
 
 
     void delByImGroupAndUserId(@Param("imGroupId") String imGroupId, @Param("userIds") List<Integer> userIds);
     void delByImGroupAndUserId(@Param("imGroupId") String imGroupId, @Param("userIds") List<Integer> userIds);
+
+    void updateGroupMemberMute(@Param("groupId") String groupId, @Param("userIds") List<String> userIds, @Param("groupMute") Boolean groupMute);
+
+    void batchUpdateGroupMemberRole(@Param("groupId") String groupId, @Param("userIds") List<String> userIds, @Param("groupRoleType") String groupRoleType);
+
+    List<ImGroupMemberWrapper.GroupMemberRole1> groupRoleInit(@Param("groupRoleType") String groupRoleType);
 }
 }

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

@@ -2,6 +2,9 @@ package com.ym.mec.biz.dal.entity;
 
 
 import com.ym.mec.common.entity.BaseEntity;
 import com.ym.mec.common.entity.BaseEntity;
 import com.ym.mec.common.enums.BaseEnum;
 import com.ym.mec.common.enums.BaseEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 
 /**
 /**
@@ -25,6 +28,9 @@ public class ImGroup extends BaseEntity {
 	
 	
 	/** 群备注 */
 	/** 群备注 */
 	private String memo;
 	private String memo;
+
+	@ApiModelProperty(value = "禁言配置")
+	private String configJson;
 	
 	
 	/** 群标签 */
 	/** 群标签 */
 	private String tags;
 	private String tags;
@@ -91,6 +97,13 @@ public class ImGroup extends BaseEntity {
 		}
 		}
 	}
 	}
 
 
+	public String getConfigJson() {
+		if (StringUtils.isEmpty(configJson)){
+			return "{mute: false}";
+		}
+		return configJson;
+	}
+
 	//群类型
 	//群类型
 	private GroupTypeEnum groupType;
 	private GroupTypeEnum groupType;
 
 
@@ -204,6 +217,10 @@ public class ImGroup extends BaseEntity {
 		this.importFlag = importFlag;
 		this.importFlag = importFlag;
 	}
 	}
 
 
+	public void setConfigJson(String configJson) {
+		this.configJson = configJson;
+	}
+
 	@Override
 	@Override
 	public String toString() {
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 		return ToStringBuilder.reflectionToString(this);

+ 76 - 82
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMember.java

@@ -1,8 +1,14 @@
 package com.ym.mec.biz.dal.entity;
 package com.ym.mec.biz.dal.entity;
 
 
+import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
+import com.ym.mec.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 
-import com.ym.mec.common.entity.BaseEntity;
+import java.util.Date;
 
 
 /**
 /**
  * 对应数据库表(im_group_member):
  * 对应数据库表(im_group_member):
@@ -10,156 +16,144 @@ import com.ym.mec.common.entity.BaseEntity;
 public class ImGroupMember extends BaseEntity {
 public class ImGroupMember extends BaseEntity {
 
 
 	/**  */
 	/**  */
+	@Getter
 	private Long id;
 	private Long id;
 	
 	
 	/**  */
 	/**  */
+	@Getter
 	private String imGroupId;
 	private String imGroupId;
 	
 	
 	/**  */
 	/**  */
+	@Getter
 	private Integer userId;
 	private Integer userId;
 	
 	
+	@Getter
 	private String nickname;
 	private String nickname;
 
 
-	/** 群昵称 */
+	@Getter
+	@ApiModelProperty(value = "群昵称")
 	private String groupNickname;
 	private String groupNickname;
 	
 	
-	/** 是否是管理员 */
+	@ApiModelProperty(value = "是否是管理员")
 	private boolean isAdmin;
 	private boolean isAdmin;
+
+	@Getter
+	@Setter
+	@ApiModelProperty(value = "是否禁言")
+	private Boolean muteFlag = false;
+
+	@Getter
+	@ApiModelProperty(value = "第三方群角色")
+	private String groupRoleType;
 	
 	
-	/** 群角色 */
+	@Getter
+	@ApiModelProperty(value = "群角色")
 	private String roleType;
 	private String roleType;
 
 
-
-    /** 群角色 */
+	@Getter
+	@ApiModelProperty(value = "群角色")
     private String type;
     private String type;
 
 
+	@Getter
 	private Integer memberRankSettingId;
 	private Integer memberRankSettingId;
 
 
+	@Getter
 	private String subjectName;
 	private String subjectName;
 
 
+	@Getter
 	private String subjectId;
 	private String subjectId;
 
 
+	@Getter
 	private String avatar;
 	private String avatar;
 	
 	
 	/**  */
 	/**  */
+	@Getter
 	private java.util.Date createTime;
 	private java.util.Date createTime;
 	
 	
 	/**  */
 	/**  */
+	@Getter
 	private java.util.Date updateTime;
 	private java.util.Date updateTime;
 
 
+	private ImGroup.GroupTypeEnum groupType;
 
 
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-	public String getSubjectId() {
-		return subjectId;
+	public ImGroup.GroupTypeEnum getGroupType() {
+		return groupType;
 	}
 	}
 
 
-	public void setSubjectId(String subjectId) {
-		this.subjectId = subjectId;
-	}
-
-	public Integer getMemberRankSettingId() {
-		return memberRankSettingId;
-	}
-
-	public void setMemberRankSettingId(Integer memberRankSettingId) {
-		this.memberRankSettingId = memberRankSettingId;
+	public void setGroupType(ImGroup.GroupTypeEnum groupType) {
+		this.groupType = groupType;
 	}
 	}
 
 
-	public String getSubjectName() {
-		return subjectName;
-	}
-
-	public void setSubjectName(String subjectName) {
-		this.subjectName = subjectName;
-	}
-
-	public void setId(Long id){
+	public void setId(Long id) {
 		this.id = id;
 		this.id = id;
 	}
 	}
-	
-	public Long getId(){
-		return this.id;
-	}
-			
-	public void setImGroupId(String imGroupId){
+
+	public void setImGroupId(String imGroupId) {
 		this.imGroupId = imGroupId;
 		this.imGroupId = imGroupId;
 	}
 	}
-	
-	public String getImGroupId(){
-		return this.imGroupId;
-	}
-			
-	public void setUserId(Integer userId){
+
+	public void setUserId(Integer userId) {
 		this.userId = userId;
 		this.userId = userId;
 	}
 	}
-	
-	public Integer getUserId(){
-		return this.userId;
-	}
-			
-	public String getNickname() {
-		return nickname;
-	}
 
 
 	public void setNickname(String nickname) {
 	public void setNickname(String nickname) {
 		this.nickname = nickname;
 		this.nickname = nickname;
 	}
 	}
 
 
-	public void setIsAdmin(boolean isAdmin){
-		this.isAdmin = isAdmin;
+	public void setGroupNickname(String groupNickname) {
+		this.groupNickname = groupNickname;
 	}
 	}
-	
-	public boolean getIsAdmin(){
-		return this.isAdmin;
+
+	public boolean getIsAdmin() {
+		return isAdmin;
+	}
+
+	public void setIsAdmin(boolean admin) {
+		isAdmin = admin;
+		if (admin){
+			this.groupRoleType = EImGroupRoleType.Owner.getCode();
+		}
 	}
 	}
 
 
-	public String getRoleType() {
-		return roleType;
+	public void setGroupRoleType(String groupRoleType) {
+		this.groupRoleType = groupRoleType;
 	}
 	}
 
 
 	public void setRoleType(String roleType) {
 	public void setRoleType(String roleType) {
 		this.roleType = roleType;
 		this.roleType = roleType;
+		if(StringUtils.isEmpty(this.groupRoleType)){
+			this.groupRoleType = StringUtils.isEmpty(roleType)?EImGroupRoleType.Member.getCode():EImGroupRoleType.Admin.getCode();
+		}
 	}
 	}
 
 
-	public void setCreateTime(java.util.Date createTime){
-		this.createTime = createTime;
-	}
-	
-	public java.util.Date getCreateTime(){
-		return this.createTime;
-	}
-			
-	public void setUpdateTime(java.util.Date updateTime){
-		this.updateTime = updateTime;
-	}
-	
-	public java.util.Date getUpdateTime(){
-		return this.updateTime;
+	public void setType(String type) {
+		this.type = type;
 	}
 	}
 
 
-	public String getGroupNickname() {
-		return groupNickname;
+	public void setMemberRankSettingId(Integer memberRankSettingId) {
+		this.memberRankSettingId = memberRankSettingId;
 	}
 	}
 
 
-	public void setGroupNickname(String groupNickname) {
-		this.groupNickname = groupNickname;
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
 	}
 	}
 
 
-	public String getAvatar() {
-		return avatar;
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
 	}
 	}
 
 
 	public void setAvatar(String avatar) {
 	public void setAvatar(String avatar) {
 		this.avatar = avatar;
 		this.avatar = avatar;
 	}
 	}
 
 
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
 	@Override
 	@Override
 	public String toString() {
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 		return ToStringBuilder.reflectionToString(this);

+ 3 - 30
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMemberPlus.java

@@ -17,50 +17,32 @@ import java.util.Date;
 @TableName("im_group_member")
 @TableName("im_group_member")
 public class ImGroupMemberPlus implements Serializable {
 public class ImGroupMemberPlus implements Serializable {
 
 
-    /**
-     *
-     */
     @TableId(value = "id_", type = IdType.AUTO)
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
     private Long id;
 
 
-    /**
-     *
-     */
     @TableField(value = "im_group_id_")
     @TableField(value = "im_group_id_")
     private String imGroupId;
     private String imGroupId;
 
 
-    /**
-     *
-     */
     @TableField(value = "user_id_")
     @TableField(value = "user_id_")
     private Integer userId;
     private Integer userId;
 
 
     @TableField(value = "nickname_")
     @TableField(value = "nickname_")
     private String nickname;
     private String nickname;
 
 
-    /**
-     * 群昵称
-     */
     @TableField(exist = false)
     @TableField(exist = false)
     private String groupNickname;
     private String groupNickname;
 
 
-    /**
-     * 是否是管理员
-     */
     @ApiModelProperty("是否是管理员")
     @ApiModelProperty("是否是管理员")
     @TableField(value = "is_admin_")
     @TableField(value = "is_admin_")
     private Boolean isAdmin;
     private Boolean isAdmin;
 
 
-    /**
-     * 群角色
-     */
     @TableField(value = "role_type_")
     @TableField(value = "role_type_")
     private String roleType;
     private String roleType;
 
 
+    @ApiModelProperty(value = "第三方群角色")
+    @TableField(value = "group_role_type_")
+    private String groupRoleType;
 
 
-    /**
-     * 群角色
-     */
     @TableField(value = "type_")
     @TableField(value = "type_")
     private String type;
     private String type;
 
 
@@ -73,21 +55,12 @@ public class ImGroupMemberPlus implements Serializable {
     @TableField(exist = false)
     @TableField(exist = false)
     private String subjectId;
     private String subjectId;
 
 
-    /**
-     * 头像
-     */
     @TableField(exist = false)
     @TableField(exist = false)
     private String avatar;
     private String avatar;
 
 
-    /**
-     *
-     */
     @TableField(value = "create_time_")
     @TableField(value = "create_time_")
     private Date createTime;
     private Date createTime;
 
 
-    /**
-     *
-     */
     @TableField(value = "update_time_")
     @TableField(value = "update_time_")
     private Date updateTime;
     private Date updateTime;
 
 

+ 13 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EFriendRoleType.java

@@ -14,7 +14,9 @@ public enum EFriendRoleType implements BaseEnum<Integer, EFriendRoleType> {
     MAINTENANCE_TECHNICIAN(6,"维护技师"),
     MAINTENANCE_TECHNICIAN(6,"维护技师"),
     ORCHESTRA_TEACHER(7,"指导老师"),
     ORCHESTRA_TEACHER(7,"指导老师"),
     STUDENT(8,"学生"),
     STUDENT(8,"学生"),
-    UNDEFINE(9,""),
+    BAND_DIRECTOR(9,"乐队指导"),
+    BRIDGING_TEACHER(10,"衔接老师"),
+    UNDEFINE(11,""),
 
 
 
 
     ;
     ;
@@ -40,12 +42,15 @@ public enum EFriendRoleType implements BaseEnum<Integer, EFriendRoleType> {
                 return SCHOOL_TEACHER;
                 return SCHOOL_TEACHER;
             case "STUDENT":
             case "STUDENT":
                 return STUDENT;
                 return STUDENT;
+            case "BRIDGING_TEACHER":
+                return BRIDGING_TEACHER;
+            case "BAND_DIRECTOR":
+                return BAND_DIRECTOR;
             case "乐团主管":
             case "乐团主管":
             case "ORCHESTRA_MANAGER":
             case "ORCHESTRA_MANAGER":
                 return ORCHESTRA_MANAGER;
                 return ORCHESTRA_MANAGER;
             case "指导老师":
             case "指导老师":
                 return ORCHESTRA_TEACHER;
                 return ORCHESTRA_TEACHER;
-
             case "校长":
             case "校长":
                 return SCHOOLMASTER;
                 return SCHOOLMASTER;
             case "乐团领队":
             case "乐团领队":
@@ -56,9 +61,13 @@ public enum EFriendRoleType implements BaseEnum<Integer, EFriendRoleType> {
                 return SCHOOL_TEACHER;
                 return SCHOOL_TEACHER;
             case "维护技师":
             case "维护技师":
                 return SCHOOL_TEACHER;
                 return SCHOOL_TEACHER;
+            case "衔接老师":
+                return BRIDGING_TEACHER;
+            case "乐队指导":
+                return BAND_DIRECTOR;
             default:
             default:
-//                return STUDENT;
-                return UNDEFINE;
+                return STUDENT;
+//                return UNDEFINE;
         }
         }
     }
     }
 
 

+ 39 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/im/EImGroupRoleType.java

@@ -0,0 +1,39 @@
+package com.ym.mec.biz.dal.enums.im;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.microsvc.toolkit.common.enums.ConverterEnum;
+import lombok.Getter;
+
+/**
+ * 群组成员角色
+ */
+@Getter
+public enum EImGroupRoleType implements ConverterEnum<String> {
+
+    Owner("群主"),
+    Admin("管理员"),
+    Member("群成员"),
+    ;
+
+    private final String msg;
+
+    @EnumValue
+    private final String code;
+
+    EImGroupRoleType(String msg) {
+        this.msg = msg;
+
+        this.code = this.name();
+    }
+
+    // ClientType -> EImGroupRoleType
+    public static EImGroupRoleType fromClientType(String clientType) {
+        switch (clientType) {
+            case "TEACHER":
+                return Admin;
+            case "STUDENT":
+            default:
+                return Member;
+        }
+    }
+}

+ 6 - 14
mec-biz/src/main/java/com/ym/mec/biz/dal/page/GroupMemberQueryInfo.java

@@ -2,7 +2,9 @@ package com.ym.mec.biz.dal.page;
 
 
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 
+@Data
 public class GroupMemberQueryInfo extends QueryInfo {
 public class GroupMemberQueryInfo extends QueryInfo {
 
 
     @ApiModelProperty(value = "群编号")
     @ApiModelProperty(value = "群编号")
@@ -11,19 +13,9 @@ public class GroupMemberQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "角色")
     @ApiModelProperty(value = "角色")
     private String roleType;
     private String roleType;
 
 
-    public String getRoleType() {
-        return roleType;
-    }
+    @ApiModelProperty("群禁言状态")
+    private Boolean groupMute;
 
 
-    public void setRoleType(String roleType) {
-        this.roleType = roleType;
-    }
-
-    public String getImGroupId() {
-        return imGroupId;
-    }
-
-    public void setImGroupId(String imGroupId) {
-        this.imGroupId = imGroupId;
-    }
+    @ApiModelProperty("群成员身份")
+    private String groupRoleType;
 }
 }

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

@@ -2,11 +2,16 @@ package com.ym.mec.biz.dal.wrapper;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.webportal.validation.annotation.EnumValidation;
+import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
+import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
+import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Optional;
 
 
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
@@ -15,6 +20,9 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 /**
 /**
  * 群成员表
  * 群成员表
  * 2023-08-29 17:18:04
  * 2023-08-29 17:18:04
@@ -84,11 +92,14 @@ public class ImGroupMemberWrapper {
         private String nickname;
         private String nickname;
 
 
         @ApiModelProperty("是否是管理员")
         @ApiModelProperty("是否是管理员")
-        private Boolean isAdmin;
+        private Boolean isAdmin = false;
 
 
         @ApiModelProperty("群角色TEACHER老师、STUDENT学生")
         @ApiModelProperty("群角色TEACHER老师、STUDENT学生")
         private String roleType;
         private String roleType;
 
 
+        @ApiModelProperty(value = "群角色")
+        private String type;
+
         @ApiModelProperty("修改时间")
         @ApiModelProperty("修改时间")
         private Date updateTime;
         private Date updateTime;
 
 
@@ -104,6 +115,8 @@ public class ImGroupMemberWrapper {
         @ApiModelProperty("机构ID")
         @ApiModelProperty("机构ID")
         private Integer tenantId = TenantContextHolder.getTenantId();
         private Integer tenantId = TenantContextHolder.getTenantId();
 
 
+        private String groupRoleType;
+
         public static ImGroupMember from(String json) {
         public static ImGroupMember from(String json) {
             return JSON.parseObject(json, ImGroupMember.class);
             return JSON.parseObject(json, ImGroupMember.class);
         }
         }
@@ -141,4 +154,69 @@ public class ImGroupMemberWrapper {
         }
         }
     }
     }
 
 
+    @Data
+    @ApiModel(" GroupMemberMute-群成员禁言")
+    public static class GroupMemberMute implements Serializable {
+
+        @ApiModelProperty(value = "群ID",required = true)
+        private String groupId;
+
+//        @ApiModelProperty("禁言时长(分钟), 0取消禁方;不能小于0")
+//        private Integer muteTime;
+
+        @ApiModelProperty("群禁言状态")
+        private Boolean groupMute;
+
+        @ApiModelProperty("群成员ID")
+        private List<String> userIds;
+
+        /*public Integer getMuteTime() {
+            // 禁言时长不能小于0,最小为1分钟
+            if (Objects.nonNull(muteTime) && muteTime < 0) {
+                return 1;
+            }
+            return Optional.ofNullable(muteTime).orElse(0);
+        }*/
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+    }
+
+    @Data
+    @ApiModel(" GroupMemberMute-群成员角色")
+    public static class GroupMemberRole implements Serializable {
+
+        @ApiModelProperty(value = "群ID",required = true)
+        private String groupId;
+
+        @ApiModelProperty("群成员身份")
+        private EImGroupRoleType groupRoleType;
+
+        @ApiModelProperty("群成员ID")
+        private List<String> userIds;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+    }
+
+    @Data
+    @ApiModel(" GroupMemberMute-群成员角色")
+    public static class GroupMemberRole1 implements Serializable {
+
+        @ApiModelProperty(value = "群ID",required = true)
+        private String groupId;
+
+        @ApiModelProperty("群成员身份")
+        private String groupRoleType;
+
+        @ApiModelProperty("群成员ID")
+        private Integer userId;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+    }
+
 }
 }

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

@@ -7,7 +7,10 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Builder;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
@@ -143,4 +146,49 @@ public class ImGroupWrapper {
         }
         }
 
 
     }
     }
+
+    @Data
+    @ApiModel(" GroupMuteAll-群组禁言")
+    public static class GroupMuteAll implements Serializable {
+
+        @ApiModelProperty(value = "群ID",required = true)
+        private String groupId;
+
+        @ApiModelProperty(value = "是否禁言",required = true)
+        private Boolean muteAll;
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("配置信息")
+    public static class ConfigJson implements Serializable {
+
+        @ApiModelProperty("群聊禁言(1:禁言,管理员可以发言,0:不禁言)")
+        private Boolean mute = false;
+
+        public static ConfigJson from(String json) {
+            if (StringUtils.isBlank(json)) {
+                return new ConfigJson();
+            }
+            return JSON.parseObject(json, ConfigJson.class);
+        }
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("转交群主")
+    public static class GroupTransferOwner {
+        @ApiModelProperty(value = "群ID",required = true)
+        private String imGroupId;
+
+        @ApiModelProperty("新群主ID")
+        private String userId;
+
+        @ApiModelProperty("当前群主")
+        private String currentOwner;
+    }
 }
 }

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

@@ -596,7 +596,7 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
     void batchUpdateLockByClassGroupIds(List<Integer> classGroupIds,int lockFlag);
     void batchUpdateLockByClassGroupIds(List<Integer> classGroupIds,int lockFlag);
 
 
     //修改班级基本信息
     //修改班级基本信息
-    int updateClassGroup(ClassGroup classGroup);
+    int updateClassGroup(ClassGroup classGroup) throws Exception;
 
 
     /**
     /**
      * 查询班级列表
      * 查询班级列表

+ 16 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupMemberService.java

@@ -1,10 +1,12 @@
 package com.ym.mec.biz.service;
 package com.ym.mec.biz.service;
 
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.ImGroupMemberDao;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
 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.page.GroupMemberQueryInfo;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
+import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 import com.ym.mec.common.service.BaseService;
 
 
@@ -13,6 +15,8 @@ import java.util.Map;
 
 
 public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 
 
+	ImGroupMemberDao getDao();
+
 	/**
 	/**
 	 * 加入群组
 	 * 加入群组
 	 * @param imGroupId 群编号
 	 * @param imGroupId 群编号
@@ -23,6 +27,10 @@ public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 	 */
 	 */
 	boolean join(String imGroupId, Integer userId, String roleType, boolean isAdmin);
 	boolean join(String imGroupId, Integer userId, String roleType, boolean isAdmin);
 
 
+	void initImGroupMember(ImGroupMember imGroupMember, ImGroup.GroupTypeEnum groupType);
+
+	void initImGroupMembers(List<ImGroupMember> imGroupMembers, ImGroup.GroupTypeEnum groupType);
+
 	/**
 	/**
 	 * 加入群组
 	 * 加入群组
 	 * @param imGroupId 群编号
 	 * @param imGroupId 群编号
@@ -49,14 +57,6 @@ public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 	boolean quit(String imGroupId, Integer userId);
 	boolean quit(String imGroupId, Integer userId);
 
 
 	/**
 	/**
-	 * 退出指定群组
-	 * @param imGroupIdList 群组编号列表
-	 * @param userId 用户编号
-	 * @return
-	 */
-	boolean quit(List<String> imGroupIdList, Integer userId);
-
-	/**
 	 * 用户批量退出群组
 	 * 用户批量退出群组
 	 * @param imGroupId 群组编号
 	 * @param imGroupId 群组编号
 	 * @param userIdList 学生编号
 	 * @param userIdList 学生编号
@@ -76,30 +76,22 @@ public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 	void batchInsert(List<ImGroupMember> imGroupMemberList);
 	void batchInsert(List<ImGroupMember> imGroupMemberList);
 
 
 	/**
 	/**
-	 * 批量删除
-	 * @param imGroupMemberList
-	 */
-	void batchDelete(List<ImGroupMember> imGroupMemberList);
-
-	/**
 	 * 根据群编号和用户编号批量删除
 	 * 根据群编号和用户编号批量删除
 	 * @param imGroupMemberList
 	 * @param imGroupMemberList
 	 */
 	 */
 	void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList);
 	void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList);
 
 
-	/**
-	 * 是否在群里
-	 * @param groupId
-	 * @param userId
-	 * @return
-	 */
-	boolean isExit(String groupId, String userId);
-
 	void delRepeat();
 	void delRepeat();
 
 
-	List<ImGroupMember> queryMembers(String groupId, List<String> userIdList, Integer tenantId);
-
 	PageInfo<ImGroupMemberDto> queryGroupMemberPage(GroupMemberQueryInfo queryInfo);
 	PageInfo<ImGroupMemberDto> queryGroupMemberPage(GroupMemberQueryInfo queryInfo);
 
 
 	void batchJoin(String imGroupId, String userId, String roleType);
 	void batchJoin(String imGroupId, String userId, String roleType);
+
+	// 群成员禁言
+    void groupMemberMute(ImGroupMemberWrapper.GroupMemberMute member);
+
+	// 群成员身份设置
+	void groupMemberRole(ImGroupMemberWrapper.GroupMemberRole member);
+
+	void groupMemberRole1(ImGroupMemberWrapper.GroupMemberRole member);
 }
 }

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

@@ -92,7 +92,7 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
     void updateImGroup(ImGroup imGroup);
     void updateImGroup(ImGroup imGroup);
 
 
     //解散群组
     //解散群组
-    void dismissGroup(String imGroupId);
+    void dismissGroup(String imGroupId,String userId);
 
 
     /**
     /**
      * @description: 获取群聊、用户详情
      * @description: 获取群聊、用户详情
@@ -134,7 +134,6 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
      * @param userId 用户id
      * @param userId 用户id
      * @param imGroupId     群组id
      * @param imGroupId     群组id
      */
      */
-    @Transactional(rollbackFor = Exception.class)
     Boolean  groupChangeOwner(Integer userId, String imGroupId) throws Exception;
     Boolean  groupChangeOwner(Integer userId, String imGroupId) throws Exception;
 
 
     /**
     /**
@@ -225,6 +224,10 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
 
 
     void deleteGroup();
     void deleteGroup();
 
 
-    @Transactional(rollbackFor = Exception.class)
     void delGroup(String imGroupId);
     void delGroup(String imGroupId);
+
+    void muteAll(ImGroupWrapper.GroupMuteAll groupMuteAll);
+
+    void transferOwner(ImGroupWrapper.GroupTransferOwner groupTransferOwner);
+
 }
 }

+ 0 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/im/ImGroupCoreService.java

@@ -93,14 +93,6 @@ public interface ImGroupCoreService {
     void saveImGroupMemberList(String groupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception;
     void saveImGroupMemberList(String groupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception;
 
 
     /**
     /**
-     * 添加群组成员
-     * @param imGroupId 群组主键ID
-     * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
-     * @throws Exception Exception
-     */
-    void saveImGroupMemberList(Long imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception;
-
-    /**
      * 群成员加入
      * 群成员加入
      * @param imGroupId 群主ID
      * @param imGroupId 群主ID
      * @param groupMembers 群成员
      * @param groupMembers 群成员
@@ -109,15 +101,6 @@ public interface ImGroupCoreService {
     void groupMemberJoin(String imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception;
     void groupMemberJoin(String imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception;
 
 
     /**
     /**
-     * 添加进入群组
-     *
-     * @param userId 用户ID
-     * @param clientType 客户端类型
-     * @param imGroupId 群组ID
-     */
-    void groupJoin(Long userId, String clientType, String imGroupId) throws Exception;
-
-    /**
      * 转让群主
      * 转让群主
      *
      *
      * @param groupId 群组ID
      * @param groupId 群组ID

+ 79 - 72
mec-biz/src/main/java/com/ym/mec/biz/service/im/impl/ImGroupCoreServiceImpl.java

@@ -7,12 +7,15 @@ import com.google.common.collect.Lists;
 import com.microsvc.toolkit.common.tools.ThreadPool;
 import com.microsvc.toolkit.common.tools.ThreadPool;
 import com.microsvc.toolkit.middleware.im.ImPluginContext;
 import com.microsvc.toolkit.middleware.im.ImPluginContext;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
+import com.microsvc.toolkit.middleware.im.message.TencentWrapper;
 import com.ym.mec.biz.dal.entity.ImGroupMemberPlus;
 import com.ym.mec.biz.dal.entity.ImGroupMemberPlus;
 import com.ym.mec.biz.dal.entity.ImGroupPlus;
 import com.ym.mec.biz.dal.entity.ImGroupPlus;
 import com.ym.mec.biz.dal.enums.EFriendRoleType;
 import com.ym.mec.biz.dal.enums.EFriendRoleType;
+import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.ImGroupMemberPlusService;
 import com.ym.mec.biz.service.ImGroupMemberPlusService;
+import com.ym.mec.biz.service.ImGroupMemberService;
 import com.ym.mec.biz.service.ImGroupPlusService;
 import com.ym.mec.biz.service.ImGroupPlusService;
 import com.ym.mec.biz.service.im.ImGroupCoreService;
 import com.ym.mec.biz.service.im.ImGroupCoreService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.exception.BizException;
@@ -43,6 +46,8 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
     private ImGroupPlusService imGroupService;
     private ImGroupPlusService imGroupService;
     @Autowired
     @Autowired
     private ImGroupMemberPlusService imGroupMemberPlusService;
     private ImGroupMemberPlusService imGroupMemberPlusService;
+    @Autowired
+    private ImGroupMemberService imGroupMemberService;
 
 
     /**
     /**
      * IM 用户注册
      * IM 用户注册
@@ -175,8 +180,24 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
 
 
         if (userInfo != null) {
         if (userInfo != null) {
             // 添加群成员到当前群组
             // 添加群成员到当前群组
-            imPluginContext.getPluginService().groupJoin(imGroup.getGroupId(), imGroup.getName(),
-                    getImGroupMembers(groupMembers));
+            List<GroupMemberWrapper.ImGroupMember> imGroupMembers = getImGroupMembers(groupMembers);
+            imPluginContext.getPluginService().groupJoin(imGroup.getGroupId(), imGroup.getName(),imGroupMembers);
+            //设置管理员
+            groupMembers.stream().filter(o -> StringUtils.isNotEmpty(o.getGroupRoleType()) && !StringUtils.equals(o.getGroupRoleType(),"Member")).forEach(o -> {
+                try {
+                    imPluginContext.getPluginService().groupAdminCreate(o.getGroupId(), o.getImUserId());
+                } catch (Exception e) {
+                    log.error("groupAdminCreate error", e);
+                }
+            });
+            //转让群主
+            imGroupMembers.stream().filter(GroupMemberWrapper.ImGroupMember::getIsAdmin).forEach(o -> {
+                try {
+                    changeGroupOwner(imGroup.getGroupId(), o.getImUserId(), null);
+                } catch (Exception e) {
+                    log.error("changeGroupOwner error", e);
+                }
+            });
         }
         }
         return group.getId();
         return group.getId();
     }
     }
@@ -194,7 +215,7 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
             imGroupMember.setRoleType(o.getRoleType());
             imGroupMember.setRoleType(o.getRoleType());
             imGroupMember.setType(EFriendRoleType.getByName(o.getRoleType()).name());
             imGroupMember.setType(EFriendRoleType.getByName(o.getRoleType()).name());
             imGroupMember.setTenantId(o.getTenantId());
             imGroupMember.setTenantId(o.getTenantId());
-
+            imGroupMember.setGroupRoleType(o.getGroupRoleType());
             return imGroupMember;
             return imGroupMember;
         }).collect(Collectors.toList());
         }).collect(Collectors.toList());
 
 
@@ -256,15 +277,6 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
      */
      */
     @Override
     @Override
     public void groupDismiss(String groupId) throws Exception {
     public void groupDismiss(String groupId) throws Exception {
-
-        // 判定登录用户是否为群主
-        ImGroupPlus imGroup = imGroupService.lambdaQuery().eq(ImGroupPlus::getId, groupId).last("LIMIT 1").one();
-        if (Objects.isNull(imGroup)) {
-            //throw new BizException("群组不存在");
-            return;
-        }
-
-
         // 获取群成员
         // 获取群成员
         List<ImGroupMemberWrapper.ImGroupMember> groupMembers = imGroupMemberPlusService.lambdaQuery()
         List<ImGroupMemberWrapper.ImGroupMember> groupMembers = imGroupMemberPlusService.lambdaQuery()
                 .select(ImGroupMemberPlus::getUserId, ImGroupMemberPlus::getImGroupId, ImGroupMemberPlus::getRoleType)
                 .select(ImGroupMemberPlus::getUserId, ImGroupMemberPlus::getImGroupId, ImGroupMemberPlus::getRoleType)
@@ -280,7 +292,7 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
         imGroupMemberPlusService.remove(Wrappers.<ImGroupMemberPlus>lambdaQuery().eq(ImGroupMemberPlus::getImGroupId, groupId));
         imGroupMemberPlusService.remove(Wrappers.<ImGroupMemberPlus>lambdaQuery().eq(ImGroupMemberPlus::getImGroupId, groupId));
 
 
         // 解散群
         // 解散群
-        imPluginContext.getPluginService().groupDismiss(imGroup.getId(), getImGroupMembers(groupMembers));
+        imPluginContext.getPluginService().groupDismiss(groupId, getImGroupMembers(groupMembers));
 
 
     }
     }
 
 
@@ -435,34 +447,31 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
 
 
             // 过滤出需要添加到群组的成员
             // 过滤出需要添加到群组的成员
             groupMembers = groupMembers.stream().filter(ImGroupMemberWrapper.ImGroupMember::getGroupJoin).collect(Collectors.toList());
             groupMembers = groupMembers.stream().filter(ImGroupMemberWrapper.ImGroupMember::getGroupJoin).collect(Collectors.toList());
-
             // 添加群成员到当前群组
             // 添加群成员到当前群组
-            imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), getImGroupMembers(groupMembers));
+            List<GroupMemberWrapper.ImGroupMember> imGroupMembers = getImGroupMembers(groupMembers);
+            imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), imGroupMembers);
+            //设置管理员
+            groupMembers.stream().filter(o -> StringUtils.isNotEmpty(o.getGroupRoleType()) && !StringUtils.equals(o.getGroupRoleType(),"Member")).forEach(o -> {
+                try {
+                    imPluginContext.getPluginService().groupAdminCreate(imGroupId, o.getImUserId());
+                } catch (Exception e) {
+                    log.error("groupAdminCreate error", e);
+                }
+            });
+            //转让群主
+            imGroupMembers.stream().filter(GroupMemberWrapper.ImGroupMember::getIsAdmin).forEach(o -> {
+                try {
+                    changeGroupOwner(imGroup.getId(), o.getImUserId(), null);
+                } catch (Exception e) {
+                    log.error("changeGroupOwner error", e);
+                }
+            });
 
 
             // 自动激活用户
             // 自动激活用户
             asyncRegisterUser(groupMembers);
             asyncRegisterUser(groupMembers);
         }
         }
     }
     }
 
 
-    /**
-     * 添加群组成员
-     *
-     * @param imGroupId    群组主键ID
-     * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
-     * @throws Exception Exception
-     */
-    @Override
-    public void saveImGroupMemberList(Long imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception {
-
-        // 群组信息
-        ImGroupPlus imGroup = imGroupService.getById(imGroupId);
-        if (Objects.isNull(imGroup)) {
-            throw new BizException("群组不存在");
-        }
-
-        // 添加群组成员信息
-        saveImGroupMemberList(imGroup.getId(), groupMembers);
-    }
 
 
     /**
     /**
      * 群成员加入
      * 群成员加入
@@ -479,16 +488,30 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
         if (Objects.isNull(imGroup)) {
         if (Objects.isNull(imGroup)) {
             throw new BizException("群组不存在");
             throw new BizException("群组不存在");
         }
         }
-
         // 添加群组成员信息
         // 添加群组成员信息
         if (CollectionUtils.isEmpty(groupMembers)) {
         if (CollectionUtils.isEmpty(groupMembers)) {
             // 群成员为空,直接忽略
             // 群成员为空,直接忽略
             return;
             return;
         }
         }
-
         // 添加群成员到当前群组
         // 添加群成员到当前群组
-        imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), getImGroupMembers(groupMembers));
-
+        List<GroupMemberWrapper.ImGroupMember> imGroupMembers = getImGroupMembers(groupMembers);
+        imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(),imGroupMembers);
+        //设置管理员
+        groupMembers.stream().filter(o -> StringUtils.isNotEmpty(o.getGroupRoleType()) && !StringUtils.equals(o.getGroupRoleType(),"Member")).forEach(o -> {
+            try {
+                imPluginContext.getPluginService().groupAdminCreate(imGroupId, o.getImUserId());
+            } catch (Exception e) {
+                log.error("groupAdminCreate error", e);
+            }
+        });
+        //转让群主
+        imGroupMembers.stream().filter(GroupMemberWrapper.ImGroupMember::getIsAdmin).forEach(o -> {
+            try {
+                changeGroupOwner(imGroup.getId(), o.getImUserId(), null);
+            } catch (Exception e) {
+                log.error("changeGroupOwner error", e);
+            }
+        });
         // 自动激活用户
         // 自动激活用户
         asyncRegisterUser(groupMembers);
         asyncRegisterUser(groupMembers);
 
 
@@ -511,39 +534,6 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
             .update();
             .update();
     }
     }
 
 
-
-    /**
-     * 添加进入群组
-     *
-     * @param userId     用户ID
-     * @param clientType 客户端类型
-     * @param imGroupId  群组ID
-     */
-    @Override
-    public void groupJoin(Long userId, String clientType, String imGroupId) throws Exception {
-
-        // 群组信息
-        ImGroupPlus imGroup = imGroupService.getById(imGroupId);
-        if (Objects.isNull(imGroup)) {
-            throw new BizException("群组不存在");
-        }
-
-        List<ImGroupMemberWrapper.ImGroupMember> imGroupMembers = new ArrayList<>();
-        ImGroupMemberWrapper.ImGroupMember groupMember = ImGroupMemberWrapper.ImGroupMember
-                .builder()
-                .groupId(imGroup.getId())
-                .userId(userId)
-                .clientType(clientType)
-                .imUserId(getImUserId(userId.toString(),clientType))
-                .isAdmin(false)
-                .roleType(clientType)
-                .tenantId(imGroup.getTenantId())
-                .build();
-        imGroupMembers.add(groupMember);
-
-        saveImGroupMemberList(imGroupId, imGroupMembers);
-    }
-
     /**
     /**
      * 转让群主
      * 转让群主
      *
      *
@@ -553,9 +543,26 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
      */
      */
     @Override
     @Override
     public void changeGroupOwner(String groupId, String newOwner, String oldOwner) throws Exception {
     public void changeGroupOwner(String groupId, String newOwner, String oldOwner) throws Exception {
-
+        if(StringUtils.isEmpty(oldOwner)){
+            //获取群主信息
+            TencentWrapper.GroupInfoResult groupInfo = imPluginContext.getPluginService().getGroupInfo(groupId);
+            List<TencentWrapper.GroupInfo> groupInfoList = groupInfo.getGroupInfo();
+            if(CollectionUtils.isNotEmpty(groupInfoList)){
+                oldOwner = groupInfoList.get(0).getOwnerAccount();
+            }
+        }
         // 转主群主
         // 转主群主
         imPluginContext.getPluginService().changeGroupOwner(groupId, newOwner, oldOwner);
         imPluginContext.getPluginService().changeGroupOwner(groupId, newOwner, oldOwner);
+        //设置管理员
+        if(StringUtils.isNotEmpty(oldOwner)){
+            ImGroupMemberPlus one = imGroupMemberPlusService.lambdaQuery().eq(ImGroupMemberPlus::getImGroupId, groupId)
+                    .eq(ImGroupMemberPlus::getUserId, Long.parseLong(oldOwner)).last("LIMIT 1").one();
+            if(Objects.nonNull(one)){
+                if(StringUtils.isNotEmpty(one.getGroupRoleType()) && !StringUtils.equals(one.getGroupRoleType(),"Member")){
+                    imPluginContext.getPluginService().groupAdminCreate(groupId, oldOwner);
+                }
+            }
+        }
     }
     }
 
 
     /**
     /**

+ 11 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.microsvc.toolkit.middleware.im.ImPluginContext;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Maps;
@@ -168,7 +169,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private CooperationOrganService cooperationOrganService;
     private CooperationOrganService cooperationOrganService;
     @Autowired
     @Autowired
     private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
     private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
-
+    @Autowired
+    private ImPluginContext imPluginContext;
     @Autowired
     @Autowired
     private ImLiveBroadcastRoomMemberService imLiveBroadcastRoomMemberService;
     private ImLiveBroadcastRoomMemberService imLiveBroadcastRoomMemberService;
 
 
@@ -260,7 +262,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             teacherIdList.add(tm.getUserId());
             teacherIdList.add(tm.getUserId());
         }
         }
 
 
-        if (teacherMapperList.size() > 0) {
+        if (CollectionUtils.isNotEmpty(teacherMapperList)) {
             classGroupTeacherMapperService.getDao().classGroupTeachersInsert(teacherMapperList);
             classGroupTeacherMapperService.getDao().classGroupTeachersInsert(teacherMapperList);
         }
         }
 
 
@@ -285,12 +287,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
 
             userIdList.add(Integer.parseInt(userId));
             userIdList.add(Integer.parseInt(userId));
         }
         }
-        if (classGroupStudentList.size() > 0) {
+        if (CollectionUtils.isNotEmpty(classGroupStudentList)) {
             classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentList);
             classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentList);
         }
         }
 
 
         // 加入IM群组
         // 加入IM群组
-        if (userIdList.size() > 0) {
+        if (CollectionUtils.isNotEmpty(userIdList)) {
             addImGroup(classGroup, userIdList, teacherIdList);
             addImGroup(classGroup, userIdList, teacherIdList);
         } else {
         } else {
             MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
             MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
@@ -304,7 +306,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             if (musicGroup.getTransactionTeacherId() != null) {
             if (musicGroup.getTransactionTeacherId() != null) {
                 userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
                 userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
             }
             }
-            if (teacherIdList != null && teacherIdList.size() > 0) {
+            if (CollectionUtils.isNotEmpty(teacherIdList)) {
                 for (Integer teacherId : teacherIdList) {
                 for (Integer teacherId : teacherIdList) {
                     userRoleMap.put(teacherId, "指导老师");
                     userRoleMap.put(teacherId, "指导老师");
                 }
                 }
@@ -1552,7 +1554,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //删除班级
         //删除班级
         classGroupDao.delete(classGroupId);
         classGroupDao.delete(classGroupId);
         //删除im群组
         //删除im群组
-        imGroupService.cancel(classGroupId.toString());
+        imGroupService.dismissGroup(classGroupId.toString(),null);
     }
     }
 
 
     @Override
     @Override
@@ -3590,7 +3592,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
 
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public int updateClassGroup(ClassGroup classGroup) {
+    public int updateClassGroup(ClassGroup classGroup) throws Exception {
         ClassGroup group = classGroupDao.get(classGroup.getId());
         ClassGroup group = classGroupDao.get(classGroup.getId());
         if (Objects.isNull(group)) {
         if (Objects.isNull(group)) {
             throw new BizException("班级信息不存在");
             throw new BizException("班级信息不存在");
@@ -3604,6 +3606,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (!Objects.isNull(imGroup)) {
         if (!Objects.isNull(imGroup)) {
             imGroup.setName(groupName);
             imGroup.setName(groupName);
             imGroupService.update(imGroup);
             imGroupService.update(imGroup);
+            imPluginContext.getPluginService().modifyGroupInfo(imGroup.getId(),imGroup.getName(),imGroup.getImg());
         }
         }
         return 1;
         return 1;
     }
     }
@@ -3948,7 +3951,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             userRoleMap.put(userId, "");
             userRoleMap.put(userId, "");
         }
         }
 
 
-        if (teacherIdList != null && teacherIdList.size() > 0) {
+        if (CollectionUtils.isNotEmpty(teacherIdList)) {
             for (Integer teacherId : teacherIdList) {
             for (Integer teacherId : teacherIdList) {
                 userRoleMap.put(teacherId, "指导老师");
                 userRoleMap.put(teacherId, "指导老师");
             }
             }

+ 11 - 20
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -22,7 +22,9 @@ import com.microsvc.toolkit.middleware.im.ImPluginContext;
 import com.microsvc.toolkit.middleware.im.impl.RongCloudImPlugin;
 import com.microsvc.toolkit.middleware.im.impl.RongCloudImPlugin;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.dal.enums.EFriendRoleType;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
+import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.biz.service.*;
@@ -528,6 +530,9 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                 imGroupMember.setImGroupId(imGroupModel.getId());
                 imGroupMember.setImGroupId(imGroupModel.getId());
                 imGroupMember.setIsAdmin(false);
                 imGroupMember.setIsAdmin(false);
                 imGroupMember.setRoleType(imGroupModel.getUserRole());
                 imGroupMember.setRoleType(imGroupModel.getUserRole());
+                if(StringUtils.isNotEmpty(imGroupModel.getUserRole())){
+                    imGroupMember.setType(EFriendRoleType.getByName(imGroupModel.getUserRole()).name());
+                }
                 imGroupMember.setUpdateTime(date);
                 imGroupMember.setUpdateTime(date);
                 imGroupMember.setUserId(Integer.parseInt(userId));
                 imGroupMember.setUserId(Integer.parseInt(userId));
                 imGroupMember.setNickname(realNameMap.get(imGroupMember.getUserId()));
                 imGroupMember.setNickname(realNameMap.get(imGroupMember.getUserId()));
@@ -543,6 +548,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                     .isAdmin(false)
                     .isAdmin(false)
                     .userId(Long.valueOf(userId))
                     .userId(Long.valueOf(userId))
                     .imUserId(userId)
                     .imUserId(userId)
+                    .groupRoleType(imGroupMember.getGroupRoleType())
                     .nickname(realNameMap.get(imGroupMember.getUserId()))
                     .nickname(realNameMap.get(imGroupMember.getUserId()))
                     .updateTime(DateTime.now().toDate())
                     .updateTime(DateTime.now().toDate())
                     .createTime(DateTime.now().toDate())
                     .createTime(DateTime.now().toDate())
@@ -562,21 +568,17 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                     for (Map.Entry<String, List<ImGroupMemberWrapper.ImGroupMember>> entry : imGroupMembers.entrySet()) {
                     for (Map.Entry<String, List<ImGroupMemberWrapper.ImGroupMember>> entry : imGroupMembers.entrySet()) {
 
 
                         try {
                         try {
-                            // 获取用户头象
-//                            List<Integer> collect1 = entry.getValue().stream()
-//                                .map(x -> x.getUserId().intValue()).distinct().collect(Collectors.toList());
-//
-//                            Map<Integer, String> avatarMap = teacherDao.getUsersSimpleInfo(collect1).stream()
-//                                .collect(Collectors.toMap(SimpleUserDto::getUserId, SimpleUserDto::getAvatar, (o, n) -> n));
-
                             // 设置用户默认头象
                             // 设置用户默认头象
                             for (ImGroupMemberWrapper.ImGroupMember member : entry.getValue()) {
                             for (ImGroupMemberWrapper.ImGroupMember member : entry.getValue()) {
 //                                member.setAvatar(avatarMap.getOrDefault(member.getUserId().intValue(), ""));
 //                                member.setAvatar(avatarMap.getOrDefault(member.getUserId().intValue(), ""));
                                 SysUser user = teacherDao.getUser(member.getUserId().intValue());
                                 SysUser user = teacherDao.getUser(member.getUserId().intValue());
-
                                 // 用户头像
                                 // 用户头像
                                 member.setAvatar(sysUserService.getImAvatar(user));
                                 member.setAvatar(sysUserService.getImAvatar(user));
-                                member.setNickname(sysUserService.getImName(user));
+                                if(StringUtils.isNotEmpty(member.getRoleType())){
+                                    member.setNickname(StringUtils.isEmpty(user.getRealName())?user.getUsername():user.getRealName());
+                                }else {
+                                    member.setNickname(StringUtils.isEmpty(user.getUsername())?user.getRealName():user.getUsername());
+                                }
                             }
                             }
                             // 腾讯云用户加群
                             // 腾讯云用户加群
                             imGroupCoreService.groupMemberJoin(entry.getKey(), entry.getValue());
                             imGroupCoreService.groupMemberJoin(entry.getKey(), entry.getValue());
@@ -629,17 +631,6 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                     for (Map.Entry<String, List<GroupMemberWrapper.ImGroupMember>> entry : groupMembers.entrySet()) {
                     for (Map.Entry<String, List<GroupMemberWrapper.ImGroupMember>> entry : groupMembers.entrySet()) {
 
 
                         try {
                         try {
-                            // 获取用户头象
-//                            List<Integer> collect1 = entry.getValue().stream()
-//                                .map(x -> x.getUserId().intValue()).distinct().collect(Collectors.toList());
-//
-//                            Map<Integer, String> avatarMap = teacherDao.getUsersSimpleInfo(collect1).stream()
-//                                .collect(Collectors.toMap(SimpleUserDto::getUserId, SimpleUserDto::getAvatar, (o, n) -> n));
-//
-//                            // 设置用户默认头象
-//                            for (GroupMemberWrapper.ImGroupMember member : entry.getValue()) {
-//                                member.setAvatar(avatarMap.getOrDefault(member.getUserId().intValue(), ""));
-//                            }
                             // 用户退群
                             // 用户退群
                             imGroupCoreService.groupQuit(entry.getValue(), entry.getKey());
                             imGroupCoreService.groupQuit(entry.getValue(), entry.getKey());
                         } catch (Exception e) {
                         } catch (Exception e) {

+ 314 - 90
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java

@@ -3,13 +3,14 @@ package com.ym.mec.biz.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
 import com.microsvc.toolkit.middleware.im.ImPluginContext;
 import com.microsvc.toolkit.middleware.im.ImPluginContext;
+import com.microsvc.toolkit.middleware.im.ImPluginService;
 import com.microsvc.toolkit.middleware.im.impl.RongCloudImPlugin;
 import com.microsvc.toolkit.middleware.im.impl.RongCloudImPlugin;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
-import com.ym.mec.biz.dal.dto.im.BasicUserInfo;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.EFriendRoleType;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
@@ -26,12 +27,13 @@ import com.ym.mec.im.entity.GroupMember;
 import com.ym.mec.im.entity.GroupModel;
 import com.ym.mec.im.entity.GroupModel;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.joda.time.DateTime;
 import org.joda.time.DateTime;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.*;
 import java.util.Map.Entry;
 import java.util.Map.Entry;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -39,41 +41,40 @@ import java.util.stream.Collectors;
 @Slf4j
 @Slf4j
 @Service
 @Service
 public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMember> implements ImGroupMemberService {
 public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMember> implements ImGroupMemberService {
-	@Autowired
+	@Resource
 	private ImGroupMemberDao imGroupMemberDao;
 	private ImGroupMemberDao imGroupMemberDao;
-	@Autowired
+	@Resource
 	private ImGroupDao imGroupDao;
 	private ImGroupDao imGroupDao;
-	@Autowired
+	@Resource
 	private ImGroupService imGroupService;
 	private ImGroupService imGroupService;
-	@Autowired
+	@Resource
 	private TeacherDao teacherDao;
 	private TeacherDao teacherDao;
-	@Autowired
+	@Resource
 	private ClassGroupDao classGroupDao;
 	private ClassGroupDao classGroupDao;
-	@Autowired
+	@Resource
 	private MusicGroupDao musicGroupDao;
 	private MusicGroupDao musicGroupDao;
-	@Autowired
+	@Resource
 	private PracticeGroupDao practiceGroupDao;
 	private PracticeGroupDao practiceGroupDao;
-	@Autowired
+	@Resource
 	private VipGroupDao vipGroupDao;
 	private VipGroupDao vipGroupDao;
-	@Autowired
+	@Resource
 	private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
 	private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
-	@Autowired
+	@Resource
 	private ClassGroupStudentMapperDao classGroupStudentMapperDao;
 	private ClassGroupStudentMapperDao classGroupStudentMapperDao;
-	@Autowired
+	@Resource
 	private ImFeignService imFeignService;
 	private ImFeignService imFeignService;
-	@Autowired
+	@Resource
 	private ImGroupCoreService imGroupCoreService;
 	private ImGroupCoreService imGroupCoreService;
-	@Autowired
+	@Resource
 	private ImPluginContext imPluginContext;
 	private ImPluginContext imPluginContext;
-
-    @Autowired
+    @Resource
     private SysUserService sysUserService;
     private SysUserService sysUserService;
 	@Override
 	@Override
 	public BaseDAO<Long, ImGroupMember> getDAO() {
 	public BaseDAO<Long, ImGroupMember> getDAO() {
 		return imGroupMemberDao;
 		return imGroupMemberDao;
 	}
 	}
 
 
-	public ImGroup joinGroup(String imGroupId, Integer userId, String roleType, boolean isAdmin,Map<Integer,String> userRoleMap){
+	public void joinGroup(String imGroupId, Integer userId, String roleType, boolean isAdmin, Map<Integer,String> userRoleMap){
 		int groupId = Integer.parseInt(imGroupId);
 		int groupId = Integer.parseInt(imGroupId);
 		ClassGroup classGroup = classGroupDao.get(groupId);
 		ClassGroup classGroup = classGroupDao.get(groupId);
 		String tags = classGroup.getName();
 		String tags = classGroup.getName();
@@ -119,13 +120,17 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 			}
 			}
 			tags = vipGroup.getName();
 			tags = vipGroup.getName();
 		}
 		}
-		ImGroup imGroup = imGroupService.create(imGroupId, null, classGroup.getName(), tags,
+		imGroupService.create(imGroupId, null, classGroup.getName(), tags,
 				tags, tags, null, classGroup.getGroupType().getCode(), ImGroup.GroupTypeEnum.valueOf(classGroup.getType().getCode()));
 				tags, tags, null, classGroup.getGroupType().getCode(), ImGroup.GroupTypeEnum.valueOf(classGroup.getType().getCode()));
 		if(userId != null){
 		if(userId != null){
 			join(imGroupId,userId,roleType,isAdmin);
 			join(imGroupId,userId,roleType,isAdmin);
 		}
 		}
 		join(imGroupId,userRoleMap);
 		join(imGroupId,userRoleMap);
-		return imGroup;
+	}
+
+	@Override
+	public ImGroupMemberDao getDao() {
+		return imGroupMemberDao;
 	}
 	}
 
 
 	@Override
 	@Override
@@ -137,27 +142,28 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 			return true;
 			return true;
 		}
 		}
 		//检查用户是否已存在
 		//检查用户是否已存在
-		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), userId.toString());
-		if(imGroupMemberList != null && imGroupMemberList.size() > 0){
+		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId, userId.toString());
+		if(CollectionUtils.isNotEmpty(imGroupMemberList)){
 			return true;
 			return true;
 		}
 		}
-
 		ImGroupMember imGroupMember = new ImGroupMember();
 		ImGroupMember imGroupMember = new ImGroupMember();
 		Date date = new Date();
 		Date date = new Date();
-
+		imGroupMember.setGroupType(imGroup.getGroupType());
 		imGroupMember.setCreateTime(date);
 		imGroupMember.setCreateTime(date);
 		imGroupMember.setImGroupId(imGroupId);
 		imGroupMember.setImGroupId(imGroupId);
 		imGroupMember.setIsAdmin(isAdmin);
 		imGroupMember.setIsAdmin(isAdmin);
+		SysUser user = teacherDao.getUser(userId);
 		imGroupMember.setRoleType(roleType);
 		imGroupMember.setRoleType(roleType);
+		if(StringUtils.isNotEmpty(roleType)){
+			imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
+			imGroupMember.setNickname(StringUtils.isEmpty(user.getRealName())?user.getUsername():user.getRealName());
+		}else {
+			imGroupMember.setNickname(StringUtils.isEmpty(user.getUsername())?user.getRealName():user.getUsername());
+		}
 		imGroupMember.setUpdateTime(date);
 		imGroupMember.setUpdateTime(date);
 		imGroupMember.setUserId(userId);
 		imGroupMember.setUserId(userId);
-//		if (StringUtils.isBlank(roleType)) {
-//			imGroupMember.setNickname(user.getUsername()==null?user.getRealName():user.getUsername());
-//		} else {
-//			imGroupMember.setNickname(user.getRealName()==null?user.getUsername():user.getRealName());
-//		}
-        SysUser user = teacherDao.getUser(userId);
-        imGroupMember.setNickname(sysUserService.getImName(user));
+		//初始化群主数据
+		this.initImGroupMember(imGroupMember,imGroup.getGroupType());
 
 
 		imGroupMemberDao.insert(imGroupMember);
 		imGroupMemberDao.insert(imGroupMember);
 
 
@@ -177,11 +183,13 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 
 
 				groupMembers.add(ImGroupMemberWrapper.ImGroupMember.builder()
 				groupMembers.add(ImGroupMemberWrapper.ImGroupMember.builder()
 						.groupId(groupId)
 						.groupId(groupId)
-						.isAdmin(isAdmin)
-						.roleType(roleType)
+						.isAdmin(imGroupMember.getIsAdmin())
+						.roleType(imGroupMember.getRoleType())
+						.type(imGroupMember.getType())
 						.nickname(imGroupMember.getNickname())
 						.nickname(imGroupMember.getNickname())
 						.userId(userId.longValue())
 						.userId(userId.longValue())
 						.imUserId(userId.toString())
 						.imUserId(userId.toString())
+						.groupRoleType(imGroupMember.getGroupRoleType())
 						.avatar(sysUserService.getImAvatar(user))
 						.avatar(sysUserService.getImAvatar(user))
 						.updateTime(DateTime.now().toDate())
 						.updateTime(DateTime.now().toDate())
 						.createTime(DateTime.now().toDate())
 						.createTime(DateTime.now().toDate())
@@ -196,6 +204,133 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 	}
 	}
 
 
 	@Override
 	@Override
+	public void initImGroupMember(ImGroupMember imGroupMember, ImGroup.GroupTypeEnum groupType){
+		try {
+			List<GroupMemberWrapper.Member> members = imPluginContext.getPluginService().groupUserGagList(imGroupMember.getImGroupId());
+			if(CollectionUtils.isNotEmpty(members)){
+				List<String> imGroupUserIds = members.stream().map(e -> e.getId()).collect(Collectors.toList());
+				if(CollectionUtils.isNotEmpty(imGroupUserIds)){
+					if(imGroupUserIds.contains(imGroupMember.getUserId().toString())){
+						imGroupMember.setMuteFlag(true);
+					}
+				}
+			}
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		//是否有群主
+		if(!imGroupMember.getIsAdmin()){
+			ImGroupMember admin = imGroupMemberDao.getAdmin(imGroupMember.getImGroupId());
+			if(Objects.nonNull(admin)){
+				return;
+			}
+			switch (groupType) {
+				case NORMAL:
+				case MIX:
+				case HIGH:
+				case SNAP:
+				case HIGH_ONLINE:
+				case MUSIC_NETWORK:
+				case PARENT_MEETING:
+					if("乐团主管".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+					}
+					break;
+				case VIP:
+				case DEMO:
+				case PRACTICE:
+				case COMM:
+				case REPERTOIRE_PLAY:
+				case LIVE:
+					if("指导老师".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+					}
+					break;
+				case TRAINING:
+					if("分部经理".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+					}
+					break;
+				case SCHOOL:
+					if("乐团领队".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+					}
+					break;
+			}
+		}
+	}
+
+	@Override
+	public void initImGroupMembers(List<ImGroupMember> imGroupMembers, ImGroup.GroupTypeEnum groupType){
+		if (CollectionUtils.isEmpty(imGroupMembers)) {
+			return;
+		}
+		String imGroupId = imGroupMembers.get(0).getImGroupId();
+		try {
+			List<GroupMemberWrapper.Member> members = imPluginContext.getPluginService().groupUserGagList(imGroupId);
+			if(CollectionUtils.isNotEmpty(members)){
+				List<String> imGroupUserIds = members.stream().map(e -> e.getId()).collect(Collectors.toList());
+				if(CollectionUtils.isNotEmpty(imGroupUserIds)){
+					for (ImGroupMember imGroupMember : imGroupMembers) {
+						if(imGroupUserIds.contains(imGroupMember.getUserId().toString())){
+							imGroupMember.setMuteFlag(true);
+						}
+					}
+				}
+			}
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		//是否有群主
+		long count = imGroupMembers.stream().filter(e -> e.getIsAdmin()).count();
+		if(count > 0){
+			return;
+		}
+		ImGroupMember admin = imGroupMemberDao.getAdmin(imGroupId);
+		if(Objects.nonNull(admin)){
+			return;
+		}
+		for (ImGroupMember imGroupMember : imGroupMembers) {
+			switch (groupType) {
+				case NORMAL:
+				case MIX:
+				case HIGH:
+				case SNAP:
+				case HIGH_ONLINE:
+				case MUSIC_NETWORK:
+				case PARENT_MEETING:
+					if("乐团主管".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+						return;
+					}
+					break;
+				case VIP:
+				case DEMO:
+				case PRACTICE:
+				case COMM:
+				case REPERTOIRE_PLAY:
+				case LIVE:
+					if("指导老师".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+						return;
+					}
+					break;
+				case TRAINING:
+					if("分部经理".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+						return;
+					}
+					break;
+				case SCHOOL:
+					if("乐团领队".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+						return;
+					}
+					break;
+			}
+		}
+	}
+
 	@Transactional(rollbackFor = Exception.class)
 	@Transactional(rollbackFor = Exception.class)
 	public boolean join(String imGroupId,String roleType, boolean isAdmin,ImGroup imGroup,SysUser user) {
 	public boolean join(String imGroupId,String roleType, boolean isAdmin,ImGroup imGroup,SysUser user) {
 		if (imGroup == null) {
 		if (imGroup == null) {
@@ -206,8 +341,8 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 			return true;
 			return true;
 		}
 		}
 		//检查用户是否已存在
 		//检查用户是否已存在
-		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), user.getId().toString());
-		if(imGroupMemberList != null && imGroupMemberList.size() > 0){
+		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId, user.getId().toString());
+		if(CollectionUtils.isNotEmpty(imGroupMemberList)){
 			return true;
 			return true;
 		}
 		}
 
 
@@ -218,23 +353,22 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		imGroupMember.setImGroupId(imGroupId);
 		imGroupMember.setImGroupId(imGroupId);
 		imGroupMember.setIsAdmin(isAdmin);
 		imGroupMember.setIsAdmin(isAdmin);
 		imGroupMember.setRoleType(roleType);
 		imGroupMember.setRoleType(roleType);
+		if(StringUtils.isNotEmpty(roleType)){
+			imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
+			imGroupMember.setNickname(StringUtils.isEmpty(user.getRealName())?user.getUsername():user.getRealName());
+		}else {
+			imGroupMember.setNickname(StringUtils.isEmpty(user.getUsername())?user.getRealName():user.getUsername());
+		}
 		imGroupMember.setUpdateTime(date);
 		imGroupMember.setUpdateTime(date);
 		imGroupMember.setUserId(user.getId());
 		imGroupMember.setUserId(user.getId());
-//		if (StringUtils.isBlank(roleType)) {
-//			imGroupMember.setNickname(user.getUsername()==null?user.getRealName():user.getUsername());
-//		} else {
-//			imGroupMember.setNickname(user.getRealName()==null?user.getUsername():user.getRealName());
-//		}
-
-
-        imGroupMember.setNickname(sysUserService.getImName(user));
+		this.initImGroupMember(imGroupMember,imGroup.getGroupType());
 		imGroupMemberDao.insert(imGroupMember);
 		imGroupMemberDao.insert(imGroupMember);
 
 
 		imGroup.setMemberNum(1);
 		imGroup.setMemberNum(1);
 		imGroup.setUpdateTime(date);
 		imGroup.setUpdateTime(date);
 		imGroupDao.update(imGroup);
 		imGroupDao.update(imGroup);
 
 
-		String groupId = imGroup.getId().toString();
+		String groupId = imGroup.getId();
 
 
 		if (RongCloudImPlugin.PLUGIN_NAME.equals(imPluginContext.defaultService())) {
 		if (RongCloudImPlugin.PLUGIN_NAME.equals(imPluginContext.defaultService())) {
 			// 融云IM用户加群
 			// 融云IM用户加群
@@ -251,7 +385,9 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 						.imUserId(imGroupMember.getUserId().toString())
 						.imUserId(imGroupMember.getUserId().toString())
 						.nickname(imGroupMember.getNickname())
 						.nickname(imGroupMember.getNickname())
 						.isAdmin(imGroupMember.getIsAdmin())
 						.isAdmin(imGroupMember.getIsAdmin())
+						.groupRoleType(imGroupMember.getGroupRoleType())
 						.roleType(imGroupMember.getRoleType())
 						.roleType(imGroupMember.getRoleType())
+						.type(imGroupMember.getType())
 						.avatar(sysUserService.getImAvatar(user))
 						.avatar(sysUserService.getImAvatar(user))
 					.build());
 					.build());
 				// 腾讯云IM用户加群
 				// 腾讯云IM用户加群
@@ -299,11 +435,12 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 			if(StringUtils.isEmpty(entry.getValue())){
 			if(StringUtils.isEmpty(entry.getValue())){
 				usernameIds.add(entry.getKey());
 				usernameIds.add(entry.getKey());
 			}else {
 			}else {
+				imGroupMember.setType(EFriendRoleType.getByName(entry.getValue()).name());
 				realNameIds.add(entry.getKey());
 				realNameIds.add(entry.getKey());
 			}
 			}
 			imGroupMember.setUpdateTime(date);
 			imGroupMember.setUpdateTime(date);
 			imGroupMember.setUserId(entry.getKey());
 			imGroupMember.setUserId(entry.getKey());
-//			imGroupMember.setNickname(nameIdMap.get(imGroupMember.getUserId()));
+			this.initImGroupMember(imGroupMember,imGroup.getGroupType());
 			imGroupMemberList.add(imGroupMember);
 			imGroupMemberList.add(imGroupMember);
 			groupMemberList.add(new GroupMember(imGroupMember.getUserId().toString(), groupId));
 			groupMemberList.add(new GroupMember(imGroupMember.getUserId().toString(), groupId));
 
 
@@ -313,20 +450,23 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 					.userId(imGroupMember.getUserId().longValue())
 					.userId(imGroupMember.getUserId().longValue())
 					.imUserId(imGroupMember.getUserId().toString())
 					.imUserId(imGroupMember.getUserId().toString())
 					.isAdmin(imGroupMember.getIsAdmin())
 					.isAdmin(imGroupMember.getIsAdmin())
+					.nickname(imGroupMember.getNickname())
+					.groupRoleType(imGroupMember.getGroupRoleType())
 					.roleType(imGroupMember.getRoleType())
 					.roleType(imGroupMember.getRoleType())
+					.type(imGroupMember.getType())
 					.updateTime(imGroupMember.getUpdateTime())
 					.updateTime(imGroupMember.getUpdateTime())
 					.createTime(imGroupMember.getCreateTime())
 					.createTime(imGroupMember.getCreateTime())
 				.build());
 				.build());
 		}
 		}
 
 
 
 
-		if (imGroupMemberList.size() > 0) {
+		if (CollectionUtils.isNotEmpty(imGroupMemberList)) {
 			Map<Integer, String> usernameMap = new HashMap<>();
 			Map<Integer, String> usernameMap = new HashMap<>();
 			Map<Integer, String> realNameMap = new HashMap<>();
 			Map<Integer, String> realNameMap = new HashMap<>();
-			if(usernameIds.size() > 0){
+			if(CollectionUtils.isNotEmpty(usernameIds)){
 				usernameMap = MapUtil.convertIntegerMap(teacherDao.queryUserNameByIdList(usernameIds));
 				usernameMap = MapUtil.convertIntegerMap(teacherDao.queryUserNameByIdList(usernameIds));
 			}
 			}
-			if(realNameIds.size() > 0){
+			if(CollectionUtils.isNotEmpty(realNameIds)){
 				realNameMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(realNameIds));
 				realNameMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(realNameIds));
 			}
 			}
 			for (ImGroupMember imGroupMember : imGroupMemberList) {
 			for (ImGroupMember imGroupMember : imGroupMemberList) {
@@ -336,6 +476,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 					imGroupMember.setNickname(realNameMap.get(imGroupMember.getUserId()));
 					imGroupMember.setNickname(realNameMap.get(imGroupMember.getUserId()));
 				}
 				}
 			}
 			}
+			this.initImGroupMembers(imGroupMemberList,imGroup.getGroupType());
 			imGroupMemberDao.batchInsert(imGroupMemberList);
 			imGroupMemberDao.batchInsert(imGroupMemberList);
 			imGroup.setMemberNum(imGroupMemberList.size());
 			imGroup.setMemberNum(imGroupMemberList.size());
 			imGroup.setUpdateTime(date);
 			imGroup.setUpdateTime(date);
@@ -346,19 +487,19 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 				imFeignService.groupJoin(new GroupModel(groupId, groupMemberList.stream().toArray(GroupMember[]::new), imGroup.getName()));
 				imFeignService.groupJoin(new GroupModel(groupId, groupMemberList.stream().toArray(GroupMember[]::new), imGroup.getName()));
 			} else {
 			} else {
 				try {
 				try {
+					List<SysUser> userList = teacherDao.getUserList(groupMembers.stream().map(e -> e.getUserId()).collect(Collectors.toList()));
+					Map<Integer,SysUser> userMap = userList.stream().collect(Collectors.toMap(SysUser::getId, e -> e));
 					for (ImGroupMemberWrapper.ImGroupMember item : groupMembers) {
 					for (ImGroupMemberWrapper.ImGroupMember item : groupMembers) {
-						// 用户昵称
-//						if (StringUtils.isBlank(item.getRoleType())) {
-//							item.setNickname(usernameMap.get(item.getUserId().intValue()));
-//						} else {
-//							item.setNickname(realNameMap.get(item.getUserId().intValue()));
-//						}
-//						item.setImUserId(item.getUserId().toString());
-                        SysUser user = teacherDao.getUser(item.getUserId().intValue());
-
-                        // 用户头像
-						item.setAvatar(sysUserService.getImAvatar(user));
-						item.setNickname(sysUserService.getImName(user));
+                        SysUser user = userMap.get(item.getUserId().intValue());
+						if (user != null) {
+							// 用户头像
+							item.setAvatar(sysUserService.getImAvatar(user));
+							if(StringUtils.isNotEmpty(item.getRoleType())){
+								item.setNickname(StringUtils.isEmpty(user.getRealName())?user.getUsername():user.getRealName());
+							}else {
+								item.setNickname(StringUtils.isEmpty(user.getUsername())?user.getRealName():user.getUsername());
+							}
+						}
 					}
 					}
 					// 腾讯云IM用户加群
 					// 腾讯云IM用户加群
 					imGroupCoreService.groupMemberJoin(groupId, groupMembers);
 					imGroupCoreService.groupMemberJoin(groupId, groupMembers);
@@ -382,15 +523,6 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 
 
 	@Override
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@Transactional(rollbackFor = Exception.class)
-	public boolean quit(List<String> imGroupIdList, Integer userId) {
-		for (String imGroupId : imGroupIdList) {
-			quit(imGroupId, userId);
-		}
-		return true;
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
 	public boolean quit(String imGroupId, List<Integer> userIdList) {
 	public boolean quit(String imGroupId, List<Integer> userIdList) {
 
 
 		ImGroup imGroup = imGroupDao.getLocked(imGroupId);
 		ImGroup imGroup = imGroupDao.getLocked(imGroupId);
@@ -446,20 +578,31 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 	public boolean updateRoleType(String imGroupId, Integer userId, String roleType) {
 	public boolean updateRoleType(String imGroupId, Integer userId, String roleType) {
 		List<Integer> userIdList = new ArrayList<Integer>();
 		List<Integer> userIdList = new ArrayList<Integer>();
 		userIdList.add(userId);
 		userIdList.add(userId);
-		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), userIdList.stream().map(Objects::toString)
+		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId, userIdList.stream().map(Objects::toString)
 				.collect(Collectors.joining(",")));
 				.collect(Collectors.joining(",")));
 
 
-		if (imGroupMemberList == null || imGroupMemberList.size() == 0) {
+		if (CollectionUtils.isEmpty(imGroupMemberList)) {
 			throw new BizException("更新失败:找不到用户信息");
 			throw new BizException("更新失败:找不到用户信息");
 		}
 		}
-
 		Date date = new Date();
 		Date date = new Date();
-		for (ImGroupMember imGroupMember : imGroupMemberList) {
-			imGroupMember.setRoleType(roleType);
-			imGroupMember.setUpdateTime(date);
+		ImGroupMember imGroupMember = imGroupMemberList.get(0);
+		imGroupMember.setGroupRoleType(null);
+		imGroupMember.setRoleType(roleType);
+		imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
+		imGroupMember.setUpdateTime(date);
+		ImGroup group = imGroupDao.get(imGroupId);
+		if(!imGroupMember.getIsAdmin()){
+			this.initImGroupMembers(imGroupMemberList,group.getGroupType());
+			if(imGroupMember.getIsAdmin()){
+				try {
+					imPluginContext.getPluginService().changeGroupOwner(imGroupId,imGroupMember.getUserId().toString(),null);
+				} catch (Exception e) {
+					log.error(e.getMessage());
+					throw new BizException("更新失败:设置群主异常");
+				}
+			}
 		}
 		}
-		imGroupMemberDao.batchUpdate(imGroupMemberList);
-
+		imGroupMemberDao.update(imGroupMember);
 		return true;
 		return true;
 	}
 	}
 
 
@@ -468,33 +611,23 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		imGroupMemberDao.batchInsert(imGroupMemberList);
 		imGroupMemberDao.batchInsert(imGroupMemberList);
 	}
 	}
 
 
-	@Override
-	public void batchDelete(List<ImGroupMember> imGroupMemberList) {
-		imGroupMemberDao.batchDelete(imGroupMemberList);
-	}
 
 
 	@Override
 	@Override
 	public void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList) {
 	public void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList) {
 		imGroupMemberDao.batchDeleteByGroupIdAndUserId(imGroupMemberList);
 		imGroupMemberDao.batchDeleteByGroupIdAndUserId(imGroupMemberList);
 	}
 	}
 
 
-	@Override
-	public boolean isExit(String groupId, String userId) {
-		return imGroupMemberDao.isExit(groupId,userId);
-	}
 
 
 	@Override
 	@Override
 	public void delRepeat() {
 	public void delRepeat() {
 		imGroupMemberDao.delRepeat();
 		imGroupMemberDao.delRepeat();
 	}
 	}
 
 
-	@Override
-	public List<ImGroupMember> queryMembers(String groupId, List<String> userIdList, Integer tenantId) {
-		return imGroupMemberDao.queryMembers(groupId, userIdList, tenantId);
-	}
-
     @Override
     @Override
     public PageInfo<ImGroupMemberDto> queryGroupMemberPage(GroupMemberQueryInfo queryInfo) {
     public PageInfo<ImGroupMemberDto> queryGroupMemberPage(GroupMemberQueryInfo queryInfo) {
+		if(StringUtils.isEmpty(queryInfo.getImGroupId())){
+			throw new BizException("参数校验失败");
+		}
 		PageInfo<ImGroupMemberDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		PageInfo<ImGroupMemberDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<String, Object>();
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
 		MapUtil.populateMap(params, queryInfo);
@@ -520,4 +653,95 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		userIds.stream().forEach(e->userRoleMap.put(e,roleType));
 		userIds.stream().forEach(e->userRoleMap.put(e,roleType));
 		this.join(imGroupId,userRoleMap);
 		this.join(imGroupId,userRoleMap);
 	}
 	}
+
+    @Override
+	@Transactional(rollbackFor = Exception.class)
+    public void groupMemberMute(ImGroupMemberWrapper.GroupMemberMute member) {
+		try {
+			// 更新群成员禁言状态
+			imGroupMemberDao.updateGroupMemberMute(member.getGroupId(), member.getUserIds(), member.getGroupMute());
+			ImPluginService pluginService = imPluginContext.getPluginService();
+			if (member.getGroupMute()) {
+				// 群成员禁言
+				pluginService.groupUserGagCreate(member.getUserIds(), member.getGroupId(), -1L);
+			} else {
+				// 群成员解除禁言
+				pluginService.groupUserGagRemove(member.getUserIds(), member.getGroupId());
+			}
+
+		} catch (Exception e) {
+			log.error("群成员禁言失败", e);
+			throw com.microsvc.toolkit.common.webportal.exception.BizException.from("群成员禁言失败,请联系管理员!");
+		}
+    }
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void groupMemberRole(ImGroupMemberWrapper.GroupMemberRole member) {
+		try {
+			// 更新群成员角色
+			imGroupMemberDao.batchUpdateGroupMemberRole(member.getGroupId(), member.getUserIds(), member.getGroupRoleType().getCode());
+
+			for (List<String> items : Lists.partition(member.getUserIds(), 50)) {
+
+				items.parallelStream().forEach(item -> {
+
+					try {
+						ImPluginService pluginService = imPluginContext.getPluginService();
+						switch (member.getGroupRoleType()) {
+							case Owner:
+								// 设置群主
+								pluginService.changeGroupOwner(member.getGroupId(), item,null);
+								break;
+							case Admin:
+								// 设置管理员
+								pluginService.groupAdminCreate(member.getGroupId(), item);
+								break;
+							case Member:
+								// 取消管理员
+								pluginService.groupAdminRemove(member.getGroupId(), item);
+								break;
+							default:
+								break;
+						}
+					} catch (Exception e) {
+						log.error("群成员身份更新异常", e);
+						throw com.microsvc.toolkit.common.webportal.exception.BizException.from("群成员身份更新异常,请联系管理员!");
+					}
+				});
+			}
+
+		} catch (Exception e) {
+			log.error("群成员身份更新异常", e);
+			throw com.microsvc.toolkit.common.webportal.exception.BizException.from("群成员身份更新异常,请联系管理员!");
+		}
+	}
+
+	@Override
+	public void groupMemberRole1(ImGroupMemberWrapper.GroupMemberRole member) {
+		ImPluginService pluginService = imPluginContext.getPluginService();
+		try {
+			for (String userId : member.getUserIds()) {
+				switch (member.getGroupRoleType()) {
+					case Owner:
+						// 设置群主
+						pluginService.changeGroupOwner(member.getGroupId(), userId,null);
+						break;
+					case Admin:
+						// 设置管理员
+						pluginService.groupAdminCreate(member.getGroupId(), userId);
+						break;
+					case Member:
+						// 取消管理员
+						pluginService.groupAdminRemove(member.getGroupId(), userId);
+						break;
+					default:
+						break;
+				}
+			}
+			imGroupMemberDao.batchUpdateGroupMemberRole(member.getGroupId(), member.getUserIds(), member.getGroupRoleType().getCode());
+		}catch (Exception e) {
+			log.error("群成员身份更新异常", e);
+		}
+	}
 }
 }

+ 160 - 69
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java

@@ -21,6 +21,7 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.EFriendRoleType;
 import com.ym.mec.biz.dal.enums.EFriendRoleType;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
+import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
 import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
 import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
 import com.ym.mec.biz.dal.mapper.SchoolStaffMapper;
 import com.ym.mec.biz.dal.mapper.SchoolStaffMapper;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
@@ -28,16 +29,7 @@ import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.dal.wrapper.ImHistoryMessageWrapper;
 import com.ym.mec.biz.dal.wrapper.ImHistoryMessageWrapper;
 import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
 import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
-import com.ym.mec.biz.service.CooperationOrganService;
-import com.ym.mec.biz.service.EmployeeService;
-import com.ym.mec.biz.service.ImGroupMemberService;
-import com.ym.mec.biz.service.ImGroupService;
-import com.ym.mec.biz.service.SchoolStaffService;
-import com.ym.mec.biz.service.StudentService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysUserService;
-import com.ym.mec.biz.service.TeacherService;
-import com.ym.mec.biz.service.UploadFileService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.biz.service.im.ImGroupCoreService;
 import com.ym.mec.biz.service.im.ImGroupCoreService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.UploadReturnBean;
 import com.ym.mec.common.entity.UploadReturnBean;
@@ -73,7 +65,9 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.*;
-import java.util.concurrent.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -195,21 +189,27 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
 
 
     private String createImGroup(ImGroup imGroup, Integer userId, String roleType) throws Exception {
     private String createImGroup(ImGroup imGroup, Integer userId, String roleType) throws Exception {
         ImGroupWrapper.ImGroup group = ImGroupWrapper.ImGroup.from(JSON.toJSONString(imGroup));
         ImGroupWrapper.ImGroup group = ImGroupWrapper.ImGroup.from(JSON.toJSONString(imGroup));
-
         //记录群成员
         //记录群成员
         com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper.ImGroupMember groupMember = null;
         com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper.ImGroupMember groupMember = null;
         if (userId != null) {
         if (userId != null) {
             SysUser sysUser = teacherDao.getUser(userId);
             SysUser sysUser = teacherDao.getUser(userId);
-            groupMember = ImGroupMemberWrapper.ImGroupMember
-                    .builder()
-                    .userId(userId.longValue())
-                    .clientType("")
-                    .avatar(sysUserService.getImAvatar(sysUser))
-                    .nickname(sysUserService.getImName(sysUser))
-                    .roleType(roleType)
-                    .tenantId(Optional.ofNullable(imGroup.getTenantId()).orElse(TenantContextHolder.getTenantId()))
-                    .isAdmin(true)
-                    .build();
+            groupMember = new ImGroupMemberWrapper.ImGroupMember();
+            groupMember.setUserId(userId.longValue());
+            groupMember.setClientType("");
+            groupMember.setAvatar(sysUserService.getImAvatar(sysUser));
+            groupMember.setRoleType(roleType);
+            groupMember.setTenantId(Optional.ofNullable(imGroup.getTenantId()).orElse(TenantContextHolder.getTenantId()));
+            groupMember.setGroupRoleType(StringUtils.isEmpty(roleType)?EImGroupRoleType.Member.getCode():EImGroupRoleType.Admin.getCode());
+            if(StringUtils.isNotEmpty(roleType)){
+                groupMember.setType(EFriendRoleType.getByName(roleType).name());
+                groupMember.setNickname(StringUtils.isEmpty(sysUser.getRealName())?sysUser.getUsername():sysUser.getRealName());
+            }else {
+                groupMember.setNickname(StringUtils.isEmpty(sysUser.getUsername())?sysUser.getRealName():sysUser.getUsername());
+            }
+            if(StringUtils.equals(roleType,"乐团领队")){
+                groupMember.setIsAdmin(true);
+                groupMember.setGroupRoleType(EImGroupRoleType.Owner.getCode());
+            }
         }
         }
         return imGroupCoreService.groupCreate(groupMember, group);
         return imGroupCoreService.groupCreate(groupMember, group);
     }
     }
@@ -238,8 +238,6 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         imGroup.setType(type);
         imGroup.setType(type);
         imGroup.setGroupType(imGroupDto.getGroupType());
         imGroup.setGroupType(imGroupDto.getGroupType());
         imGroup.setUpdateTime(date);
         imGroup.setUpdateTime(date);
-
-
         try {
         try {
             String imGroupId = createImGroup(imGroup, null, null);
             String imGroupId = createImGroup(imGroup, null, null);
             imGroup.setId(imGroupId);
             imGroup.setId(imGroupId);
@@ -247,12 +245,9 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             log.error("群组创建失败",e);
             log.error("群组创建失败",e);
             throw new BizException("群组创建失败");
             throw new BizException("群组创建失败");
         }
         }
-
+        //当前用户不知道具体角色,由于是通过后台添加,所以默认给了乐团主管
         List<ImGroupMember> groupMemberList = imGroupMemberDao.queryMembers(groupId, userIdList, TenantContextHolder.getTenantId());
         List<ImGroupMember> groupMemberList = imGroupMemberDao.queryMembers(groupId, userIdList, TenantContextHolder.getTenantId());
-        if(currentUserId != null){
-            groupMemberList.get(0).setRoleType("乐团主管");
-        }
-
+        imGroupMemberService.initImGroupMembers(groupMemberList,imGroup.getGroupType());
         addImGroupMember(groupId, groupMemberList);
         addImGroupMember(groupId, groupMemberList);
         return groupId;
         return groupId;
     }
     }
@@ -268,9 +263,11 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
                     .avatar(sysUserService.getImAvatar(user))
                     .avatar(sysUserService.getImAvatar(user))
                     .nickname(sysUserService.getImName(user))
                     .nickname(sysUserService.getImName(user))
                     .isAdmin(groupMember.getIsAdmin())
                     .isAdmin(groupMember.getIsAdmin())
+                    .groupRoleType(groupMember.getGroupRoleType())
                     .tenantId(Optional.ofNullable(imGroup.getTenantId()).orElse(TenantContextHolder.getTenantId()))
                     .tenantId(Optional.ofNullable(imGroup.getTenantId()).orElse(TenantContextHolder.getTenantId()))
                     .imUserId(getImUserId(groupMember.getUserId().toString(), ""))
                     .imUserId(getImUserId(groupMember.getUserId().toString(), ""))
                     .roleType(groupMember.getRoleType())
                     .roleType(groupMember.getRoleType())
+                    .type(groupMember.getType())
                     .build());
                     .build());
         }
         }
         try {
         try {
@@ -415,9 +412,28 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
 
 
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public void dismissGroup(String imGroupId) {
+    public void dismissGroup(String groupId,String userId) {
+        ImGroup imGroup = imGroupService.get(groupId);
+        if (imGroup == null) {
+            throw new BizException("群组不存在");
+        }
+        if(StringUtils.isNotEmpty(userId)){
+            ImGroupMember admin = imGroupMemberService.getDao().getAdmin(groupId);
+            if (admin == null) {
+                throw new BizException("群主信息不存在");
+            }
+            if (!StringUtils.equals(admin.getUserId().toString(), userId)) {
+                throw new BizException("当前操作人不是群主");
+            }
+        }
+        // 删除群成员
+        imGroupMemberDao.deleteByImGroupId(groupId);
+        // 删除群公告
+        imGroupNoticeDao.deleteByImGroupId(groupId);
+        // 删除群信息
+        imGroupDao.delete(groupId);
         try {
         try {
-            imGroupCoreService.groupDismiss(imGroupId);
+            imPluginContext.getPluginService().groupDismiss(groupId,new ArrayList<>());
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("解散群组失败",e);
             log.error("解散群组失败",e);
             throw new BizException("解散群组失败");
             throw new BizException("解散群组失败");
@@ -509,7 +525,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         List<ImGroup> groups = imGroups.stream().filter(imGroup -> imGroup.getMemberNum().equals(1)).collect(Collectors.toList());
         List<ImGroup> groups = imGroups.stream().filter(imGroup -> imGroup.getMemberNum().equals(1)).collect(Collectors.toList());
         for (ImGroup group : groups) {
         for (ImGroup group : groups) {
             try {
             try {
-                dismissGroup(group.getId());
+                dismissGroup(group.getId(),userId.toString());
             } catch (Exception e) {
             } catch (Exception e) {
                 log.error("解散群组失败{},{}", userId, group.getId(), e);
                 log.error("解散群组失败{},{}", userId, group.getId(), e);
             }
             }
@@ -559,25 +575,32 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             initSchoolGroup(imGroup.getSchoolId());
             initSchoolGroup(imGroup.getSchoolId());
         } else {
         } else {
             SysUser user = teacherDao.getUser(userId);
             SysUser user = teacherDao.getUser(userId);
-            ImGroupMemberWrapper.ImGroupMember groupMember = ImGroupMemberWrapper.ImGroupMember.builder()
-                    .userId(userId.longValue())
-                    .nickname(sysUserService.getImName(user))
-                    .avatar(sysUserService.getImAvatar(user))
-                    .build();
-            imGroupCoreService.groupMemberJoin(imGroup.getId(), Lists.newArrayList(groupMember));
-            // 更新群主流程
-            if (schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER)) {
-                groupChangeOwner(userId, imGroup.getId());
-            }
-
             ImGroupMember imGroupMember = new ImGroupMember();
             ImGroupMember imGroupMember = new ImGroupMember();
             imGroupMember.setImGroupId(imGroup.getId());
             imGroupMember.setImGroupId(imGroup.getId());
             imGroupMember.setUserId(userId);
             imGroupMember.setUserId(userId);
-            imGroupMember.setIsAdmin(schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER));
             imGroupMember.setRoleType(schoolStaffType.getDescribe());
             imGroupMember.setRoleType(schoolStaffType.getDescribe());
             imGroupMember.setNickname(name);
             imGroupMember.setNickname(name);
-            imGroupMember.setType(EFriendRoleType.getByName(schoolStaffType.getDescribe()).name());
+            if (StringUtils.isNotEmpty(schoolStaffType.getDescribe())) {
+                imGroupMember.setType(EFriendRoleType.getByName(schoolStaffType.getDescribe()).name());
+            }
             imGroupMember.setTenantId(imGroup.getTenantId());
             imGroupMember.setTenantId(imGroup.getTenantId());
+            imGroupMemberService.initImGroupMember(imGroupMember,imGroup.getGroupType());
+
+            ImGroupMemberWrapper.ImGroupMember groupMember = new ImGroupMemberWrapper.ImGroupMember();
+            groupMember.setUserId(userId.longValue());
+            groupMember.setImUserId(userId.toString());
+            groupMember.setNickname(name);
+            groupMember.setAvatar(sysUserService.getImAvatar(user));
+            groupMember.setGroupId(imGroupMember.getImGroupId());
+            groupMember.setType(imGroupMember.getType());
+            groupMember.setRoleType(imGroupMember.getRoleType());
+            groupMember.setGroupRoleType(imGroupMember.getGroupRoleType());
+            groupMember.setIsAdmin(imGroupMember.getIsAdmin());
+            imGroupCoreService.groupMemberJoin(imGroup.getId(), Lists.newArrayList(groupMember));
+            // 更新群主流程
+            /*if (schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER)) {
+                groupChangeOwner(userId, imGroup.getId());
+            }*/
             imGroupMemberDao.insert(imGroupMember);
             imGroupMemberDao.insert(imGroupMember);
 
 
         }
         }
@@ -656,13 +679,16 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             imGroupMember.setUserId(groupMember.getUserId().intValue());
             imGroupMember.setUserId(groupMember.getUserId().intValue());
             imGroupMember.setIsAdmin(false);
             imGroupMember.setIsAdmin(false);
             imGroupMember.setRoleType(groupMember.getRoleType());
             imGroupMember.setRoleType(groupMember.getRoleType());
-            imGroupMember.setType(EFriendRoleType.getByName(groupMember.getRoleType()).name());
+            imGroupMember.setNickname(groupMember.getNickname());
+            if (StringUtils.isNotEmpty(groupMember.getRoleType())) {
+                imGroupMember.setType(EFriendRoleType.getByName(groupMember.getRoleType()).name());
+            }
             imGroupMember.setTenantId(imGroup.getTenantId());
             imGroupMember.setTenantId(imGroup.getTenantId());
             imGroupMemberList.add(imGroupMember);
             imGroupMemberList.add(imGroupMember);
             groupMember.setImUserIdFormat(false);
             groupMember.setImUserIdFormat(false);
         }
         }
 
 
-
+        imGroupMemberService.initImGroupMembers(imGroupMemberList,imGroup.getGroupType());
         addImGroupMember(imGroup.getId(), imGroupMemberList);
         addImGroupMember(imGroup.getId(), imGroupMemberList);
         updateImGroupUserNumber(imGroup.getId());
         updateImGroupUserNumber(imGroup.getId());
     }
     }
@@ -740,13 +766,9 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         if (CollectionUtils.isEmpty(imGroupIds)) {
         if (CollectionUtils.isEmpty(imGroupIds)) {
             return;
             return;
         }
         }
-
         List<ImGroup> groupList = imGroupDao.getByIds(imGroupIds);
         List<ImGroup> groupList = imGroupDao.getByIds(imGroupIds);
-
         // id 分组
         // id 分组
         Map<String, ImGroup> map = groupList.stream().collect(Collectors.toMap(ImGroup::getId, Function.identity()));
         Map<String, ImGroup> map = groupList.stream().collect(Collectors.toMap(ImGroup::getId, Function.identity()));
-
-
         for (String musicGroupId : imGroupIds) {
         for (String musicGroupId : imGroupIds) {
             ImGroup imGroup = map.get(musicGroupId);
             ImGroup imGroup = map.get(musicGroupId);
             if (imGroup == null) {
             if (imGroup == null) {
@@ -755,23 +777,33 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             try {
             try {
 
 
                 SysUser user = teacherDao.getUser(userId.intValue());
                 SysUser user = teacherDao.getUser(userId.intValue());
-                ImGroupMemberWrapper.ImGroupMember groupMember = ImGroupMemberWrapper.ImGroupMember.builder()
-                    .userId(userId)
-                    .nickname(sysUserService.getImName(user))
-                    .avatar(sysUserService.getImAvatar(user))
-                    .build();
-                imGroupCoreService.groupMemberJoin(imGroup.getId(), Lists.newArrayList(groupMember));
-
                 ImGroupMember imGroupMember = new ImGroupMember();
                 ImGroupMember imGroupMember = new ImGroupMember();
                 imGroupMember.setImGroupId(imGroup.getId());
                 imGroupMember.setImGroupId(imGroup.getId());
                 imGroupMember.setUserId(userId.intValue());
                 imGroupMember.setUserId(userId.intValue());
                 imGroupMember.setIsAdmin(false);
                 imGroupMember.setIsAdmin(false);
                 imGroupMember.setRoleType(roleType);
                 imGroupMember.setRoleType(roleType);
-                imGroupMember.setNickname(sysUserService.getImName(user));
+                if(StringUtils.isNotEmpty(roleType)){
+                    imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
+                    imGroupMember.setNickname(StringUtils.isEmpty(user.getRealName())?user.getUsername():user.getRealName());
+                }else {
+                    imGroupMember.setNickname(StringUtils.isEmpty(user.getUsername())?user.getRealName():user.getUsername());
+                }
                 imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
                 imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
                 imGroupMember.setTenantId(imGroup.getTenantId());
                 imGroupMember.setTenantId(imGroup.getTenantId());
-                imGroupMemberDao.insert(imGroupMember);
+                imGroupMemberService.initImGroupMember(imGroupMember,imGroup.getGroupType());
+
+                ImGroupMemberWrapper.ImGroupMember groupMember = new ImGroupMemberWrapper.ImGroupMember();
+                groupMember.setUserId(userId);
+                groupMember.setNickname(imGroupMember.getNickname());
+                groupMember.setAvatar(sysUserService.getImAvatar(user));
+                groupMember.setRoleType(roleType);
+                groupMember.setType(imGroupMember.getType());
+                groupMember.setGroupId(imGroupMember.getImGroupId());
+                groupMember.setGroupRoleType(imGroupMember.getGroupRoleType());
+                groupMember.setIsAdmin(imGroupMember.getIsAdmin());
+                imGroupCoreService.groupMemberJoin(imGroup.getId(), Lists.newArrayList(groupMember));
 
 
+                imGroupMemberDao.insert(imGroupMember);
                 updateImGroupUserNumber(imGroup.getId());
                 updateImGroupUserNumber(imGroup.getId());
             } catch (Exception e) {
             } catch (Exception e) {
                 log.error("加入群聊失败",e);
                 log.error("加入群聊失败",e);
@@ -843,7 +875,6 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public void schoolJoinGroup(Integer cooperationOrganId, String imGroupId) {
     public void schoolJoinGroup(Integer cooperationOrganId, String imGroupId) {
-
         CooperationOrgan cooperationOrgan = cooperationOrganService.get(cooperationOrganId);
         CooperationOrgan cooperationOrgan = cooperationOrganService.get(cooperationOrganId);
         if (cooperationOrgan == null) {
         if (cooperationOrgan == null) {
             return;
             return;
@@ -852,21 +883,13 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         if (CollectionUtils.isEmpty(schoolStaffs)) {
         if (CollectionUtils.isEmpty(schoolStaffs)) {
             return;
             return;
         }
         }
-
-
         // 查询群是否存在
         // 查询群是否存在
         ImGroup imGroup = imGroupDao.get(imGroupId);
         ImGroup imGroup = imGroupDao.get(imGroupId);
         if (imGroup == null) {
         if (imGroup == null) {
             return;
             return;
         }
         }
-
-
         SchoolStaff schoolStaff = schoolStaffs.get(0);
         SchoolStaff schoolStaff = schoolStaffs.get(0);
-
-
-
         addImGroup(Lists.newArrayList(imGroup.getId()),schoolStaff.getUserId(),ESchoolStaffType.ORCHESTRA_LEADER.getDescribe());
         addImGroup(Lists.newArrayList(imGroup.getId()),schoolStaff.getUserId(),ESchoolStaffType.ORCHESTRA_LEADER.getDescribe());
-
     }
     }
 
 
 
 
@@ -1907,6 +1930,74 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         }
         }
     }
     }
 
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void muteAll(ImGroupWrapper.GroupMuteAll groupMute) {
+        // 更新群组禁言状态
+        ImGroup imGroup = imGroupService.get(groupMute.getGroupId());
+        if (imGroup == null) {
+            throw new BizException("群组不存在");
+        }
+        ImGroupWrapper.ConfigJson from = ImGroupWrapper.ConfigJson.from(imGroup.getConfigJson());
+        from.setMute(groupMute.getMuteAll());
+        imGroup.setConfigJson(JSON.toJSONString(from));
+        imGroup.setMemberNum(0);
+        imGroupService.update(imGroup);
+
+        // 调用IM接口
+        try {
+            if (Boolean.TRUE.equals(groupMute.getMuteAll())) {
+                imPluginContext.getPluginService().groupBanCreate(groupMute.getGroupId());
+            } else {
+                imPluginContext.getPluginService().groupBanRemove(groupMute.getGroupId());
+            }
+        } catch (Exception e) {
+            log.error("群组禁言状态修改失败", e);
+            throw new BizException("群组禁言状态修改失败");
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void transferOwner(ImGroupWrapper.GroupTransferOwner groupTransferOwner) {
+        ImGroup imGroup = imGroupService.get(groupTransferOwner.getImGroupId());
+        if (imGroup == null) {
+            throw new BizException("群组不存在");
+        }
+        ImGroupMember admin = imGroupMemberService.getDao().getAdmin(groupTransferOwner.getImGroupId());
+        if (admin == null) {
+            throw new BizException("群主信息不存在");
+        }
+        if (!StringUtils.equals(admin.getUserId().toString(), groupTransferOwner.getCurrentOwner())) {
+            throw new BizException("当前操作人不是群主");
+        }
+        List<ImGroupMember> imGroupMembers = imGroupMemberService.getDao().queryByImGroupIdAndUserId(groupTransferOwner.getImGroupId(), groupTransferOwner.getUserId());
+        if (CollectionUtils.isEmpty(imGroupMembers)) {
+            throw new BizException("新群主不在群组中");
+        }
+        ImGroupMember imGroupMember = imGroupMembers.get(0);
+        if (!Objects.equals(imGroupMember.getGroupRoleType(), EImGroupRoleType.Admin.getCode())) {
+            throw new BizException("新群主不是管理员");
+        }
+        // 更新群主
+        imGroupMember.setIsAdmin(true);
+        imGroupMemberService.update(imGroupMember);
+        admin.setGroupRoleType(EImGroupRoleType.Admin.getCode());
+        admin.setIsAdmin(false);
+        imGroupMemberService.update(admin);
+        // 调用IM接口
+        try {
+            //设置成群主
+            imPluginContext.getPluginService().changeGroupOwner(groupTransferOwner.getImGroupId(), groupTransferOwner.getUserId(),groupTransferOwner.getCurrentOwner());
+            //设置成管理员
+            imPluginContext.getPluginService().groupAdminCreate(admin.getImGroupId(),admin.getUserId().toString());
+        } catch (Exception e) {
+            log.error("转让群主失败", e);
+            throw new BizException("转让群主失败");
+        }
+    }
+
+
     private TencentRequest.MessageBody getTimGifElem(String remoteUr,int size,int width,int height) {
     private TencentRequest.MessageBody getTimGifElem(String remoteUr,int size,int width,int height) {
         if (StringUtils.isEmpty(remoteUr) && size == 0 && width == 0 && height == 0) {
         if (StringUtils.isEmpty(remoteUr) && size == 0 && width == 0 && height == 0) {
             return null;
             return null;

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

@@ -40,6 +40,7 @@
 		<result column="real_name_" property="user.realName" />
 		<result column="real_name_" property="user.realName" />
 		<result column="user_type_" property="user.userType" />
 		<result column="user_type_" property="user.userType" />
 		<result column="group_nickname_" property="groupNickname" />
 		<result column="group_nickname_" property="groupNickname" />
+		<result property="groupRoleType" column="group_role_type_"/>
 	</resultMap>
 	</resultMap>
 	
 	
 	<!-- 根据主键查询一条记录 -->
 	<!-- 根据主键查询一条记录 -->
@@ -65,6 +66,9 @@
 	<!-- 根据主键查询一条记录 -->
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ImGroup">
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ImGroup">
 		UPDATE im_group <set>
 		UPDATE im_group <set>
+		<if test="configJson != null">
+			config_json_ = #{configJson},
+		</if>
 		<if test="groupType != null">
 		<if test="groupType != null">
 			group_type_ = #{groupType},
 			group_type_ = #{groupType},
 		</if>
 		</if>

+ 48 - 13
mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml

@@ -14,6 +14,7 @@
 		<result column="is_admin_" property="isAdmin" />
 		<result column="is_admin_" property="isAdmin" />
 		<result column="role_type_" property="roleType"/>
 		<result column="role_type_" property="roleType"/>
 		<result column="type_" property="type"/>
 		<result column="type_" property="type"/>
+		<result column="group_role_type_" property="groupRoleType"/>
 		<result column="create_time_" property="createTime" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 		<result column="update_time_" property="updateTime" />
         <result column="tenant_id_" property="tenantId"/>
         <result column="tenant_id_" property="tenantId"/>
@@ -32,15 +33,15 @@
 	
 	
 	<!-- 向数据库增加一条记录 -->
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_)
-		VALUES(#{imGroupId},#{userId},#{nickname},#{isAdmin},#{roleType},NOW(),NOW(),#{tenantId},#{type})
+		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_,group_role_type_,mute_flag_)
+		VALUES(#{imGroupId},#{userId},#{nickname},#{isAdmin},#{roleType},NOW(),NOW(),#{tenantId},#{type},#{groupRoleType},#{muteFlag})
         ON DUPLICATE KEY UPDATE nickname_ = VALUES(nickname_), is_admin_ = VALUES(is_admin_), role_type_ = VALUES(role_type_), type_ = VALUES(type_)
         ON DUPLICATE KEY UPDATE nickname_ = VALUES(nickname_), is_admin_ = VALUES(is_admin_), role_type_ = VALUES(role_type_), type_ = VALUES(type_)
 	</insert>
 	</insert>
 	
 	
 	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_) VALUES
+		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_,group_role_type_,mute_flag_) VALUES
 		 <foreach collection="list" item="item" separator=",">
 		 <foreach collection="list" item="item" separator=",">
-		(#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},NOW(),NOW(),#{item.tenantId},#{item.type})
+		(#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},NOW(),NOW(),#{item.tenantId},#{item.type},#{item.groupRoleType},#{item.muteFlag})
 		</foreach>
 		</foreach>
         ON DUPLICATE KEY UPDATE nickname_ = VALUES(nickname_), is_admin_ = VALUES(is_admin_), role_type_ = VALUES(role_type_), type_ = VALUES(type_)
         ON DUPLICATE KEY UPDATE nickname_ = VALUES(nickname_), is_admin_ = VALUES(is_admin_), role_type_ = VALUES(role_type_), type_ = VALUES(type_)
 	</insert>
 	</insert>
@@ -48,13 +49,19 @@
 	<!-- 根据主键查询一条记录 -->
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember">
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember">
 		UPDATE im_group_member <set>
 		UPDATE im_group_member <set>
+		<if test="groupRoleType != null and groupRoleType != ''">
+			group_role_type_ = #{groupRoleType},
+		</if>
+		<if test="muteFlag != null">
+			mute_flag_ = #{muteFlag},
+		</if>
 		<if test="roleType != null">
 		<if test="roleType != null">
 		role_type_ = #{roleType},
 		role_type_ = #{roleType},
 		</if>
 		</if>
 		<if test="userId != null">
 		<if test="userId != null">
 		user_id_ = #{userId},
 		user_id_ = #{userId},
 		</if>
 		</if>
-		<if test="nickname != null">
+		<if test="nickname != null and nickname != ''">
 		nickname_ = #{nickname},
 		nickname_ = #{nickname},
 		</if>
 		</if>
 		<if test="isAdmin != null">
 		<if test="isAdmin != null">
@@ -74,20 +81,26 @@
 		<foreach collection="list" item="item" index="index" open="" close="" separator=";">
 		<foreach collection="list" item="item" index="index" open="" close="" separator=";">
 			UPDATE im_group_member 
 			UPDATE im_group_member 
 			<set>
 			<set>
+				<if test="item.groupRoleType != null and item.groupRoleType != ''">
+					group_role_type_ = #{item.groupRoleType},
+				</if>
+				<if test="item.muteFlag != null">
+					mute_flag_ = #{item.muteFlag},
+				</if>
 				<if test="item.roleType != null">
 				<if test="item.roleType != null">
-				role_type_ = #{item.roleType},
+					role_type_ = #{item.roleType},
 				</if>
 				</if>
 				<if test="item.userId != null">
 				<if test="item.userId != null">
-				user_id_ = #{item.userId},
+					user_id_ = #{item.userId},
 				</if>
 				</if>
-				<if test="item.nickname != null">
-				nickname_ = #{item.nickname},
+				<if test="item.nickname != null and item.nickname != ''">
+					nickname_ = #{item.nickname},
 				</if>
 				</if>
 				<if test="item.isAdmin != null">
 				<if test="item.isAdmin != null">
-				is_admin_ = #{item.isAdmin},
+					is_admin_ = #{item.isAdmin},
 				</if>
 				</if>
 				<if test="item.imGroupId != null">
 				<if test="item.imGroupId != null">
-				im_group_id_ = #{item.imGroupId},
+					im_group_id_ = #{item.imGroupId},
 				</if>
 				</if>
                 <if test="item.type != null">
                 <if test="item.type != null">
                     type_ = #{item.type},
                     type_ = #{item.type},
@@ -141,7 +154,7 @@
 	</select>
 	</select>
     <select id="queryMembers" resultMap="ImGroupMember">
     <select id="queryMembers" resultMap="ImGroupMember">
 		SELECT #{groupId} im_group_id_,CASE WHEN su.username_ IS NULL OR su.username_ = '' THEN su.real_name_ ELSE su.username_ END nickname_,
 		SELECT #{groupId} im_group_id_,CASE WHEN su.username_ IS NULL OR su.username_ = '' THEN su.real_name_ ELSE su.username_ END nickname_,
-		       #{tenantId} tenant_id_,su.id_ user_id_,su.avatar_
+		       #{tenantId} tenant_id_,su.id_ user_id_,su.avatar_,'乐团主管' role_type_,'ORCHESTRA_MANAGER' type_,'Admin' group_role_type_
 		FROM sys_user su
 		FROM sys_user su
 		WHERE su.id_ IN
 		WHERE su.id_ IN
 		<foreach collection="userIdList" item="item" open="(" separator="," close=")">
 		<foreach collection="userIdList" item="item" open="(" separator="," close=")">
@@ -153,6 +166,12 @@
 			<if test="imGroupId != null and imGroupId != ''">
 			<if test="imGroupId != null and imGroupId != ''">
 				AND igm.im_group_id_ = #{imGroupId}
 				AND igm.im_group_id_ = #{imGroupId}
 			</if>
 			</if>
+			<if test="groupRoleType != null and groupRoleType != ''">
+				AND igm.group_role_type_ = #{groupRoleType}
+			</if>
+			<if test="groupMute != null">
+				AND igm.mute_flag_ = #{groupMute}
+			</if>
 			<if test="roleType != null and roleType != ''">
 			<if test="roleType != null and roleType != ''">
 				<if test="roleType == '学员'">
 				<if test="roleType == '学员'">
 					AND (igm.role_type_ IS NULL OR igm.role_type_ = '')
 					AND (igm.role_type_ IS NULL OR igm.role_type_ = '')
@@ -200,6 +219,18 @@
 	<update id="updateAdmin">
 	<update id="updateAdmin">
         UPDATE im_group_member SET is_admin_ = 1 WHERE im_group_id_ = #{imGroupId} and user_id_ = #{userId}
         UPDATE im_group_member SET is_admin_ = 1 WHERE im_group_id_ = #{imGroupId} and user_id_ = #{userId}
     </update>
     </update>
+    <update id="updateGroupMemberMute">
+		UPDATE im_group_member SET mute_flag_ = #{groupMute} WHERE im_group_id_ = #{groupId} and user_id_ IN
+		<foreach collection="userIds" item="item" open="(" separator="," close=")">
+			#{item}
+		</foreach>
+	</update>
+	<update id="batchUpdateGroupMemberRole">
+		UPDATE im_group_member SET group_role_Type_ = #{groupRoleType},init_flag_ = 1 WHERE im_group_id_ = #{groupId} and user_id_ IN
+		<foreach collection="userIds" item="item" open="(" separator="," close=")">
+			#{item}
+		</foreach>
+	</update>
 
 
 	<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
@@ -211,8 +242,12 @@
             #{item}
             #{item}
         </foreach>
         </foreach>
     </select>
     </select>
+    <select id="groupRoleInit" resultType="com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper$GroupMemberRole1">
+		select im_group_id_ groupId,group_role_type_ groupRoleType,user_id_ userId from im_group_member
+		where group_role_type_ = #{groupRoleType} AND init_flag_ = 0 order by id_ DESC
+	</select>
 
 
-	<delete id="delByImGroupAndUserId">
+    <delete id="delByImGroupAndUserId">
         DELETE FROM im_group_member WHERE im_group_id_ = #{imGroupId} AND user_id_ in
         DELETE FROM im_group_member WHERE im_group_id_ = #{imGroupId} AND user_id_ in
         <foreach collection="userIds" close=")" open="(" separator="," item="item">
         <foreach collection="userIds" close=")" open="(" separator="," item="item">
             #{item}
             #{item}

+ 4 - 2
mec-biz/src/main/resources/config/mybatis/ImGroupMemberPlusMapper.xml

@@ -10,9 +10,11 @@
 
 
 
 
     <insert id="insertBatch" parameterType="com.ym.mec.biz.dal.entity.ImGroupMemberPlus" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
     <insert id="insertBatch" parameterType="com.ym.mec.biz.dal.entity.ImGroupMemberPlus" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-        INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_) VALUES
+        INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,
+        create_time_,update_time_,tenant_id_,type_,group_role_type_) VALUES
         <foreach collection="list" item="item" separator=",">
         <foreach collection="list" item="item" separator=",">
-            (#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},NOW(),NOW(),#{item.tenantId},#{item.type})
+            (#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},
+            NOW(),NOW(),#{item.tenantId},#{item.type},#{item.groupRoleType})
         </foreach>
         </foreach>
         ON DUPLICATE KEY UPDATE nickname_ = VALUES(nickname_), is_admin_ = VALUES(is_admin_), role_type_ = VALUES(role_type_), type_ = VALUES(type_)
         ON DUPLICATE KEY UPDATE nickname_ = VALUES(nickname_), is_admin_ = VALUES(is_admin_), role_type_ = VALUES(role_type_), type_ = VALUES(type_)
     </insert>
     </insert>

+ 1 - 0
pom.xml

@@ -25,6 +25,7 @@
 		<docker.host>http://127.0.0.1:2375</docker.host>
 		<docker.host>http://127.0.0.1:2375</docker.host>
 		<docker.registry.repository>127.0.0.1:5000</docker.registry.repository>
 		<docker.registry.repository>127.0.0.1:5000</docker.registry.repository>
 		<docker.maven.plugin.version>1.2.2</docker.maven.plugin.version>
 		<docker.maven.plugin.version>1.2.2</docker.maven.plugin.version>
+		<com.microsvc.toolkit.version>1.0.4</com.microsvc.toolkit.version>
 	</properties>
 	</properties>
 
 
 	<dependencyManagement>
 	<dependencyManagement>