目录

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


交友项目【首页推荐,今日佳人,佳人信息】_代码实现_02

1.2:流程分析

交友项目【首页推荐,今日佳人,佳人信息】_代码实现_03

1.3:代码实现

与前端交互的app-server模块

交友项目【首页推荐,今日佳人,佳人信息】_代码实现_04

controller层实现

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

service层实现

@DubboReference
    private RecommendUserApi recommendUserApi;
    @DubboReference
    private 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提供者模块(提供相关接口的实现)

@Override
    public 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:今日佳人

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

1.1:接口地址


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


1.2:流程分析

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

1.3:代码实现

 与前端交互的app-server模块

交友项目【首页推荐,今日佳人,佳人信息】_代码实现_04

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);

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

@Override
    public 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:佳人信息

交友项目【首页推荐,今日佳人,佳人信息】_代码实现_07

1.1:接口地址


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


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

1.2:流程分析

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

1.3:代码实现

 与前端交互的app-server模块

交友项目【首页推荐,今日佳人,佳人信息】_代码实现_04

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);

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

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