探花交友day3,4

探花交友day3,41 好友推荐 用户登录进去的时候展示推荐的列表 因为要求需要分页展示所以需要用到分页对象返回出去 1 1Controller 层 这一层没什么可说的 推荐用户 param recommendUse 页面端传递过来的参数 页面总数和当前页面等等参数 return 返回用户列表

大家好,我是讯享网,很高兴认识大家。

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;} //提取所有推荐用户的id List<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 */ @Override public 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 */ @PostMapping public 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()); //抛出一个异常告诉他你发布的动态啥都没有 } //获取当前登录的用户id Long 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); } }

小讯
上一篇 2025-04-09 12:53
下一篇 2025-02-28 12:49

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/124284.html