很喜欢洛谷的签到功能,但是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中直接新增代码(没有创建组件),未登录状态:
此时,用户如果点击“今日打卡”,则会请求后台接口,根据后台逻辑返回数据。
用户登录后,每天只需要点击一次“今日打卡”,就会返回签到信息,参考效果如下: