> 文章列表 > 交友项目【首页推荐,今日佳人,佳人信息】

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

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

目录

1:首页推荐

1.1:接口地址

1.2:流程分析

1.3:代码实现

2:今日佳人

1.1:接口地址

1.2:流程分析

1.3:代码实现

3:佳人信息

1.1:接口地址

1.2:流程分析

1.3:代码实现


1:首页推荐

 

1.1:接口地址

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

1.2:流程分析

 

1.3:代码实现

与前端交互的app-server模块

controller层实现

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

service层实现

    @DubboReferenceprivate RecommendUserApi recommendUserApi;@DubboReferenceprivate UserInfoApi userInfoApi;public ResultList findAllrecommendation(RecommendPageVo recommendPageVo, Long userId) {ResultList allrecommendation = recommendUserApi.findAllrecommendation(recommendPageVo, userId);List<RecommendUser> items = (List<RecommendUser>)allrecommendation.getItems();//根据ids查询详情List<Long> ids = CollUtil.getFieldValues(items, "userId", Long.class);//构建条件UserInfo userInfo = new UserInfo();userInfo.setGender(recommendPageVo.getGender());userInfo.setAge(Integer.valueOf(recommendPageVo.getAge()));System.out.println(userInfo);Map<Long, UserInfo> map = userInfoApi.findByids(ids, userInfo);List<UserInfoVo> userInfoList = new ArrayList<>();for (RecommendUser item : items) {UserInfo userInfo1 = map.get(item.getUserId());UserInfoVo userInfoVo = new UserInfoVo();if (userInfo1 !=null){userInfoVo.setId(userInfo1.getId());userInfoVo.setAge(userInfo1.getAge());userInfoVo.setAvatar(userInfo1.getAvatar());userInfoVo.setGender(userInfo1.getGender());userInfoVo.setFateValue(item.getScore().intValue());userInfoVo.setNickname(userInfo1.getNickname());String[] split = userInfo1.getTags().split(",");userInfoVo.setTags(split);userInfoList.add(userInfoVo);}}allrecommendation.setItems(userInfoList);return allrecommendation;}

统一封装接口的模块

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

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

    @Overridepublic ResultList findAllrecommendation(RecommendPageVo recommendPageVo, Long userId) {Criteria criteria = Criteria.where("toUserId").is(userId);//查询总数Query query = new Query(criteria);long count = mongoTemplate.count(query, RecommendUser.class);//查询当前页的数据列表Query querylimit = new Query(criteria).limit(recommendPageVo.getPagesize()).skip((recommendPageVo.getPage() - 1)*recommendPageVo.getPagesize()).with(Sort.by(Sort.Order.desc("score")));List<RecommendUser> recommendUserList = mongoTemplate.find(querylimit, RecommendUser.class);ResultList resultList = new ResultList<>();resultList.setItems(recommendUserList);//设置列表//设置当前页码resultList.setPage(recommendPageVo.getPage());//设置总记录数resultList.setCounts((int) count);//设置页大小resultList.setPagesize(recommendPageVo.getPagesize());//设置总页数resultList.setPages((int) (count/recommendPageVo.getPagesize()));return resultList;}

2:今日佳人

1.1:接口地址

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

1.2:流程分析

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

1.3:代码实现

 与前端交互的app-server模块

controller层实现

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

service层实现

    public UserInfoVo findtodayBest(Long userId) {UserInfoVo userInfoVo = recommendUserApi.findtodayBest(userId);return userInfoVo;}

统一封装接口的模块

    UserInfoVo findtodayBest(Long userId);

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

    @Overridepublic UserInfoVo findtodayBest(Long userId) {Query query = new Query();//创建等值判断Criteria criteria = Criteria.where("toUserId").is(userId);Sort by = Sort.by(Sort.Order.desc("score"));query.addCriteria(criteria);query.with(by);RecommendUser one = mongoTemplate.findOne(query, RecommendUser.class);//查询数据UserInfo userInfo = userInfoMapper.selectById(one.getUserId());UserInfoVo userInfoVo = new UserInfoVo();userInfoVo.setId(userInfo.getId());userInfoVo.setTags(userInfo.getTags().split(","));userInfoVo.setAge(userInfo.getAge());userInfoVo.setNickname(userInfo.getNickname());userInfoVo.setGender(userInfo.getGender());userInfoVo.setAvatar(userInfo.getAvatar());userInfoVo.setFateValue(one.getScore().intValue());return userInfoVo;}

3:佳人信息

 

1.1:接口地址

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

 

1.2:流程分析

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

1.3:代码实现

 与前端交互的app-server模块

controller层实现

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

service层实现

    public UserInfoVo findUserInfo(Long id, Long userId) {if (id == userId){UserInfo user = userInfoApi.findUser(userId);UserInfoVo userInfoVo = UserInfoVo.init(user, 100);return userInfoVo;}return recommendUserApi.findUserInfo(id,userId);}

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

    public static UserInfoVo init(UserInfo userInfo,Integer fateValue) {UserInfoVo userInfoVo = new UserInfoVo();BeanUtils.copyProperties(userInfo,userInfoVo);String[] split = userInfo.getTags().split(",");userInfoVo.tags = split;userInfoVo.setFateValue(fateValue);return userInfoVo;}

 

统一封装接口的模块

    public UserInfo findUser(Long id);

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

    @Overridepublic UserInfo findUser(Long id) {UserInfo userInfo = this.userInfoMapper.selectById(id);return userInfo;}