Java自動生成訂單序列號
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
/**
* 產生流水號工具類
* @version V1.0
* @date: 2013-11-16 下午5:21:37
*/
public class SerialNum {
private static String count = "000";
private static String dateValue = "20131115";
/**
* 產生流水號
*/
public synchronized static String getMoveOrderNo() {
long No = 0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String nowdate = sdf.format(new Date());
No = Long.parseLong(nowdate);
if (!(String.valueOf(No)).equals(dateValue)) {
count = "000";
dateValue = String.valueOf(No);
}
String num = String.valueOf(No);
num += getNo(count);
num = "CB" + num;
return num;
}
/**
* 獲取撤展單序列號
*/
public synchronized static String getMoveOrderNo(String serialNum) {
String nyr = StringUtils.substring(serialNum, 2, 10); // 獲取年月日字串
String countV = StringUtils.substring(serialNum, 10); // 獲取流水號
if (Integer.valueOf(countV) > Integer.valueOf(count)) {
dateValue = nyr;
count = String.valueOf(countV);
}
return getMoveOrderNo();
}
/**
* 返回當天的訂單數+1
*/
public static String getNo(String s) {
String rs = s;
int i = Integer.parseInt(rs);
i += 1;
rs = "" + i;
for (int j = rs.length(); j < 3; j++) {
rs = "0" + rs;
}
count = rs;
return rs;
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(getMoveOrderNo());
}
}
}
注意:上面的程式如果伺服器一直能夠正常執行就不會出什麼問題,
要是重啟伺服器或者中間出現什麼故障需要重啟服務都可能造成重複序列號的產生,
為了能夠保證唯一,我們需要配合上資料庫的查詢,查詢最後一條記錄,
然後拿出序列號在呼叫getMoveOrderNo(String serialNum)這個方法,
就能夠保證什麼情況下生成的序列號都是正確唯一的。
相關文章
- 【譯】自動生成整型序列
- Laravel 結合 Redis 生成訂單號 (年月日+6 位自增)LaravelRedis
- 「crudapi」零程式碼實現訂單序列號SequenceAPI
- 利用 Redis 生成序列號的功能實現編號自增Redis
- Java如何解決同時出庫入庫訂單號自動獲取問題Java
- 18 位無重複訂單號生成程式碼
- 訂單自動生成器的演算法研究與實現薦演算法
- 微信訂閱號實現AI自動回覆AI
- MyEclipse序列號生成程式碼Eclipse
- plsql自動生成java原始碼SQLJava原始碼
- 訂單自動過期實現方案 - 轉
- iPhone查詢序列號生成函式iPhone函式
- Jenkins持續部署-自動生成版本號Jenkins
- 微信公眾號自動回覆_JavaJava
- 在大流量下,直播app原始碼中訂單號的生成方式APP原始碼
- PHP 做 RSA 簽名 生成訂單PHP
- As/IDEA json自動生成java beanIdeaJSONJavaBean
- java 文件自動生成的神器 idocJava
- 最簡單的mybatis自動程式碼生成MyBatis
- XML節點自動生成簡單例項XML單例
- 專案筆記之訂單號生成規則以及方法,第一篇!筆記
- Java進階之 如何自動生成程式碼Java
- 自定義hybris生成訂單的ID格式
- Java五種設計模式實現奶茶訂單生成系統小DEMOJava設計模式
- [xmlbeans]自動生成讀寫xml的java類XMLBeanJava
- 訂單超時自動關閉的實現方案總結
- 訂單30分鐘未支付自動取消怎麼實現?
- 【譯】Angular自動取消訂閱Angular
- Mysql實現自增長編號,日期+序列MySql
- im客戶端生成訊息序列號演算法客戶端演算法
- 自動生成Sql--基於Mybatis的單表SqlSQLMyBatis
- uuid自動生成UI
- xorm自動生成modelORM
- 自動生成屬性
- 網站自動生成?網站
- 高效實現銷售出庫單與訂單自動對接的方案介紹
- Laravel實現:待付款訂單,超48小時自動關閉Laravel
- MySQL 滑動訂單問題MySql