千家信息网

springboot集成teams的方法是什么

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容主要讲解"springboot集成teams的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"springboot集成teams的方法是什
千家信息网最后更新 2025年01月19日springboot集成teams的方法是什么

本篇内容主要讲解"springboot集成teams的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"springboot集成teams的方法是什么"吧!

添加依赖

           com.microsoft.graph           microsoft-graph           2.3.2                         com.microsoft.graph           microsoft-graph-core           1.0.5                          com.microsoft.graph           microsoft-graph-auth           0.3.0-SNAPSHOT                         com.microsoft.azure           msal4j           1.0.0       

业务逻辑层

package com.tg.admin.service; import com.tg.admin.utils.CommonResult;import java.util.Map;/** * 用户信息 * * @author summer.chou * @date 2020/11/26 */public interface SplGraphService {    /**     * 获取token(自动刷新)     *     * @return token     */    String getToken();     * 获取用户所属团队     * @return 结果    CommonResult> getTeamsInfo();     * 获取用户所属渠道     * @param teamsId 团队ID    CommonResult> getChannel(String teamsId);     * 根据teamsId、channelId获取用户信息     * @param teamsId   团队ID     * @param channelId 渠道ID    CommonResult> getMember(String teamsId, String channelId);     * 发送消息     * @param content   消息内容     * @param teamId    团队ID    CommonResult> sendMs(String content, String teamId, String channelId);     * 添加渠道     * @param displayName 渠道名称     * @param description 渠道备注     * @param teamId      渠道ID     * @return 渠道ID    CommonResult> addChannel(String displayName, String description, String teamId);     * 添加成员     * @param userNum   用户名称    CommonResult> addMembers(String teamId, String channelId, String userNum);}

业务逻辑实现

package com.tg.admin.service.impl; import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.microsoft.graph.models.extensions.IGraphServiceClient;import com.microsoft.graph.requests.extensions.GraphServiceClient;import com.tg.admin.service.ChannelUserLogService;import com.tg.admin.service.SplGraphService;import com.tg.admin.utils.*;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Lazy;import org.springframework.http.HttpHeaders;import org.springframework.http.MediaType;import org.springframework.stereotype.Service;import org.springframework.web.client.RestTemplate;import java.util.HashMap;import java.util.List;import java.util.Map;/** * teams Graph模块 第三方接口调用封装 * * @author summer.chou * @date 2020/12/30 */@Service@Slf4jpublic class SplGraphServiceImpl implements SplGraphService {    @Value("#{'${teams.graph.scopes}'.split(',')}")    private List scopes;    @Value("${teams.graph.clientId}")    private String clientId;    @Value("${teams.graph.team.url}")    private String teamsUrl;    @Value("${teams.graph.channel.url}")    private String channelUrl;    @Value("${teams.graph.add.channel.url}")    private String addChannelUrl;    @Value("${teams.graph.ms.url}")    private String msUrl;    @Value("${teams.graph.member.url}")    private String memberUrl;    @Value("${teams.graph.add.channel.members.url}")    private String addChannelMembersUrl;    @Value("${teams.graph.account}")    private String account;    @Value("${teams.graph.password}")    private String password;    private RedisUtil redisUtil;    private RestTemplate restTemplate;    private ChannelUserLogService channelUserLogService;    public SplGraphServiceImpl(RestTemplate restTemplate, RedisUtil redisUtil, @Lazy ChannelUserLogService channelUserLogService) {        this.restTemplate = restTemplate;        this.redisUtil = redisUtil;        this.channelUserLogService = channelUserLogService;    }    @Override    public String getToken() {        Object token = redisUtil.get(Constants.ADMIN_TOKEN_KEY + account);        try {            if (token == null) {                MyAuthenticationProvider authProvider = new MyAuthenticationProvider(clientId, scopes, account, password);                IGraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider(authProvider).buildClient();                graphClient.me().buildRequest().get();                token = authProvider.getToken();                redisUtil.set(Constants.ADMIN_TOKEN_KEY + account, token, Constants.TOKEN_EXPIRES_TIME);            }        } catch (Exception e) {            log.info("获取teams-graph,获取token接口异常", e);        }        return token.toString();    public CommonResult> getTeamsInfo() {        JSONArray value = null;        Map result = new HashMap<>();        JSONObject jsonObject = new JSONObject();            log.info("调用temas获取团队信息:teamsUrl{}", teamsUrl);            //设置请求头            HttpHeaders headers = new HttpHeaders();            headers.set("Authorization", getToken());            headers.setContentType(MediaType.APPLICATION_JSON_UTF8);            jsonObject = RestTemplateUtils.requestByGet(teamsUrl, null, restTemplate, headers);            log.info("返回值:jsonObject:{}", jsonObject.toJSONString());            value = jsonObject.getJSONArray("value");            result.put("value", value);            e.printStackTrace();        return CommonResult.ok(result);    public CommonResult> getChannel(String teamId) {        JSONArray array = null;            String url = channelUrl.replace("{team-id}", teamId);            log.info("调用teams获取用户渠道url:{}", url);            jsonObject = RestTemplateUtils.requestByGet(url, null, restTemplate, headers);            log.info("返回结果:jsonObject:{}", jsonObject.toJSONString());            array = jsonObject.getJSONArray("value");            result.put("value", array);    public CommonResult> getMember(String teamsId, String channelId) {            String url = memberUrl.replace("{team-id}", teamsId).replace("{channel-id}", channelId);            log.info("调用teams获取渠道成员:url:{}", url);    public CommonResult> sendMs(String content, String teamId, String channelId) {            String url = msUrl.replace("{team-id}", teamId).replace("{channel-id}", channelId);            log.info("调用teams发送消息:url:{}", url);            Map map = new HashMap();            Map body = new HashMap<>();            map.put("content", content);            map.put("contentType", "html");            body.put("body", map);            jsonObject = RestTemplateUtils.requestByPost(url, body, restTemplate, headers);            log.info("返回结果:jsonObject:{}", jsonObject.toJSONString());        return CommonResult.ok();    public CommonResult> addChannel(String displayName, String description, String teamId) {            String url = addChannelUrl.replace("{id}", teamId);            log.info("调用teams添加渠道:url:{}", url);            map.put("displayName", displayName);            map.put("description", description);            jsonObject = RestTemplateUtils.requestByPost(url, map, restTemplate, headers);            if (jsonObject != null) {                result.put("id", jsonObject.getString("id"));    public CommonResult> addMembers(String teamId, String channelId, String userNum) {            String url = addChannelMembersUrl.replace("{team-id}", teamId).replace("{channel-id}", channelId);            log.info("调用teams添加成员:url:{}", url);            map.put("@odata.type", "#microsoft.graph.aadUserConversationMember");            JSONArray roles = new JSONArray();            roles.add("owner");            map.put("roles", roles);}

RestTemplateUtils 工具类

package com.tg.admin.utils; import com.alibaba.fastjson.JSONObject;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;import org.springframework.http.HttpMethod;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Component;import org.springframework.util.MultiValueMap;import org.springframework.web.client.RestTemplate;import org.springframework.web.util.UriComponentsBuilder; import java.util.HashMap;import java.util.Map; /** * RestTemplateUtils工具类 * * @author summer.chou * @date 2020/11/26 */@Componentpublic class RestTemplateUtils {      /**     * 根据get方式请求接口(复合类型get请求,支持所有get请求)     *     * @param url          请求路劲     * @param map          请求参数 无传null     * @param restTemplate restTemplate对象     * @return json     */    public static JSONObject requestByGet(String url, HashMap map, RestTemplate restTemplate, HttpHeaders headers) {         // header填充        HttpEntity> request = new HttpEntity(null, headers);         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);        //ResponseEntity responseEntity;        ResponseEntity responseEntity;        //如果存在參數        if (map != null) {            for (Map.Entry e :                    map.entrySet()) {                //构建查询参数                builder.queryParam(e.getKey(), e.getValue());            }            //拼接好参数后的URl//test.com/url?param1={param1}¶m2={param2};            String reallyUrl = builder.build().toString();            responseEntity = restTemplate.exchange(reallyUrl, HttpMethod.GET, request, JSONObject.class);        } else {            responseEntity = restTemplate.exchange(url, HttpMethod.GET, request, JSONObject.class);        }         return responseEntity.getBody();    }      /**     * 根据Post方式请求接口(复合类型,post支持所有json格式传参请求post请求)     *     * @param url          请求路径     * @param map          请求参数(无参数传null)     * @param restTemplate restTemplate对象     * @return json     */    public static JSONObject requestByPost(String url, Map map, RestTemplate restTemplate, HttpHeaders headers) {        // header填充,map填充        HttpEntity> request = new HttpEntity>(map, headers);        ResponseEntity entity = restTemplate.postForEntity(url, request, JSONObject.class);        return entity.getBody();    } }

测试接口

package com.tg.admin.controller; import com.tg.admin.service.SplGraphService;import com.tg.admin.utils.CommonResult;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiImplicitParams;import io.swagger.annotations.ApiOperation;import lombok.extern.slf4j.Slf4j;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.web.bind.annotation.*;@Api(description = "teams-graph模块(第三方测试接口)")@RestController@RequestMapping("/graph")@RefreshScope@Slf4j@Deprecated //添加过期注解,接口保留方便后期异常排查public class GraphController {    private SplGraphService tgService;    public GraphController(SplGraphService tgService) {        this.tgService = tgService;    }    @ApiOperation("获取所属团队信息")    @GetMapping("/getTeamsInfo")    public CommonResult getTeamsInfo() {        return tgService.getTeamsInfo();    @ApiOperation("获取token")    @GetMapping("/getToken")    public CommonResult getToken() {        return CommonResult.ok(tgService.getToken());    @ApiOperation("获取用户所属渠道")    @ApiImplicitParams({            @ApiImplicitParam(name = "teamId", value = "团队Id", dataType = "string", required = true)    })    @GetMapping("/getChannel")    public CommonResult getChannel(@RequestParam(value = "teamId") String teamId) {        return tgService.getChannel(teamId);    @ApiOperation("获取渠道下的成员")            @ApiImplicitParam(name = "teamId", value = "团队Id", dataType = "string", required = true),            @ApiImplicitParam(name = "channelId", value = "渠道Id", dataType = "string", required = true)    @GetMapping("/getMember")    public CommonResult getMember(@RequestParam(value = "teamId") String teamId,                                  @RequestParam(value = "channelId") String channelId) {        return tgService.getMember(teamId, channelId);    @ApiOperation("创建团队下的渠道(备用接口)")            @ApiImplicitParam(name = "displayName", value = "渠道名称", dataType = "string", required = true),            @ApiImplicitParam(name = "description", value = "渠道备注", dataType = "string", required = true)    @PostMapping("/addChannel")    public CommonResult addChannel(@RequestParam(value = "teamId") String teamId,                                   @RequestParam(value = "displayName") String displayName,                                   @RequestParam(value = "description") String description    ) {        return tgService.addChannel(displayName, description, teamId);    @ApiOperation("向渠道里面添加成员(备用接口)")            @ApiImplicitParam(name = "channelId", value = "渠道ID", dataType = "string", required = true),            @ApiImplicitParam(name = "userNum", value = "用户Id", dataType = "string", required = true)    @PostMapping("/addMembers")    public CommonResult addMembers(@RequestParam(value = "teamId") String teamId,                                   @RequestParam(value = "channelId") String channelId,                                   @RequestParam(value = "userNum") String userNum        return tgService.addMembers(teamId, channelId, userNum);    @ApiOperation("通过teamId,channelId发送消息")    @PostMapping("/sendMs")            @ApiImplicitParam(name = "content", value = "内容", dataType = "string", required = true),    public CommonResult sendMs(@RequestParam(value = "teamId") String teamId,                               @RequestParam(value = "content") String content,                               @RequestParam(value = "channelId") String channelId) {        return tgService.sendMs(content, teamId, channelId);}

yml 配置

teams:  graph:    #微软master账号,密码    account: 管理员账号    password: 管理员密码    add:      channel:        members:          url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/members        url: https://graph.microsoft.com/v1.0/teams/{id}/channels    channel:      url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels    clientId: e730901a-8bf3-472b-93dd-afe79713bc5b    member:      url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/members    ms:      url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/messages    scopes: Group.Read.All,User.Read    team:      url: https://graph.microsoft.com/v1.0/me/joinedTeams

到此,相信大家对"springboot集成teams的方法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0