From 9c81d055889b78e57e1b0e4797f9615ac45f9913 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Thu, 21 Aug 2025 19:28:04 +0800
Subject: [PATCH] 1

---
 ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/NeteaseTeamServiceImpl.java |  226 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 220 insertions(+), 6 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/NeteaseTeamServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/NeteaseTeamServiceImpl.java
index 454be10..020d0df 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/NeteaseTeamServiceImpl.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/NeteaseTeamServiceImpl.java
@@ -1,30 +1,29 @@
 package com.ruoyi.im.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.druid.support.json.JSONUtils;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.netease.nim.server.sdk.core.BizName;
 import com.netease.nim.server.sdk.core.YunxinApiHttpClient;
 import com.netease.nim.server.sdk.core.YunxinApiResponse;
 import com.netease.nim.server.sdk.core.exception.YunxinSdkException;
 import com.netease.nim.server.sdk.core.http.HttpMethod;
 import com.netease.nim.server.sdk.im.v2.team.TeamV2UrlContext;
+import com.netease.nim.server.sdk.im.v2.team_member.TeamMemberV2UrlContext;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.bean.BeanUtils;
-import com.ruoyi.im.comm.Result;
-import com.ruoyi.im.config.AppAuthConfig;
+import com.ruoyi.im.config.AddTeamMembersRequest;
 import com.ruoyi.im.config.CreateTeamRequest;
-import com.ruoyi.im.dto.CreateGroupDto;
+import com.ruoyi.im.config.AssignmentRequest;
 import com.ruoyi.im.service.NeteaseTeamService;
 import com.ruoyi.system.domain.NeteaseTeam;
 import com.ruoyi.system.mapper.NeteaseTeamMapper;
-import org.aspectj.weaver.loadtime.Aj;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
-import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.util.*;
 
@@ -103,6 +102,80 @@
         }
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult updateCreate(CreateTeamRequest request) {
+        try {
+            // 1. 构建请求参数Map
+            Map<String, Object> paramMap = buildCreateTeamParams(request);
+
+            // 2. 将Map转换为JSON字符串
+            String jsonBody = JSON.toJSONString(paramMap);
+
+            NeteaseTeam neteaseTeam = neteaseTeamMapper.selectById(request.getGroupId());
+            if(ObjectUtil.isNotEmpty(neteaseTeam)){
+                return AjaxResult.error("群不存在!");
+            }
+
+            String path = TeamV2UrlContext.UPDATE_TEAM.replace("{team_id}", String.valueOf(neteaseTeam.getTid()));
+            YunxinApiResponse response = yunxinClient.executeV2Api(
+                    HttpMethod.PATCH,
+                    path,
+                    path,
+                    null,
+                    jsonBody
+            );
+
+            // 4. 处理响应
+            String data = response.getData();
+            JSONObject json = JSONObject.parseObject(data);
+            int code = json.getIntValue("code");
+
+            if (code != 200) {
+                log.error("网易云信修改群组失败,响应:");
+                return AjaxResult.error("修改群组失败");
+            }
+
+            // 5. 解析响应获取群组ID
+            JSONObject resultData = json.getJSONObject("data");
+            JSONObject teamInfo = resultData.getJSONObject("team_info");
+            String tid = teamInfo.getString("team_id");
+            String ownerAccountId = teamInfo.getString("owner_account_id");
+
+            // 6. 跟新群组信息到本地数据库
+            int count = updateNeteaseTeam(request,neteaseTeam);
+            if(count > 0){
+                return AjaxResult.success("修改群组成功");
+            }
+            return AjaxResult.error("修改群组失败");
+        } catch (YunxinSdkException e) {
+            // 云信调用异常时回滚事务
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            e.printStackTrace();
+            log.error("网易云信服务调用异常 traceId:");
+            return AjaxResult.error("修改群组失败,云信服务异常");
+        } catch (Exception e) {
+            // 其他异常同样回滚
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            e.printStackTrace();
+            log.error("修改群组过程发生未知异常", e);
+            return AjaxResult.error("修改群组失败,系统异常");
+        }
+    }
+
+
+    private int updateNeteaseTeam(CreateTeamRequest request, NeteaseTeam neteaseTeam) {
+        neteaseTeam.setName(request.getName());
+        neteaseTeam.setMemberCount(request.getMembers_limit());
+        neteaseTeam.setAnnouncement(request.getAnnouncement());
+        neteaseTeam.setIntro(request.getIntro());
+        neteaseTeam.setJoinMode(request.getJoin_mode());
+        neteaseTeam.setAgreeMode(request.getAgree_mode());
+        neteaseTeam.setInviteMode(request.getInvite_mode());
+        neteaseTeam.setUpdateTeamInfoMode(request.getUpdate_team_info_mode());
+        return neteaseTeamMapper.updateById(neteaseTeam);
+    }
+
     /**
      * 构建创建群组的参数Map
      */
@@ -178,4 +251,145 @@
 
         return insert;
     }
+
+    @Override
+    public AjaxResult inviteTeamMembers(AddTeamMembersRequest request) {
+        try {
+
+            NeteaseTeam neteaseTeam = neteaseTeamMapper.selectById(request.getGroupId());
+            if(ObjectUtil.isNotEmpty(neteaseTeam)){
+                return AjaxResult.error("群不存在!");
+            }
+
+            AddTeamMembersRequest build = AddTeamMembersRequest.builder()
+                    .inviteAccountIds(request.getInviteAccountIds())
+                    .operatorId(request.getOperatorId())
+                    .msg(request.getMsg())
+                    .teamId(Long.getLong(neteaseTeam.getTid()))
+                    .teamType(request.getTeamType())
+                    .build();
+            String jsonBody = JSONUtils.toJSONString(build);
+
+            YunxinApiResponse response = yunxinClient.executeV2Api(
+                    HttpMethod.POST,
+                    TeamMemberV2UrlContext.INVITE_TEAM_MEMBERS,
+                    TeamMemberV2UrlContext.INVITE_TEAM_MEMBERS,
+                    null,
+                    jsonBody
+            );
+
+            // 4. 处理响应
+            String data = response.getData();
+            JSONObject json = JSONObject.parseObject(data);
+            int code = json.getIntValue("code");
+
+            if (code != 200) {
+                log.error("网易云信拉人入群失败,响应:");
+                return AjaxResult.error("拉人入群失败");
+            }
+            return AjaxResult.success();
+        } catch (YunxinSdkException e) {
+            // 云信调用异常时回滚事务
+            e.printStackTrace();
+            log.error("网易云信服务调用异常 traceId:");
+            return AjaxResult.error("拉人入群失败,云信服务异常");
+        } catch (Exception e) {
+            // 其他异常同样回滚
+            e.printStackTrace();
+            log.error("拉人入群过程发生未知异常", e);
+            return AjaxResult.error("拉人入群失败,系统异常");
+        }
+    }
+
+    @Override
+    public AjaxResult assignment(AssignmentRequest request) {
+        try {
+
+            NeteaseTeam neteaseTeam = neteaseTeamMapper.selectById(request.getGroupId());
+            if(ObjectUtil.isNotEmpty(neteaseTeam)){
+                return AjaxResult.error("群不存在!");
+            }
+
+            AssignmentRequest build = AssignmentRequest.builder()
+                    .teamId(Long.getLong(neteaseTeam.getTid()))
+                    .team_type(neteaseTeam.getTeamType())
+                    .leave(2)
+                    .build();
+            String requestBody = JSONUtils.toJSONString(build);
+
+            String path = TeamV2UrlContext.TRANSFER_OWNER.replace("{team_id}",neteaseTeam.getTid().toString());
+
+            YunxinApiResponse response = yunxinClient.executeV2Api(
+                    HttpMethod.PATCH,
+                    TeamV2UrlContext.TRANSFER_OWNER,
+                    path,
+                    null,
+                    requestBody
+            );
+
+            // 4. 处理响应
+            String data = response.getData();
+            JSONObject json = JSONObject.parseObject(data);
+            int code = json.getIntValue("code");
+
+            if (code != 200) {
+                log.error("网易云信转让群主失败,响应:");
+                return AjaxResult.error("转让群主失败");
+            }
+            return AjaxResult.success();
+        } catch (YunxinSdkException e) {
+            // 云信调用异常时回滚事务
+            e.printStackTrace();
+            log.error("网易云信转让群主服务调用异常 traceId:");
+            return AjaxResult.error("转让群主失败,云信服务异常");
+        } catch (Exception e) {
+            // 其他异常同样回滚
+            e.printStackTrace();
+            log.error("转让群主过程发生未知异常", e);
+            return AjaxResult.error("转让群主失败,系统异常");
+        }
+    }
+
+    @Override
+    public AjaxResult dismiss(Long id) {
+        try {
+            NeteaseTeam neteaseTeam = neteaseTeamMapper.selectById(id);
+            if(ObjectUtil.isNotEmpty(neteaseTeam)){
+                return AjaxResult.error("群不存在!");
+            }
+            Map<String, String> queryParams = new HashMap<>();
+            queryParams.put("team_type", String.valueOf(neteaseTeam.getTeamType()));
+
+            String path = TeamV2UrlContext.DISBAND_TEAM.replace("{team_id}", neteaseTeam.getTid());
+
+            YunxinApiResponse response = yunxinClient.executeV2Api(
+                    HttpMethod.DELETE,
+                    path,
+                    path,
+                    queryParams,
+                    null
+            );
+
+            // 4. 处理响应
+            String data = response.getData();
+            JSONObject json = JSONObject.parseObject(data);
+            int code = json.getIntValue("code");
+
+            if (code != 200) {
+                log.error("网易云信解散群失败,响应:");
+                return AjaxResult.error("解散群失败");
+            }
+            return AjaxResult.success();
+        } catch (YunxinSdkException e) {
+            // 云信调用异常时回滚事务
+            e.printStackTrace();
+            log.error("网易云信解散群服务调用异常 traceId:");
+            return AjaxResult.error("解散群失败,云信服务异常");
+        } catch (Exception e) {
+            // 其他异常同样回滚
+            e.printStackTrace();
+            log.error("解散群过程发生未知异常", e);
+            return AjaxResult.error("解散群失败,系统异常");
+        }
+    }
 }

--
Gitblit v1.9.3