作者主页:编程指南针

作者简介: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等

前台主要功能:

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

后台主要功能:

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

三,系统展示

3.1 登录与注册

 3.2 数据展示

3.3 公告动态点赞管理

3.4 收藏新闻评论管理

 3.5 积分商城管理

3.6 系统管理

 

3.7 用户前端首页

3.8 聊天窗口

3.9 积分商城和积分订单

3.10 查看动态

四,核心代码展示

4.1 聊天核心代码

/**

* @author websocket服务

*/

@ServerEndpoint(value = "/imserver/{uid}")

@Component

public class WebSocketServer {

private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);

/**

* 记录当前在线连接数

*/

public static final Map sessionMap = new ConcurrentHashMap<>();

@Resource

IUserService userService;

@Resource

IImService imService;

private static IUserService staticUserService;

private static IImService staticImService;

// 程序初始化的时候触发这个方法 赋值

@PostConstruct

public void setStaticUser() {

staticUserService = userService;

staticImService = imService;

}

/**

* 连接建立成功调用的方法

*/

@OnOpen

public void onOpen(Session session, @PathParam("uid") String uid) {

sessionMap.put(uid, session);

log.info("有新用户加入,uid={}, 当前在线人数为:{}", uid, sessionMap.size());

Dict dict = Dict.create().set("nums", sessionMap.size());

sendAllMessage(JSONUtil.toJsonStr(dict)); // 后台发送消息给所有的客户端

}

/**

* 连接关闭调用的方法

*/

@OnClose

public void onClose(Session session, @PathParam("uid") String uid) {

sessionMap.remove(uid);

log.info("有一连接关闭,uid={}的用户session, 当前在线人数为:{}", uid, sessionMap.size());

Dict dict = Dict.create().set("nums", sessionMap.size());

sendAllMessage(JSONUtil.toJsonStr(dict)); // 后台发送消息给所有的客户端

}

/**

* 收到客户端消息后调用的方法

* 后台收到客户端发送过来的消息

* onMessage 是一个消息的中转站

* 接受 浏览器端 socket.send 发送过来的 json数据

* @param message 客户端发送过来的消息

*/

@OnMessage

public void onMessage(String message, Session fromSession, @PathParam("uid") String uid) throws JsonProcessingException {

log.info("服务端收到用户uid={}的消息:{}", uid, message);

// 处理msg

// 存储数据库

// 添加创建时间

if (staticUserService == null) {

return;

}

User user = staticUserService.getOne(new QueryWrapper().eq("uid", uid));

if (user == null) {

log.error("获取用户信息失败,uid={}", uid);

return;

}

Im im = Im.builder().uid(uid).username(user.getName()).avatar(user.getAvatar()).sign("")

.createTime(LocalDateTime.now()).text(message).build();

// 存储数据到数据库

staticImService.save(im);

String jsonStr = new ObjectMapper().writeValueAsString(im); // 处理后的消息体

this.sendAllMessage(jsonStr);

log.info("发送消息:{}", jsonStr);

}

@OnError

public void onError(Session session, Throwable error) {

log.error("发生错误");

error.printStackTrace();

}

/**

* 服务端发送消息给除了自己的其他客户端

*/

private void sendMessage(Session fromSession, String message) {

sessionMap.values().forEach(session -> {

if (fromSession != session) {

log.info("服务端给客户端[{}]发送消息{}", session.getId(), message);

try {

session.getBasicRemote().sendText(message);

} catch (IOException e) {

log.error("服务端发送消息给客户端异常", e);

}

}

});

}

/**

* 服务端发送消息给所有客户端

*/

private void sendAllMessage(String message) {

try {

for (Session session : sessionMap.values()) {

log.info("服务端给客户端[{}]发送消息{}", session.getId(), message);

session.getBasicRemote().sendText(message);

}

} catch (Exception e) {

log.error("服务端发送消息给客户端失败", e);

}

}

}

4.2 登录日志核心代码

@Component

@Aspect

@Slf4j

public class LogAspect {

@Resource

private ILogService logService;

@Around("@annotation(autoLog)")

public Object autoLog(ProceedingJoinPoint joinPoint, AutoLog autoLog) throws Throwable {

long beginTime = SystemClock.now();

//执行方法

Object result = joinPoint.proceed();

//执行时长(毫秒)

long time = SystemClock.now() - beginTime;

// 操作

String name = autoLog.value();

HttpServletRequest request = getRequest();

// 请求的url

String url = request.getRequestURL().toString();

if (url.contains("/file/download")) {

return result;

}

// 请求参数

String params = "";

Object[] args = joinPoint.getArgs();

if (args.length > 0) {

Object arg0 = args[0];

if (arg0 instanceof MultipartFile) {

params = "文件流";

} else if (arg0 instanceof String || arg0 instanceof Long || arg0 instanceof Integer) {

params = arg0.toString();

} else {

params = JSONUtil.toJsonStr(args[0]);

}

}

// 返回数据

String returnValue = JSONUtil.toJsonStr(result);

if (returnValue.length() > 1000) {

returnValue = "数据过大,返回状态码:" + JSONUtil.parseObj(returnValue).getStr("code");

}

// ip 和地址

Dict ipAndCity = IpUtils.getIPAndCity();

String ip = ipAndCity.getStr("ip");

String city = ipAndCity.getStr("city");

// 操作人

String username = "";

User user = SessionUtils.getUser();

if (user != null) {

username = user.getUsername();

}

// 保存到数据库

Log log = Log.builder().name(name).params(params).output(returnValue).url(url).ip(ip)

.address(city).duration((int) time).username(username).build();

logService.save(log);

return result;

}

private HttpServletRequest getRequest() {

return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

}

}

五,相关作品展示

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

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

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

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

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

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

 

 

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: