当前位置:   article > 正文

毕业设计|基于SpringBoot+Vue的校园交友平台_校园社交网络平台代码

校园社交网络平台代码

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

项目编号:

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

二,项目简介

随着社交媒体的普及和校园生活的丰富多彩,校园交友平台成为了大学生活中的重要组成部分。该项目旨在为校园内的学生提供一个安全、便捷、互动性强的交友平台,帮助他们结识新朋友、扩大社交圈子,并且通过共同兴趣爱好的匹配,促进更深层次的交流和互动。

项目技术栈:

前端:Vue.js、Element UI、HTML5、CSS3、JavaScript等

后端:SpringBoot、MySQL、MyBatis、Spring Security等

前台主要功能:

  1. 首页:展示轮播图、动态排行榜、最新动态以及校园资讯等内容,吸引用户的注意。
  2. 全局动态搜索:允许用户根据描述、话题或标题进行搜索,方便用户快速找到感兴趣的内容。
  3. 聊天室:提供在线聊天的功能,让用户可以与其他用户进行实时交流和互动。
  4. 积分商城:通过点赞等行为获取积分,并提供积分换购商品的功能,增加用户积极参与平台活动的动力。
  5. 积分消费订单:展示用户的积分消费记录和订单信息,方便用户了解自己的消费情况。
  6. 消息通知:向用户发送系统通知和个人消息,及时告知用户动态和重要信息。
  7. 个人中心:用户可以管理自己的动态、收货地址、收藏内容,查看个人资料并修改密码等。

后台主要功能:

  1. 系统管理:包括角色管理、用户管理、权限管理、文件管理和日志管理等,确保系统的安全和可控。
  2. 首页管理:对首页内容进行管理,包括轮播图、动态排行榜、最新动态和校园资讯等的编辑和发布。
  3. 校园资讯管理:允许管理员发布和管理校园资讯,包括标题、内容和发布时间等。
  4. 话题管理:管理平台上的话题,包括创建、编辑、删除话题,并可对话题进行分类和排序。
  5. 动态管理:对用户发布的动态进行管理,包括审核、删除和置顶等操作。
  6. 收藏管理:管理用户的收藏内容,包括浏览和删除等功能。
  7. 评论管理:对用户的评论进行审核和删除,确保平台上的评论秩序。
  8. 通知管理:向用户发送系统通知和个人消息,进行编辑、发送和删除等操作。
  9. 积分商城管理:管理商品信息,包括商品的添加、编辑、下架和库存管理等操作。
  10. 数据统计:通过图形化展示拆线图、柱状图和饼图等方式,对用户活跃度和交互数据进行分析和统计。
  11. 个人资料和修改密码:管理员可以查看和修改用户的个人资料,并重置密码等。

三,系统展示

3.1 登录与注册

 3.2 数据展示

3.3 公告动态点赞管理

3.4 收藏新闻评论管理

 3.5 积分商城管理

3.6 系统管理

 

3.7 用户前端首页

3.8 聊天窗口

3.9 积分商城和积分订单

3.10 查看动态

四,核心代码展示

4.1 聊天核心代码

  1. /**
  2. * @author websocket服务
  3. */
  4. @ServerEndpoint(value = "/imserver/{uid}")
  5. @Component
  6. public class WebSocketServer {
  7. private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
  8. /**
  9. * 记录当前在线连接数
  10. */
  11. public static final Map<String, Session> sessionMap = new ConcurrentHashMap<>();
  12. @Resource
  13. IUserService userService;
  14. @Resource
  15. IImService imService;
  16. private static IUserService staticUserService;
  17. private static IImService staticImService;
  18. // 程序初始化的时候触发这个方法 赋值
  19. @PostConstruct
  20. public void setStaticUser() {
  21. staticUserService = userService;
  22. staticImService = imService;
  23. }
  24. /**
  25. * 连接建立成功调用的方法
  26. */
  27. @OnOpen
  28. public void onOpen(Session session, @PathParam("uid") String uid) {
  29. sessionMap.put(uid, session);
  30. log.info("有新用户加入,uid={}, 当前在线人数为:{}", uid, sessionMap.size());
  31. Dict dict = Dict.create().set("nums", sessionMap.size());
  32. sendAllMessage(JSONUtil.toJsonStr(dict)); // 后台发送消息给所有的客户端
  33. }
  34. /**
  35. * 连接关闭调用的方法
  36. */
  37. @OnClose
  38. public void onClose(Session session, @PathParam("uid") String uid) {
  39. sessionMap.remove(uid);
  40. log.info("有一连接关闭,uid={}的用户session, 当前在线人数为:{}", uid, sessionMap.size());
  41. Dict dict = Dict.create().set("nums", sessionMap.size());
  42. sendAllMessage(JSONUtil.toJsonStr(dict)); // 后台发送消息给所有的客户端
  43. }
  44. /**
  45. * 收到客户端消息后调用的方法
  46. * 后台收到客户端发送过来的消息
  47. * onMessage 是一个消息的中转站
  48. * 接受 浏览器端 socket.send 发送过来的 json数据
  49. * @param message 客户端发送过来的消息
  50. */
  51. @OnMessage
  52. public void onMessage(String message, Session fromSession, @PathParam("uid") String uid) throws JsonProcessingException {
  53. log.info("服务端收到用户uid={}的消息:{}", uid, message);
  54. // 处理msg
  55. // 存储数据库
  56. // 添加创建时间
  57. if (staticUserService == null) {
  58. return;
  59. }
  60. User user = staticUserService.getOne(new QueryWrapper<User>().eq("uid", uid));
  61. if (user == null) {
  62. log.error("获取用户信息失败,uid={}", uid);
  63. return;
  64. }
  65. Im im = Im.builder().uid(uid).username(user.getName()).avatar(user.getAvatar()).sign("")
  66. .createTime(LocalDateTime.now()).text(message).build();
  67. // 存储数据到数据库
  68. staticImService.save(im);
  69. String jsonStr = new ObjectMapper().writeValueAsString(im); // 处理后的消息体
  70. this.sendAllMessage(jsonStr);
  71. log.info("发送消息:{}", jsonStr);
  72. }
  73. @OnError
  74. public void onError(Session session, Throwable error) {
  75. log.error("发生错误");
  76. error.printStackTrace();
  77. }
  78. /**
  79. * 服务端发送消息给除了自己的其他客户端
  80. */
  81. private void sendMessage(Session fromSession, String message) {
  82. sessionMap.values().forEach(session -> {
  83. if (fromSession != session) {
  84. log.info("服务端给客户端[{}]发送消息{}", session.getId(), message);
  85. try {
  86. session.getBasicRemote().sendText(message);
  87. } catch (IOException e) {
  88. log.error("服务端发送消息给客户端异常", e);
  89. }
  90. }
  91. });
  92. }
  93. /**
  94. * 服务端发送消息给所有客户端
  95. */
  96. private void sendAllMessage(String message) {
  97. try {
  98. for (Session session : sessionMap.values()) {
  99. log.info("服务端给客户端[{}]发送消息{}", session.getId(), message);
  100. session.getBasicRemote().sendText(message);
  101. }
  102. } catch (Exception e) {
  103. log.error("服务端发送消息给客户端失败", e);
  104. }
  105. }
  106. }

4.2 登录日志核心代码

  1. @Component
  2. @Aspect
  3. @Slf4j
  4. public class LogAspect {
  5. @Resource
  6. private ILogService logService;
  7. @Around("@annotation(autoLog)")
  8. public Object autoLog(ProceedingJoinPoint joinPoint, AutoLog autoLog) throws Throwable {
  9. long beginTime = SystemClock.now();
  10. //执行方法
  11. Object result = joinPoint.proceed();
  12. //执行时长(毫秒)
  13. long time = SystemClock.now() - beginTime;
  14. // 操作
  15. String name = autoLog.value();
  16. HttpServletRequest request = getRequest();
  17. // 请求的url
  18. String url = request.getRequestURL().toString();
  19. if (url.contains("/file/download")) {
  20. return result;
  21. }
  22. // 请求参数
  23. String params = "";
  24. Object[] args = joinPoint.getArgs();
  25. if (args.length > 0) {
  26. Object arg0 = args[0];
  27. if (arg0 instanceof MultipartFile) {
  28. params = "文件流";
  29. } else if (arg0 instanceof String || arg0 instanceof Long || arg0 instanceof Integer) {
  30. params = arg0.toString();
  31. } else {
  32. params = JSONUtil.toJsonStr(args[0]);
  33. }
  34. }
  35. // 返回数据
  36. String returnValue = JSONUtil.toJsonStr(result);
  37. if (returnValue.length() > 1000) {
  38. returnValue = "数据过大,返回状态码:" + JSONUtil.parseObj(returnValue).getStr("code");
  39. }
  40. // ip 和地址
  41. Dict ipAndCity = IpUtils.getIPAndCity();
  42. String ip = ipAndCity.getStr("ip");
  43. String city = ipAndCity.getStr("city");
  44. // 操作人
  45. String username = "";
  46. User user = SessionUtils.getUser();
  47. if (user != null) {
  48. username = user.getUsername();
  49. }
  50. // 保存到数据库
  51. Log log = Log.builder().name(name).params(params).output(returnValue).url(url).ip(ip)
  52. .address(city).duration((int) time).username(username).build();
  53. logService.save(log);
  54. return result;
  55. }
  56. private HttpServletRequest getRequest() {
  57. return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  58. }
  59. }

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/367496
推荐阅读
相关标签
  

闽ICP备14008679号