Procházet zdrojové kódy

群主转让、群注销

zouxuan před 1 rokem
rodič
revize
b8d39c0a28

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

@@ -66,6 +66,30 @@ public class ImGroupController extends BaseController {
 		return succeed();
 	}
 
+	@ApiOperation(value = "转交群主")
+	@PostMapping("/transferOwner")
+	public HttpResponseResult<Object> transferOwner(@RequestBody ImGroupWrapper.GroupTransferOwner groupTransferOwner) {
+		if (StringUtils.isEmpty(groupTransferOwner.getGroupId()) || StringUtils.isEmpty(groupTransferOwner.getImUserId())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("参数错误");
+		}
+		groupTransferOwner.setCurrentOwner(sysUserService.getUserId().toString());
+		if(StringUtils.equals(groupTransferOwner.getImUserId(),groupTransferOwner.getCurrentOwner())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("不能转交给自己");
+		}
+		imGroupService.transferOwner(groupTransferOwner);
+		return succeed();
+	}
+
+	@ApiOperation(value = "群注销")
+	@PostMapping("/cancelGroup")
+	public HttpResponseResult<Object> cancelGroup(String groupId) {
+		if (StringUtils.isEmpty(groupId)){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("参数错误");
+		}
+		imGroupService.cancelGroup(groupId,sysUserService.getUserId().toString());
+		return succeed();
+	}
+
 	@ApiOperation("查询群列表")
 	@GetMapping(value = "/queryGroupList")
 	public HttpResponseResult<List<ImGroup>> queryGroupList(String search,String groupType) {
@@ -74,7 +98,7 @@ public class ImGroupController extends BaseController {
 
 	@ApiOperation("创建群聊")
 	@PostMapping(value = "/createGroup")
-	public HttpResponseResult queryGroupList(@RequestBody ImGroupDto imGroupDto) {
+	public HttpResponseResult<String> queryGroupList(@RequestBody ImGroupDto imGroupDto) {
 		return succeed(imGroupService.createGroup(imGroupDto));
 	}
 

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

@@ -175,4 +175,20 @@ public class ImGroupWrapper {
             return JSON.parseObject(json, ConfigJson.class);
         }
     }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("转交群主")
+    public static class GroupTransferOwner {
+        @ApiModelProperty(value = "群ID",required = true)
+        private String groupId;
+
+        @ApiModelProperty("新群主ID")
+        private String imUserId;
+
+        @ApiModelProperty("当前群主")
+        private String currentOwner;
+    }
 }

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

@@ -228,4 +228,8 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
     void delGroup(String imGroupId);
 
     void muteAll(ImGroupWrapper.GroupMuteAll groupMuteAll);
+
+    void transferOwner(ImGroupWrapper.GroupTransferOwner groupTransferOwner);
+
+    void cancelGroup(String groupId,String userId);
 }

+ 56 - 0
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.MusicGroupStatusEnum;
 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.mapper.SchoolStaffMapper;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
@@ -1933,6 +1934,61 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         }
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void transferOwner(ImGroupWrapper.GroupTransferOwner groupTransferOwner) {
+        ImGroup imGroup = imGroupService.get(groupTransferOwner.getGroupId());
+        if (imGroup == null) {
+            throw new BizException("群组不存在");
+        }
+        ImGroupMember admin = imGroupMemberService.getDao().getAdmin(groupTransferOwner.getGroupId());
+        if (admin == null) {
+            throw new BizException("群主信息不存在");
+        }
+        if (!StringUtils.equals(admin.getUserId().toString(), groupTransferOwner.getCurrentOwner())) {
+            throw new BizException("当前操作人不是群主");
+        }
+        List<ImGroupMember> imGroupMembers = imGroupMemberService.getDao().queryByImGroupIdAndUserId(groupTransferOwner.getGroupId(), groupTransferOwner.getImUserId());
+        if (CollectionUtils.isEmpty(imGroupMembers)) {
+            throw new BizException("新群主不在群组中");
+        }
+        ImGroupMember imGroupMember = imGroupMembers.get(0);
+        if (imGroupMember.getGroupRoleType() != EImGroupRoleType.Admin) {
+            throw new BizException("新群主不是管理员");
+        }
+        // 更新群主
+        imGroupMember.setGroupRoleType(EImGroupRoleType.Owner);
+        imGroupMember.setIsAdmin(true);
+        imGroupMemberService.update(imGroupMember);
+        admin.setGroupRoleType(EImGroupRoleType.Admin);
+        admin.setIsAdmin(false);
+        imGroupMemberService.update(admin);
+        // 调用IM接口
+        try {
+            imPluginContext.getPluginService().changeGroupOwner(groupTransferOwner.getGroupId(), groupTransferOwner.getImUserId(),groupTransferOwner.getCurrentOwner());
+        } catch (Exception e) {
+            log.error("转让群主失败", e);
+            throw new BizException("转让群主失败");
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void cancelGroup(String groupId,String userId) {
+        ImGroup imGroup = imGroupService.get(groupId);
+        if (imGroup == null) {
+            throw new BizException("群组不存在");
+        }
+        ImGroupMember admin = imGroupMemberService.getDao().getAdmin(groupId);
+        if (admin == null) {
+            throw new BizException("群主信息不存在");
+        }
+        if (!StringUtils.equals(admin.getUserId().toString(), userId)) {
+            throw new BizException("当前操作人不是群主");
+        }
+        imGroupService.delGroup(groupId);
+    }
+
     private TencentRequest.MessageBody getTimGifElem(String remoteUr,int size,int width,int height) {
         if (StringUtils.isEmpty(remoteUr) && size == 0 && width == 0 && height == 0) {
             return null;