很喜欢洛谷的签到功能,但是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中直接新增代码(没有创建组件),未登录状态:

此时,用户如果点击“今日打卡”,则会请求后台接口,根据后台逻辑返回数据。
用户登录后,每天只需要点击一次“今日打卡”,就会返回签到信息,参考效果如下:
