規則: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); }
數據庫設計