很喜欢洛谷的签到功能,但是HOJ没有这个功能,于是就简单开发一个。

1.后台基本流程

后台接口基本流程参考如下:

后台接口中,原作者已经有很多现成的功能,比如判断用户是否登录:

        AccountProfile userRolesVo = (AccountProfile) SecurityUtils.getSubject().getPrincipal();

controller层使用@RequiresAuthentication这个注解来判断当前用户是否登录等。

登录信息每天0点定时清除,这样需要模糊删除功能,原来的工具类中没有这个功能,在RedisUtils.java中增加模糊删除的代码

/**
     * 模糊删除
     */
    public void fuzzyDelete(String pattern) {
        // 根据模糊的 key 查询匹配的 key 集合
        Set<String> keys = redisTemplate.keys(pattern);

        // 遍历匹配的 key 集合,进行删除操作
        for (String key : keys) {
            redisTemplate.delete(key);
        }
    }

然后在Impl层实现一个方法,并设置每天定时启动

 @Scheduled(cron = "0 0 0 * * *")
    @Override
    public void delAllSignInfo() {
        accountManager.delAllSignInfo();
    }

调用redis工具删除:

  /**
     * 清除全部签到信息
     */
    public void delAllSignInfo(){
            redisUtils.fuzzyDelete("sign");
    }

这个地方表示删除所有以sign开头的信息。

2.前台基本流程

前台在Home.vue中直接新增代码(没有创建组件),未登录状态:

此时,用户如果点击“今日打卡”,则会请求后台接口,根据后台逻辑返回数据。

用户登录后,每天只需要点击一次“今日打卡”,就会返回签到信息,参考效果如下:

分类: OnlineJudge