生成流水号

/*
 * Copyright 2015 imiansha.com All right reserved. This software is the confidential and proprietary information of
 * imiansha.com ("Confidential Information"). You shall not disclose such Confidential Information and shall use it only
 * in accordance with the terms of the license agreement you entered into with imiansha.com.
 */
package com.imiansha.baseframe.commom.util;

import java.text.MessageFormat;
import java.util.Date;

/**
 * 类CreateOrderNo.java的实现描述:生成单据号
 * 
 * @author leon 2015年7月29日 下午12:07:32
 */
public class CreateOrderNo {

    private static final Long    maxNo                = 10000000l;                // 最大流水号
    private static final int     stepNo               = 1;                        // 流水号每次增加数
    private static final Integer completionZeroLength = maxNo.toString().length(); // 流水号补0长度
    private static final String  dateFormat           = "yyyyMMddhhmmssSSS";      // 格式化日期格式
    private static final String  serialNumberFormat   = "%0{0}d";                 // // 0 代表前面补充0, {0}代表补0长度,d代表参数为正数型
    private static final int     randomNumber         = 6;                        // 随机数位数

    /**
     * 说明:根据台头和流水号生成单据号:单据号+时间:年月日时分秒毫秒+8位流水号(很有可能重复)
     * 
     * @param headStr 单据台头
     * @param serialNo 流水号(最近一个),最好是根据每天的数据量生成count
     * @return
     * @author yangdong
     */
    public static String createOrderNo(String headStr, long serialNo) {
        String nowdate = DateUtil.dateToFormat(new Date(), dateFormat);
        String serialNumberFormatStr = MessageFormat.format(serialNumberFormat, completionZeroLength);
        if (serialNo >= maxNo) {
            serialNo = serialNo - maxNo;
        }
        serialNo = serialNo + stepNo;
        String sequenceNo = String.format(serialNumberFormatStr, serialNo);

        String orderNumber = headStr + nowdate + sequenceNo;

        return orderNumber;
    }

    /**
     * 方法说明:根据台头生成单据号:单据号+时间:年月日时分秒毫秒+6位水随机数(重复可能性很小)
     * 
     * @param headStr
     * @return String
     * @time 2015年8月16日 下午2:38:26
     * @author yangdong
     */
    public static String createOrderNo(String headStr) {
        String nowdate = DateUtil.dateToFormat(new Date(), dateFormat);
        String orderNumber = headStr + nowdate + RandomUtil.getRandom(randomNumber);
        return orderNumber;
    }

    // public static void main(String[] args) {
    // Map<String, String> str = new HashMap<String, String>();
    // for (int i = 0; i < 100000; i++) {
    // String string = CreateOrderNo.createOrderNo("test");
    // str.put(string, string);
    // }
    // Set<String> ss = str.keySet();
    // System.out.println("---------打印值");
    // for (String string : ss) {
    // System.out.println(str.get(string));
    // }
    // }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值