1.好友推荐

用户登录进去的时候展示推荐的列表

因为要求需要分页展示所以需要用到分页对象返回出去

1.1Controller层

这一层没什么可说的

  /***  推荐用户* @param recommendUserDto 页面端传递过来的参数 页面总数和当前页面等等参数* @return 返回用户列表*/@GetMapping("/recommendation")public ResponseEntity recommendation(RecommendUserDto recommendUserDto){PageResult pageResult=tanhuaService.recommendation(recommendUserDto);return     ResponseEntity.ok(pageResult);}

1.2Service层

PageResult pr=recommendUserApi.recommendationUser(dto.getPage(),dto.getPagesize(),touserId); 先根据用户id查询出推荐人id信息

1.判断获取到的用户是否为空 如果是空就直接返回出去

2.如果不是就需要根据用户id获取到用户的资料进行重构一个返回值对象返回出去  CollUtil.getFieldValues(items,"userId",Long.class);根据list中的属性字段单独生成一个list集合

3.调用api层的方法进行查询用户的资料然后重构一个返回对象返回

  /***  推荐用户* @param dto* @return 返回的是分页查询出来的用户列表等等*/public PageResult recommendation(RecommendUserDto dto) {//1.根据用户id和页码查询出来多少条数Long touserId = UserHolder.getUserId();PageResult pr=recommendUserApi.recommendationUser(dto.getPage(),dto.getPagesize(),touserId);//2.获取·分页中的RecommendUser列表List<RecommendUser> items = (List<RecommendUser>) pr.getItems();//判断列表是否为空if(items==null){return pr;}//提取所有推荐用户的idList<Long> ids= CollUtil.getFieldValues(items,"userId",Long.class);UserInfo userInfo=new UserInfo();userInfo.setAge(dto.getAge());userInfo.setGender(dto.getGender());//构建查询条件,批量查询所有用户的详细Map<Long, UserInfo> map = userInfoApi.findByIds(ids, userInfo);//循环推荐的数据列表,批量构建VO对象List list=new ArrayList();for (RecommendUser item : items) {UserInfo userInfo1 = map.get(item.getUserId());if (userInfo1!=null) {TodayBest init = TodayBest.init(userInfo1, item);list.add(init);   }}pr.setItems(list);return pr;}

1.3DubboApi层

1.这里使用了一个Map集合来批量接收用户id

2.userInfo传入的就是需要筛选的条件信息比如:年龄,性别,学历等等

 /*** 批量查询用户详情* @param userIds* @param info* @return*/@Overridepublic Map<Long, UserInfo> findByIds(List<Long> userIds, UserInfo info) {QueryWrapper qw=new QueryWrapper();//用户id列表//  根据传入进来的用户id查询用户的详情,如果用户不挑选就默认不挑,直接给到所有的用户qw.in("id",userIds);if(info!=null){ //如果不为空就是用户添加了筛选那就根据筛选的结果返回qw.lt("age",info.getAge());}if(!StringUtils.isEmpty(info.getGender())){qw.eq("gender",info.getGender());}List<UserInfo> list=userInfoMapper.selectList(qw);Map<Long, UserInfo> map= CollUtil.fieldValueMap(list,"id");return map;}
}

2.圈子功能

1.发布动态

1.1表的设计

这里使用三张表来保存用户的动态。

1.2Controller层

这一层没什么可逼逼的  由于参数会是多张图片这里就使用数组;来接收 MultipartFile

 /***发布动态* @param movement* @param imageContent 传输文件参数* @return*/@PostMappingpublic ResponseEntity movements(Movement movement, MultipartFile imageContent[]) throws IOException {movementService.publish(movement,imageContent);return   ResponseEntity.ok(null);}

1.3service层

1.首先判断里面的文本信息是否为空,为空就是啥都没写抛出异常

2.获取当前登录的用户id封装到movement对象里面,还需要把上传图片后的字符串也封装到movement对象中

 /*** 发布动态* @param movement* @param imageContent*/public void publish(Movement movement, MultipartFile[] imageContent) throws IOException {//判断发布动态的内容是否存在if (StringUtils.isEmpty(movement.getTextContent())){throw new BusinessException(ErrorResult.contentError()); //抛出一个异常告诉他你发布的动态啥都没有}//获取当前登录的用户idLong userId = UserHolder.getUserId();movement.setUserId(userId);//将当前文件上传带阿里云List list=new ArrayList();for (MultipartFile multipartFile : imageContent) {String upload = ossTemplate.upload(multipartFile.getOriginalFilename(), multipartFile.getInputStream());list.add(upload); //把图片存入一个List集合里面} //把数据封装到Movement对象movement.setMedias(list);//调用Api完成发布动态movementApi.publish(movement);}

1.3DubboApi层

先保存动态信息,然后用@Async开启另外一个线程进行异步

根据获取到的用户id查询好友列表,然后根据好友列表循环生成时间线数据存到数据库

2.查看自己发布的动态

2.1Controller层 没啥好说的,这里又是分页查询,所以你懂的

  @GetMapping("/all")public  ResponseEntity myMovementAll(Long userId,@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pagesize){PageResult pageResult= movementService.myMovementAll(userId,page,pagesize);return ResponseEntity.ok(pageResult);}

2.2Service层

1.调用APi方法分页查询出动态数据

2.查询出来了自己发布的动态信息(地理位置,评论数,点赞数,图片等等

3.虽然查询出来了但是前端需要的信息不止这么一点(用户信息,用户年龄等等所以,我还得查询一下用户的详细信息

目录

1.好友推荐

1.1Controller层

1.2Service层

2.圈子功能

1.发布动态

1.1表的设计

1.2Controller层

1.3service层

1.3DubboApi层

2.查看自己发布的动态

2.1Controller层 没啥好说的,这里又是分页查询,所以你懂的

2.2Service层


 /***  查询自己发布的动态详细* @param userId* @param page* @param pagesize* @return*/public PageResult myMovementAll(Long userId, Integer page, Integer pagesize) {//1.根据用户id查询出自己发布的动态PageResult pageResult=movementApi.myMovementAll(userId,page,pagesize);//2.查询出来了自己发布的动态信息(地理位置,评论数,点赞数,图片等等)List<Movement> items = (List<Movement>) pageResult.getItems(); //现在这里面装的就是动态数据辣//3.虽然查询出来了但是前端需要的信息不止这么一点(用户信息,用户年龄等等所以,我还得查询一下用户的详细信息//4.查询出来了用户的详情信息之后就需要把他们合二为一返回一个Vo对象给前端List list=new ArrayList();for (Movement item : items) {UserInfo byId = userInfoApi.findById(item.getUserId()); //查询出来用户详情,封装if (byId!=null&&item!=null){MovementsVo vo = MovementsVo.init(byId, item);list.add(vo);}}

探花交友day3,4相关推荐

  1. 探花交友10-数据统计与内容审核

    1.用户冻结解冻 用户冻结/解冻使用管理员在后台系统对用户的惩罚措施.对于发布不当言论或者违法违规内容的用户,可以暂时.永久禁止其登录,评论,发布动态. 后台中解冻/冻结,就是将用户状态写入数据库中 ...

  2. 【探花交友DAY 11】定时统计任务和自动内容审核

    1. 用户的冻结与解冻 用户冻结/解冻使用管理员在后台系统对用户的惩罚措施.对于发布不当言论或者违法违规内容的用户,可以暂时.永久禁止其登录,评论,发布动态等行为. 管理员在管理系统中对某一个用户冻结 ...

  3. 探花交友_第2章-完善个人信息与MongoDB入门

    探花交友_第2章-完善个人信息与MongoDB入门 文章目录 探花交友_第2章-完善个人信息与MongoDB入门 1.完善个人信息 1.1.图片上传 1.1.1.图片存储解决方案 1.1.2.阿里云O ...

  4. 探花交友_第7章-完善消息功能以及个人主页

    探花交友_第7章-完善消息功能以及个人主页 文章目录 探花交友_第7章-完善消息功能以及个人主页 1.消息点赞.喜欢.评论列表 1.1.dubbo服务 1.1.1.定义接口 1.1.2.编写实现 1. ...

  5. 【探花交友】day06—即时通信

    目录 1.即时通信 1.1.什么是即时通信?​编辑 1.2.功能说明 1.3.技术方案 2.环信 2.1.开发简介 2.2.环信Console 2.3.接口说明 3.抽取环信组件 3.1.编写Huan ...

  6. 探花交友06-即时通信

    1.即时通信 1.1.什么是即时通信? 1.2.功能说明 在探花交友项目中也提供了类似微信的聊天功能,用户可以和好友或陌生人聊天. 如果是陌生人,通过<聊一下>功能进行打招呼,如果对方同意 ...

  7. java项目---探花交友

    一.项目介绍 1.项目背景 在线社交是互联网时代的产物,已成为互联网用户的基础需求之一.移动互联网自2003年起快速发展, 促使在线社交逐渐从PC端转移至移动端.移动社交最初以熟人社交为主,以维系熟人 ...

  8. 黑马探花交友----5.聊天消息-即时通讯

    学习目标: 了解什么是即时通信 了解探花交友的消息功能 了解即时通信的技术方案 了解环信的即时通讯 实现环信的用户体系集成 实现添加联系人.联系人列表功能 实现公告列表 1.即时通信 1.1.什么是即 ...

  9. 探花交友_第10章_实现推荐功能

    探花交友_第10章_实现推荐功能 文章目录 探花交友_第10章_实现推荐功能 1.了解推荐系统 1.1.什么是推荐系统? 1.2.电商是推荐系统的先行者 1.3.推荐系统业务流程 1.4.协同过滤推荐 ...

最新文章

  1. 【廖雪峰python入门笔记】while循环
  2. 【转】EventBus 3.0使用详解
  3. 手机之家在线签名_选择苹果企业签名的原因有哪些?
  4. Google 节日徽标全集 (1999-2009) (下)
  5. php 静态方法 call,php的 __callStatic 函数
  6. mysql在哪里写代码_[译] 如何写好 Go 代码
  7. linux 安装libcurl4-gnutls-dev,curl / curl.h,libcurl,libcurl4-openssl-dev,libcurl4-nss-dev库之间的区别?...
  8. 【转】eclipse中window-preference选项中没有tomcat的解决方法
  9. python找到列表中最大和最小的数
  10. 编码的奥秘:字节与十六进制
  11. 工业交换机ERPS环网协议工作原理介绍
  12. 幅相频率特性曲线的绘制(1)
  13. 记录一次Spring提供的定时任务
  14. Xcode iOS 工程目录结构解析
  15. 数字IC秋招手撕代码(二)50%占空比的三分频
  16. RC4原理以及Python实现
  17. 第二十九节:Java基础知识-类,多态,Object,数组和字符串
  18. 函数式编程之every函数
  19. 【图像处理】小波编码图像中伪影和纹理的检测附Matlab代码和报告
  20. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引

热门文章

  1. 网盘服务器安装监控系统,服务器监控程序一键安装
  2. 使用 autoruns.exe 来查看自动启动的程序
  3. 关于计算机的猜谜游戏,元宵灯谜猜谜语
  4. 运筹说 第9期|运筹会议,学术盛宴!群英荟萃,快来参会!
  5. Linux中用shell脚本批量修改文件名
  6. SLAM第十二讲实践:【建图】单目稠密图重建实践、RGB_D稠密建图、 从RGB_D稠密建图点云重建网格图、八叉树地图实践
  7. C# OPC DA 协议同步及异步读取数据,支持局域网访问其 他OPC server
  8. 「HDU6599 I Love Palindrome String」 - 回文自动机
  9. 永磁同步电机的I/F启动控制策略
  10. Java命令行工具之 jstat