暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于Java+SpringBoot+Vue前后端分离即时通讯系统设计与实现

卡布奇诺海晨 2023-03-10
909

博主介绍:✌全网粉丝3W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌

博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

开源项目:码云搜索 CeaM/open-mall

🍅文末关注公众号获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

前言

    纵观当下世界,科学技术日新月异,信息技术节节攀高,经济活动也越发高涨。一方面,信息科技迅猛发展带来了信息时代的兴起,其中互联网技术自出现以来便吸引了全球人类的目光,深刻地变革了人类的生存及生活方式;而另一方面,经济活动的快速发展也对安全和便利提出了更高、更为严苛的要求。人们不仅仅满足于有一个好工作,更加关注于自己的生活方方面面,而也是工作者下班后或周末经常提及的。但是对于场所的数据信息等没有及时获悉,而错过一些上课机会等等。故该健身系统app可以实时给客户提供的最新消息,环境、设备等消息,方便客户掌握的最新动态;同时也方便吸引客户,管理与运营等。

系统设计

1、系统运行环境

开发系统:Windows10

架构模式:MVC/前后端分离

JDK版本:Java JDK1.8

开发工具:IDEA

数据库版本:mysql5.7

数据库可视化工具:SQL yog或Navicat for MySQL

服务器:SpringBoot自带 apache tomcat

主要技术:Java、SpringBoot、MyBatis、Netty、MySQL、Redis、Html、vue等

非功能性与可行性分析

2.5非功能性需求分析

非功能性需求:用户对软件质量属性、运行环境、资源约束、外部接口等方面的要求或期望,包括:

2.5.1性能需求:

用户在软件响应速度、结果精度、运行时资源消耗量等方面的要求。

2.5.2可行性需求:

用户在软件失效的频率、严重程度、易恢复性,以及故障可预测性等方面的要求。

2.5.3易用性需求:

用户在界面的易用性、美观性,以及对面向用户的文档和培训资料等方面的要求。

2.5.4安全性需求:

用户在身份证、授权控制、私密性等方面的要求。

2.5.5运行环境约束:

用户对软件系统运行环境的要求。

2.5.6外部接口:

用户对待开发软件系统与其它软件系统或设备之间的接口要求

2.6可行性分析

可行性分析是从不同的角度,对可能影响系统的各方面因素进行分析,确认系统在实际生活上是可行的。本系统只是单纯地从经济、法律、技术、操作可行性四个方面来分析说明。

2.6.1技术可行性

技术上的可行性分析主要分析技术条件能否顺利完成开发工作,软、硬件能否满足需要。本系统采用Vue+Elementui开发出友好美观的人机界面,便于用户理解、操作。数据库管理系统采用MySQL,它能够处理大量数据,同时保持数据的完整性、安全性和持久性。后端技术使用SpringBoot、MyBatis,这些技术在许多公司已经被商用了,因此本系统的开发平台已成熟可行。硬件方面,在科技飞速发展的今天,硬件更新速度越来越快,容量越来越大,可靠性越来越高,价格越来越便宜,因此硬件平台也能够满足本系统所需。

2.6.2经济可行性

  项目放在阿里学生服务器或者本地虚拟机的linux环境,故可行。

2.6.3法律可行性

  可行,自己写的项目,目的明确,没有违法违规。

2.6.4操作可行性

操作较为简单,而且当下信息科技发达,界面的设计也着实考虑到用户的体验,系统也是为用户而生。故操作是可行的,不存在难度大的操作。

运行截图

1、登录

1.1、登录界面

1.2、登录成功

1.3、切换皮肤

可在底部选择自己喜欢的皮肤然后切换

1.4、异地登录提示重新连接

2、单聊

2.1、点击某个好友聊天,可以发表情

兔子向小羊发消息

2.2、小羊接收到消息

2.3、小羊点击可以查看消息,也可以回复

3、群聊

3.1、点击音乐联盟聊天群开始群聊

3.2、陈可群聊成员接收到消息

3.3、陈可群聊成员查看并发送消息

1)查看

2)发送毕业季顺利消息及表情

3.4、兔子接收到群聊成员小羊、陈可的消息

1)兔子查看消息

3.5、兔子回复他们的消息

同样小羊、陈可也可以收到兔子的回复就不展示了,另外还有添加好友、添加群聊的功能,就不一一展示了。

实现代码

1、用户控制器

    @RequestMapping("/user")
    @RestController
    public class UserIndexController {

    @Resource
    private UserService userService;

    @Resource
    private UserProfileService userProfileService;

    /**
    * 登录用户信息
    * @return
    */
    @GetMapping("/loginInfo")
    public BaseResVO loginInfo(HttpServletRequest request) {

    // 验证登录
    UserLoginDTO userLoginDTO = UserLoginUtils.check(request);
    if (userLoginDTO == null) {
    return ResultVOUtils.error(ResultEnum.LOGIN_VERIFY_FALL);
    }

    Long uid = userLoginDTO.getUid();

    User user = userService.findByUid(uid);
    if (user == null) {
    return ResultVOUtils.error(ResultEnum.LOGIN_VERIFY_FALL);
    }

    UserProfile userProfile = userProfileService.findByUid(uid);

    UserProfileInfoResVO userProfileInfoResVO = new UserProfileInfoResVO();
    if (userProfile != null) {
    BeanUtils.copyProperties(userProfile, userProfileInfoResVO);
    }

    UserInfoResVO userInfoResVO = new UserInfoResVO();
    BeanUtils.copyProperties(user, userInfoResVO);
    userInfoResVO.setProfile(userProfileInfoResVO);

    return ResultVOUtils.success(userInfoResVO);

    }

    /**
    * 用户信息
    * @return
    */
    @GetMapping("/read")
    public BaseResVO read(@RequestParam(value = "uid") Long uid,
    HttpServletRequest request) {

    // 验证登录
    UserLoginDTO userLoginDTO = UserLoginUtils.check(request);
    if (userLoginDTO == null) {
    return ResultVOUtils.error(ResultEnum.LOGIN_VERIFY_FALL);
    }

    User user = userService.findByUid(uid);

    UserReadResVO userReadResVO = new UserReadResVO();
    BeanUtils.copyProperties(user, userReadResVO);

    return ResultVOUtils.success(userReadResVO);

    }



    /**
    * 获取二维码
    *
    * @param request
    * @return
    */
    @GetMapping("/getQRCheckCode")
    public BaseResVO getQRCheckCode(HttpServletRequest request) {
    // 验证登录
    UserLoginDTO userLoginDTO = UserLoginUtils.check(request);
    if (userLoginDTO == null) {
    return ResultVOUtils.error(ResultEnum.LOGIN_VERIFY_FALL);
    }

    Long uid = userLoginDTO.getUid();

    String checkCode = UserFriendUtils.createCheckCode(uid);

    return ResultVOUtils.success(checkCode);

    }


    }

    2、用户服务接口

      public interface UserService {

      /**
      * 根据用户ID查询用户
      *
      * @param uid 用户ID/账号
      * @return 用户信息
      */
      User findByUid(Long uid);

      /**
      * 根据用户ID以及密码查询用户
      *
      * @param uid 用户ID/账号
      * @return 用户信息
      */
      User findPwdByUid(Long uid);

      /**
      *
      * @param uids 用户ID集合/账号集合
      * @return map
      */
      Map<Long, UserInfoListResVO> listByUidIn(List<Long> uids);

      /**
      * 添加用户
      * @param user 用户
      * @return true/false
      */
      boolean insertUser(User user);

      /**
      * 更新用户
      * @param user 用户
      * @return true/false
      */
      boolean updateUser(User user);

      /**
      * 删除用户
      * @param uid uid 用户ID/账号
      * @return true/false
      */
      boolean deleteByUid(Long uid);

      }

      3、服务接口实现类

        @Service
        public class UserServiceImpl implements UserService {

        @Resource
        private UserDao userDao;

        @Override
        public User findByUid(Long uid) {
        return userDao.findByUid(uid);
        }

        @Override
        public User findPwdByUid(Long uid) {
        return userDao.findPwdByUid(uid);
        }

        @Override
        public Map<Long, UserInfoListResVO> listByUidIn(List<Long> uids) {
        Map<Long, UserInfoListResVO> userInfoListResVOMap = new HashMap<>();
        // 传递的参数为空直接返回
        if (uids.size() == 0) {
        return userInfoListResVOMap;
        }
        // 查询数据库
        List<User> users = userDao.listByUidIn(uids);
        // 遍历构建返回结果
        users.forEach(v -> {
        UserInfoListResVO userInfoListResVO = new UserInfoListResVO();
        BeanUtils.copyProperties(v, userInfoListResVO);
        userInfoListResVOMap.put(v.getUid(), userInfoListResVO);
        });
        return userInfoListResVOMap;
        }

        @Override
        public boolean insertUser(User user) {
        // 创建时间
        user.setCreateTime(new Date());
        // 修改时间
        user.setModifiedTime(new Date());
        return userDao.insertUser(user);
        }

        @Override
        public boolean updateUser(User user) {
        user.setModifiedTime(new Date());
        return userDao.updateUser(user);
        }

        @Override
        public boolean deleteByUid(Long uid) {
        return userDao.deleteByUid(uid);
        }
        }

        uniapp教程

        另外一个项目基于Java+SpringBoot+Vue+Uniapp(有教程)前后端分离健身预约系统设计与实现

        如何联系我,微信点击订阅号消息,找到卡布奇诺海晨公众号,点击进去。

        发消息,联系我获取微信二维码扫码或者微信账号加我。

        文章转载自卡布奇诺海晨,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论