1
zj
2025-09-19 1ff642981afabeea08cdf2ffc6607dafd6979b97
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/NeteaseTeamServiceImpl.java
@@ -14,11 +14,14 @@
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.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.im.comm.Result;
import com.ruoyi.im.config.AddTeamMembersRequest;
import com.ruoyi.im.config.CreateTeamRequest;
import com.ruoyi.im.config.AssignmentRequest;
import com.ruoyi.im.service.NeteaseTeamService;
import com.ruoyi.imenum.ErrorCodeEnum;
import com.ruoyi.system.domain.GroupWelcomeConfig;
import com.ruoyi.system.domain.NeteaseTeam;
import com.ruoyi.system.mapper.NeteaseTeamMapper;
@@ -29,13 +32,19 @@
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class NeteaseTeamServiceImpl extends ServiceImpl<NeteaseTeamMapper, NeteaseTeam> implements NeteaseTeamService {
    @Resource
    private final YunxinApiHttpClient yunxinClient;
    @Autowired
    ImApiServcieImpl imApiServcie;
    // 使用构造函数注入(推荐)
    @Autowired
@@ -77,8 +86,8 @@
            int code = json.getIntValue("code");
            if (code != 200) {
                log.error("网易云信创建群组失败,响应:");
                return AjaxResult.error("创建群组失败");
                log.error("-----------网易云信创建群组失败:"+ ErrorCodeEnum.getByCode(code).getComment()+"----im信息:"+ErrorCodeEnum.getByCode(code).getDesc());
                return AjaxResult.error("创建群组失败:"+ErrorCodeEnum.getByCode(code).getComment());
            }
            // 5. 解析响应获取群组ID
@@ -118,7 +127,7 @@
            // 2. 将Map转换为JSON字符串
            String jsonBody = JSON.toJSONString(paramMap);
            NeteaseTeam neteaseTeam = neteaseTeamMapper.selectById(request.getGroupId());
            NeteaseTeam neteaseTeam = neteaseTeamMapper.selectById(request.getId());
            if(ObjectUtil.isEmpty(neteaseTeam)){
                return AjaxResult.error("群不存在!");
            }
@@ -138,8 +147,8 @@
            int code = json.getIntValue("code");
            if (code != 200) {
                log.error("网易云信修改群组失败,响应:");
                return AjaxResult.error("修改群组失败");
                log.error("-----------网易云信修改群组失败:"+ ErrorCodeEnum.getByCode(code).getComment()+"----im信息:"+ErrorCodeEnum.getByCode(code).getDesc());
                return AjaxResult.error("修改群组失败:"+ErrorCodeEnum.getByCode(code).getComment());
            }
            // 5. 解析响应获取群组ID
@@ -172,7 +181,7 @@
    private int updateNeteaseTeam(CreateTeamRequest request, NeteaseTeam neteaseTeam) {
        neteaseTeam.setName(request.getName());
        neteaseTeam.setMemberCount(request.getMembers_limit());
        neteaseTeam.setMembersLimit(request.getMembers_limit());
        neteaseTeam.setAnnouncement(request.getAnnouncement());
        neteaseTeam.setIntro(request.getIntro());
        neteaseTeam.setJoinMode(request.getJoin_mode());
@@ -261,23 +270,41 @@
    @Override
    public AjaxResult inviteTeamMembers(AddTeamMembersRequest request) {
        try {
            if(null != request.getNumber() && request.getNumber() > 99){
                return AjaxResult.error("拉人数量单次最多99!");
            }
            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"));
            String operatorId;
            if(StringUtils.isNotEmpty(request.getOperatorId())){
                operatorId = request.getOperatorId();
            }else{
                operatorId = neteaseTeam.getOwnerAccountId();
            }
            List<String> inviteAccountIds = new ArrayList<>();
            if(ObjectUtil.isEmpty(request.getInviteAccountIds()) && ObjectUtil.isNotEmpty(request.getNumber()) && request.getNumber() > 0){
                Result result = imApiServcie.batchRegister(request.getNumber());
                if(result.getCode() != 200){
                    return AjaxResult.error("生成账号错误!");
                }
                List<String> accountList = (List<String>) result.getData();
                inviteAccountIds = accountList;
            }else{
                inviteAccountIds = request.getInviteAccountIds();
            }
            AddTeamMembersRequest build = AddTeamMembersRequest.builder()
                    .inviteAccountIds(request.getInviteAccountIds())
                    .operatorId(groupWelcomeConfig.getUserAccid())
                    .inviteAccountIds(inviteAccountIds)
                    .operatorId(operatorId)
                    .msg(request.getMsg())
                    .teamId(Long.valueOf(neteaseTeam.getTid()))
                    .teamType(neteaseTeam.getTeamType())
                    .build();
// 方法1:使用 Jackson ObjectMapper
            ObjectMapper objectMapper = new ObjectMapper();
            String jsonBody = objectMapper.writeValueAsString(build);
@@ -295,9 +322,10 @@
            int code = json.getIntValue("code");
            if (code != 200) {
                log.error("网易云信拉人入群失败,响应:");
                return AjaxResult.error("拉人入群失败");
                log.error("-----------网易云信拉人入群失败:"+ ErrorCodeEnum.getByCode(code).getComment()+"----im信息:"+ErrorCodeEnum.getByCode(code).getDesc());
                return AjaxResult.error("拉人入群失败:"+ErrorCodeEnum.getByCode(code).getComment());
            }
            return AjaxResult.success();
        } catch (YunxinSdkException e) {
            // 云信调用异常时回滚事务
@@ -346,9 +374,11 @@
            int code = json.getIntValue("code");
            if (code != 200) {
                log.error("网易云信转让群主失败,响应:");
                return AjaxResult.error("转让群主失败");
                log.error("-----------网易云信转让群主失败:"+ ErrorCodeEnum.getByCode(code).getComment()+"----im信息:"+ErrorCodeEnum.getByCode(code).getDesc());
                return AjaxResult.error("转让群主失败:"+ErrorCodeEnum.getByCode(code).getComment());
            }
            neteaseTeam.setOwnerAccountId(request.getNew_owner_account_id());
            neteaseTeamMapper.updateById(neteaseTeam);
            return AjaxResult.success();
        } catch (YunxinSdkException e) {
            // 云信调用异常时回滚事务
@@ -389,9 +419,11 @@
            int code = json.getIntValue("code");
            if (code != 200) {
                log.error("网易云信解散群失败,响应:");
                return AjaxResult.error("解散群失败");
                log.error("-----------网易云信解散群失败:"+ ErrorCodeEnum.getByCode(code).getComment()+"----im信息:"+ErrorCodeEnum.getByCode(code).getDesc());
                return AjaxResult.error("解散群失败:"+ErrorCodeEnum.getByCode(code).getComment());
            }
            neteaseTeam.setStatus(1);
            neteaseTeamMapper.updateById(neteaseTeam);
            return AjaxResult.success();