自動生成批次號,要求:P+四位台數+年月+3位當月駐地增加序列號


規則:P+四位台數+年月+3位當月駐地增加序列號

基本原理:

P+四位台數 需要把實際台數與0拼接成四位;

年月+3位遞增序列號數據庫新建一個表,字段包含主鍵,模塊常量,流水日期,流水長度,流水值(默認0,即序列號);

每次新增時先更新數據庫流水值,直接加1;

然后判斷當前日期與數據庫流水日期是否一致,不一致更新流水日期為當前日期;

年月 日期獲取可直接調用日期工具類對系統日期進行改造即可;

然后獲取最新的數據庫流水值,調用工具類與0拼接成四位序列號

       String batchId = "P";
            String number = getBatchIdNumber("5");//默認台數為5台,可依據實際業務傳參
            batchId = batchId + number;
            //批次號生成規則:
            orderNo = serialNoUtils.getGroupPurchaseBatchId(SerialType.group_purchase_no,batchId);//生成批次號
//獲取四位台數,實際業務台數 與 0 拼接
public
String getBatchIdNumber(Integer number) { String numberString = SerialNoUtils.getPreZeroNumber(4,StringTools.stringOf(number)); return numberString; }
    /**
     * 數字補0
     * 
     * @param num
     *            需要補充到num位
     * @param str
     *            待補充0的字符串(數字轉化而來)
     * @return
     */
    public static String getPreZeroNumber(int num, String str) {
        int strLen = str.length();
        if (strLen < num) {
            for (int i = strLen; i < num; i++) {
                StringBuffer sb = new StringBuffer();
                sb.append("0").append(str);
                str = sb.toString();
            }
        }
        return str;
    }
/**
     * 獲取批次號
     * @param codeConfigId 主鍵
     * @param pre
     * @return
     */
    @Override
    public String getGroupPurchaseBatchId(String codeConfigId, String pre) {
        //1.先更新數據庫,流水值 即 序列號遞增加1
        baseMapper.updateSerialValue(codeConfigId);
        //2.查詢
        CodeConfigEntity cce = baseMapper.selectById(codeConfigId);
        if (cce == null || cce.getSerialDate() == null) {
            throw new RRException("請維護" + codeConfigId + "的生成規則信息");
        }
        //若編號日期與數據庫日期不符合,更新編號日期
        if (!cce.getSerialDate().equals(DateUtils.getYMDate())) {
            baseMapper.resetSerialValue(DateUtils.getYMDate(), codeConfigId);
            cce = baseMapper.selectById(codeConfigId);
        }
        // 獲取 流水值 即 序列號
        String suf = cce.getSerialValue() + "";
     // 將序列號 與 0 拼接成3位 序列號,然后與其他數據 拼接 即可 String serialNO
= SerialNoUtils.getBatchId(pre, cce.getSerialLength(), suf); logger.info(codeConfigId+"編號獲取成功 :" + serialNO ); return serialNO; }
/**
     * 獲取批次號
     * @param pre 常量
     * @param length 變量長度
     * @param suf 變量
     * @return
     */
    public static String getBatchId(String pre,int length, String suf) {
    //調用日期工具類,獲取年月
        String date = getPrefixYM();
        return pre + date + getPreZeroNumber(length, suf);
    }

數據庫設計

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM