魏意烽 ,曾令超 ,魏炆通 ,吳浩昌 ,潭鑫鑰 ,詹富城
(廣東白云學(xué)院,廣東 廣州 510450)
近年來,隨著快遞行業(yè)的快速發(fā)展,快遞站在方便人們?nèi)】爝f的同時也難免會出現(xiàn)一些特殊情況,比如快遞被拿錯、快遞取件人信息與真實取件人的信息不符合、找不到快遞員的聯(lián)系方式等問題。基于此,課題組根據(jù)這些問題針對性地提出了“智能驛站”的想法,該想法的核心在于擁有一個“大腦”,即數(shù)據(jù)庫[1]。在當(dāng)前眾多的嵌入式數(shù)據(jù)庫中,開源的SQLite 數(shù)據(jù)庫在市場上占據(jù)主流。因此,課題組創(chuàng)建的數(shù)據(jù)庫是基于QtCreater 的SQLite3 數(shù)據(jù)庫[2],其實現(xiàn)了對進(jìn)出驛站的快件的快速管理以及實時監(jiān)控,可以有效解決快遞在進(jìn)站和出站時遇到的大部分問題,極大地提高了驛站的安全性和實用性。
“智能驛站”的數(shù)據(jù)庫系統(tǒng)由SQLite3 數(shù)據(jù)庫運用QtCreater 搭建的服務(wù)器與客戶端,輸入設(shè)備和輸出設(shè)備組成,系統(tǒng)的框架如圖1 所示。輸入設(shè)備有特制的掃碼槍按鍵、Rock Pi 4C Plus連接的鼠標(biāo)、鍵盤,輸出設(shè)備有Rock Pi 4C Plus 連接的LCD 顯示器。當(dāng)快件到達(dá)驛站后,會由驛站工作人員使用掃碼槍對快遞包裹上的條形碼進(jìn)行掃描,掃描后的數(shù)據(jù)將被保存在數(shù)據(jù)庫中[3]。管理員可以隨時登錄服務(wù)器對后臺數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行操作,一旦取件人有任何關(guān)于快遞包裹狀態(tài)或者快遞員聯(lián)系方式的問題,便可以由服務(wù)器向客戶端發(fā)送快遞包裹數(shù)據(jù),最后數(shù)據(jù)會顯示在Rock Pi 4C Plus 連接的顯示器(項目實驗裝置,后續(xù)便可以利用Qt 和Linux 的可移植性強(qiáng)的特點將客戶端移植到任何系統(tǒng)上,比如Android,MAC OS X 等系統(tǒng))上,取件人便可以實時查看快遞包裹的動態(tài)。
圖1 “智能驛站”系統(tǒng)框架圖
通過在QtCreater 環(huán)境中新建一個Qt Widget Application 應(yīng)用程序,并新建一個繼承于QWidget 類的Widget 窗口類,設(shè)計一個主界面[4],方便管理員直接操作數(shù)據(jù)庫,對數(shù)據(jù)的增刪改查以及查看儲存快遞信息的3 張表格進(jìn)行圖形化操作。其中,3 張表分別為快遞員與快遞公司信息表、快遞與取件人信息表、出庫信息表與用戶賬號數(shù)據(jù)表。
“智能驛站”服務(wù)器系統(tǒng)主界面,如圖2 所示。通過單擊主界面中的“快遞與取件人信息表”按鈕,圖中的QtestBrowser 組件便會顯示快遞單號、投遞時間、取件人姓名、取件人電話、取件地址等信息,并且此信息會一直保留,除非包裹已經(jīng)被取走,信息才會進(jìn)入出庫信息表。在Qt 中為了實現(xiàn)事件處理及界面跳轉(zhuǎn),可以通過對快件的信號函數(shù)添加槽函數(shù),當(dāng)單擊圖2 中的“連接數(shù)據(jù)庫”按鈕時[5],會發(fā)出一個click 信號,再在click 信號函數(shù)上添加on_Connect_clicked()槽函數(shù),就可以實現(xiàn)與數(shù)據(jù)庫的連接。
一旦建立了與數(shù)據(jù)庫的連接,就可以使用Q S Q L Q u e r y 執(zhí)行底層數(shù)據(jù)庫支持的S Q L 語句,只需創(chuàng)建一個Q S Q L Q u e r y 對象,然后調(diào)用QSQLQuery::exec()函數(shù)就可以向數(shù)據(jù)庫提供標(biāo)準(zhǔn)的SQL 語句[6]。
服務(wù)器的系統(tǒng)界面還包含另外兩個重要的PushButton 控件,分別是快遞員與快遞公司信息表(Couries_Table)和出庫信息表(Out_Table),PushButoon 也都添加了相應(yīng)的槽函數(shù),其分別對應(yīng)著一項功能。其中,出庫信息表的信息對項目想法的實現(xiàn)具有十分重要的作用,在系統(tǒng)中的作用僅次于主表的“快遞與取件人信息表”。
圖2 “智能驛站”服務(wù)器系統(tǒng)主界面
“智能驛站”管理系統(tǒng)的具體流程,如圖3 所示。一旦驛站的接線員收到取錯件者的電話,經(jīng)認(rèn)定,確認(rèn)為取錯件者之后,工作人員會查找被取錯的快件信息,同時讓取錯件者將快件放在驛站暫留區(qū),最后工作人員會發(fā)消息通知原主來取件;如果是未取件者,且快件無法在驛站找到,接線員便可以通知管理員查找快件數(shù)據(jù)庫,調(diào)取信息表;如果是非驛站客戶端注冊人員,則調(diào)取該取件人的生物特征(人臉圖像),交于警方處理,讓警方對其發(fā)出警告,歸還快件;如果是驛站客戶端的注冊人員,則短信通知該取件人,取錯快件,請在3 天內(nèi)將快件放至驛站暫留區(qū),不配合者,列入用戶黑名單,并交于警方,從此不得入驛站。
安裝QtCreater跟服務(wù)器管理界面,類似于創(chuàng)建應(yīng)用程序窗口等,創(chuàng)建好之后,再創(chuàng)建客戶端登錄界面,登錄界面包含2 個PushButton 控件、2 個LineEdit 控件和1 個Label 控件。其中,2 個PushButton 控件分別對應(yīng)著登錄按鈕、注冊賬號密碼按鈕,用戶登錄時在2 個LineEdit 編輯框中分別輸入賬號(手機(jī)電話號碼)和密碼,輸入完成后單擊登錄按鈕,登錄按鈕會發(fā)射clicked()信號,該信號用來調(diào)用登錄按鈕的槽函數(shù)。
在槽函數(shù)中主要有3個部分:
1)獲取LineEdit 編輯框中的內(nèi)容,判斷用戶是否輸入賬號和密碼,如果返回值為空,則表示完整地輸入了賬號和密碼,否則將清空LineEdit 編輯框中的內(nèi)容,提示重新輸入。
2)將LineEdit 編輯框中輸入的賬號和密碼與數(shù)據(jù)庫中的“用戶信息表”已存信息進(jìn)行比較。
3)如果LineEdit編輯框輸入的信息與數(shù)據(jù)庫中已經(jīng)注冊的信息對應(yīng),則登錄成功,登錄成功后將顯示用戶主界面;如果輸入的信息沒有在數(shù)據(jù)庫中找到,則顯示登錄失敗,賬號或者密碼錯誤,請重新登錄。
主界面是由繼承于QWidget 類的Widget 窗口類組成,界面的組件有5 個PushButton 控件、1 個LineEdit 組件、1 個QTextBrower 組件、1 個Combo box 組件和1 個Label 組件。每個按鈕都添加了相應(yīng)的槽函數(shù)[5],分別對應(yīng)著一項功能[7]。用戶一登錄主界面,便會在界面正中看到自己的待取件,如果沒有待取件便不會顯示,方便用戶快速查看自己是否存在待取件。
通過以上步驟,編程實現(xiàn)了對“智能驛站”客戶端的設(shè)計。完成程序編寫后,按下載運行,顯示無錯誤也無警告后,以Release 方式編譯生成exe 程序,運行成功后,找到項目生成目錄,將exe 可執(zhí)行文件復(fù)制到一個新建的空文件夾中,最后在Qt 命令行中使用windeployqt 工具將程序打包發(fā)布,得到完整exe可執(zhí)行程序發(fā)布集合,可以在任何一種系統(tǒng)上運行此“智能驛站”的客戶端。
當(dāng)一個快件到站之后,會用掃碼槍將快件掃碼入庫,隨后快件的各種數(shù)據(jù)將自動被導(dǎo)入數(shù)據(jù)庫的表格。如果快件在之后與取件人的交接過程中出現(xiàn)任何問題,“智能驛站”的專業(yè)人員可以登錄驛站的服務(wù)器系統(tǒng)解決出現(xiàn)的問題。項目成員演示了快件進(jìn)入驛站,通過掃碼槍導(dǎo)入數(shù)據(jù)庫的過程,快件信息能夠被錄入到數(shù)據(jù)庫中,并且反復(fù)嘗試也沒有出現(xiàn)數(shù)據(jù)丟失的情況,確保了在真實場景中應(yīng)用的穩(wěn)定性。
專業(yè)人員輸入賬號密碼,即可登錄服務(wù)器查看數(shù)據(jù)庫快件信息的更新情況。比如,驛站來了一個快遞單號為“773178563991773”的快遞,當(dāng)它被導(dǎo)入數(shù)據(jù)庫的信息是有取件人姓名、地址、電話等信息時,經(jīng)測試后,點擊服務(wù)器的各個按鈕均能成功實現(xiàn)操作。
使用Rock Pi 4C Plus 開發(fā)板連接顯示器作為客戶端,在Rock Pi 4C Plus 開發(fā)板中已提前燒進(jìn)了一個Linux debian 5.10.0-18-amd64 的系統(tǒng),gcc/g++ version 10.2.1 在此系統(tǒng)上下載好客戶端的exe 程序,進(jìn)行注冊之后再登錄。Rock Pi 4C Plus 開發(fā)板接線實物圖如圖4 所示,客戶端登錄界面如圖5 所示,客戶端主界面如圖6 所示??梢栽诖〖缑婵吹娇旒畔?,快件信息為快件基本信息(單號、地址等)和取件人信息(若該取件人已注冊為本驛站客戶端用戶,用戶庫內(nèi)有其基本信息及生物特征信息,使用①信息;若該取件人未注冊為本驛站客戶端用戶,用戶信息庫中無此人信息,則調(diào)用出件時由OpenCV 配合樹莓派讀取攝像頭[8]進(jìn)行人臉識別并保存下來取件人的生物特征信息[9],使用②信息)。取出庫信息表不可隨意查看,收集的信息也不會用作其他商業(yè)用途。數(shù)據(jù)更新時間為每天24:00,自動封存當(dāng)天的取出庫信息表,封存時間為6 個月。在這期間若無取件人取錯快件的情況,系統(tǒng)將會在封存結(jié)束當(dāng)天24:00自動刪表;在這期間若有快件取錯事件,可通過預(yù)留在驛站內(nèi)的服務(wù)熱線詢問取件情況,調(diào)出該當(dāng)事人的快件狀態(tài)信息并進(jìn)行對比[10],確認(rèn)快件取錯屬實,方可調(diào)用封存中的信息表。
圖4 開發(fā)板接線實物圖
圖5 客戶端登錄界面
圖6 客戶端主界面
本系統(tǒng)通過使用Qt 應(yīng)用框架呈現(xiàn)出人機(jī)交互界面,采用Qt 信號槽機(jī)制實現(xiàn)對快件出入庫數(shù)據(jù)的管理和操作,利用Qt 提供的進(jìn)程內(nèi)數(shù)據(jù)庫SQLite3,可用于多種操作系統(tǒng)平臺。經(jīng)過測試,管理員登錄服務(wù)器后能夠使用相應(yīng)的功能,用戶(取件人)成功登錄客戶端也可以查看快件是否到站,當(dāng)快件被取走時,客戶端和服務(wù)器均能對其做出反應(yīng),及時更新數(shù)據(jù)庫。課題組模擬了快件出錯的多種情況,其都能得到很好的解決,表明該系統(tǒng)能快速解決在快遞出站中遇到的各種問題,極大地提高了驛站的可靠性與驛站人員的工作效率,節(jié)省了時間和金錢成本,并為傳統(tǒng)驛站的創(chuàng)新提供了參考。