自定义业务编码生成规则

在开发中,咱们有很多时候需要自定义编码,而不是使用uuid或者是自增ID
本章就介绍一个自定义业务编码的生成规则。


import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @author: mcs
 * @Date: 2022/11/27 10:00
 * @Description: 业务编码类型及其生成规则
 */
@Getter
@AllArgsConstructor
public enum CodeTypeEnum {
    /**
     *业务编码生成规则
     */
    QX("QX", "QX%s%s", "yyyyMM", "000", "缺陷");

    /**
     * 业务编码
     */
    private String type;
    /**
     * 业务编码格式
     */
    private String text;
    /**
     * 时间样式
     */
    private String dateFormat;
    /**
     * 字符
     */
    private String serialFormat;
    /**
     * 信息
     */
    private String remark;
}

@Component
@Slf4j
public class RandomGenerateUtil {
	@Resource
    private RedisTemplate<String, Long> redisTemplate;
    /**
     * Redis key 编码前缀
     */
    private final static String SERIAL_REDIS_KEY_PREFIX = "businessCode:";
    /**
     * 自动编码
     * 注意:使用该编码需要集成redis
     * @param codeTypeEnum
     * @return
     */
    public String nextSerialNumber(CodeTypeEnum codeTypeEnum) {
        // 格式化日期
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(codeTypeEnum.getDateFormat());
        String date = formatter.format(now);

        // 获取流水号
        final String type = codeTypeEnum.getType();
        String redisKey = SERIAL_REDIS_KEY_PREFIX + type + ":" + date;
        DecimalFormat dft = new DecimalFormat(codeTypeEnum.getSerialFormat());
        Long count = redisTemplate.opsForValue().increment(redisKey, 1);
        String code = dft.format(count);
        // 组装返回数据
        return String.format(codeTypeEnum.getText(), date, code);
    }
}

最后生成的业务编码如下:

QX202311008
QX202311005
QX202311006
QX202311004
QX202311007

你可能感兴趣的:(java,java,spring,boot,spring,spring,cloud)