| | |
| | | * @return 今日自增后的计数值 |
| | | */ |
| | | public long incrementAndGetByDb() { |
| | | String approveId = redisTemplate.opsForValue().get("approveNum"); |
| | | if(approveId == null){ |
| | | String key = "approveNumHSXNY"; |
| | | |
| | | // 1. 先尝试从 Redis 自增(原子操作) |
| | | Long num = redisTemplate.opsForValue().increment(key); |
| | | |
| | | // 2. 如果是第一次(说明 key 不存在) |
| | | if (num == null || num == 1L) { |
| | | |
| | | // 查询数据库当前最大值(更合理) |
| | | StartAndEndDateDto dateTime = getDateTime(); |
| | | LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | approveProcessLambdaQueryWrapper |
| | | .eq(ApproveProcess::getApproveDelete,0) |
| | | .gt(ApproveProcess::getCreateTime,dateTime.getStartDate()) |
| | | |
| | | LambdaQueryWrapper<ApproveProcess> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(ApproveProcess::getApproveDelete, 0) |
| | | .ge(ApproveProcess::getCreateTime, dateTime.getStartDate()) |
| | | .lt(ApproveProcess::getCreateTime,dateTime.getEndDate()); |
| | | Long aLong = approveProcessMapper.selectCount(approveProcessLambdaQueryWrapper); |
| | | if(aLong == null){ |
| | | redisTemplate.opsForValue().set("approveNum","1",1L, TimeUnit.HOURS); |
| | | return 1; |
| | | }else{ |
| | | aLong += 1; |
| | | redisTemplate.opsForValue().set("approveNum",aLong.toString(),1L, TimeUnit.HOURS); |
| | | return aLong; |
| | | } |
| | | }else{ |
| | | Long num = Long.parseLong(approveId) + 1; |
| | | redisTemplate.opsForValue().set("approveNum",num.toString(),1L, TimeUnit.HOURS); |
| | | return Long.parseLong(approveId); |
| | | |
| | | Long count = approveProcessMapper.selectCount(wrapper); |
| | | |
| | | long start = (count == null ? 0 : count) + 1; |
| | | |
| | | // 设置初始值(避免覆盖并发) |
| | | redisTemplate.opsForValue().set(key, String.valueOf(start), 1L, TimeUnit.HOURS); |
| | | |
| | | return start; |
| | | } |
| | | |
| | | return num; |
| | | } |
| | | |
| | | /** |