Java生成オーダー番号

6529 ワード

今から自分のコードをよく書きます.
受注番号の生成は、受注固有IDとして一意の重複しない値を生成する機能です.方法はいろいろありますが、データベースによって直接IDを増やして注文番号として書いたり、GUIDを注文番号として使ったりします..それぞれメリットがあり、具体的には自分のビジネスニーズに合わせて定義されています.私は主に時間を使って、年月日を生成して自増数を加えて、ミリ秒ごとに最大9999個の注文を生成することができて、もちろんこれは配置することができて、現実の業務の情況によって定義します.コードを見てみましょう.
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *       
 */
public class GenerateNum {
    //       ,         
    private GenerateNum() {}

    //          ,          
    private static GenerateNum g = null;

    //     --    
    public static synchronized GenerateNum getInstance() {
        if (g == null) {
            g = new GenerateNum();
        }
        return g;
    }

    //      
    private static int count = 0;

    //             (    9999        )
    private static final int total = 9999;

    //          
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");

    //                  
    private static String getNowDateStr() {
        return sdf.format(new Date());
    }

    //         ,             
    private static String now = null;

    /*
     *        
     */
    public synchronized String GenerateOrder() {
        String datastr = getNowDateStr();
        if (datastr.equals(now)) {
            count++;//   
        } else {
            count = 1;
            now = datastr;
        }
        int countInteger = String.valueOf(total).length() - String.valueOf(count).length();//    
        String bu = "";//     
        for (int i = 0; i < countInteger; i++) {
            bu += "0";
        }
        bu += String.valueOf(count);
        if (count >= total) {
            count = 0;
        }
        return datastr + bu;
    }
}

ここでは怠け者モードを一例使いました.呼び出し時:
GenerateNum.getInstance().GenerateOrder();

テスト出力は次のとおりです.
201612081010145410001
201612081010145410002
201612081010145410003
201612081010145410004
201612081010145410005
201612081010145410006
201612081010145410007
201612081010145410008
201612081010145420001
201612081010145420002
201612081010145420003
201612081010145420004
201612081010145420005
201612081010145420006
201612081010145420007
201612081010145420008
201612081010145420009
201612081010145420010
201612081010145420011
201612081010145420012
201612081010145420013
201612081010145420014
201612081010145420015
201612081010145420016
201612081010145420017
201612081010145420018
201612081010145420019
201612081010145420020
201612081010145420021
201612081010145420022
201612081010145420023
201612081010145420024
201612081010145420025
201612081010145420026
201612081010145420027
201612081010145420028
201612081010145420029
201612081010145420030
201612081010145420031
201612081010145420032
201612081010145420033
201612081010145420034
201612081010145420035
201612081010145420036
201612081010145420037
201612081010145420038
201612081010145420039
201612081010145420040
201612081010145420041
201612081010145420042
201612081010145420043
201612081010145420044
201612081010145420045
201612081010145440001
201612081010145440002
201612081010145440003
201612081010145440004
201612081010145450001
201612081010145450002
201612081010145450003
201612081010145450004
201612081010145450005
201612081010145450006
201612081010145450007
201612081010145450008
201612081010145450009
201612081010145450010
201612081010145450011
201612081010145450012
201612081010145450013
201612081010145450014
201612081010145450015
201612081010145450016
201612081010145450017
201612081010145450018
201612081010145450019
201612081010145450020
201612081010145450021
201612081010145450022
201612081010145450023
201612081010145450024
201612081010145450025
201612081010145450026
201612081010145450027
201612081010145450028
201612081010145450029
201612081010145450030
201612081010145450031
201612081010145450032
201612081010145450033
201612081010145450034
201612081010145450035
201612081010145450036
201612081010145450037
201612081010145450038
201612081010145450039
201612081010145450040
201612081010145450041
201612081010145450042
201612081010145450043
201612081010145450044
201612081010145450045
201612081010145450046
201612081010145450047
201612081010145450048