欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

如何生成連續的流水號

admin
2011年3月3日 17:8 本文熱度 2926
工作中常常遇到流水號生成的問題,有的客戶要求流水號必須連續,這個我們的開發工作提出了一個小難題。

解決方法如下:

方法一:采用最大號表的形式

在數據庫中創建一個表專門存放其他數據庫的最大流水號,table_maxOrderID {table1_max,table2_max};

在向數據庫中插入數據的時候,首先想table_maxOrderId表查詢到當前表的最大號加1,先更新最大號表,然后保存到業務數據。

優點:效率高

缺點:號碼浪費大一些(例如保存的時候失敗了,那么這個號碼就浪費了。)

方法二:采用搶號的形式

這個不需要創建最大號表,在向數據庫中保存數據的時候,獲取當前表的最大流水號。例如:

select max(ID) from tableName ; 讓后將結果加一。

優點:速度快,不浪費號碼;

缺點:并發的時候,號碼重復造成數據無法保存。

解決辦法:搶號。如果保存失敗,那么重復搶號例如:

Java代碼
  1. public synchronized String getOrderId(String shengid) {   
  2.   
  3.     if (shengid == null ││ "".equals(shengid.trim())) {   
  4.   
  5.         throw new NullPointerException("在獲取流水號的時候,省id為空!獲取流水號失敗!");   
  6.   
  7.     }          
  8.   
  9.     // 首先查找所在地區查找企業表中有沒有數據   
  10.   
  11.     int num = xjqyDao.getCountBySql(" and qy_sheng='" + shengid + "'");   
  12.   
  13.     String orderId = null;   
  14.   
  15.     if (num == 0) {   
  16.   
  17.         orderId = "0001";   
  18.   
  19.     } else {   
  20.   
  21.         //必須找到本省最大的檔案的id               
  22.   
  23.         String maxDabh = xjqyDao.getMaxDabhBySheng(shengid);   
  24.   
  25.         num = Integer.parseInt(maxDabh.substring(6));   
  26.   
  27.         String temp = (num + 1) + "";   
  28.   
  29.         int LEN = temp.length();   
  30.   
  31.         if (LEN > 4) {   
  32.   
  33.             log.error("出錯了!一個省的蠶繭收購加工企業的個數不能超過1萬!");   
  34.   
  35.             return null;   
  36.   
  37.         }   
  38.   
  39.         for (int i = 0; i < 4 - LEN; i++) {   
  40.   
  41.             temp = "0" + temp;   
  42.   
  43.         }   
  44.   
  45.         orderId = temp;   
  46.   
  47.     }   
  48.   
  49.     return orderId;   
  50.   
  51. }  
Java代碼
  1.   
Java代碼
  1. class=java name="code">            for (int i = 0; i < 5; i++) { // 連續搶號5次,如果失敗,請用戶稍后再試!   
  2.   
  3.                 try {   
  4.   
  5.                     String orderId = getOrderId(xjqy.getSheng());// 獲取連續的流水號   
  6.   
  7.                     log.debug("獲取到的連續的流水號為:" + orderId);   
  8.   
  9.                     String dabh = ""// 檔案編號   
  10.   
  11.                     String code = ""// 企業編號   
  12.   
  13.   
  14.   
  15.                     dabh = xjqy.getSheng() + xjqy.getJdrq().substring(04)   
  16.   
  17.                             + orderId;   
  18.   
  19.                     log.debug("檔案編號為:" + dabh);   
  20.   
  21.                     xjqy.setDabh(dabh);   
  22.   
  23.   
  24.   
  25.                     // 所在省做了js校驗   
  26.   
  27.                     if (xjqy.getShi() == null ││ xjqy.getShi().equals("")) {   
  28.   
  29.                         // 如果市為空   
  30.   
  31.                         code = xjqy.getSheng() + "0000" + xjqy.getLb()   
  32.   
  33.                                 + orderId;   
  34.   
  35.                     } else if (xjqy.getXian() == null  
  36.   
  37.                             ││ xjqy.getXian().equals("")) {   
  38.   
  39.                         // 如果縣為空   
  40.   
  41.                         code = xjqy.getShi() + "00" + xjqy.getLb() + orderId;   
  42.   
  43.                     } else {   
  44.   
  45.                         code = xjqy.getXian() + xjqy.getLb() + orderId;   
  46.   
  47.                     }   
  48.   
  49.                     log.debug("企業編號為:" + code);   
  50.   
  51.                     xjqy.setCode(code);   
  52.   
  53.   
  54.   
  55.                     xjqyDao.create(xjqy);   
  56.   
  57.                     log.debug("create object");   
  58.   
  59.                     flag = true;// 保存成功!   
  60.   
  61.                     break// 退出循環   
  62.   
  63.                 } catch (Exception e) {   
  64.   
  65.                     log.debug("保存企業信息出錯:", e);   
  66.   
  67.                 }   
  68.   
  69.             }   
  70.   
  71.   
  72.   
  73.             if (!flag) {   
  74.   
  75.                 throw new OurException("保存失敗!請稍后重試!");   
  76.   
  77.             }
      

小結:
如果要從嚴格意義上生成連續的流水號,那么應該采用搶號的方法,同時限制用戶不準刪除記錄,這樣才能保證流水號的嚴格連續,否則錄入5條,刪掉其中的2條,那么用戶看到的記錄的號碼將無法連續了。


該文章在 2011/3/3 17:09:10 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved