生成订单号工具类

基于redis创建订单号

1.引入redis密码
@Value("${spring.redis.password}") private String redisPassword;

2.示例

 Orders orders = new Orders();
                orders.setOrdersNo(OrderNumberGeneratorUtils.generateOrderNumber(redisPassword));
                orders.setOpenId(openId);
                orders.setGoodsId(goodsId);
                orders.setPoints(goods.getPrice());
                ordersService.save(orders);

3.工具类

import redis.clients.jedis.Jedis;

import java.text.SimpleDateFormat;
import java.util.Date;

/** 生成订单号
 * @ClassName: OrderNumberGenerator
 * @Description:
 * @Author: zhangxiaohui
 * @Date: 2025-01-10
 * @Version: 1.0
 **/
public class OrderNumberGeneratorUtils {
    private static final String SEQUENCE_KEY = "check_sequence"; // Redis 中保存序列号的键名
    private static final String REDIS_HOST = "localhost";
    private static final int REDIS_PORT = 6379;

    public static synchronized String generateOrderNumber(String REDIS_PASSWORD) {
        // 获取当前日期,格式为YYYYMMDD
        String datePart = getFormattedDate();

        // 格式化序列号,补零至三位数(例如,001)
        String sequencePart = String.format("%03d", getNextSequence(REDIS_PASSWORD));

        return datePart + sequencePart;
    }

    private static String getFormattedDate() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        return dateFormat.format(new Date());
    }

    private static int getNextSequence(String REDIS_PASSWORD) {
        try (Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT)) {
            jedis.auth(REDIS_PASSWORD); // 提供密码进行连接
            Long nextSequence = jedis.incr(SEQUENCE_KEY);
            if (nextSequence > 999) {
                jedis.del(SEQUENCE_KEY); // 重置序列号
                return 0;
            }
            return nextSequence.intValue();
        } catch (Exception e) {
            e.printStackTrace(); // 处理 Redis 连接或操作异常
            return 0;
        }
    }

    /**
     * 删除redis中的key
     */
    public static boolean deleteKey(String REDIS_PASSWORD) {
        try (Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT)) {
            jedis.auth(REDIS_PASSWORD); // 提供密码进行连接
            jedis.del(SEQUENCE_KEY); // 删除指定的键
            System.out.println("Key '" + SEQUENCE_KEY + "' deleted successfully from Redis.");
            return true;
        } catch (Exception e) {
            e.printStackTrace(); // 处理 Redis 连接或操作异常
        }
        return false;
    }

    public static void main(String[] args) {
        //生成订单编号
        System.out.println(generateOrderNumber("123456"));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值