魏意烽 ,曾令超 ,魏炆通 ,吳浩昌 ,潭鑫鑰 ,詹富城
(廣東白云學院,廣東 廣州 510450)
近年來,隨著快遞行業的快速發展,快遞站在方便人們取快遞的同時也難免會出現一些特殊情況,比如快遞被拿錯、快遞取件人信息與真實取件人的信息不符合、找不到快遞員的聯系方式等問題?;诖?,課題組根據這些問題針對性地提出了“智能驛站”的想法,該想法的核心在于擁有一個“大腦”,即數據庫[1]。在當前眾多的嵌入式數據庫中,開源的SQLite 數據庫在市場上占據主流。因此,課題組創建的數據庫是基于QtCreater 的SQLite3 數據庫[2],其實現了對進出驛站的快件的快速管理以及實時監控,可以有效解決快遞在進站和出站時遇到的大部分問題,極大地提高了驛站的安全性和實用性。
“智能驛站”的數據庫系統由SQLite3 數據庫運用QtCreater 搭建的服務器與客戶端,輸入設備和輸出設備組成,系統的框架如圖1 所示。輸入設備有特制的掃碼槍按鍵、Rock Pi 4C Plus連接的鼠標、鍵盤,輸出設備有Rock Pi 4C Plus 連接的LCD 顯示器。當快件到達驛站后,會由驛站工作人員使用掃碼槍對快遞包裹上的條形碼進行掃描,掃描后的數據將被保存在數據庫中[3]。管理員可以隨時登錄服務器對后臺數據庫中的數據進行操作,一旦取件人有任何關于快遞包裹狀態或者快遞員聯系方式的問題,便可以由服務器向客戶端發送快遞包裹數據,最后數據會顯示在Rock Pi 4C Plus 連接的顯示器(項目實驗裝置,后續便可以利用Qt 和Linux 的可移植性強的特點將客戶端移植到任何系統上,比如Android,MAC OS X 等系統)上,取件人便可以實時查看快遞包裹的動態。

圖1 “智能驛站”系統框架圖
通過在QtCreater 環境中新建一個Qt Widget Application 應用程序,并新建一個繼承于QWidget 類的Widget 窗口類,設計一個主界面[4],方便管理員直接操作數據庫,對數據的增刪改查以及查看儲存快遞信息的3 張表格進行圖形化操作。其中,3 張表分別為快遞員與快遞公司信息表、快遞與取件人信息表、出庫信息表與用戶賬號數據表。
“智能驛站”服務器系統主界面,如圖2 所示。通過單擊主界面中的“快遞與取件人信息表”按鈕,圖中的QtestBrowser 組件便會顯示快遞單號、投遞時間、取件人姓名、取件人電話、取件地址等信息,并且此信息會一直保留,除非包裹已經被取走,信息才會進入出庫信息表。在Qt 中為了實現事件處理及界面跳轉,可以通過對快件的信號函數添加槽函數,當單擊圖2 中的“連接數據庫”按鈕時[5],會發出一個click 信號,再在click 信號函數上添加on_Connect_clicked()槽函數,就可以實現與數據庫的連接。
一旦建立了與數據庫的連接,就可以使用Q S Q L Q u e r y 執行底層數據庫支持的S Q L 語句,只需創建一個Q S Q L Q u e r y 對象,然后調用QSQLQuery::exec()函數就可以向數據庫提供標準的SQL 語句[6]。
服務器的系統界面還包含另外兩個重要的PushButton 控件,分別是快遞員與快遞公司信息表(Couries_Table)和出庫信息表(Out_Table),PushButoon 也都添加了相應的槽函數,其分別對應著一項功能。其中,出庫信息表的信息對項目想法的實現具有十分重要的作用,在系統中的作用僅次于主表的“快遞與取件人信息表”。

圖2 “智能驛站”服務器系統主界面
“智能驛站”管理系統的具體流程,如圖3 所示。一旦驛站的接線員收到取錯件者的電話,經認定,確認為取錯件者之后,工作人員會查找被取錯的快件信息,同時讓取錯件者將快件放在驛站暫留區,最后工作人員會發消息通知原主來取件;如果是未取件者,且快件無法在驛站找到,接線員便可以通知管理員查找快件數據庫,調取信息表;如果是非驛站客戶端注冊人員,則調取該取件人的生物特征(人臉圖像),交于警方處理,讓警方對其發出警告,歸還快件;如果是驛站客戶端的注冊人員,則短信通知該取件人,取錯快件,請在3 天內將快件放至驛站暫留區,不配合者,列入用戶黑名單,并交于警方,從此不得入驛站。
安裝QtCreater跟服務器管理界面,類似于創建應用程序窗口等,創建好之后,再創建客戶端登錄界面,登錄界面包含2 個PushButton 控件、2 個LineEdit 控件和1 個Label 控件。其中,2 個PushButton 控件分別對應著登錄按鈕、注冊賬號密碼按鈕,用戶登錄時在2 個LineEdit 編輯框中分別輸入賬號(手機電話號碼)和密碼,輸入完成后單擊登錄按鈕,登錄按鈕會發射clicked()信號,該信號用來調用登錄按鈕的槽函數。
在槽函數中主要有3個部分:
1)獲取LineEdit 編輯框中的內容,判斷用戶是否輸入賬號和密碼,如果返回值為空,則表示完整地輸入了賬號和密碼,否則將清空LineEdit 編輯框中的內容,提示重新輸入。
2)將LineEdit 編輯框中輸入的賬號和密碼與數據庫中的“用戶信息表”已存信息進行比較。
3)如果LineEdit編輯框輸入的信息與數據庫中已經注冊的信息對應,則登錄成功,登錄成功后將顯示用戶主界面;如果輸入的信息沒有在數據庫中找到,則顯示登錄失敗,賬號或者密碼錯誤,請重新登錄。
主界面是由繼承于QWidget 類的Widget 窗口類組成,界面的組件有5 個PushButton 控件、1 個LineEdit 組件、1 個QTextBrower 組件、1 個Combo box 組件和1 個Label 組件。每個按鈕都添加了相應的槽函數[5],分別對應著一項功能[7]。用戶一登錄主界面,便會在界面正中看到自己的待取件,如果沒有待取件便不會顯示,方便用戶快速查看自己是否存在待取件。
通過以上步驟,編程實現了對“智能驛站”客戶端的設計。完成程序編寫后,按下載運行,顯示無錯誤也無警告后,以Release 方式編譯生成exe 程序,運行成功后,找到項目生成目錄,將exe 可執行文件復制到一個新建的空文件夾中,最后在Qt 命令行中使用windeployqt 工具將程序打包發布,得到完整exe可執行程序發布集合,可以在任何一種系統上運行此“智能驛站”的客戶端。
當一個快件到站之后,會用掃碼槍將快件掃碼入庫,隨后快件的各種數據將自動被導入數據庫的表格。如果快件在之后與取件人的交接過程中出現任何問題,“智能驛站”的專業人員可以登錄驛站的服務器系統解決出現的問題。項目成員演示了快件進入驛站,通過掃碼槍導入數據庫的過程,快件信息能夠被錄入到數據庫中,并且反復嘗試也沒有出現數據丟失的情況,確保了在真實場景中應用的穩定性。
專業人員輸入賬號密碼,即可登錄服務器查看數據庫快件信息的更新情況。比如,驛站來了一個快遞單號為“773178563991773”的快遞,當它被導入數據庫的信息是有取件人姓名、地址、電話等信息時,經測試后,點擊服務器的各個按鈕均能成功實現操作。
使用Rock Pi 4C Plus 開發板連接顯示器作為客戶端,在Rock Pi 4C Plus 開發板中已提前燒進了一個Linux debian 5.10.0-18-amd64 的系統,gcc/g++ version 10.2.1 在此系統上下載好客戶端的exe 程序,進行注冊之后再登錄。Rock Pi 4C Plus 開發板接線實物圖如圖4 所示,客戶端登錄界面如圖5 所示,客戶端主界面如圖6 所示??梢栽诖〖缑婵吹娇旒畔?,快件信息為快件基本信息(單號、地址等)和取件人信息(若該取件人已注冊為本驛站客戶端用戶,用戶庫內有其基本信息及生物特征信息,使用①信息;若該取件人未注冊為本驛站客戶端用戶,用戶信息庫中無此人信息,則調用出件時由OpenCV 配合樹莓派讀取攝像頭[8]進行人臉識別并保存下來取件人的生物特征信息[9],使用②信息)。取出庫信息表不可隨意查看,收集的信息也不會用作其他商業用途。數據更新時間為每天24:00,自動封存當天的取出庫信息表,封存時間為6 個月。在這期間若無取件人取錯快件的情況,系統將會在封存結束當天24:00自動刪表;在這期間若有快件取錯事件,可通過預留在驛站內的服務熱線詢問取件情況,調出該當事人的快件狀態信息并進行對比[10],確認快件取錯屬實,方可調用封存中的信息表。

圖4 開發板接線實物圖

圖5 客戶端登錄界面

圖6 客戶端主界面
本系統通過使用Qt 應用框架呈現出人機交互界面,采用Qt 信號槽機制實現對快件出入庫數據的管理和操作,利用Qt 提供的進程內數據庫SQLite3,可用于多種操作系統平臺。經過測試,管理員登錄服務器后能夠使用相應的功能,用戶(取件人)成功登錄客戶端也可以查看快件是否到站,當快件被取走時,客戶端和服務器均能對其做出反應,及時更新數據庫。課題組模擬了快件出錯的多種情況,其都能得到很好的解決,表明該系統能快速解決在快遞出站中遇到的各種問題,極大地提高了驛站的可靠性與驛站人員的工作效率,節省了時間和金錢成本,并為傳統驛站的創新提供了參考。