高毅
摘要:現(xiàn)有的設(shè)備盤點(diǎn)大多是手工或者半手工的方式,這使得設(shè)備盤點(diǎn)的工作量大大增加。該文基于QR Code技術(shù)和Android技術(shù),提出一種通過移動(dòng)設(shè)備掃描設(shè)備上的條碼標(biāo)簽來實(shí)現(xiàn)設(shè)備盤點(diǎn)的方法。該客戶端的實(shí)現(xiàn),提高了設(shè)備盤點(diǎn)的工作效率,對企業(yè)的設(shè)備管理有著重要的意義。
關(guān)鍵詞:Android;客戶端;QR Code;設(shè)備盤點(diǎn)
中圖分類號:TP319 文獻(xiàn)標(biāo)識碼: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
隨著科學(xué)技術(shù)的不斷發(fā)展,企業(yè)生產(chǎn)水平的不斷提高,企業(yè)對設(shè)備種類的需求也日趨復(fù)雜,設(shè)備數(shù)量也日益龐大,這為企業(yè)設(shè)備管理提出了許多問題與挑戰(zhàn)[1]。然而,目前的設(shè)備管理系統(tǒng)相對落后,迫切需要結(jié)合先進(jìn)穩(wěn)定的技術(shù),開發(fā)出適于當(dāng)前的設(shè)備管理系統(tǒng),以保證對設(shè)備的運(yùn)行和維護(hù)過程實(shí)行科學(xué)化管理[2]?,F(xiàn)有的設(shè)備管理系統(tǒng)中的設(shè)備盤點(diǎn)功能大多沒有太好的處理方式,都是手工或者半手工的方式,這導(dǎo)致設(shè)備盤點(diǎn)工作量的大幅度遞增,并且,還會存在盤點(diǎn)錯(cuò)誤。鑒于此種情況,本文基于QR Code技術(shù)和Android技術(shù),提出一種通過移動(dòng)設(shè)備掃描設(shè)備上的條碼標(biāo)簽來實(shí)現(xiàn)設(shè)備盤點(diǎn)的方法。該方法使設(shè)備盤點(diǎn)的工作量大大減少,并能把人為錯(cuò)誤降到最低。該客戶端的實(shí)現(xiàn),對企業(yè)的設(shè)備管理有很好的實(shí)際應(yīng)用價(jià)值。
1 相關(guān)技術(shù)
1.1 QR Code
QR碼的“QR”是Quick Response 的縮寫。這種二維碼能夠快速讀取,與之前的條形碼相比,QR 碼能存儲更豐富的信息,包括對文字、URL 地址和其他類型的數(shù)據(jù)加密。QR碼1994年由日本Denso-Wave公司發(fā)明,QR碼的標(biāo)準(zhǔn)JIS X 0510在1999年1月發(fā)布,而其對應(yīng)的ISO國際標(biāo)準(zhǔn)ISO/IEC18004,則在2000年6月獲得批準(zhǔn)[3]。QR碼是屬于開放式的標(biāo)準(zhǔn)。
1.2 ZXing
ZXing是一個(gè)開源的開發(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;該庫的運(yùn)行平臺有Java環(huán)境、Android環(huán)境等[4]。
ZXing庫中有幾個(gè)非常重要的類包,分別為CaptureActivity、CaptureActivityHandler、DecodeThread、com.google.zxing.client.android.camera、ViewfinderView。其中,CaptureActivity類,用來啟動(dòng)條碼識別掃描器的類; CaptureActivityHandler類,用來調(diào)用條碼解碼線程的類; DecodeThread類,用來解碼條碼的線程的類; com.google.zxing.client.android.camera包,用來控制移動(dòng)端攝像頭設(shè)備的包;ViewfinderView類,是負(fù)責(zé)實(shí)現(xiàn)自定義掃描控件的類。
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)工作流程
設(shè)備驗(yàn)收使用后,給設(shè)備編一個(gè)設(shè)備編號,根據(jù)該設(shè)備編號生成一個(gè)QR碼標(biāo)簽,貼在設(shè)備上。一次設(shè)備盤點(diǎn)的時(shí)序圖如圖1所示,用戶通過客戶端掃描QR碼,解析出設(shè)備編號,根據(jù)設(shè)備編號向服務(wù)器端的Servlet發(fā)送查詢請求,Servlet運(yùn)行doPost方法到數(shù)據(jù)庫中查詢信息,把查詢到的設(shè)備信息返回到客戶端,用戶核對設(shè)備信息,再根據(jù)盤點(diǎn)信息向服務(wù)器端的Servlet發(fā)送請求,把盤點(diǎn)信息記錄到數(shù)據(jù)庫中,并返回操作成功與否的標(biāo)志信息。這就是一次設(shè)備盤點(diǎn)的工作流程,不斷地重復(fù)這一流程,直到盤點(diǎn)結(jié)束,就可以得到設(shè)備盤點(diǎn)結(jié)果,打印盤點(diǎn)報(bào)表,讓部門負(fù)責(zé)人簽字確認(rèn)。
2.2 數(shù)據(jù)庫設(shè)計(jì)
設(shè)備盤點(diǎn)只是設(shè)備管理中的一個(gè)功能模塊,下面僅對和設(shè)備盤點(diǎn)相關(guān)的數(shù)據(jù)庫表做詳細(xì)介紹。為了滿足移動(dòng)客戶端的設(shè)備盤點(diǎn)需求,設(shè)計(jì)如下的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu):
管理員信息表(工號,姓名,密碼,所屬部門編號,備注);其中,工號是主鍵;所屬部門編號是外鍵,來自部門信息表;使用工號和密碼進(jìn)行登陸。
部門信息表(部門編號,部門名稱,辦公地點(diǎn),部門負(fù)責(zé)人,負(fù)責(zé)人電話,備注);其中,部門編號是主鍵。
固定資產(chǎn)信息表(設(shè)備編號,設(shè)備名稱,規(guī)格型號,生產(chǎn)廠商,生產(chǎn)日期,附件,驗(yàn)收日期,所屬部門編號,備注);其中,設(shè)備編號是主鍵;所屬部門編號是外鍵,來自部門信息表;驗(yàn)收日期是填寫設(shè)備驗(yàn)收后正式使用的日期;附件字段填寫設(shè)備的附屬配件信息。
盤點(diǎn)信息表(盤點(diǎn)編號,盤點(diǎn)類型,盤點(diǎn)日期,盤點(diǎn)結(jié)果,盤點(diǎn)部門編號,備注);其中,盤點(diǎn)編號是主鍵;盤點(diǎn)部門編號是外鍵,來自部門信息表;盤點(diǎn)類型取值為:月盤點(diǎn)、季度盤點(diǎn)和年度盤點(diǎn)。
盤點(diǎn)細(xì)目信息表(盤點(diǎn)細(xì)目編號,盤點(diǎn)編號,設(shè)備編號,設(shè)備狀態(tài),備注);其中,盤點(diǎn)細(xì)目編號是主鍵;盤點(diǎn)編號是外鍵,來自盤點(diǎn)信息表;設(shè)備編號是外鍵,來自固定資產(chǎn)信息表;設(shè)備狀態(tài)取值為:正常、待修、損毀、丟失、其他。
3 關(guān)鍵技術(shù)
3.1 QR Code掃描
掃描獲取QR碼信息首先要打開移動(dòng)端設(shè)備的攝像頭,并通過Srufaceview來預(yù)覽;然后調(diào)用com.google.zxing.client.androdi.camera包中的相關(guān)方法來控制攝像頭自動(dòng)對焦;再調(diào)用ZXing中的DecodeThread類的相關(guān)方法來進(jìn)行解碼 [5]。在這一過程中,使用到線程機(jī)制,為了不堵塞Android的UI線程,要把解碼工作單獨(dú)放在一個(gè)線程中來實(shí)現(xiàn)。下面僅對回調(diào)方法handleQRCodeDecode作詳細(xì)描述。
public void handleQRCodeDecode (Result result, Bitmap QRcode) {
inactivityTimer.onActivity();
playBeepSoundAndVibrate();
String resultString = result.getText();
//若掃描結(jié)果為空,提示掃描失敗
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);
//回傳掃描結(jié)果
this.setResult(RESULT_OK, resultIntent);
}
CaptureActivity.this.finish();
}
3.2 Android端與Web端的通信方式
Android與服務(wù)器通信通常采用HTTP通信方式和Socket通信方式[6]。在本系統(tǒng)中,我采用HTTP的通信方式。HTTP是一種無狀態(tài)協(xié)議,使用request對象來實(shí)現(xiàn)請求,使用response對象來實(shí)現(xiàn)響應(yīng),一次會話結(jié)束,客戶端和服務(wù)器端的鏈接就會自動(dòng)關(guān)閉。
為了實(shí)現(xiàn)Android端和Web端的數(shù)據(jù)交互,我編寫了一個(gè)靜態(tài)方法,返回值為JSON類型,方法的頭部如下:
public static JSONArray dopost(String url,String [] parameter,String [] parameter_value,int len,String response_para)
其中,ur是服務(wù)器端servlet的地址,parameter是傳遞參數(shù)的名稱,parameter_value是傳遞參數(shù)的值,len是傳遞參數(shù)的個(gè)數(shù),respense_para是傳遞的標(biāo)志。該方法的核心代碼如下:
for(int i=0;i ns.add(new BasicNameValuePair(parameter[i], parameter_value[i])); } UrlEncodedFormEntity in; try{ //設(shè)置編碼格式為UTF-8 in = new UrlEncodedFormEntity(ns,HTTP.UTF_8); pj.setEntity(in); rp = client.execute(pj); //若響應(yīng)結(jié)果不為空,就把響應(yīng)結(jié)果拼接成字符串,再把字符串轉(zhuǎn)換為json數(shù)組返回;否則,返回null if (rp.getEntity() != null) {//響應(yīng)結(jié)果不為空 BufferedReader bufreader = new BufferedReader(new InputStreamReader(rp.getEntity().getContent(), HTTP.UTF_8)); StringBuffer sbuffer = new StringBuffer(); String row= bufreader.readLine(); while (row != null) {//把響應(yīng)結(jié)果拼接成字符串,存儲于sbuffer中 sbuffer.append(row); row= bufreader.readLine();}
bufreader.close();
//把sbuffer中存儲的字符串轉(zhuǎn)換為json數(shù)組并返回
JSONObject jsonobj = new JSONObject(sbuffer.toString());
jsonarr = jsonobj.getJSONArray(response_para);
return jsonarr;}
else{//響應(yīng)結(jié)果為空
return null;}
}catch(Exception e){
return null;}
4 結(jié)束語
設(shè)備盤點(diǎn)客戶端的測試效果如圖2和圖3所示。
點(diǎn)擊掃描盤點(diǎn)按鈕調(diào)出二維碼掃描對話框?qū)R碼進(jìn)行識別,根據(jù)識別到的設(shè)備編號到服務(wù)器查詢出設(shè)備信息顯示,用戶核對后,填選設(shè)備狀態(tài)信息,點(diǎn)擊保存按鈕,完成一次設(shè)備盤點(diǎn),重復(fù)此操作過程,結(jié)束盤點(diǎn)時(shí),點(diǎn)擊完成盤點(diǎn)按鈕,就可以得到如圖3所示的盤點(diǎn)結(jié)果信息,在盤點(diǎn)結(jié)果信息中,可以看到部門的這一次盤點(diǎn)的詳細(xì)信息,該部門總的設(shè)備數(shù)、正常數(shù)、待修數(shù)、損毀數(shù)、丟失數(shù)和其他情況的數(shù)量。該客戶端的實(shí)現(xiàn),提高了設(shè)備盤點(diǎn)的工作效率,對企業(yè)的設(shè)備管理有著重要的意義。
參考文獻(xiàn):
[1] 郭云飛,黃東. 基于B/S模式的多層結(jié)構(gòu)的電廠設(shè)備管理系統(tǒng)的設(shè)計(jì)[J]. 計(jì)算機(jī)與現(xiàn)代化,2004,12(12):119-119.
[2] 張慶. 基于狀態(tài)的設(shè)備管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與應(yīng)用,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程序設(shè)計(jì)經(jīng)典教程[M].北京:清華大學(xué)出版社,2015:311-311.