在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    記錄來訪者信息界面功能 含陌生、好友

    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 {

    /**

    * 保存訪客數(shù)據(jù)

    *

    * @param userId 我的id

    * @param visitorUserId 訪客id

    * @param from 來源

    * @return

    */

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

    /**

    * 查詢我的訪客數(shù)據(jù),存在2種情況:

    * 1. 我沒有看過我的訪客數(shù)據(jù),返回前5個訪客信息

    * 2. 之前看過我的訪客,從上一次查看的時間點(diǎn)往后查詢5個訪客數(shù)據(jù)

    *

    * @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) {

    //校驗(yàn)

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

    return null;

    }

    //查詢訪客用戶在今天是否已經(jīng)記錄過,如果已經(jīng)記錄過,不再記錄

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

    //今天已經(jīng)記錄過的

    return null;

    }

    Visitors visitors = new Visitors();

    visitors.setFrom(from);

    visitors.setVisitorUserId(visitorUserId);

    visitors.setUserId(userId);

    visitors.setDate(System.currentTimeMillis());

    visitors.setId(ObjectId.get());

    //存儲數(shù)據(jù)

    this.mongoTemplate.save(visitors);

    return visitors.getId().toHexString();

    }

    @Override

    public List queryMyVisitor(Long userId) {

    // 查詢前5個訪客數(shù)據(jù),按照訪問時間倒序排序

    // 如果用戶已經(jīng)查詢過列表,記錄查詢時間,后續(xù)查詢需要按照這個時間往后查詢

    // 上一次查詢列表的時間

    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 {

    //默認(rèn)得分

    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 記錄來訪者 數(shù)據(jù)

    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;

    }

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

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年6月19日 06:35
    下一篇 2022年6月19日 06:35

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息