java点赞功能

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

java点赞功能

shan&cen   2022-09-29 我要评论

需求分析

分析:

1.必须先登录,否则提示
2.第一次点赞(顶),点赞操作,点赞数+1,提示顶成功
3.第二次点赞(顶),没有操作,提示今天顶过了

核心问题:

1>怎么区分当前请求时顶成功操作(第一次顶)还是今天已经顶过(第二次顶)
2>怎么考虑今天已顶过 
----------------------------------------------
核心问题需要区分是第一次顶还是的二次顶,这种请求操作属于有状态请求操作,需要后端设计一个记号,这个记号注意需要设置时效性(今天最后一秒到当前时间间隔[单位是秒]) 

//如何设计记号?
方案1:可以参照之前攻略收藏记号操作方式,设计一个key,用户uid做区分(保证唯一),value值是攻略id集合,一顶将攻略uid添加集合中
方案2:设计一个key,使用用户uid跟攻略sid进行区分,value值随意,需要设置有效性 

实现步骤

1.创建一个点赞接口,传入当前点赞攻略sid,获取当前登录用户uid
2.通过sid跟uid拼接记号的key
3.判断key是否存在
    如果存在,说明今天已经点赞(顶)过,不做任何处理,页面提示
    如果不存在,说明具体没点赞(顶)过,获取vo对象,点赞数属性+1,将记号缓存到redis中,
    设置过期时间:今天最后一秒到当前时间间隔[单位是秒]
4.更新vo对象

具体实现

//判断是否顶过
    @Override
    public boolean strategyThumbup(String id, String sid) {
        String key = RedisKeys.USER_STRATEGY_THUMBUP.join(id, sid);
        //如果不包含,表示没有顶过,执行点赞,点赞数+1,并设置key有效时间
        if (!template.hasKey(key)) {
            StrategyStatisVO statisVO = this.getStrategyStatisVO(sid);
            statisVO.setThumbsupnum(statisVO.getThumbsupnum() + 1);
            this.setStrategyStatisVO(statisVO);
            //拿到最晚时间
            Date endDate = DateUtil.getEndDate(new Date());
            //计算时间间隔
            long time = DateUtil.getDateBetween(endDate, new Date());
            //设置有效时间
            template.opsForValue().set(key, "1", time, TimeUnit.SECONDS);
            return true;
        }
        return false;
    }
    -----------------------------------------------------------------------------------
    //时间工具类
    public class DateUtil {
    /**
     * 获取两个时间的间隔(秒) 
     */
    public static long getDateBetween(Date d1, Date d2){
        return Math.abs((d1.getTime()-d2.getTime())/1000);//取绝对值
    }
    public static Date getEndDate(Date date) {
        if (date == null) {
            return null;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY,23);
        c.set(Calendar.MINUTE,59);
        c.set(Calendar.SECOND,59);
        return c.getTime();
    }
}

小结

1.核心问题需要区分是第一次顶还是的二次顶,这种请求操作属于有状态请求操作
2.有状态请求操作我们需要设置记号,问题的关键在于记号的设计
3.这个记号,我们也可以使用与点赞/收藏功能类似的记号,就是以用户id为key,然后将顶的文章id放到集合中为value
4.但是更推荐使用以用户id和攻略id拼接而成的为key,value随意取
5.我们操作时只需要判断key是否存在,存在,我们什么操作也不用做,不存在,我们就将点赞(数)+1,然后设置key的时间即可
6.最后更新vo对象
7.难点在于时间的设置,看工具类,这个key键设置体现了key键的唯一性,灵活性和时效性

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们