目录
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层实现
@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:今日佳人
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);
提供者模块(提供相关接口的实现)
@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:佳人信息
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);
提供者模块(提供相关接口的实现)
@Override
public UserInfo findUser(Long id) {
UserInfo userInfo = this.userInfoMapper.selectById(id);
return userInfo;
}