From a441a1665bc8dd78b70cc842ad9777ff0ec6daee Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Sat, 23 Aug 2025 02:11:45 +0800
Subject: [PATCH] 1
---
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/NeteaseTeamServiceImpl.java | 243 +++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 236 insertions(+), 7 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..d859cab 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,36 +1,40 @@
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.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.netease.nim.server.sdk.core.BizName;
+import com.fasterxml.jackson.databind.ObjectMapper;
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.GroupWelcomeConfig;
import com.ruoyi.system.domain.NeteaseTeam;
import com.ruoyi.system.mapper.NeteaseTeamMapper;
-import org.aspectj.weaver.loadtime.Aj;
+import com.ruoyi.system.service.GroupWelcomeConfigService;
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.*;
@Service
public class NeteaseTeamServiceImpl extends ServiceImpl<NeteaseTeamMapper, NeteaseTeam> implements NeteaseTeamService {
+ @Resource
private final YunxinApiHttpClient yunxinClient;
// 使用构造函数注入(推荐)
@@ -39,7 +43,8 @@
this.yunxinClient = yunxinClient;
}
-
+ @Autowired
+ GroupWelcomeConfigService groupWelcomeConfigService;
@Resource
private NeteaseTeamMapper neteaseTeamMapper;
@@ -101,6 +106,80 @@
log.error("创建群组过程发生未知异常", e);
return AjaxResult.error("创建群组失败,系统异常");
}
+ }
+
+ @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.isEmpty(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);
}
/**
@@ -178,4 +257,154 @@
return insert;
}
+
+ @Override
+ public AjaxResult inviteTeamMembers(AddTeamMembersRequest request) {
+ try {
+
+ NeteaseTeam neteaseTeam = neteaseTeamMapper.selectById(request.getGroupId());
+ if(ObjectUtil.isEmpty(neteaseTeam)){
+ return AjaxResult.error("群不存在!");
+ }
+ GroupWelcomeConfig groupWelcomeConfig = groupWelcomeConfigService.getOne(new LambdaQueryWrapper<>(GroupWelcomeConfig.class)
+ .eq(GroupWelcomeConfig::getConfigurationName, "IM-BASICS").last(" limit 1"));
+
+ AddTeamMembersRequest build = AddTeamMembersRequest.builder()
+ .inviteAccountIds(request.getInviteAccountIds())
+ .operatorId(groupWelcomeConfig.getUserAccid())
+ .msg(request.getMsg())
+ .teamId(Long.valueOf(neteaseTeam.getTid()))
+ .teamType(neteaseTeam.getTeamType())
+ .build();
+
+// 方法1:使用 Jackson ObjectMapper
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonBody = objectMapper.writeValueAsString(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.isEmpty(neteaseTeam)){
+ return AjaxResult.error("群不存在!");
+ }
+
+ AssignmentRequest build = AssignmentRequest.builder()
+ .teamId(Long.valueOf(neteaseTeam.getTid()))
+ .team_type(neteaseTeam.getTeamType())
+ .new_owner_account_id(request.getNew_owner_account_id())
+ .leave(request.getLeave())
+ .build();
+ ObjectMapper objectMapper = new ObjectMapper();
+ String requestBody = objectMapper.writeValueAsString(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(Integer id) {
+ try {
+ NeteaseTeam neteaseTeam = neteaseTeamMapper.selectById(id);
+ if(ObjectUtil.isEmpty(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("解散群失败");
+ }
+ neteaseTeam.setStatus(1);
+ neteaseTeamMapper.updateById(neteaseTeam);
+ 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