记录来访者信息界面功能 含陌生、好友

POJO

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import org.bson.types.ObjectId;

import org.springframework.data.mongodb.core.mapping.Document;

@Data

@NoArgsConstructor

@AllArgsConstructor

@Document(collection = “visitors”)

public class Visitors implements java.io.Serializable{

private static final long serialVersionUID = 2811682148052386573L;

private ObjectId id;

private Long userId; //我的id

private Long visitorUserId; //来访用户id

private String from; //来源,如首页、圈子等

private Long date; //来访时间

private Double score; //得分

}

====================================================

API

import com.tanhua.dubbo.server.pojo.Visitors;

import java.util.List;

public interface VisitorsApi {

/**

* 保存访客数据

*

* @param userId 我的id

* @param visitorUserId 访客id

* @param from 来源

* @return

*/

String saveVisitor(Long userId, Long visitorUserId, String from);

/**

* 查询我的访客数据,存在2种情况:

* 1. 我没有看过我的访客数据,返回前5个访客信息

* 2. 之前看过我的访客,从上一次查看的时间点往后查询5个访客数据

*

* @param userId

* @return

*/

List queryMyVisitor(Long userId);

}

==============================================================

API IMPL

import cn.hutool.core.convert.Convert;

import cn.hutool.core.date.DateUtil;

import cn.hutool.core.util.ObjectUtil;

import com.alibaba.dubbo.config.annotation.Service;

import com.tanhua.dubbo.server.pojo.RecommendUser;

import com.tanhua.dubbo.server.pojo.Visitors;

import org.bson.types.ObjectId;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.domain.PageRequest;

import org.springframework.data.domain.Sort;

import org.springframework.data.mongodb.core.MongoTemplate;

import org.springframework.data.mongodb.core.query.Criteria;

import org.springframework.data.mongodb.core.query.Query;

import org.springframework.data.redis.core.RedisTemplate;

import java.util.List;

@Service(version = “1.0.0”)

public class VisitorsApiImpl implements VisitorsApi {

@Autowired

private MongoTemplate mongoTemplate;

private static final String VISITOR_REDIS_KEY = “VISITOR_USER”;

@Autowired

private RedisTemplate redisTemplate;

@Override

public String saveVisitor(Long userId, Long visitorUserId, String from) {

//校验

if (!ObjectUtil.isAllNotEmpty(userId, visitorUserId, from)) {

return null;

}

//查询访客用户在今天是否已经记录过,如果已经记录过,不再记录

String today = DateUtil.today();

Long minDate = DateUtil.parseDateTime(today + ” 00:00:00″).getTime();

Long maxDate = DateUtil.parseDateTime(today + ” 23:59:59″).getTime();

Query query = Query.query(Criteria.where(“userId”).is(userId)

.and(“visitorUserId”).is(visitorUserId)

.andOperator(Criteria.where(“date”).gte(minDate),

Criteria.where(“date”).lte(maxDate)

)

);

long count = this.mongoTemplate.count(query, Visitors.class);

if (count > 0) {

//今天已经记录过的

return null;

}

Visitors visitors = new Visitors();

visitors.setFrom(from);

visitors.setVisitorUserId(visitorUserId);

visitors.setUserId(userId);

visitors.setDate(System.currentTimeMillis());

visitors.setId(ObjectId.get());

//存储数据

this.mongoTemplate.save(visitors);

return visitors.getId().toHexString();

}

@Override

public List queryMyVisitor(Long userId) {

// 查询前5个访客数据,按照访问时间倒序排序

// 如果用户已经查询过列表,记录查询时间,后续查询需要按照这个时间往后查询

// 上一次查询列表的时间

Long date = Convert.toLong(this.redisTemplate.opsForHash().get(VISITOR_REDIS_KEY, String.valueOf(userId)));

PageRequest pageRequest = PageRequest.of(0, 5, Sort.by(Sort.Order.desc(“date”)));

Query query = Query.query(Criteria.where(“userId”).is(userId))

.with(pageRequest);

if (ObjectUtil.isNotEmpty(date)) {

query.addCriteria(Criteria.where(“date”).gte(date));

}

List visitorsList = this.mongoTemplate.find(query, Visitors.class);

//查询每个来访用户的得分

for (Visitors visitors : visitorsList) {

Query queryScore = Query.query(Criteria.where(“toUserId”)

.is(userId).and(“userId”).is(visitors.getVisitorUserId())

);

RecommendUser recommendUser = this.mongoTemplate.findOne(queryScore, RecommendUser.class);

if(ObjectUtil.isNotEmpty(recommendUser)){

visitors.setScore(recommendUser.getScore());

}else {

//默认得分

visitors.setScore(90d);

}

}

return visitorsList;

}

}

==============================================================

APP VO API

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

@Data

@NoArgsConstructor

@AllArgsConstructor

public class VisitorsVo {

private Long id;

private String avatar;

private String nickname;

private String gender;

private Integer age;

private String[] tags;

private Integer fateValue;

}

============================================================

controller

/**

* 谁看过我

*

* @return

*/

@GetMapping(“visitors”)

public ResponseEntity queryVisitorsList(){

try {

List list = this.quanZiService.queryVisitorsList();

return ResponseEntity.ok(list);

} catch (Exception e) {

e.printStackTrace();

}

return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();

}

==============================================================

service 核心

public List queryVisitorsList() {

User user = UserThreadLocal.get();

List visitorsList = this.visitorsApi.queryMyVisitor(user.getId());

if (CollUtil.isEmpty(visitorsList)) {

return Collections.emptyList();

}

List userIds = CollUtil.getFieldValues(visitorsList, “visitorUserId”);

List userInfoList = this.userInfoService.queryUserInfoByUserIdList(userIds);

List visitorsVoList = new ArrayList();

for (Visitors visitor : visitorsList) {

for (UserInfo userInfo : userInfoList) {

if (ObjectUtil.equals(visitor.getVisitorUserId(), userInfo.getUserId())) {

VisitorsVo visitorsVo = new VisitorsVo();

visitorsVo.setAge(userInfo.getAge());

visitorsVo.setAvatar(userInfo.getLogo());

visitorsVo.setGender(userInfo.getSex().name().toLowerCase());

visitorsVo.setId(userInfo.getUserId());

visitorsVo.setNickname(userInfo.getNickName());

visitorsVo.setTags(StringUtils.split(userInfo.getTags(), ‘,’));

visitorsVo.setFateValue(visitor.getScore().intValue());

visitorsVoList.add(visitorsVo);

break;

}

}

}

return visitorsVoList;

}

=============================================================

service 记录来访者 数据

public TodayBest queryUserInfo(Long userId) {

UserInfo userInfo = this.userInfoService.queryUserInfoByUserId(userId);

if(ObjectUtil.isEmpty(userInfo)){

return null;

}

TodayBest todayBest = new TodayBest();

todayBest.setId(userId);

todayBest.setAge(userInfo.getAge());

todayBest.setGender(userInfo.getSex().name().toLowerCase());

todayBest.setNickname(userInfo.getNickName());

todayBest.setTags(Convert.toStrArray(StrUtil.split(userInfo.getTags(),’,’)));

todayBest.setAvatar(userInfo.getLogo());

//缘分值

User user = UserThreadLocal.get();

todayBest.setFateValue(this.recommendUserService.queryScore(userId, user.getId()).longValue());

//记录来访用户

this.visitorsApi.saveVisitor(userId, user.getId(), “个人主页”);

return todayBest;

}

=========================================================

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
用户投稿
上一篇 2022年6月19日 06:35
下一篇 2022年6月19日 06:35

相关推荐

  • ios手游模拟器(手游模拟器ios)

    本文主要讲的是ios手游模拟器,以及和手游模拟器ios相关的知识,如果觉得本文对您有所帮助,不要忘了将本文分享给朋友。 哪个iOS模拟器能多开手游账号?可以推荐个好用的模拟器给我吗…

    2022年11月27日
  • 短视频策划内容的3个要点(短视频策划内容怎么做)

    短视频在制作时,内容框架非常重要。如果直奔主题,然后结束,聚卓告诉你,这样的短视频已经过时了。现在的短视频需要框架的,但不是任何框架,它需要一种易于理解和消化的框架。而且,现在大多…

    2022年11月27日
  • 推荐48个微商引流推广的方法(微商引流推广的方法有哪些)

    微商引流技能01——同行互推 资源共享,大家才会共赢。加入你是做穴位贴的,你的朋友是做化妆品的,这是两个没有交集的行业,你们可以友情互推,这样每个月的资源就都扩大了一倍,而且这些资…

    2022年11月27日
  • 美团第三季度实现营收626亿元,即时配送订单量增至50亿笔

    新京报讯(记者秦胜南)11月25日,美团发布业绩公告显示,第三季度营收为626亿元,较去年同比增长28.2%,净利润为12.2亿元。第三季度,美团即时配送订单数增长至50亿笔。截至…

    2022年11月27日
  • 乔任梁遗体图片(乔任梁死亡现场照遗体)

    今天小编给各位分享乔任梁遗体图片的知识,其中也会对乔任梁死亡现场照遗体进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧! 2016年深夜,乔任梁头戴塑料袋惨死家…

    2022年11月26日
  • 计算机网络技术论文(计算机网络技术论文七千字)

    今天小编给各位分享计算机网络技术论文的知识,其中也会对计算机网络技术论文七千字进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧! 计算机网络方面的论文3000字…

    2022年11月26日
  • 明日之后怎么加好友(明日之后怎么加好友跨区)

    简要回答 明日之后中玩家可以跟其他玩家进行互动,可以彼此添加好友。如果想要添加好友,此时该怎么进行操作呢明日之后加好友的方式有下面这几种。 01 你可以打开游戏界面,点击聊天框,然…

    2022年11月25日
  • 个人怎么做抖音带货(个人做抖音带货能赚钱吗)

    抖音如今是大家很熟悉的短视频平台,不过现在的抖音却不只是短视频那么简单,它的功能非常丰富,其中一个就是可以带货,相信很多小伙伴都有在抖音上买过东西,抖音如今的变现能力也是不容小觑的…

    2022年11月25日
  • 全民K歌升级新版本7.0之后,有哪些隐藏功能?

    作者:高百烈来源:知乎 这个功能,旧版并没有,要升级到全新的全民K歌7.0版本才能发现。 作为朋友圈当代K歌之王,我费了不少功夫才抢到内测版本。有一说一,全民K歌的路子真的很野,新…

    2022年11月25日
  • 5+3疫情防控从哪天开始算(辽宁疫情防控最新政策)

    最近有关国内各地的疫情大家也都有在持续关注,目前国内各地疫情隔离时间也根据二十条防控措施有了新的调整。那么,5+3疫情防控从哪天开始算?对于密接的5+3隔离时间计算大家还是比较关心…

    2022年11月25日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息