chenhj
2026-04-22 fa3428b4bb32179a42d5618357c22fe2695716ae
src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java
@@ -3,11 +3,11 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.approve.mapper.ApproveProcessMapper;
import com.ruoyi.approve.pojo.ApproveProcess;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@@ -18,14 +18,14 @@
//基于redis的一个每日计数器
@Component
@RequiredArgsConstructor
public class DailyRedisCounter {
    private static final String KEY_PREFIX = "daily_counter:";
    private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd");
    private final StringRedisTemplate redisTemplate;
    public DailyRedisCounter(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }
    @Value("${ruoyi.approvalNumberPrefix}")
    private String approvalNumberPrefix;
    /**查缓存
     * 获取指定计数器在今日的数值,并自增1
@@ -45,8 +45,7 @@
        return count;
    }
    @Autowired
    private ApproveProcessMapper approveProcessMapper;
    private final ApproveProcessMapper approveProcessMapper;
    /**
     * 获取当前时间的  开始日期  ,结束日期
@@ -71,15 +70,29 @@
     * @return 今日自增后的计数值
     */
    public long incrementAndGetByDb() {
        StartAndEndDateDto dateTime = getDateTime();
        LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
        approveProcessLambdaQueryWrapper
                .eq(ApproveProcess::getApproveDelete,0)
                .gt(ApproveProcess::getCreateTime,dateTime.getStartDate())
        .lt(ApproveProcess::getCreateTime,dateTime.getEndDate());
        Long aLong = approveProcessMapper.selectCount(approveProcessLambdaQueryWrapper);
        String approveId = redisTemplate.opsForValue().get(approvalNumberPrefix + ":approveNum");
        if(approveId == null){
            StartAndEndDateDto dateTime = getDateTime();
            LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
            approveProcessLambdaQueryWrapper
                    .eq(ApproveProcess::getApproveDelete,0)
                    .gt(ApproveProcess::getCreateTime,dateTime.getStartDate())
                    .lt(ApproveProcess::getCreateTime,dateTime.getEndDate());
            Long aLong = approveProcessMapper.selectCount(approveProcessLambdaQueryWrapper);
            if(aLong == null){
                redisTemplate.opsForValue().set(approvalNumberPrefix + ":approveNum","1",1L, TimeUnit.HOURS);
                return 1;
            }else{
                aLong += 1;
                redisTemplate.opsForValue().set(approvalNumberPrefix + ":approveNum",aLong.toString(),1L, TimeUnit.HOURS);
                return aLong;
            }
        }else{
            Long num = Long.parseLong(approveId) + 1;
            redisTemplate.opsForValue().set(approvalNumberPrefix + ":approveNum",num.toString(),1L, TimeUnit.HOURS);
            return Long.parseLong(approveId);
        }
        return aLong == null ? 1 : aLong + 1;
    }
    /**