交友项目【查询好友动态,查询推荐动态】实现
目录
1:圈子
1.1:查询好友动态
1.1.1:接口分析
1.1.2:流程分析
1.1.2:代码实现
1.2:查询推荐动态
1.2.1:接口分析
1.2.2:流程分析
1.2.3:代码实现
1:圈子
1.1:查询好友动态
1.1.1:接口分析
API接口文档:http://192.168.136.160:3000/project/19/interface/api/148
1.1.2:流程分析
当你的一个好友发了一个动态,他可能不想让你不想看到,那你就没有看到他这条动态的权限,也就是说这条动态在数据库中的标注没有你这个好友的查看,这个功能的实现就是,根据当前用户id到数据库中的控制动态谁可以查看的表中(时间线表)去查找对应的好友想让你看到的数据。时间线表通过判断当前用户的id,查找出来对应的动态id数据。
1.1.2:代码实现
与前端交互的app-server模块
controller层实现
@GetMappingpublic ResponseEntity friendmovements(PublicPageVo publicPageVo){ResultList friendmovements = movementService.friendmovements(publicPageVo,UserHolder.getUserId());return ResponseEntity.ok(friendmovements);}
service层实现
public ResultList friendmovements(PublicPageVo publicPageVo, Long userId) {ResultList friendmovements = movementApi.friendmovements(publicPageVo, userId);List<Movement> items = friendmovements.getItems();List<MovementVo> movements = new ArrayList<>();for (Movement movement : items) {UserInfo userInfo = userInfoApi.findUser(movement.getUserId());extracted(userId, movements, movement, userInfo);}friendmovements.setItems(movements);return friendmovements;}
统一封装接口的模块
ResultList friendmovements(PublicPageVo publicPageVo,Long Userid);
public UserInfo findUser(Long id);
提供者模块(提供相关接口的实现)
mongo提供者:
@Overridepublic ResultList friendmovements(PublicPageVo publicPageVo, Long userId) {//创建封装类ResultList movementVoResultList = new ResultList<>();//通过userIdQuery query = new Query();query.addCriteria(Criteria.where("friendId").is(userId));long count = mongoTemplate.count(query,MovementTimeline.class);query.skip((publicPageVo.getPage()-1L)*publicPageVo.getPagesize()).limit(publicPageVo.getPagesize().intValue());List<MovementTimeline> movementTimelineList = mongoTemplate.find(query, MovementTimeline.class);System.out.println(movementTimelineList);//处理数据,获得动态idList<ObjectId> movementId = CollUtil.getFieldValues(movementTimelineList, "movementId", ObjectId.class);//查询对应的动态Query movementQuery = new Query(Criteria.where("id").in(movementId)).with(Sort.by(Sort.Order.desc("created")));List<Movement> movements = mongoTemplate.find(movementQuery, Movement.class);//设置列表movementVoResultList.setItems(movements);//设置当前页码movementVoResultList.setPage(publicPageVo.getPage().intValue());//设置总记录数movementVoResultList.setCounts((int) count);//设置页大小movementVoResultList.setPagesize(publicPageVo.getPagesize().intValue());//设置总页数movementVoResultList.setPages((int) (count%publicPageVo.getPagesize() == 0 ? count/ publicPageVo.getPagesize():(count/ publicPageVo.getPagesize())+1));return movementVoResultList;}
db提供者服务:
@Overridepublic UserInfo findUser(Long id) {UserInfo userInfo = this.userInfoMapper.selectById(id);return userInfo;}
1.2:查询推荐动态
1.2.1:接口分析
接口文档:http://192.168.136.160:3000/project/19/interface/api/145
1.2.2:流程分析
推荐用户的值在redis缓存中,将其取出查找数据,封装数据。
1.2.3:代码实现
与前端交互的app-server模块
controller层实现
/*** 推荐动态* @return*/@GetMapping("/recommend")public ResponseEntity recommendmovements(PublicPageVo publicPageVo){ResultList recommendmovements = movementService.recommendmovements(publicPageVo, UserHolder.getUserId());return ResponseEntity.ok(recommendmovements);}
service层实现
public ResultList recommendmovements(PublicPageVo publicPageVo, Long userId) {//处理redis中数据String key = "MOVEMENTS_RECOMMEND_"+userId;//找到推荐评论的推荐pidString pids = stringRedisTemplate.opsForValue().get(key);//切割处理数据String[] pidList = pids.split(",");//查找对应的评论和useridResultList recommendmovements = movementApi.recommendmovements(pidList,publicPageVo);List<Movement> items = recommendmovements.getItems();//传入用户APiMap<Long, UserInfo> userInfoMap = userInfoApi.findUserByids(items.stream().map(movement -> movement.getUserId()).collect(Collectors.toList()));List<MovementVo> movementVoList = new ArrayList<>();//处理返回数据for (Movement movement : items) {UserInfo userInfo = userInfoMap.get(movement.getUserId());extracted(userId, movementVoList, movement, userInfo);}recommendmovements.setItems(movementVoList);return recommendmovements;}
统一封装接口的模块
ResultList recommendmovements(String[] pidList, PublicPageVo publicPageVo);
Map<Long,UserInfo> findUserByids(List<Long> collect);
db提供者模块(提供相关接口的实现)
@Overridepublic Map<Long, UserInfo> findUserByids(List<Long> collect) {Map<Long,UserInfo> userInfoMap = new HashMap<>();//传入的是用户idfor (Long userid : collect) {UserInfo userInfo = userInfoMapper.selectById(userid);if (userInfo!=null){userInfoMap.put(userInfo.getId(),userInfo);}}return userInfoMap;}
mongo提供者模块(提供相关接口的实现)
@Overridepublic ResultList recommendmovements(String[] pidList, PublicPageVo publicPageVo) {ResultList<Movement> objectResultList = new ResultList<>();//拼凑条件Query query = new Query();Integer [] newpidList = new Integer[pidList.length];for (int i = 0; i < pidList.length; i++) {newpidList[i] = Integer.valueOf(pidList[i]);}query.addCriteria(Criteria.where("pid").in(newpidList)).limit(publicPageVo.getPagesize().intValue()).skip((publicPageVo.getPage()-1)* publicPageVo.getPagesize());List<Movement> movements = mongoTemplate.find(query, Movement.class);System.out.println(movements);long count = mongoTemplate.count(query, Movement.class);objectResultList.setItems(movements);objectResultList.setPagesize(publicPageVo.getPagesize().intValue());objectResultList.setPage(publicPageVo.getPage().intValue());objectResultList.setPages((int) (count%publicPageVo.getPagesize() == 0 ? count/ publicPageVo.getPagesize():(count/ publicPageVo.getPagesize())+1));//返回处理的数据return objectResultList;}
交友项目【查询好友动态,查询推荐动态】实现相关推荐
- 18.查询好友动态和推荐动态
查询好友动态和推荐动态 一.查询好友动态 代码步骤 Controller层接受请求参数 Service数据封装 调用API查询好友动态详情数据 调用API查询动态发布人详情 构造VO对象 API层根据 ...
- 交友项目【查询黑名单人员,移除黑名单人员】功能实现
目录 1:交友项目 1.1:查询黑名单人员 1.1.1:接口地址 1.1.2:流程分析 1.1.2:代码实现 1.2:移除黑名单人员 1.2.1:接口地址 1.2.2:流程分析 1.2.3:代码实现 ...
- java 探花交友项目day5 推荐好友列表 MongoDB集群 发布动态,查询动态 圈子功能
推荐好友列表 需求分析 推荐好友:分页形式查询推荐的用户列表,根据评分排序显示 代码实现: tanhuaController: /** * 查询分页推荐好友列表 */ @GetMapping(&q ...
- jpa命名 多条件查询命名_JPA 2 | 动态查询与命名查询
jpa命名 多条件查询命名 JPA有自己的查询语言,称为JPQL. JPQL与SQL非常相似,主要区别在于JPQL与应用程序中定义的实体一起使用,而SQL与数据库中定义的表和列名称一起使用. 在定义将 ...
- JPA 2 | 动态查询与命名查询
JPA有自己的查询语言,称为JPQL. JPQL与SQL非常相似,主要区别在于JPQL与应用程序中定义的实体一起使用,而SQL与数据库中定义的表和列名称一起使用. 在定义将对定义的Entity类执行C ...
- SpringDataJpa (二)-动态查询多表操作
SpringDataJpa (二)-动态查询&多表操作 一.动态查询 1.Specifications动态查询 1.1 搭建测试环境 1.1.1 导入坐标 1.1.2 创建客户实体类 1.1. ...
- 基于JPA实现的动态查询工具类
1. 背景 接触了一个新项目,项目使用的框架为Spring-data-jpa,起初对这个项目还是挺感兴趣的,啊毕竟之前一直用Mybatis-Plus框架,深陷mp框架毒害啊(注:不喜欢写sql). 然 ...
- mybatis常用标签和动态查询
这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: [mybatis ...
- jpa 动态查询条件 数组_Spring data jpa 复杂动态查询方式总结
一.Spring data jpa 简介 首先JPA是Java持久层API,由Sun公司开发, 希望整合ORM技术,实现天下归一. 诞生的缘由是为了整合第三方ORM框架,建立一种标准的方式,目前也是 ...
最新文章
- MyBatis版本升级引发的线上告警回顾及原理分析
- mysql 检查哪些项目_mysql根据内容查询在哪个表.go
- api与implementation的区别
- 元素隐式具有 “any” 类型,因为类型“Shared”没有索引签名问题解决思路
- Tomcat无响应问题
- 用pc浏览器打开手机页面
- mysql5.7优化案例_MYSQL5.7函数索引优化案例【企业数据库实战优化项目】
- Sybase ASE15.7静默安装
- 挖金矿问题java课程设计_某15万吨金矿采矿方法课程设计
- MVC模式中Controller控制器为什么是Servlet?怎么理解?
- Excel格式刷使用技巧
- 阿里云云.速成美站和云.企业官网建站介绍
- AndroidManifest.xml文件解析(详解)
- NoC(Network on Chip)基础 (3):网络拓扑结构 Butterfly、Torus、Mesh
- 直接插入排序 希尔排序 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 基数排序的算法分析和具体实现 ...
- 安全测试之SQL注入攻击
- AspectJ简单实现
- 应届生做技术支持好吗_应届生第一份工作做销售合适吗?难吗?对吗?谁能给我答案?...
- 基于springboot实现大学生租房系统演示【附项目源码】分享
- java判断数据库连接是否有效的方法
热门文章
- BLUEMOON记录
- php验证手机号和身份证号
- 服务器响应超时是配置不足吗,服务器响应超时是什么情况
- 初览spring boot读后感
- iphone和ipad设备分辨率
- elasticsearch 条件去重_Elasticsearch7.* + SpringBoot2.*根据中文和拼音分页去重搜索-Go语言中文社区...
- ZCMU-1618-骨牌覆盖(矩阵乘法+快速幂)
- React Native集成极光推送
- 『HTML5梦幻之旅』-滚动播放的幻灯片效果
- 【荐读】我观察14年才发现,那些很努力却没成就的人都有一个特点