高毅
摘要:現(xiàn)有的設備盤點大多是手工或者半手工的方式,這使得設備盤點的工作量大大增加。該文基于QR Code技術和Android技術,提出一種通過移動設備掃描設備上的條碼標簽來實現(xiàn)設備盤點的方法。該客戶端的實現(xiàn),提高了設備盤點的工作效率,對企業(yè)的設備管理有著重要的意義。
關鍵詞:Android;客戶端;QR Code;設備盤點
中圖分類號:TP319 文獻標識碼:A 文章編號:1009-3044(2016)15-0088-03
Abstract: Existing equipment inventory is mostly manual or semi-manual mode, which makes the equipment inventory workload increase greatly. In this paper, based on the QR Code technology and the Android technology, put forward a kind of via mobile devices scans the bar Code label on the equipment to realize the equipment inventory method. The client implementation, improve the efficiency of the equipment inventory, equipment management is of great significance to the enterprise.
Key words: Android; Client; QR Code; equipment inventory
隨著科學技術的不斷發(fā)展,企業(yè)生產(chǎn)水平的不斷提高,企業(yè)對設備種類的需求也日趨復雜,設備數(shù)量也日益龐大,這為企業(yè)設備管理提出了許多問題與挑戰(zhàn)[1]。然而,目前的設備管理系統(tǒng)相對落后,迫切需要結合先進穩(wěn)定的技術,開發(fā)出適于當前的設備管理系統(tǒng),以保證對設備的運行和維護過程實行科學化管理[2]?,F(xiàn)有的設備管理系統(tǒng)中的設備盤點功能大多沒有太好的處理方式,都是手工或者半手工的方式,這導致設備盤點工作量的大幅度遞增,并且,還會存在盤點錯誤。鑒于此種情況,本文基于QR Code技術和Android技術,提出一種通過移動設備掃描設備上的條碼標簽來實現(xiàn)設備盤點的方法。該方法使設備盤點的工作量大大減少,并能把人為錯誤降到最低。該客戶端的實現(xiàn),對企業(yè)的設備管理有很好的實際應用價值。
1 相關技術
1.1 QR Code
QR碼的“QR”是Quick Response 的縮寫。這種二維碼能夠快速讀取,與之前的條形碼相比,QR 碼能存儲更豐富的信息,包括對文字、URL 地址和其他類型的數(shù)據(jù)加密。QR碼1994年由日本Denso-Wave公司發(fā)明,QR碼的標準JIS X 0510在1999年1月發(fā)布,而其對應的ISO國際標準ISO/IEC18004,則在2000年6月獲得批準[3]。QR碼是屬于開放式的標準。
1.2 ZXing
ZXing是一個開源的開發(fā)庫,該庫支持條形碼的編碼和解碼。該庫支持的條形碼編碼格式有UPC-A、EAN-8、 EAN-13、 Code 39、 Code 128、 ITF、 Codabar、 Plessey、 MSI、 QR Code、 PDF-417、 Aztec、 Data Matrix;該庫支持的條形碼解碼格式有UPC-A、 UPC-E、 EAN-8、 EAN-13、 Code 39、 Code 93、 Code 128、 ITF、 Codabar、 MSI、 RSS-14 (all variants)、 QR Code、 Data Matrix、 Aztec and PDF-417;該庫的運行平臺有Java環(huán)境、Android環(huán)境等[4]。
ZXing庫中有幾個非常重要的類包,分別為CaptureActivity、CaptureActivityHandler、DecodeThread、com.google.zxing.client.android.camera、ViewfinderView。其中,CaptureActivity類,用來啟動條碼識別掃描器的類; CaptureActivityHandler類,用來調用條碼解碼線程的類; DecodeThread類,用來解碼條碼的線程的類; com.google.zxing.client.android.camera包,用來控制移動端攝像頭設備的包;ViewfinderView類,是負責實現(xiàn)自定義掃描控件的類。
2 系統(tǒng)設計
2.1 系統(tǒng)工作流程
設備驗收使用后,給設備編一個設備編號,根據(jù)該設備編號生成一個QR碼標簽,貼在設備上。一次設備盤點的時序圖如圖1所示,用戶通過客戶端掃描QR碼,解析出設備編號,根據(jù)設備編號向服務器端的Servlet發(fā)送查詢請求,Servlet運行doPost方法到數(shù)據(jù)庫中查詢信息,把查詢到的設備信息返回到客戶端,用戶核對設備信息,再根據(jù)盤點信息向服務器端的Servlet發(fā)送請求,把盤點信息記錄到數(shù)據(jù)庫中,并返回操作成功與否的標志信息。這就是一次設備盤點的工作流程,不斷地重復這一流程,直到盤點結束,就可以得到設備盤點結果,打印盤點報表,讓部門負責人簽字確認。
2.2 數(shù)據(jù)庫設計
設備盤點只是設備管理中的一個功能模塊,下面僅對和設備盤點相關的數(shù)據(jù)庫表做詳細介紹。為了滿足移動客戶端的設備盤點需求,設計如下的數(shù)據(jù)項和數(shù)據(jù)結構:
管理員信息表(工號,姓名,密碼,所屬部門編號,備注);其中,工號是主鍵;所屬部門編號是外鍵,來自部門信息表;使用工號和密碼進行登陸。
部門信息表(部門編號,部門名稱,辦公地點,部門負責人,負責人電話,備注);其中,部門編號是主鍵。
固定資產(chǎn)信息表(設備編號,設備名稱,規(guī)格型號,生產(chǎn)廠商,生產(chǎn)日期,附件,驗收日期,所屬部門編號,備注);其中,設備編號是主鍵;所屬部門編號是外鍵,來自部門信息表;驗收日期是填寫設備驗收后正式使用的日期;附件字段填寫設備的附屬配件信息。
盤點信息表(盤點編號,盤點類型,盤點日期,盤點結果,盤點部門編號,備注);其中,盤點編號是主鍵;盤點部門編號是外鍵,來自部門信息表;盤點類型取值為:月盤點、季度盤點和年度盤點。
盤點細目信息表(盤點細目編號,盤點編號,設備編號,設備狀態(tài),備注);其中,盤點細目編號是主鍵;盤點編號是外鍵,來自盤點信息表;設備編號是外鍵,來自固定資產(chǎn)信息表;設備狀態(tài)取值為:正常、待修、損毀、丟失、其他。
3 關鍵技術
3.1 QR Code掃描
掃描獲取QR碼信息首先要打開移動端設備的攝像頭,并通過Srufaceview來預覽;然后調用com.google.zxing.client.androdi.camera包中的相關方法來控制攝像頭自動對焦;再調用ZXing中的DecodeThread類的相關方法來進行解碼 [5]。在這一過程中,使用到線程機制,為了不堵塞Android的UI線程,要把解碼工作單獨放在一個線程中來實現(xiàn)。下面僅對回調方法handleQRCodeDecode作詳細描述。
public void handleQRCodeDecode (Result result, Bitmap QRcode) {
inactivityTimer.onActivity();
playBeepSoundAndVibrate();
String resultString = result.getText();
//若掃描結果為空,提示掃描失敗
if (resultString.equals("")) {
Toast.makeText(CaptureActivity.this, "掃描失?。?, Toast.LENGTH_SHORT).show();
}else {
Intent resultIntent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("result", resultString);
resultIntent.putExtras(bundle);
//回傳掃描結果
this.setResult(RESULT_OK, resultIntent);
}
CaptureActivity.this.finish();
}
3.2 Android端與Web端的通信方式
Android與服務器通信通常采用HTTP通信方式和Socket通信方式[6]。在本系統(tǒng)中,我采用HTTP的通信方式。HTTP是一種無狀態(tài)協(xié)議,使用request對象來實現(xiàn)請求,使用response對象來實現(xiàn)響應,一次會話結束,客戶端和服務器端的鏈接就會自動關閉。
為了實現(xiàn)Android端和Web端的數(shù)據(jù)交互,我編寫了一個靜態(tài)方法,返回值為JSON類型,方法的頭部如下:
public static JSONArray dopost(String url,String [] parameter,String [] parameter_value,int len,String response_para)
其中,ur是服務器端servlet的地址,parameter是傳遞參數(shù)的名稱,parameter_value是傳遞參數(shù)的值,len是傳遞參數(shù)的個數(shù),respense_para是傳遞的標志。該方法的核心代碼如下:
for(int i=0;i ns.add(new BasicNameValuePair(parameter[i], parameter_value[i])); } UrlEncodedFormEntity in; try{ //設置編碼格式為UTF-8 in = new UrlEncodedFormEntity(ns,HTTP.UTF_8); pj.setEntity(in); rp = client.execute(pj); //若響應結果不為空,就把響應結果拼接成字符串,再把字符串轉換為json數(shù)組返回;否則,返回null if (rp.getEntity() != null) {//響應結果不為空 BufferedReader bufreader = new BufferedReader(new InputStreamReader(rp.getEntity().getContent(), HTTP.UTF_8)); StringBuffer sbuffer = new StringBuffer(); String row= bufreader.readLine(); while (row != null) {//把響應結果拼接成字符串,存儲于sbuffer中 sbuffer.append(row); row= bufreader.readLine();}
bufreader.close();
//把sbuffer中存儲的字符串轉換為json數(shù)組并返回
JSONObject jsonobj = new JSONObject(sbuffer.toString());
jsonarr = jsonobj.getJSONArray(response_para);
return jsonarr;}
else{//響應結果為空
return null;}
}catch(Exception e){
return null;}
4 結束語
設備盤點客戶端的測試效果如圖2和圖3所示。
點擊掃描盤點按鈕調出二維碼掃描對話框對QR碼進行識別,根據(jù)識別到的設備編號到服務器查詢出設備信息顯示,用戶核對后,填選設備狀態(tài)信息,點擊保存按鈕,完成一次設備盤點,重復此操作過程,結束盤點時,點擊完成盤點按鈕,就可以得到如圖3所示的盤點結果信息,在盤點結果信息中,可以看到部門的這一次盤點的詳細信息,該部門總的設備數(shù)、正常數(shù)、待修數(shù)、損毀數(shù)、丟失數(shù)和其他情況的數(shù)量。該客戶端的實現(xiàn),提高了設備盤點的工作效率,對企業(yè)的設備管理有著重要的意義。
參考文獻:
[1] 郭云飛,黃東. 基于B/S模式的多層結構的電廠設備管理系統(tǒng)的設計[J]. 計算機與現(xiàn)代化,2004,12(12):119-119.
[2] 張慶. 基于狀態(tài)的設備管理系統(tǒng)的設計與實現(xiàn)[J]. 計算機工程與應用,2006,15(15):179-179.
[3] QR碼_百度百科[EB/OL]. http://baike.baidu.com/link?url=qBXGeJKmUY_Vq10BBl_Xsl-9b7ka8T2rwNfSNh_ox3fQHpqt RiKNv_DTIY7huSbu.
[4] ZXing[EB/OL]. https://github.com/zxing/zxing.
[5] 佘志龍,陳昱勛,鄭名杰,等.Google Android SDK開發(fā)范例大全[M]. 3版.北京:人民郵電出版社,2011:718-718.
[6] 左軍. Android程序設計經(jīng)典教程[M].北京:清華大學出版社,2015:311-311.