交友项目【集成环信Api】

news2024/11/19 18:44:10

目录

1:自动装配

2:查询用户环信账户

3:环信ID查询用户信息


1:自动装配

在项目中集成环信API,完成即时通信等

环信官方文档地址:Java Server SDK [IM 开发文档]

自动装配模块:

 

 

 pom文件相关依赖

<dependency>
    <groupId>com.easemob.im</groupId>
    <artifactId>im-sdk-core</artifactId>
    <version>0.5.2</version>
</dependency>

yml文件中配置相关信息

huanxin:
  appkey: ****************
  clientId: ****************
  clientSecret: ****************

 读取yml文件中的配置

@ConfigurationProperties(prefix = "tanhua.huanxin")
@Data
public class HuanXinProperties {

    private String appkey;
    private String clientId;
    private String clientSecret;

}

创建封装类以及需要用到的方法

package com.czxy.tanhua.autoconfig.template;

import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON;
import com.czxy.tanhua.autoconfig.properties.HuanXinProperties;
import com.czxy.tanhua.autoconfig.vo.HuanxinMessageVo;
import com.easemob.im.server.EMProperties;
import com.easemob.im.server.EMService;
import com.easemob.im.server.model.EMTextMessage;
import lombok.extern.log4j.Log4j;

import java.util.Set;

@Log4j
public class HuanXinTemplate {
    private EMService service;

    public HuanXinTemplate(HuanXinProperties properties) {
        EMProperties emProperties = EMProperties.builder()
                .setAppkey(properties.getAppkey())
                .setClientId(properties.getClientId())
                .setClientSecret(properties.getClientSecret())
                .build();
        service = new EMService(emProperties);
    }

    /**
     * 创建环信用户
     * @param username
     * @param password
     * @return
     */
    public Boolean createUser(String username,String password) {
        try {
            //创建环信用户
            service.user().create(username.toLowerCase(), password)
                    .block();
            return true;
        }catch (Exception e) {
            e.printStackTrace();
            log.error("创建环信用户失败~");
        }
        return false;
    }

    /**
     * 添加联系人
     * @param username1
     * @param username2
     * @return
     */
    public Boolean addContact(String username1,String username2) {
        try {
            //创建环信用户
            service.contact().add(username1,username2)
                    .block();
            return true;
        }catch (Exception e) {
            log.error("添加联系人失败~");
        }
        return false;
    }

    /**
     * 删除联系人
     * @param username1
     * @param username2
     * @return
     */
    public Boolean deleteContact(String username1,String username2) {
        try {
            //创建环信用户
            service.contact().remove(username1,username2)
                    .block();
            return true;
        }catch (Exception e) {
            log.error("删除联系人失败~");
        }
        return false;
    }

    /**
     * 发送消息
     * @param username
     * @param huanxinMessageVo
     * @return
     */
    public Boolean sendMsg(String username, HuanxinMessageVo huanxinMessageVo) {
        try {
            //接收人用户列表
            Set<String> set = CollUtil.newHashSet(username);
            // 将消息内容转换成json
            String content = JSON.toJSONString(huanxinMessageVo);
            //文本消息
            EMTextMessage message = new EMTextMessage().text(content);
            //发送消息  from:admin是管理员发送
            service.message().send("admin","users",
                    set,message,null).block();
            return true;
        }catch (Exception e) {
            log.error("删除联系人失败~");
        }
        return false;
    }
}

在引导类中进行声明封装类,将相关的工具类交给IOC容器管理

/** 自动装配类
 * @description
 */
@EnableConfigurationProperties({
        SmsProperties.class,
        OssProperties.class,
        AipFaceProperties.class,
        HuanXinProperties.class
})
public class TanhuaAutoConfiguration {

    @Bean
    public SmsTemplate smsTemplate(SmsProperties smsProperties) {
        return new SmsTemplate(smsProperties);
    }

    @Bean
    public OssTemplate ossTemplate(OssProperties ossProperties) {
        return new OssTemplate(ossProperties);
    }

    @Bean
    public AipFaceTemplate aipFaceTemplate() {
        return new AipFaceTemplate();
    }

    @Bean
    public HuanXinTemplate huanXinTemplate(HuanXinProperties properties) {
        return new HuanXinTemplate(properties);
    }
}

 在resources目录下创建META-INF文件夹,在此文件夹下创建spring.factories文件,该文件声明引导类位置,springboot启动时会加载该文件中声明的引导类完成工具类的自动装配。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.czxy.tanhua.autoconfig.TanhuaAutoConfiguration

2:查询用户环信账户

接口地址: http://192.168.136.160:3000/project/19/interface/api/85

 

app-server模块:

 controller层:

@RestController
@RequestMapping("/huanxin")
public class HuanxinController {

    @Resource
    private UserService userService;

    @GetMapping("/user")
    public ResponseEntity<HuanXinUserVo> user() {
        HuanXinUserVo huanXinUserVo = userService.findHuanXinUser();
        return ResponseEntity.ok(huanXinUserVo);
    }
}

service层:

    public HuanXinUserVo findHuanXinUser() {
        // 查询
        User user = userApi.findById(UserHolder.getUserId());
        if(user == null) {
            return null;
        }
        // 封装
        return new HuanXinUserVo(user.getHxUser() ,user.getHxPassword());
    }

 

3:环信ID查询用户信息

app-server模块:

controller层

    @GetMapping("/userinfo")
    public ResponseEntity userinfo(String huanxinId) {
        //查询
        UserInfoVo userInfoVo = messageService.findUserInfoByHuanxin(huanxinId);
        //返回
        return ResponseEntity.ok(userInfoVo);
    }

 service层:

    /**
     * 通过环信id查询详情
     * @param huanxinId
     * @return
     */
    public UserInfoVo findUserInfoByHuanxin(String huanxinId) {
        //1 通过huanxinId查询用户信息
        User user = userApi.findByHuanxin(huanxinId);

        //2 查询UserInfo信息
        UserInfo userInfo = userInfoApi.findById(user.getId());

        //3 封装数据UserInfoVo
        UserInfoVo userInfoVo = new UserInfoVo();
        BeanUtils.copyProperties(userInfo, userInfoVo);
        if(userInfo.getAge() != null){
            userInfoVo.setAge(userInfo.getAge().toString());
        }
        return userInfoVo;
    }

 通过huanxinId查询用户信息的接口

    @Override
    public User findByHuanxin(String huanxinId) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("hx_user", huanxinId);
        return userMapper.selectOne(queryWrapper);
    }

通过userid查询用户的接口

    @Override
    public UserInfo findById(Long userInfoId) {
        return userInfoMapper.selectById(userInfoId);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/541415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.数据结构期末复习之顺序表和链表

1.表是可以是线性结构 学号姓名19(数据项)jams(数据项)20(数据项)ming(数据项) 19 jams或 20 ming是数据元表单个的是数据项‘’线性结构可以表示为 19 jams->20 ming2.什么是逻辑结构?:具有相同类型的有限序列(元素排序的位置,排兵布阵操作的方法) a1 a2 a3 .... an (空…

jenkins流水线使用入门示例

之前采用Jenkins的自由风格构建的项目&#xff0c;每个步骤流程都要通过不同的方式设置&#xff0c;并且构建过程中整体流程是不可见的&#xff0c;无法确认每个流程花费的时间&#xff0c;并且问题不方便定位问题。 Jenkins的Pipeline可以让项目的发布整体流程可视化&#xf…

低代码开发大势所趋,这款无代码开发平台你值得拥有

文章目录 什么是低代码iVX和其它低代码的平台的区别没有创新的“拼凑”&#xff0c;没有好东西iVX在线编辑器体验 什么是低代码 低代码&#xff08;Low Code&#xff09;是一种可视化的应用开发方法&#xff0c;用较少的代码、以较快的速度来交付应用程序&#xff0c;将程序员…

ElasticSearch漫游 (1.安装ELK)

前期准备&#xff1a; 请搭建好linux环境 推荐使用centos7系统请关闭linux防火墙请安装好docker 安装ES 创建网络 我们需要部署kibana容器&#xff0c;因此需要让es和kibana互联&#xff0c;这里先创建一个网络。 docker network create es-net加载es镜像 运行docker命令 部…

智能无线温振传感器:提高锂电设备故障诊断精度的利器

当今锂电工厂对于设备可靠性和生产效率的要求越来越高&#xff0c;而设备故障诊断是其中非常重要的一环。针对锂电设备的振动和温度等健康状态的监测&#xff0c;智能无线温振传感器是一款非常有用的工具。 图.太阳能面板生产&#xff08;iStock&#xff09; 智能无线温振传感器…

和数组处理有关的一些OJ题(JAVA)(ArrayList)

1、给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须确保时间复杂度为O(N)&#xff0c;空间复杂度为O&#xff0c;并原地修改输入数组。元素的顺序可以改…

Android系统原理性问题分析 - Android Java框架层的结构

声明 在Android系统中经常会遇到一些系统原理性的问题&#xff0c;在此专栏中集中来讨论下。Android系统&#xff0c;为了能够更好的理解Android的Java世界的运行规律&#xff0c;此篇分析Android Java框架的结构。此篇参考一些博客和书籍&#xff0c;代码基于Android 7.1.1&a…

资产处置求变,京东拍卖如何做好“价值枢纽”?

近年来&#xff0c;随着资产处置市场规模快速成长以及互联网行业飞速发展&#xff0c;金融资产、司法拍卖、罚没物资等处置方式从最初单纯线下拍卖逐渐落地互联网&#xff0c;服务专业化程度也在不断提高。为更好适应市场变化&#xff0c;满足不断增长的市场需求&#xff0c;5月…

NISP二级证书含金量如何

国家信息安全水平考试&#xff08;National Information Security Test Program&#xff0c;简称NISP&#xff09;&#xff0c;是由中国信息安全测评中心实施培养国家网络空间安全人才的项目。 为培养更多优秀的实践型网络安全人才&#xff0c;中国信息安全测评中心推出了国家…

替代MySQL半同步复制,Meta技术团队推出MySQL Raft共识引擎

作者&#xff1a;Anirban Rahut、Abhinav Sharma、Yichen Shen、Ahsanul Haque 原文链接&#xff1a;https://engineering.fb.com/2023/05/16/data-infrastructure/mysql-raft-meta/ 译者&#xff1a;ChatGPT 责编&#xff1a;张红月 MySQL Raft是MySQL数据库中一种基于Raft协议…

探索LeetCode【0010】正则表达式匹配(已懂,未练习)

目录 0.1 题目0.2 补充示例1. 参考B站视频2. 官方答案的评论-可用3. chatGPT的思路和解法-可用 0.1 题目 题目链接&#xff1a;【0010】正则表达式匹配 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹…

2023 RSAC|和衷共济 共同应对网络安全挑战

作为全球最具规模的安全大会&#xff0c;2023年RSA Conference的落幕也为安全行业的“何去何从”带来一定的启发性。 今年大会的主题是“Strong together”&#xff0c;主要来自于海伦凯勒的名言: “ Alone we can do so little; together we can do so much. ” 纵观2022年…

做完这个测试项目,我终于决定辞职·····

很迷茫&#xff0c;然后过得非常不如意&#xff0c;倒不是上一年的职业目标没达到&#xff0c;而是接下来的路根本不知道如何走。在没解决这个问题之前&#xff0c;或者说没搞清楚自己的方向之前&#xff0c;是迟迟不能落笔的&#xff0c;啊不&#xff0c;应该是落键盘。 下班…

JavaWeb-RequestResponse的使用

Request&Response 今日目标 掌握Request对象的概念与使用掌握Response对象的概念与使用能够完成用户登录注册案例的实现能够完成SqlSessionFactory工具类的抽取 1&#xff0c;Request和Response的概述 Request是请求对象&#xff0c;Response是响应对象。这两个对象在我们…

德尔玛IPO首日破发,市值蒸发超4亿

今日&#xff08;5月18日&#xff09;&#xff0c;小米“代工厂”广东德尔玛科技股份有限公司&#xff08;下称“德尔玛”&#xff0c;301332.SZ&#xff09;正式在深交所挂牌上市。 德尔玛此次IPO募资净额为12.31亿元&#xff0c;开盘价为14.81元/股&#xff0c;与发行价持平…

Call to undefined function bcadd()

先介绍一下当前使用的环境。同学们可以比较一下&#xff0c;看本篇文章是否可以提供帮助。 docker 部署 nginx 1.24php 8.1-fpm 再介绍一下框架&#xff0c;使用的是 "laravel 9.33.0" 其实这里跟 laravel 框架和 nginx 是没太多关系的&#xff0c;因为我们主要是使…

MySQL高级_第09章_性能分析工具的使用

MySQL高级_第09章_性能分析工具的使用 在数据库调优中&#xff0c;我们的目标就是 响应时间更快&#xff0c;吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。 1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;该…

Windows平台软件开发模型总结:V型模型、瀑布模型、迭代模型、增量模型、螺旋模型、原型模型

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下Windows平台软件开发模型总结&#xff1a;V型模型、瀑布模型、迭代模型、增量模型、螺旋模型、原型模型。 很多人可能知道了&#xff0c;那就是在我们浙江省&#xff0c;从2021年年初到现在&…

内网 monorepo 配置指南(PNPM、YARN)

此处的内网是指没办法连接互联网进行依赖下载的环境&#xff0c;本文以windows平台为例 背景说明 绝大部分政府机关、国有企业都是在内网开发&#xff0c;无法从互联网同步依赖&#xff0c;就需要另辟蹊径解决项目依赖的问题。 传统的单包项目还好&#xff0c;从互联网机器将…

兼顾降本与增效,我们对存算分离的设计与思考

“降本增效”是最近企业常被提及的关键字&#xff0c;作为新时代企业发展的数据大脑&#xff0c;企业大数据团队需要持续探索如何在有限资源下创造更多价值。本文将以场景为"引"&#xff0c;技术为"核"&#xff0c;介绍如何基于 StarRocks 全新的存算分离架…