访客功能
一、需求分析
用户在浏览我的主页时,需要记录访客数据,访客在一天内每个用户只记录一次。
首页展示最新5条访客记录
我的模块,分页展示所有的访客记录
二、数据库表
visitors(访客记录表)
{
“_id”: ObjectId(“636334b470603e72be5dbc8d”),
“userId”: NumberLong(“1”),
“visitorUserId”: NumberLong(“1”),
“from”: “首页”,
“date”: NumberLong(“1667445940900”),
“visitDate”: “20221103”,
“score”: 99,
“_class”: “com.tanhua.model.mongo.Visitors”
}
三,保存访客记录
用户在浏览我的主页时,需要记录访客数据
访客在一天内每个用户只记录一次。
思路:1.修改查看佳人详情接口
2.构造访问信息,调用API保存访客数据
代码实现,在查看佳人详情时,保存一条我的访问记录
/**
* 根据id查看佳人详情
* 这个userId是当前用户要查看的用户的id
*/
public TodayBest queryToBestInfo(Long userId) {
//当前用户id
Long currentUserId = ThreadLocalUtils.getUserId();
//1.根据用户id查询用户详情
UserInfo userInfo = userInfoApi.selectUserInfo(userId);
//2.根据当前用户的id,和当前用户要查看的用户id查询推荐人
RecommendUser recommendUser = recommendUserApi.queryRecommendFriend(userId,currentUserId);
//3.在查看用户详情页面的同时,保存一条当前用户的访问记录到visitor数据库表
Visitors visitors = new Visitors();
visitors.setUserId(userId);
//当前用户未访客
visitors.setVisitorUserId(currentUserId);
visitors.setFrom("首页");
visitors.setDate(System.currentTimeMillis());
visitors.setVisitDate(new SimpleDateFormat("yyyyMMdd").format(new Date()));
visitors.setScore(recommendUser.getScore());
visitorsApi.saveVisitors(visitors);
//构造返回值
TodayBest todayBest = TodayBest.init(userInfo, recommendUser);
return todayBest;
}
VisitorApiImpl
@Autowired
private MongoTemplate mongoTemplate;
/**
*
* 保存访客记录,
* 同一个用户一天只能保存一次访客记录
*/
public void saveVisitors(Visitors visitors) {
//1.根据UserId和visitorUserId还有visitDate查询visitors表
Criteria criteria = Criteria.where("userId").is(visitors.getUserId())
.and("visitorUserId").is(visitors.getVisitorUserId())
.and("visitDate").is(visitors.getVisitDate());
Query query = Query.query(criteria);
if(!mongoTemplate.exists(query, Visitors.class)){
mongoTempl