为了防止出现同一时间重复提交的需要做以下处理:
1.前端处理
前端添加是否确认提交/保存 等提示框,避免出现手误多点的情况,从而出现重复提交的现象
2.后端处理
使用redis防抖,将提交的数据,取出其中唯一性的部分当做redis的key,value值随意,每次进入保存数据的方法时,根据key先从redis取出值,观察redis是否存在值,若存在,则说明重复提交了。
//取值操作,在刚进入保存方法时取值
Object obj = redisTemplate.opsForValue().get("add-" + userCode.toString());
if (ObjectUtils.isNotEmpty(obj)) {
return Result.generateErrorMessage("请勿在5秒钟内频繁重复操作!");
}
//存值操作,在最后一步保存数据时存放
// 设置过期时间 6秒过期
redisTemplate.opsForValue().set("add-" + userCode.toString(), userCode.toString(), 6000, TimeUnit.MILLISECONDS);
3.数据库处理
在数据库创建唯一索引
这里是创建了联合唯一索引,避免有同一日期内daily_date 同一个人create_code 有两条及以上的数据