交友项目【首页推荐,今日佳人,佳人信息】

谁借莪1个温暖的怀抱¢ 2023-10-09 18:01 131阅读 0赞

目录

1:首页推荐

1.1:接口地址

1.2:流程分析

1.3:代码实现

2:今日佳人

1.1:接口地址

1.2:流程分析

1.3:代码实现

3:佳人信息

1.1:接口地址

1.2:流程分析

1.3:代码实现


1:首页推荐

c1bae7f54aac47ecb571c9629b965a4f.png

1.1:接口地址

地址: http://192.168.136.160:3000/project/19/interface/api/118

56e6ba247b1548f2b2f7837c11c1341f.png

1.2:流程分析

8992a4e880f5473c8f4d303b92b3b5c7.png

1.3:代码实现

与前端交互的app-server模块

49317df5f2944b469de34c5db7ae13cf.png

controller层实现

  1. @GetMapping("/recommendation")
  2. public ResponseEntity findAllrecommendation(RecommendPageVo recommendPageVo){
  3. ResultList allrecommendation = recommendService.findAllrecommendation(recommendPageVo, UserHolder.getUserId());
  4. return ResponseEntity.ok(allrecommendation);
  5. }

service层实现

  1. @DubboReference
  2. private RecommendUserApi recommendUserApi;
  3. @DubboReference
  4. private UserInfoApi userInfoApi;
  5. public ResultList findAllrecommendation(RecommendPageVo recommendPageVo, Long userId) {
  6. ResultList allrecommendation = recommendUserApi.findAllrecommendation(recommendPageVo, userId);
  7. List<RecommendUser> items = (List<RecommendUser>)allrecommendation.getItems();
  8. //根据ids查询详情
  9. List<Long> ids = CollUtil.getFieldValues(items, "userId", Long.class);
  10. //构建条件
  11. UserInfo userInfo = new UserInfo();
  12. userInfo.setGender(recommendPageVo.getGender());
  13. userInfo.setAge(Integer.valueOf(recommendPageVo.getAge()));
  14. System.out.println(userInfo);
  15. Map<Long, UserInfo> map = userInfoApi.findByids(ids, userInfo);
  16. List<UserInfoVo> userInfoList = new ArrayList<>();
  17. for (RecommendUser item : items) {
  18. UserInfo userInfo1 = map.get(item.getUserId());
  19. UserInfoVo userInfoVo = new UserInfoVo();
  20. if (userInfo1 !=null){
  21. userInfoVo.setId(userInfo1.getId());
  22. userInfoVo.setAge(userInfo1.getAge());
  23. userInfoVo.setAvatar(userInfo1.getAvatar());
  24. userInfoVo.setGender(userInfo1.getGender());
  25. userInfoVo.setFateValue(item.getScore().intValue());
  26. userInfoVo.setNickname(userInfo1.getNickname());
  27. String[] split = userInfo1.getTags().split(",");
  28. userInfoVo.setTags(split);
  29. userInfoList.add(userInfoVo);
  30. }
  31. }
  32. allrecommendation.setItems(userInfoList);
  33. return allrecommendation;
  34. }

统一封装接口的模块

  1. /**
  2. * @Author 爱吃豆的土豆、
  3. * @Date 2023/4/7 16:09
  4. */
  5. public interface RecommendUserApi {
  6. ResultList findAllrecommendation(RecommendPageVo recommendPageVo, Long userId);
  7. UserInfoVo findtodayBest(Long userId);
  8. UserInfoVo findUserInfo(Long id, Long userId);
  9. }

mongo提供者模块(提供相关接口的实现)

  1. @Override
  2. public ResultList findAllrecommendation(RecommendPageVo recommendPageVo, Long userId) {
  3. Criteria criteria = Criteria.where("toUserId").is(userId);
  4. //查询总数
  5. Query query = new Query(criteria);
  6. long count = mongoTemplate.count(query, RecommendUser.class);
  7. //查询当前页的数据列表
  8. Query querylimit = new Query(criteria).limit(recommendPageVo.getPagesize()).skip((recommendPageVo.getPage() - 1)*recommendPageVo.getPagesize()).with(Sort.by(Sort.Order.desc("score")));
  9. List<RecommendUser> recommendUserList = mongoTemplate.find(querylimit, RecommendUser.class);
  10. ResultList resultList = new ResultList<>();
  11. resultList.setItems(recommendUserList);
  12. //设置列表
  13. //设置当前页码
  14. resultList.setPage(recommendPageVo.getPage());
  15. //设置总记录数
  16. resultList.setCounts((int) count);
  17. //设置页大小
  18. resultList.setPagesize(recommendPageVo.getPagesize());
  19. //设置总页数
  20. resultList.setPages((int) (count/recommendPageVo.getPagesize()));
  21. return resultList;
  22. }

2:今日佳人

fea6ead3d3ed4a919f6fb1d7c9ab29e0.png

1.1:接口地址

地址: http://192.168.136.160:3000/project/19/interface/api/103

1.2:流程分析

缘分值是根据平台算法推算出的缘分值得分,将用户的缘分值存放到mongodb数据库中,这里通过当前登录用户的id,在系统中找到该用户的所有推荐用户,将推荐用户的缘分值进行降序找到最高缘分值用户,进行展示今日佳人。

1.3:代码实现

与前端交互的app-server模块

49317df5f2944b469de34c5db7ae13cf.png

controller层实现

  1. @GetMapping("/todayBest")
  2. public ResponseEntity findtodayBest(){
  3. UserInfoVo userInfoVo = recommendService.findtodayBest(UserHolder.getUserId());
  4. return ResponseEntity.ok(userInfoVo);
  5. }

service层实现

  1. public UserInfoVo findtodayBest(Long userId) {
  2. UserInfoVo userInfoVo = recommendUserApi.findtodayBest(userId);
  3. return userInfoVo;
  4. }

统一封装接口的模块

  1. UserInfoVo findtodayBest(Long userId);

提供者模块(提供相关接口的实现)

  1. @Override
  2. public UserInfoVo findtodayBest(Long userId) {
  3. Query query = new Query();
  4. //创建等值判断
  5. Criteria criteria = Criteria.where("toUserId").is(userId);
  6. Sort by = Sort.by(Sort.Order.desc("score"));
  7. query.addCriteria(criteria);
  8. query.with(by);
  9. RecommendUser one = mongoTemplate.findOne(query, RecommendUser.class);
  10. //查询数据
  11. UserInfo userInfo = userInfoMapper.selectById(one.getUserId());
  12. UserInfoVo userInfoVo = new UserInfoVo();
  13. userInfoVo.setId(userInfo.getId());
  14. userInfoVo.setTags(userInfo.getTags().split(","));
  15. userInfoVo.setAge(userInfo.getAge());
  16. userInfoVo.setNickname(userInfo.getNickname());
  17. userInfoVo.setGender(userInfo.getGender());
  18. userInfoVo.setAvatar(userInfo.getAvatar());
  19. userInfoVo.setFateValue(one.getScore().intValue());
  20. return userInfoVo;
  21. }

3:佳人信息

f8572b34972248b4977fa2e75175cca3.png

1.1:接口地址

地址: http://192.168.136.160:3000/project/19/interface/api/103

300a4fb70cdf4bbba96148b772fa0320.png

1.2:流程分析

通过接收到前端传入的用户id,在MySQL数据库中查询找到对应的用户信息封装返回。

1.3:代码实现

与前端交互的app-server模块

49317df5f2944b469de34c5db7ae13cf.png

controller层实现

  1. @GetMapping("/{id}/personalInfo")
  2. public ResponseEntity personalInfo(@PathVariable("id") Long id){
  3. UserInfoVo userInfoVo = recommendService.findUserInfo(id,UserHolder.getUserId());
  4. return ResponseEntity.ok(userInfoVo);
  5. }

service层实现

  1. public UserInfoVo findUserInfo(Long id, Long userId) {
  2. if (id == userId){
  3. UserInfo user = userInfoApi.findUser(userId);
  4. UserInfoVo userInfoVo = UserInfoVo.init(user, 100);
  5. return userInfoVo;
  6. }
  7. return recommendUserApi.findUserInfo(id,userId);
  8. }

UserInfoVo.init()静态方法:在对象内部处理信息的封装

  1. public static UserInfoVo init(UserInfo userInfo,Integer fateValue) {
  2. UserInfoVo userInfoVo = new UserInfoVo();
  3. BeanUtils.copyProperties(userInfo,userInfoVo);
  4. String[] split = userInfo.getTags().split(",");
  5. userInfoVo.tags = split;
  6. userInfoVo.setFateValue(fateValue);
  7. return userInfoVo;
  8. }

统一封装接口的模块

  1. public UserInfo findUser(Long id);

提供者模块(提供相关接口的实现)

  1. @Override
  2. public UserInfo findUser(Long id) {
  3. UserInfo userInfo = this.userInfoMapper.selectById(id);
  4. return userInfo;
  5. }

发表评论

表情:
评论列表 (有 0 条评论,131人围观)

还没有评论,来说两句吧...

相关阅读

    相关 乱世佳人 经典佳句

    《乱世佳人》 电影《乱世佳人》改编自著名小说《飘》,讲述了美国南北战争爆发期间的风雨飘摇的一个爱情故事。 女主斯嘉丽在战争期间成了寡妇,战后嫁给了爱她多年的投机商人瑞德

    相关 佳人何处有,明月寄相思

        中秋将至,这几日贵阳下起了雨,要是十五那天还下雨的话,就真的是大煞风景了。记得小时候在老家中秋节也被称作“强盗节”。跟小伙伴们吃过饭后就都出去偷东西去了,记得有一年中秋