,
(鄭州大學(xué) 信息工程學(xué)院,鄭州 450001)
現(xiàn)今社會(huì),人力資源管理是現(xiàn)代企業(yè)工作的重中之重,其有效性嚴(yán)重影響企業(yè)發(fā)展,進(jìn)一步影響企業(yè)的興衰成敗[1]。傳統(tǒng)的企業(yè)管理方式,例如在公司辦公時(shí)刷卡簽到、外勤辦公時(shí)電話查勤、月末匯總考勤信息時(shí)用紙質(zhì)報(bào)表或電腦應(yīng)用軟件[2]等方式擁有如下弊端:第一,考勤數(shù)據(jù)統(tǒng)計(jì)工作量大,而且誤差較大;第二,容易出現(xiàn)簽而未到、代打卡等情況。隨著社會(huì)節(jié)奏的加快,企業(yè)對(duì)管理的便捷、真實(shí)、高效的需求日益迫切。
移動(dòng)終端的普及為解決這一難題提供了契機(jī)[3]。但是手機(jī)的室內(nèi)定位精確度較低,不能滿足企業(yè)管理室內(nèi)考勤真實(shí)有效的要求。傳統(tǒng)的室內(nèi)考勤,如RFID[4]、指紋識(shí)別[5]和臉部識(shí)別[6]等雖解決了室內(nèi)考勤問(wèn)題,但是其效率不高,不能滿足現(xiàn)今企業(yè)對(duì)管理的高效要求。
隨著科技的發(fā)展,WiFi室內(nèi)定位技術(shù)因其容易安裝、總精度高,且易于整合的優(yōu)點(diǎn)逐漸走進(jìn)人們視野。普通路由器基于WiFi實(shí)現(xiàn)室內(nèi)考勤的方式[7]在企業(yè)管理中也是存在的,但是其考勤數(shù)據(jù)的真實(shí)性和有效性難以保證。通常標(biāo)識(shí)路由器有兩種方式,一種基于IP地址,另一種基于MAC地址。路由器一般通過(guò)撥號(hào)等方式進(jìn)行上網(wǎng),每次重啟時(shí)公網(wǎng)IP可能發(fā)生變化,所以IP地址不能作其唯一標(biāo)識(shí);對(duì)于MAC地址來(lái)說(shuō),也會(huì)被非法改變或復(fù)制,難以實(shí)現(xiàn)唯一標(biāo)識(shí)的作用。因此,這就使基于普通路由器的室內(nèi)考勤方式流于形式。與此同時(shí),開源路由器[8]設(shè)備也隨著開源路由器軟件的風(fēng)靡而日趨流行,它解決了傳統(tǒng)路由器設(shè)備價(jià)格昂貴、靈活性差等問(wèn)題,滿足用戶根據(jù)自己的需要進(jìn)行定制開發(fā)的需求,這為實(shí)現(xiàn)企業(yè)管理的真實(shí)高效提供了新的解決思路。
綜上所述,針對(duì)現(xiàn)今企業(yè)管理便捷、真實(shí)、高效的要求,根據(jù)河南省某運(yùn)營(yíng)商的委托,結(jié)合智能移動(dòng)手機(jī)終端、Android平臺(tái)和開源路由器,本文提出了基于OpenWrt開源路由器的企業(yè)管理系統(tǒng)解決方案。本方案利用OpenWrt開源路由器系統(tǒng)高靈活性的優(yōu)點(diǎn)設(shè)計(jì)實(shí)現(xiàn)定制認(rèn)證路由器;開發(fā)基于Android平臺(tái)的智能手機(jī)應(yīng)用系統(tǒng)實(shí)現(xiàn)企業(yè)管理;兩者結(jié)合有效解決了手機(jī)無(wú)法準(zhǔn)確完成室內(nèi)考勤的問(wèn)題,實(shí)現(xiàn)企業(yè)的便捷、真實(shí)、高效的管理;可以增強(qiáng)企業(yè)管理的信息化,為企業(yè)管理的信息化建設(shè)提供支持;可以使工作流程更順暢、企業(yè)健康向上發(fā)展。
圖1為本系統(tǒng)的網(wǎng)絡(luò)拓?fù)鋱D。根據(jù)系統(tǒng)的需求,企業(yè)日常工作分為室內(nèi)和室外兩種工作場(chǎng)景,所以本系統(tǒng)設(shè)計(jì)分為室內(nèi)定點(diǎn)考勤和室外移動(dòng)考勤兩種模式。在室內(nèi)定點(diǎn)考勤時(shí),由于GPS和基站室內(nèi)定位困難,不能滿足公司室內(nèi)定點(diǎn)打卡的需求,本系統(tǒng)設(shè)計(jì)了認(rèn)證路由器。OpenWrt認(rèn)證路由器安裝在辦公室內(nèi),手機(jī)客戶端通過(guò)連接OpenWrt路由器的WiFi信號(hào)實(shí)現(xiàn)信息通信;OpenWrt路由器對(duì)手機(jī)客戶端發(fā)送的考勤信息進(jìn)行解析認(rèn)證,并將認(rèn)證后的考勤信息發(fā)送到服務(wù)器端考勤打卡,以此確定用戶考勤操作在公司規(guī)定范圍內(nèi)實(shí)現(xiàn),保證室內(nèi)考勤的真實(shí)有效性。在室外移動(dòng)考勤模式中,員工使用Android客戶端利用3G/4G和WiFi連接網(wǎng)絡(luò)實(shí)現(xiàn)數(shù)據(jù)通信,通過(guò)GPS和基站來(lái)實(shí)現(xiàn)定位功能,基于百度API顯示員工當(dāng)前位置地址,通過(guò)HTTP協(xié)議實(shí)現(xiàn)客戶端和服務(wù)器端的信息通信。
圖1 系統(tǒng)網(wǎng)絡(luò)拓?fù)鋱D
系統(tǒng)總體架構(gòu)設(shè)計(jì)圖如圖2所示,本系統(tǒng)的整體架構(gòu)分為服務(wù)器、OpenWrt認(rèn)證路由器和Android客戶端三部分。認(rèn)證路由器是基于開源嵌入式系統(tǒng)OpenWrt實(shí)現(xiàn)的,經(jīng)過(guò)裁剪使其更適用于本系統(tǒng)所選擇的JS7628嵌入式開發(fā)板。在此基礎(chǔ)上設(shè)計(jì)實(shí)現(xiàn)了自定義協(xié)議和RSSI閾值比對(duì)模塊,實(shí)現(xiàn)與Android客戶端的快速認(rèn)證,并確保室內(nèi)打卡在認(rèn)證路由器規(guī)定距離的范圍內(nèi),以避免非法打卡等現(xiàn)象的發(fā)生,滿足本系統(tǒng)室內(nèi)定點(diǎn)考勤的需求。Android客戶端基于Android平臺(tái)采用C/S模式開發(fā),通過(guò)GPS和基站實(shí)現(xiàn)室外考勤,并將室內(nèi)與室外考勤融合在一起,實(shí)現(xiàn)考勤、請(qǐng)假、內(nèi)部信息等管理功能,滿足系統(tǒng)整體需求。服務(wù)器端實(shí)現(xiàn)數(shù)據(jù)的后臺(tái)操作,包括數(shù)據(jù)的匯總、反饋和保存。
圖2 系統(tǒng)總體架構(gòu)設(shè)計(jì)圖
1.2.1 Android手機(jī)客戶端
基于企業(yè)管理系統(tǒng)操作簡(jiǎn)單、管理方便的目的,針對(duì)室內(nèi)室外兩種工作模式下傳統(tǒng)考勤方式便捷性不足的弊端,本系統(tǒng)設(shè)計(jì)了Android客戶端。出于與開源路由器結(jié)合實(shí)現(xiàn)企業(yè)的便捷管理的目的,本方案的 Android客戶端設(shè)計(jì)了數(shù)據(jù)采集、數(shù)據(jù)展示以及交互模塊。
通過(guò)Android客戶端獲取用戶考勤的基本信息完成數(shù)據(jù)采集,包括當(dāng)前時(shí)間、地點(diǎn)等實(shí)時(shí)信息和用戶姓名、部門等用戶基本信息。數(shù)據(jù)展示是整個(gè)系統(tǒng)的展示窗口,實(shí)現(xiàn)與用戶的交互,提高用戶體驗(yàn)的滿意度,用戶通過(guò)Android客戶端可以實(shí)現(xiàn)查看各種信息的目的,包括打卡考勤及統(tǒng)計(jì)信息、請(qǐng)假及統(tǒng)計(jì)信息和公司內(nèi)部信息等。企業(yè)考勤管理客戶端為了實(shí)現(xiàn)與認(rèn)證路由器和服務(wù)器的數(shù)據(jù)交互,設(shè)計(jì)了交互模塊。基于TCP協(xié)議的Socket通信實(shí)現(xiàn)與OpenWrt認(rèn)證路由器間的數(shù)據(jù)交互,為了實(shí)現(xiàn)能夠通過(guò)認(rèn)證路由器的解析認(rèn)證,設(shè)計(jì)自定義協(xié)議對(duì)采集到的室內(nèi)考勤信息進(jìn)行處理,實(shí)現(xiàn)室內(nèi)考勤。通過(guò)HTTP協(xié)議實(shí)現(xiàn)與服務(wù)器端的數(shù)據(jù)交互,實(shí)現(xiàn)室外移動(dòng)考勤和其他企業(yè)管理功能。
1.2.2 OpenWrt認(rèn)證路由器
針對(duì)傳統(tǒng)室內(nèi)考勤便捷性不足和真實(shí)性較低的問(wèn)題,本系統(tǒng)設(shè)計(jì)了基于OpenWrt開源嵌入式系統(tǒng)的認(rèn)證路由器,實(shí)現(xiàn)對(duì)室內(nèi)考勤數(shù)據(jù)的認(rèn)證,確保室內(nèi)考勤的真實(shí)性;另外,實(shí)現(xiàn)與Android客戶端結(jié)合以提高系統(tǒng)的便捷性。為了實(shí)現(xiàn)與Android客戶端以及服務(wù)器端的數(shù)據(jù)交互設(shè)計(jì)了數(shù)據(jù)收發(fā)模塊,接收Android客戶端發(fā)來(lái)的考勤數(shù)據(jù),并將認(rèn)證處理過(guò)的數(shù)據(jù)發(fā)送到服務(wù)器端。為了確保室內(nèi)考勤的有效性、避免非法打卡等情況的發(fā)生,本系統(tǒng)在認(rèn)證路由器上設(shè)計(jì)實(shí)現(xiàn)了認(rèn)證處理模塊,認(rèn)證處理模塊是路由器的關(guān)鍵模塊。
為了防止認(rèn)證路由器中的認(rèn)證程序意外終止、保證進(jìn)程的不間斷運(yùn)行,本系統(tǒng)設(shè)計(jì)了進(jìn)程管理??紤]到系統(tǒng)實(shí)現(xiàn)過(guò)程中的可配置性,本系統(tǒng)通過(guò)配置文件來(lái)配置參數(shù),當(dāng)進(jìn)行系統(tǒng)維護(hù)時(shí),維護(hù)人員可直接在配置文件中對(duì)相關(guān)參數(shù)進(jìn)行配置,避免在源碼中的修改,提高了系統(tǒng)的可管理性。
1.2.3 服務(wù)器
服務(wù)器主要實(shí)現(xiàn)數(shù)據(jù)的匯總、反饋及保存,對(duì)收到的路由器或者手機(jī)客戶端發(fā)送的數(shù)據(jù)給予反饋,標(biāo)記打卡等操作是否成功,并且將數(shù)據(jù)保存匯總以便響應(yīng)手機(jī)客戶端發(fā)來(lái)的數(shù)據(jù)請(qǐng)求并生成考勤匯總表等。
針對(duì)傳統(tǒng)室內(nèi)考勤真實(shí)性較低的問(wèn)題,本系統(tǒng)設(shè)計(jì)了OpenWrt認(rèn)證路由器實(shí)現(xiàn)對(duì)用戶室內(nèi)考勤時(shí)的認(rèn)證,以此確保企業(yè)管理系統(tǒng)室內(nèi)考勤的真實(shí)有效性。同時(shí),認(rèn)證路由器與Android客戶端結(jié)合實(shí)現(xiàn)室內(nèi)室外考勤集中管理,以提高系統(tǒng)的便捷性。為了彌補(bǔ)普通路由器標(biāo)識(shí)符不可靠的問(wèn)題,本系統(tǒng)利用開源路由器可定制的特性設(shè)計(jì)了自定義協(xié)議及RSSI閾值對(duì)比認(rèn)證模塊,通過(guò)對(duì)手機(jī)客戶端接收到的考勤信息進(jìn)行認(rèn)證處理,然后向服務(wù)器端發(fā)送打卡請(qǐng)求實(shí)現(xiàn)室內(nèi)定點(diǎn)考勤,提高室內(nèi)考勤的真實(shí)有效性。
OpenWrt認(rèn)證路由器的總體模塊設(shè)計(jì)分為硬件平臺(tái)、操作系統(tǒng)和應(yīng)用程序三部分,主要包含內(nèi)容如圖3所示。
圖3 OpenWrt認(rèn)證路由器總體模塊設(shè)計(jì)圖
在運(yùn)行過(guò)程中,啟動(dòng)OpenWrt系統(tǒng)的Linux內(nèi)核需要啟動(dòng)文件Bootloader,本系統(tǒng)選擇Uboot程序來(lái)實(shí)現(xiàn)。根據(jù)系統(tǒng)需求,為了提高系統(tǒng)室內(nèi)考勤的真實(shí)性,本系統(tǒng)基于嵌入式硬件平臺(tái)和OpenWrt操作系統(tǒng)設(shè)計(jì)了應(yīng)用程序,實(shí)現(xiàn)數(shù)據(jù)接收、數(shù)據(jù)處理和數(shù)據(jù)傳送功能,對(duì)考勤信息進(jìn)行認(rèn)證處理,確保室內(nèi)考勤信息的真實(shí)有效。本系統(tǒng)通過(guò)TCP協(xié)議的Socket通信從Android客戶端接收打卡信息實(shí)現(xiàn)數(shù)據(jù)接收;數(shù)據(jù)處理模塊將接收到的數(shù)據(jù)通過(guò)自定義協(xié)議和RSSI閾值對(duì)比模塊進(jìn)行處理認(rèn)證;數(shù)據(jù)發(fā)送模塊通過(guò)HTTP傳輸協(xié)議與服務(wù)器端傳輸數(shù)據(jù),基于Libcurl庫(kù)實(shí)現(xiàn)數(shù)據(jù)傳送。另外為了支撐各數(shù)據(jù)操作模塊,系統(tǒng)還設(shè)計(jì)了進(jìn)程管理、配置文件等模塊。
2.2.1 系統(tǒng)硬件平臺(tái)
經(jīng)過(guò)對(duì)比分析,本設(shè)計(jì)選用JS7628開發(fā)板為本系統(tǒng)的硬件平臺(tái),它的主芯片是MTK(聯(lián)發(fā)科)的MT7628AN SoC芯片,其核心板是基于該芯片的WiFi模塊,具有580 MHz的CPU頻率,300 MHz的WiFi。JS7628開發(fā)板可長(zhǎng)期穩(wěn)定運(yùn)行OpenWrt系統(tǒng),滿足本文OpenWrt對(duì)認(rèn)證路由器的設(shè)計(jì)要求。
圖4為 JS7628開發(fā)板實(shí)物圖。為了滿足本系統(tǒng)的設(shè)計(jì)需求,在設(shè)計(jì)過(guò)程中將開發(fā)板的3個(gè)以太網(wǎng)接口分別設(shè)置成一個(gè)WAN口和兩個(gè)LAN口。WAN口與外網(wǎng)相連并且實(shí)現(xiàn)本系統(tǒng)考勤等數(shù)據(jù)的發(fā)送;兩個(gè)LAN口設(shè)置局域網(wǎng)實(shí)現(xiàn)認(rèn)證路由器端打卡數(shù)據(jù)的接收。擁有雙天線,可以保證本系統(tǒng)打卡數(shù)據(jù)接收和發(fā)送的高速進(jìn)行。DC 5 V/2 A的電源接口為開源路由器提供運(yùn)行基礎(chǔ),電源指示燈為是否正常供電提供指示作用。下排的5個(gè)LED指示燈,分別指示系統(tǒng)是否正常運(yùn)行、WiFi是否正常通信以及3個(gè)以太網(wǎng)口是否處于正常工作狀態(tài)。另外,開發(fā)板通過(guò)復(fù)位按鈕來(lái)實(shí)現(xiàn)故障恢復(fù)。
圖4 JS7628開發(fā)板外觀圖
2.2.2 OpenWrt開發(fā)流程
OpenWrt系統(tǒng)開發(fā)的流程如圖5所示。與其他在WRT54G/GS的源碼基礎(chǔ)上修改得來(lái)的開源路由系統(tǒng)不同,OpenWrt系統(tǒng)是基于Linux源碼日漸完善的。開發(fā)者利用OpenWrt的高度模塊化特性可以方便快捷地將各種功能移植到該系統(tǒng)下,豐富用戶體驗(yàn)。
圖5 OpenWrt系統(tǒng)開發(fā)的流程
本文設(shè)計(jì)的OpenWrt認(rèn)證路由器主要有數(shù)據(jù)接收、數(shù)據(jù)處理、數(shù)據(jù)發(fā)送、進(jìn)程管理和配置文件等模塊。
2.3.1 數(shù)據(jù)接收
認(rèn)證路由器的數(shù)據(jù)接收模塊主要是從手機(jī)客戶端接收到考勤信息送去認(rèn)證處理模塊的過(guò)程,即與手機(jī)客戶端的交互模塊?;跀?shù)據(jù)傳送的安全性和連接的可靠性考慮,本系統(tǒng)通過(guò)TCP協(xié)議的Socket通信實(shí)現(xiàn)手機(jī)客戶端與OpenWrt認(rèn)證路由器的數(shù)據(jù)傳輸,確??煽窟B接。
2.3.2 數(shù)據(jù)處理
為了實(shí)現(xiàn)認(rèn)證路由器對(duì)用戶的快速認(rèn)證,避免二次以及多次交互認(rèn)證,本系統(tǒng)設(shè)計(jì)了一個(gè)自定義的數(shù)據(jù)封裝協(xié)議,并且為了確保用戶在公司規(guī)定范圍內(nèi)打卡,本系統(tǒng)設(shè)計(jì)了RSSI的閾值比對(duì)認(rèn)證。
2.3.2.1自定義協(xié)議
為了提高室內(nèi)考勤的真實(shí)有效性,本系統(tǒng)設(shè)計(jì)了自定義協(xié)議對(duì)手機(jī)客戶端傳送的考勤信息進(jìn)行認(rèn)證處理,以此來(lái)確保此次考勤打卡的信息有效且是在公司定點(diǎn)打卡。本文的自定義協(xié)議分段設(shè)計(jì)了數(shù)據(jù)內(nèi)容;并且對(duì)界定字符進(jìn)行區(qū)分,分為起始符SOF和結(jié)束符EOF,使界定更加明確,區(qū)分有用數(shù)據(jù)和垃圾數(shù)據(jù),提高傳輸?shù)挠行?。圖6將室內(nèi)考勤信息分成了兩部分,即標(biāo)識(shí)符部分和數(shù)據(jù)部分。
圖6 自定義協(xié)議數(shù)據(jù)內(nèi)容設(shè)計(jì)圖
為了方便公司間設(shè)置不同的標(biāo)識(shí)符,設(shè)計(jì)了UNIQUE字段,實(shí)現(xiàn)標(biāo)識(shí)符的唯一性,以示不同企業(yè)間的區(qū)別。數(shù)據(jù)部分的設(shè)計(jì)則和具體的傳輸內(nèi)容有關(guān),包括公司ID、員工ID等信息以及其他考勤信息,對(duì)數(shù)據(jù)進(jìn)行自定義的認(rèn)證處理,以此防止非法打卡等情況出現(xiàn);另外,數(shù)據(jù)部分還設(shè)計(jì)了CRC校驗(yàn)字段,用于差錯(cuò)檢測(cè),加強(qiáng)傳輸過(guò)程中數(shù)據(jù)的糾錯(cuò)檢測(cè),提高數(shù)據(jù)傳輸?shù)恼_率。
圖7為本文自定義協(xié)議的數(shù)據(jù)封裝圖。
圖7 本文自定義協(xié)議數(shù)據(jù)封裝圖
其數(shù)據(jù)轉(zhuǎn)義規(guī)則如下:
為了避免數(shù)據(jù)中與起始符SOF相同的數(shù)據(jù)字符被當(dāng)成起始符,減少數(shù)據(jù)處理過(guò)程中的錯(cuò)誤率,本協(xié)議通過(guò)將相同字符SOF轉(zhuǎn)義為連續(xù)的兩個(gè)字符ALT和S1,實(shí)現(xiàn)字符轉(zhuǎn)義。與之對(duì)應(yīng)的是,當(dāng)數(shù)據(jù)接收端接收到連續(xù)的兩個(gè)字符ALT和S1時(shí),將其轉(zhuǎn)回與起始符SOF相同的數(shù)據(jù)字符。同理EOF和ALT。
2.3.2.2RSSI閾值對(duì)比
針對(duì)傳統(tǒng)室內(nèi)考勤存在的真實(shí)有效性差等問(wèn)題,進(jìn)一步確保用戶進(jìn)行室內(nèi)考勤時(shí)的地點(diǎn)范圍,本系統(tǒng)設(shè)計(jì)了RSSI的閾值比對(duì)認(rèn)證,圈定用戶考勤打卡時(shí)與OpenWrt認(rèn)證路由器間的距離范圍。RSSI(Received Signal Strength Indication)為接收信號(hào)強(qiáng)度。RSSI定位是通過(guò)接收到的信號(hào)強(qiáng)弱來(lái)測(cè)定接收點(diǎn)與信號(hào)源的距離。本文設(shè)計(jì)的RSSI閾值比對(duì)認(rèn)證模塊選擇了基于RSSI距離損耗測(cè)距方法。
無(wú)線信號(hào)的發(fā)射功率和接收功率的關(guān)系用式(1)表示,PR是無(wú)線信號(hào)的接收功率,PT是無(wú)線信號(hào)的發(fā)射功率,r是收發(fā)單元之間的距離,n為傳播因子,數(shù)值大小取決于無(wú)線信號(hào)傳播的環(huán)境。
(1)
在式兩邊取對(duì)數(shù)可得到:
10nlgr=10lgPT/PR
(2)
節(jié)點(diǎn)的發(fā)射功率是已知的,將發(fā)送功率代入上式得:
10lgPR=A-10×nlgr
(3)
式(3)的左半部分10lgPR是接收信號(hào)功率轉(zhuǎn)換為dBm的表達(dá)式,可以直接寫成下式:
PR(dBm)=A-10×nlgr
(4)
這里的PR(dBm)就是指在距離為r的時(shí)候應(yīng)該獲取的RSSI值,A可以看作信號(hào)傳輸1 m遠(yuǎn)時(shí)接收信號(hào)的功率。
根據(jù)式(4),計(jì)算出當(dāng)距離OpenWrt路由器d時(shí)的RSSI值,將其設(shè)為閾值,然后將獲取的手機(jī)RSSI值與閾值進(jìn)行比對(duì),若大于該閾值,則說(shuō)明用戶打卡時(shí)距離認(rèn)證路由器的距離小于設(shè)定距離d,由此判定打卡信息有效。另外,將參數(shù)A和n以及認(rèn)證距離d放進(jìn)配置文件,方便改動(dòng)。
本系統(tǒng)設(shè)計(jì)的RSSI閾值對(duì)比的實(shí)現(xiàn)流程如圖8所示。當(dāng)手機(jī)與認(rèn)證路由器進(jìn)行連接時(shí),認(rèn)證路由器可以獲取到手機(jī)端的RSSI值。程序從配置文件中獲取企業(yè)事先設(shè)定好的考勤距離d,將d值帶入公式計(jì)算出RSSI閾值Py。將獲取的用戶RSSI值與程序計(jì)算出的閾值Py進(jìn)行比較,若RSSI值大,則判定本次考勤打卡有效。
圖8 RSSI閾值對(duì)比流程圖
2.3.3 數(shù)據(jù)發(fā)送
本系統(tǒng)將接收到的數(shù)據(jù)進(jìn)行處理后,需要將數(shù)據(jù)發(fā)送到服務(wù)器端進(jìn)行匯總和存儲(chǔ)。OpenWrt認(rèn)證路由器與服務(wù)器端的數(shù)據(jù)傳送利用HTTP協(xié)議的Post方式實(shí)現(xiàn),認(rèn)證路由器對(duì)服務(wù)器發(fā)出室內(nèi)考勤打卡請(qǐng)求,服務(wù)器收到請(qǐng)求后做出響應(yīng)。在數(shù)據(jù)發(fā)送模塊中,本系統(tǒng)基于Libcurl庫(kù)實(shí)現(xiàn)認(rèn)證路由器與服務(wù)器端基于HTTP協(xié)議Post方式的數(shù)據(jù)發(fā)送。
2.3.4 進(jìn)程管理和配置文件
為了防止認(rèn)證路由器中的認(rèn)證程序在運(yùn)行過(guò)程中意外終止,本系統(tǒng)為OpenWrt認(rèn)證路由器設(shè)置進(jìn)程管理功能的守護(hù)進(jìn)程,以保證進(jìn)程的不間斷運(yùn)行,如數(shù)據(jù)處理(包括自定義協(xié)議的認(rèn)證和RSSI閾值對(duì)比模塊)、數(shù)據(jù)接收和數(shù)據(jù)傳送等。
將配置文件同主程序放在同一文件夾下,當(dāng)系統(tǒng)初始化的時(shí)候自動(dòng)讀取配置文件,加載出相應(yīng)參數(shù)。配置文件的內(nèi)容是以鍵值對(duì)的方式存儲(chǔ)的,當(dāng)讀取參數(shù)的鍵時(shí),就可以得到該參數(shù)的具體值。RSSI部分的可配置參數(shù)有d、A、n等,其中d是手機(jī)端打卡時(shí)與OpenWrt認(rèn)證路由器之間的距離閾值,不同公司會(huì)對(duì)距離d有不同需求,參數(shù)A、n也一樣,與環(huán)境有關(guān),不同的公司環(huán)境不同,需對(duì)其進(jìn)行不同配置。將它們放進(jìn)配置文件中,當(dāng)有不同需求時(shí),只需要在配置文件中修改然后初始化系統(tǒng)即可,無(wú)需修改源碼。
本系統(tǒng)手機(jī)客戶端利用百度API定位員工的上班打卡位置,定位的實(shí)現(xiàn)過(guò)程如下:
① 確認(rèn)百度定位需要的權(quán)限并在AndroidMainifest.XML文件中設(shè)置:
② 設(shè)置百度密匙,代碼如下:
android:name="com.baidu.lbsapi.API_KEY"
android:value="@string/baidu_key"
③ 設(shè)置定位參數(shù);
private void initLocation(){
LocationClientOption option = new LocationClientOption();
option.setLocationMode(tempMode); //設(shè)置定位模式
option.setOpenGps(true); //打開GPS
option.setCoorType(tempcoor); //返回的定位結(jié)果是百度
//經(jīng)緯度,默認(rèn)值gcj02
option.setScanSpan(span_time_); //設(shè)置發(fā)起定位請(qǐng)求的間
//隔時(shí)間為5000ms
option.setIsNeedAddress(is_need_address);
//獲取反地理編碼
mLocationClient.setLocOption(option);
}
④ 在員工打卡時(shí)獲取員工定位信息,代碼實(shí)現(xiàn)如下:
protected void getBaiduLocationResult() {
locationInfo_ = LocationUtil.getLocationInfo(baiDuLocationListener,
context, lm);//獲取員工位置信息
if (locationInfo_ != null) {
longitude_ = locationInfo_.getLongitude();
latitude_ = locationInfo_.getLatitude();
tv_addr.setText(addr);
mBaiduMap = mMapView.getMap();//調(diào)用百度地圖
mCurrentMarker = BitmapDescriptorFactory
.fromResource(R.drawable.map_dingwei);
//將手機(jī)的經(jīng)緯度生成坐標(biāo)
LatLng cenpt = new LatLng(Double.valueOf(latitude_),
Double.valueOf(longitude_));
//構(gòu)造地圖狀態(tài)
MapStatus mMapStatus = new MapStatus.Builder()
.target(cenpt).zoom(16).build();
//構(gòu)造描述地圖變化的對(duì)象
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory
.newMapStatus(mMapStatus);
mBaiduMap.setMapStatus(mMapStatusUpdate);
//定位員工位置
}
圖9展示了本系統(tǒng)設(shè)計(jì)的室內(nèi)考勤時(shí)Android客戶端與認(rèn)證路由器的交互過(guò)程。
圖9 室內(nèi)考勤Android客戶端與開源路由器交互
① Android客戶端與認(rèn)證路由器通過(guò)三次握手后建立連接;
② Android客戶端將考勤信息包括員工基本信息等按照本系統(tǒng)設(shè)計(jì)的自定義協(xié)議進(jìn)行封裝,使其可以通過(guò)認(rèn)證路由器的認(rèn)證處理;
③ 數(shù)據(jù)封裝完成后傳輸?shù)秸J(rèn)證路由器,認(rèn)證路由器接收到考勤數(shù)據(jù)進(jìn)行認(rèn)證處理,處理過(guò)程上文已詳細(xì)說(shuō)明;
④ 認(rèn)證路由器認(rèn)證完成后將數(shù)據(jù)上傳到服務(wù)器端,并得到反饋信息傳給Android客戶端;
⑤ Android客戶端得到反饋信息,本次室內(nèi)考勤完成。
本文基于實(shí)際項(xiàng)目對(duì)企業(yè)管理的便捷、真實(shí)和高效的需求,設(shè)計(jì)實(shí)現(xiàn)基于OpenWrt開源路由器的企業(yè)考勤管理系統(tǒng)。首先,針對(duì)傳統(tǒng)考勤方案中不能兼顧室內(nèi)室外兩種情況的弊端,提出了手機(jī)客戶端和OpenWrt開源路由器(WiFi)相結(jié)合的考勤方案;然后,基于開源嵌入式系統(tǒng)OpenWrt設(shè)計(jì)本系統(tǒng)認(rèn)證路由器并實(shí)現(xiàn)了自定義協(xié)議和RSSI閾值比對(duì)等認(rèn)證處理模塊,保證了企業(yè)管理系統(tǒng)室內(nèi)考勤信息的真實(shí)性;最后,基于Android設(shè)計(jì)開發(fā)了本系統(tǒng)的手機(jī)客戶端,兼顧了企業(yè)管理的高效便捷性。基于OpenWrt開源路由器的企業(yè)管理系統(tǒng)基本滿足用戶需求,但是系統(tǒng)有待進(jìn)一步完善:
① 增加手機(jī)客戶端人臉識(shí)別功能,在手機(jī)客戶端采集人臉信息,提取特征值后上傳到服務(wù)器端識(shí)別驗(yàn)證,從而進(jìn)一步保證考勤信息的真實(shí)性;