liyong
5 天以前 37b697351e8e0a9200eee1276c4081c07588dc10
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -38,6 +38,7 @@
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.io.IOException;
@@ -50,6 +51,7 @@
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -85,6 +87,8 @@
    private final ProductRecordMapper productRecordMapper;
    private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
    private final StringRedisTemplate redisTemplate;
    @Value("${file.upload-dir}")
    private String uploadDir;
@@ -440,6 +444,26 @@
        return invoiceRegistrationProducts;
    }
    @Override
    public String getPurchaseNo() {
        // 生成日期前缀(例如:CG20250405)
        String purchaseNo = "CG" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        // 构建 Redis Key(按天分隔)
        String redisKey = "purchase_no:" + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE);
        // 获取当前序号并递增(原子操作)
        Long sequence = redisTemplate.opsForValue().increment(redisKey);
        // 设置过期时间(次日失效,防止冗余数据)
        if (sequence == 1) {
            redisTemplate.expire(redisKey, 1, TimeUnit.DAYS);
        }
        // 返回完整编号(如 CG202504050001)
        return purchaseNo + String.format("%03d", sequence);
    }
    /**
     * 下划线命名转驼峰命名
     */