1. 程式人生 > >java生成訂單流水號

java生成訂單流水號

做一個訂單模組,需要生成唯一訂單號,這裡需要考慮到以後的分庫分表,所以不能拿Mysql主鍵作為流水號,還要考慮併發問題,簡單實現:

 

 

package com.jzg.svsp.order.utils;

import javax.validation.constraints.NotNull;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * @author: YuGenHai
 * @name: AbstractOrderSequenceRandom
 * @creation: 2018/9/21 16:57
 * @notes: svsp + yyyyMMdd + uuid /random
 * @notes: 生成訂單號工具類
 
*/ public abstract class AbstractOrderSequenceRandom { /** * 訂單字首 */ private static final String ORDERPREFIX = "SVSP"; /** * 時間戳 */ private static final String FORMAT = "yyyyMMddHHmmss"; /** * 數字隨機 */ public static final String numberChar = "0123456789";
/** * 隨機數字 */ public static final int numberFor = 5; /** * @return * @author yugenhai */ @NotNull public synchronized static String createOrderSnRandom() { return AbstractOrderSequenceRandomInner.createOrderSnRandomInner(); } /** * 建立訂單號<svsp + yyyy-mm-dd + Random> * *
@author yugenhai */ private final static class AbstractOrderSequenceRandomInner { private synchronized static String createOrderSnRandomInner() { SimpleDateFormat sdf = new SimpleDateFormat(FORMAT); StringBuffer sb = new StringBuffer(); Random random = new Random(); for (int i = 0; i < numberFor; i++) { sb.append(numberChar.charAt(random.nextInt(numberChar.length()))); } return ORDERPREFIX + sdf.format(new Date()) + sb.toString(); } } }