基于协同过滤算法的社交网络平台(协同过滤算法)
🎈系统亮点:协同过滤算法;
图形包含:用例图,系统结构图,er总图,er实体属性图。 未上传全部!!!
一.系统开发工具与环境搭建
1.系统设计开发工具
后端使用Java编程语言的Spring boot框架
项目架构:B/S架构
运行环境:win10/win11、jdk17
前端:
技术:框架Vue.js;UI库:ElementUI;
开发工具:Visual Studio Code;
后端:
技术:Java语言、mybatis plus、Spring boot框架;
开发工具:IDEA 2023.3.3版本;
数据库:
数据库:mysql5.7/8.0
数据库工具:Navicat12版本;
二. 系统实现(部分展示)
注册界面
用户注册,输入用户名,姓名,密码,确认密码,上传头像,输入验证码,注册成功跳转到登录界面。
关键代码如下:
public String SignIn(AppUserDto input){
LambdaQueryWrapper<AppUser> queryWrapper= Wrappers.<AppUser>lambdaQuery()
.eq(Extension.isNotNullOrEmpty(input.getUserName()),AppUser::getUserName,input.getUserName())
.eq(Extension.isNotNullOrEmpty(input.getPassword()),AppUser::getPassword,input.getPassword())
.eq(input.getRoleType()!=null,AppUser::getRoleType,input.getRoleType());
List<AppUser> items=_AppUserMpper.selectList(queryWrapper);
if(items.stream().count()==0)
{
throw new CustomException("请检查登录的账号或者密码,角色是否都正确!");
}
Map<String, String> map = new HashMap<>();
map.put(SysConst.UserIdClaim,items.get(0).getId().toString());
map.put(SysConst.RoleTypeClaim,items.get(0).getRoleType().toString());
String token=JWTUtils.getToken(map);
return token;
}
登录界面
用户注册成功后,跳转到登录界面,在该界面上输入注册过的账号和密码,并输入验证码,成功后跳转到首页界面。
关键代码如下:
public AppUserDto Register(AppUserDto input) {
LambdaQueryWrapper<AppUser> queryWrapper = Wrappers.<AppUser>lambdaQuery()
.eq(input.getUserName()!=null,AppUser::getUserName,input.getUserName())
.eq(input.getPhoneNumber()!=null,AppUser::getPhoneNumber,input.getPhoneNumber());
//根据用户名称或用户电话号码进行查询
AppUser appUser = _AppUserMpper.selectOne(queryWrapper);
if(appUser!=null)
{
throw new CustomException("该用户名或手机号已经存在!");
}
return CreateOrEdit(input);
}
1.用户端
1 首页界面
用户登录成功后,跳转到首页,可以看到圈子社交话题,大家可以在这里浏览自己想看的话题,对于喜欢的话题进行收藏或者点赞操作,也可以分享给他人,发表自己的看法观点。对于作者,想要深入了解,可以进行添加好友,私下畅所欲言。
关键代码如下:
public PagedResult<TopicDto> RecommendTop10(TopicPagedInput input) {
PagedResult<TopicDto> topicDtoPagedResult = RecommendCollaborativeFilteringTopic(input);for (TopicDto item : topicDtoPagedResult.getItems()) {
//查询出关联的创建用户信息
AppUserDto CreatorAppUserDTO=new AppUserDto();
AppUser CreatorAppUserEntity= _AppUserMapper.selectOne(Wrappers.<AppUser>lambdaQuery().eq(AppUser::getId,item.getCreatorId()));
if(CreatorAppUserEntity!=null) {
BeanUtils.copyProperties(CreatorAppUserDTO, CreatorAppUserEntity);
item.setCreatorAppUserDto(CreatorAppUserDTO);
}
//查询关联的Comment表信息
List<Comment> CommentEntitys = _CommentMapper.selectList(Wrappers.<Comment>lambdaQuery().eq(Comment::getTopicId, item.getId()));
List<CommentDto> CommentDTOS = Extension.copyBeanList(CommentEntitys, CommentDto.class);
item.setCommentDtos(CommentDTOS);
//查询出关联的TopicType表信息
TopicTypeDto TopicTypeDTO = new TopicTypeDto();
TopicType TopicTypeEntity= _TopicTypeMapper.selectOne(Wrappers.<TopicType>lambdaQuery().eq(TopicType::getId,item.getTopicTypeId()));
if(TopicTypeEntity!=null) {
BeanUtils.copyProperties(TopicTypeDTO,TopicTypeEntity);
item.setTopicTypeDto(TopicTypeDTO);
}
}
return topicDtoPagedResult;
}
2 通知公告界面
这里展示系统所发表的通知公告信息,可以及时了解系统的最新消息和最新动态。用户首页界面图如图5-4所示。
关键代码如下:
public SysNoticeDto Get(SysNoticePagedInput input) {
if(input.getId()==null)
{
return new SysNoticeDto();
}
PagedResult<SysNoticeDto> pagedResult =List(input);
return pagedResult.getTotalCount()>0?pagedResult.getItems().stream().findFirst().get():new SysNoticeDto();
}
3 好友申请界面
我的申请:展示你提交的好友申请,可以查看他人是否已通过你的好友申请。在他人申请:可以看到别人的好友申请,你可以选择是否同意该好友的申请。
4 我的好友界面
我的好友,这里展示所有的好友列表信息,和聊天信息,可以实时聊天。在最右边可以到聊天好友的信息,他发布的文章,也可以跳转到他的主页查看个人信息。
5.个人中心界面
个人中心可以看到自己的个人信息,收藏的文章,话题,评论数,曝光次数。我的登录轨迹,我发布的话题,浏览的记录,收藏的话题。
2管理员端
1 管理员首页界面
管理员登录成功后,跳转到管理后台首页,可以看到个人的登录轨迹。和左边列表功能树。
2 用户管理界面
管理员可以对用户进行管理,对用户进行增删改查操作,同时也支持导出用户信息。
关键代码:
public AppUserDto CreateOrEdit(AppUserDto input) {//声明一个用户实体
AppUser AppUser = new AppUser();
//把前端传入的input参数拷贝到用户实体
BeanUtils.copyProperties(AppUser,input);
//如果前端没有给新密码,则把原始密码继续赋值
if(Extension.isNotNullOrEmpty(input.getPassword()))
{
input.setPassword(input.getOrginPassword());
}
//调用数据库的增加或者修改方法
saveOrUpdate(AppUser);
//定义一个返回给前端的用户传输模型
AppUserDto AppUserDto=new AppUserDto();
//同理把操作的用户实体拷贝给用户传输模型
BeanUtils.copyProperties(AppUserDto,AppUser);
//把传输模型返回给前端
return AppUserDto;
}
3 封面管理界面
管理员可以对封面进行管理,也就是平台的广告位,对封面进行增删改查操作。
关键代码:
public BannerDto Get(BannerPagedInput input) {
if(input.getId()==null)
{
return new BannerDto();
}
PagedResult<BannerDto> pagedResult =List(input);
return pagedResult.getTotalCount()>0?pagedResult.getItems().stream().findFirst().get():new BannerDto();
}
4 系统通知管理界面
管理员可以对系统通知进行管理,平台的规则和消息及时同步给用户。
关键代码:
public SysNoticeDto CreateOrEdit(SysNoticeDto input) {
//声明一个系统通知实体
SysNotice SysNotice = new SysNotice();
//把前端传入的input参数拷贝到系统通知实体
BeanUtils.copyProperties(SysNotice,input);
//调用数据库的增加或者修改方法
saveOrUpdate(SysNotice);
//定义一个返回给前端的系统通知传输模型
SysNoticeDto SysNoticeDto=new SysNoticeDto();
//同理把操作的系统通知实体拷贝给系统通知传输模型
BeanUtils.copyProperties(SysNoticeDto,SysNotice);
//把传输模型返回给前端
return SysNoticeDto;
}
5 分享话题界面
管理员可以对用户发表的话题进行审核和下架操作,确保平台的所发的话题都是符合平台规则的。
5.4.6 话题评论界面
管理员可以对用户发表的话题评论进行审核,确保用户发表的言论都是符合社区规则的。
三.需求分析
(1) 管理员:
1. 管理用户信息:查看、编辑、删除用户账户。
2. 管理封面:上传和更换平台封面图片。
3. 管理系统通知:发布系统公告和更新信息。
4. 管理话题圈子:创建、编辑或删除话题圈子。
5. 管理分享话题:审查和删除不当的话题分享,确保内容合适。
6. 管理话题评论:监督评论区域,删除垃圾评论或违规内容
7. 管理浏览记录:监控用户在平台上的浏览行为。
8. 管理话题收藏:查看哪些话题被频繁收藏。
(2) 用户:
1. 登录注册:创建新账户并进行登录。
2. 查看个人中心:访问个人资料页面,查看和编辑个人信息,可查看自己的登录记录,包括时间。查看自己浏览过的话题和内容。发布新话题,分享自己的想法和内容。收藏其他用户发布的话题,方便后续查看。
3. 好友申请:查看收到的好友申请,并接受或拒绝。发送好友申请,与他人建立联系。
4. 通知公告:阅读平台发布的最新通知和公告。
5. 我的好友聊天:与好友进行即时通讯,发送消息。
6. 圈子社交:浏览和加入兴趣圈子,参与特定话题的讨论。在圈子内发帖和互动,与同好者建立联系。对感兴趣的话题进行收藏,方便以后再次访问。对话题表示喜欢或赞同,增加话题的热度。在话题下发表评论,与他人分享观点和想法。