java订单生成

来源:互联网 发布:股票走势预测 python 编辑:程序博客网 时间:2024/05/21 06:30
package com.accp.zl.filter;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.concurrent.TimeUnit;/**   * JAVA版本的自动生成有规则的订单号(或编号)   * 生成的格式是: 200908010001 前面几位为当前的日期,后面五位为系统自增长类型的编号   * 原理:    *      1.获取当前日期格式化值;   *      2.读取文件,上次编号的值+1最为当前此次编号的值   *      (新的一天会重新从1开始编号)   *         *      存储自动编号值的文件如下(文件名: EveryDaySerialNumber.dat)   */public class Test01 {        public static void main(String[] args) throws InterruptedException {        SerialNumber serial = new FileEveryDaySerialNumber(6, "EveryDaySerialNumber1.dat");       // while(true) {            System.out.println(serial.getSerialNumber());           // TimeUnit.SECONDS.sleep(2);       // }    }}abstract class SerialNumber {    public synchronized String getSerialNumber() {        return process();    }    protected abstract String process();}abstract class EveryDaySerialNumber extends SerialNumber {        protected final static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");    protected DecimalFormat df = null;        public EveryDaySerialNumber(int width) {        if(width < 1) {            throw new IllegalArgumentException("Parameter length must be great than 1!");        }        char[] chs = new char[width];        for(int i = 0; i < width; i++) {            chs[i] = '0';        }        df = new DecimalFormat(new String(chs));    }        protected String process() {        Date date = new Date();        int n = getOrUpdateNumber(date, 1);        return format(date) + format(n);    }        protected String format(Date date) {        return sdf.format(date);    }    protected String format(int num) {        return df.format(num);    }        /**     * 获得序列号,同时更新持久化存储中的序列     * @param current 当前的日期     * @param start   初始化的序号     * @return 所获得新的序列号     */    protected abstract int getOrUpdateNumber(Date current, int start);}class FileEveryDaySerialNumber extends EveryDaySerialNumber {    /**     * 持久化存储的文件     */        private File file = null;        /**     * 存储的分隔符     */    private final static String FIELD_SEPARATOR = ",";       public FileEveryDaySerialNumber(int width, String filename) {        super(width);        file = new File(filename);    }    @Override    protected int getOrUpdateNumber(Date current, int start) {        String date = format(current);        int num = start;        if(file.exists()) {            List<String> list = FileUtil.readList(file);                    String[] data = list.get(0).split(FIELD_SEPARATOR);            if(date.equals(data[0])) {                num = Integer.parseInt(data[1]);            }        }        FileUtil.rewrite(file, date + FIELD_SEPARATOR + (num + 1));        return num;    }        }class FileUtil {    public static void rewrite(File file, String data) {        BufferedWriter bw = null;        try {            bw = new BufferedWriter(new FileWriter(file));            bw.write(data);        } catch (IOException e) {            e.printStackTrace();        } finally {                    if(bw != null) {               try {                    bw.close();               } catch(IOException e) {                   e.printStackTrace();               }            }                    }    }        public static List<String> readList(File file) {        BufferedReader br = null;        List<String> data = new ArrayList<String>();        try {            br = new BufferedReader(new FileReader(file));            for(String str = null; (str = br.readLine()) != null; ) {                data.add(str);            }        } catch (IOException e) {            e.printStackTrace();        } finally {            if(br != null) {               try {                    br.close();               } catch(IOException e) {                   e.printStackTrace();               }            }        }        return data;    }} 

原创粉丝点击