本發(fā)明涉及通信領(lǐng)域,尤其涉及一種數(shù)據(jù)同步的方法、服務(wù)器以及數(shù)據(jù)同步系統(tǒng)。
背景技術(shù):
考勤管理系統(tǒng)是一套管理公司員工的上下班考勤記錄等相關(guān)情況的管理系統(tǒng)。是考勤軟件與考勤硬件結(jié)合的產(chǎn)品,一般為人力資源部門(human resource software,HR)部門使用,掌握并管理企業(yè)的員工出勤動(dòng)態(tài),是企業(yè)管理中最基本的管理。
現(xiàn)今,一般公司每個(gè)月到發(fā)工資前都會(huì)進(jìn)行考勤統(tǒng)計(jì)。傳統(tǒng)的考勤機(jī)數(shù)據(jù)導(dǎo)出/導(dǎo)入的方法有:1.通過U盤導(dǎo)出或?qū)耄?.考勤機(jī)通過網(wǎng)絡(luò)或串口等連上電腦,通過電腦上的軟件導(dǎo)出或?qū)耄?.公司架設(shè)一個(gè)服務(wù)器,當(dāng)設(shè)備上有數(shù)據(jù)更新時(shí),主動(dòng)上傳到服務(wù)器;當(dāng)有需要時(shí)再人為地導(dǎo)入另外的機(jī)子。
傳統(tǒng)的考勤機(jī)數(shù)據(jù)的導(dǎo)出或?qū)氲姆椒ù嬖谝韵聠栴}:1.需要人為干預(yù),效率低;2.設(shè)備間的數(shù)據(jù)共享,實(shí)時(shí)性差;3.擴(kuò)展難,適合小規(guī)模設(shè)備間的數(shù)據(jù)共享。4.如果服務(wù)器與考勤機(jī)處于不同局域網(wǎng)。則需要為服務(wù)器申請(qǐng)公網(wǎng)訪問的地址,或者使用第三方服務(wù)器平臺(tái),會(huì)增加開銷。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種數(shù)據(jù)同步的方法、服務(wù)器以及數(shù)據(jù)同步系統(tǒng),用于當(dāng)?shù)谝豢记跈C(jī)的數(shù)據(jù)發(fā)生更新時(shí),更新的數(shù)據(jù)可同步到第二考勤機(jī)。
本發(fā)明實(shí)施例第一方面提供一種同步的方法,其特征在于,該方法應(yīng)用于數(shù)據(jù)同步系統(tǒng),該數(shù)據(jù)同步系統(tǒng)包括服務(wù)器、第一考勤機(jī)和第二考勤機(jī),該方法可以包括:當(dāng)該第一考勤機(jī)的數(shù)據(jù)發(fā)生更新時(shí),該服務(wù)器接收該第一考勤機(jī)發(fā)送的更新數(shù)據(jù);該服務(wù)器將該更新數(shù)據(jù)更新到云端數(shù)據(jù)庫(kù)中;該服務(wù)器根據(jù)該更新數(shù)據(jù)確定待同步的數(shù)據(jù),以使得在線的第二考勤機(jī)從該服務(wù)器獲取該待同步的數(shù)據(jù),實(shí)現(xiàn)該第二考勤機(jī)與該第一考勤機(jī)的數(shù)據(jù)同步。
在本發(fā)明實(shí)施例中,用于當(dāng)?shù)谝豢记跈C(jī)的數(shù)據(jù)發(fā)生更新時(shí),更新的數(shù)據(jù)可同步到第二考勤機(jī),實(shí)現(xiàn)考勤數(shù)據(jù)的更新與同步。
可選的,在本發(fā)明的一些實(shí)施例中,
該更新數(shù)據(jù)可以包括操作標(biāo)識(shí),該服務(wù)器將該更新數(shù)據(jù)更新到云端數(shù)據(jù)庫(kù)中,包括:該服務(wù)器根據(jù)該操作標(biāo)識(shí)對(duì)該云端數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行增加、修改或刪除操作。
可選的,在本發(fā)明的一些實(shí)施例中,該方法還可以包括:
該服務(wù)器接收該第二考勤機(jī)發(fā)送的第一確認(rèn)信息,該第一確認(rèn)信息用于確認(rèn)該第二考勤機(jī)與該第一考勤機(jī)數(shù)據(jù)同步成功;
該服務(wù)器刪除該待同步的數(shù)據(jù)。
可選的,在本發(fā)明的一些實(shí)施例中,該方法還可以包括:
若該服務(wù)器在預(yù)置閾值時(shí)長(zhǎng)內(nèi),未接收第三考勤機(jī)發(fā)送的確認(rèn)信息,則該服務(wù)器記錄該第三考勤機(jī)未同步的信息,并刪除該待同步的數(shù)據(jù),該第三考勤機(jī)為當(dāng)前未在線的第二考勤機(jī);
當(dāng)該第三考勤機(jī)顯示在線時(shí),該服務(wù)器根據(jù)該第三考勤機(jī)未同步的信息,向該第三考勤機(jī)發(fā)送初始化信息,該初始化信息用于指示該第三考勤機(jī)清空本地?cái)?shù)據(jù),重新同步該云端數(shù)據(jù)庫(kù)的數(shù)據(jù);
該服務(wù)器接收該第三考勤機(jī)發(fā)送的第二確認(rèn)信息,該第二確認(rèn)信息用于確認(rèn)該第三考勤機(jī)與該云端數(shù)據(jù)庫(kù)數(shù)據(jù)同步成功。
本發(fā)明實(shí)施例第二方面提供一種服務(wù)器,該服務(wù)器應(yīng)用于數(shù)據(jù)同步系統(tǒng),該數(shù)據(jù)同步系統(tǒng)包括服務(wù)器、第一考勤機(jī)和第二考勤機(jī),該服務(wù)器可以包括:
接收模塊,用于當(dāng)該第一考勤機(jī)的數(shù)據(jù)發(fā)生更新時(shí),接收該第一考勤機(jī)發(fā)送的更新數(shù)據(jù);
更新模塊,用于將該接收模塊接收的更新數(shù)據(jù)更新到云端數(shù)據(jù)庫(kù)中;
第一確定模塊,用于根據(jù)該更新數(shù)據(jù)確定待同步的數(shù)據(jù),以使得在線的第二考勤機(jī)從該服務(wù)器獲取該待同步的數(shù)據(jù),實(shí)現(xiàn)該第二考勤機(jī)與該第一考勤機(jī)的數(shù)據(jù)同步。
可選的,在本發(fā)明的一些實(shí)施例中,該更新數(shù)據(jù)可以包括操作標(biāo)識(shí),
該更新模塊,具體用于根據(jù)該操作標(biāo)識(shí)對(duì)該云端數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行增加、修改或刪除操作。
可選的,在本發(fā)明的一些實(shí)施例中,該服務(wù)器還可以包括:
該接收模塊,還用于接收該第二考勤機(jī)發(fā)送的第一確認(rèn)信息,該第一確認(rèn)信息用于確認(rèn)該第二考勤機(jī)與該第一考勤機(jī)數(shù)據(jù)同步成功;
刪除模塊,用于刪除該待同步的數(shù)據(jù)。
可選的,在本發(fā)明的一些實(shí)施例中,該服務(wù)器還可以包括:
記錄模塊,用于若該服務(wù)器在預(yù)置閾值時(shí)長(zhǎng)內(nèi),未接收第三考勤機(jī)發(fā)送的確認(rèn)信息,則該記錄模塊記錄該第三考勤機(jī)未同步的信息,并刪除該待同步的數(shù)據(jù),該第三考勤機(jī)為當(dāng)前未在線的第二考勤機(jī);
發(fā)送模塊,用于當(dāng)該第三考勤機(jī)顯示在線時(shí),該發(fā)送模塊根據(jù)該第三考勤機(jī)未同步的信息,向該第三考勤機(jī)發(fā)送初始化信息,該初始化信息用于指示該第三考勤機(jī)清空本地?cái)?shù)據(jù),重新同步該云端數(shù)據(jù)庫(kù)的數(shù)據(jù);
該接收模塊,還用于接收該第三考勤機(jī)發(fā)送的第二確認(rèn)信息,該第二確認(rèn)信息用于確認(rèn)該第三考勤機(jī)與該云端數(shù)據(jù)庫(kù)數(shù)據(jù)同步成功。
本發(fā)明實(shí)施例第三方面提供一種數(shù)據(jù)同步系統(tǒng),該數(shù)據(jù)同步系統(tǒng)可以包括:服務(wù)器、第一考勤機(jī)和第二考勤機(jī);
該第一考勤機(jī)用于當(dāng)數(shù)據(jù)發(fā)生更新時(shí),向該服務(wù)器發(fā)送更新數(shù)據(jù);
該服務(wù)器用于接收該第一考勤機(jī)發(fā)送的更新數(shù)據(jù);將該更新數(shù)據(jù)更新到云端數(shù)據(jù)庫(kù)中;根據(jù)該更新數(shù)據(jù)確定待同步的數(shù)據(jù),以使得在線的第二考勤機(jī)從該服務(wù)器獲取該待同步的數(shù)據(jù),實(shí)現(xiàn)該第二考勤機(jī)與該第一考勤機(jī)的數(shù)據(jù)同步。
可選的,在本發(fā)明的一些實(shí)施例中,該更新數(shù)據(jù)可以包括操作標(biāo)識(shí),
該服務(wù)器具體用于根據(jù)該操作標(biāo)識(shí)對(duì)該云端數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行增加、修改或刪除操作。
可選的,在本發(fā)明的一些實(shí)施例中,
該第二考勤機(jī)用于在線時(shí),從該服務(wù)器中獲取該待同步的數(shù)據(jù);向該服務(wù)器發(fā)送第一確認(rèn)信息,該第一確認(rèn)信息用于確認(rèn)該第二考勤機(jī)與該第一考勤機(jī)數(shù)據(jù)同步成功;
該服務(wù)器用于接收該第二考勤機(jī)發(fā)送的第一確認(rèn)信息,該第一確認(rèn)信息用于確認(rèn)該第二考勤機(jī)與該第一考勤機(jī)數(shù)據(jù)同步成功;刪除該待同步的數(shù)據(jù)。
可選的,在本發(fā)明的一些實(shí)施例中,
該服務(wù)器還用于若該服務(wù)器在預(yù)置閾值時(shí)長(zhǎng)內(nèi),未接收第三考勤機(jī)發(fā)送的確認(rèn)信息,則該服務(wù)器記錄該第三考勤機(jī)未同步的信息,并刪除該待同步的數(shù)據(jù),該第三考勤機(jī)為當(dāng)前未在線的第二考勤機(jī);當(dāng)該第三考勤機(jī)顯示在線時(shí),該服務(wù)器根據(jù)該第三考勤機(jī)未同步的信息,向該第三考勤機(jī)發(fā)送初始化信息,該初始化信息用于指示該第三考勤機(jī)清空本地?cái)?shù)據(jù),重新同步該云端數(shù)據(jù)庫(kù)的數(shù)據(jù);該服務(wù)器接收該第三考勤機(jī)發(fā)送的第二確認(rèn)信息,該第二確認(rèn)信息用于確認(rèn)該第三考勤機(jī)與該云端數(shù)據(jù)庫(kù)數(shù)據(jù)同步成功。
從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):
在本發(fā)明實(shí)施例中,當(dāng)?shù)谝豢记跈C(jī)有數(shù)據(jù)更新時(shí),會(huì)先上傳到服務(wù)器,服務(wù)器先對(duì)應(yīng)的更新云端數(shù)據(jù)庫(kù)的數(shù)據(jù),再確定待同步的數(shù)據(jù),以使得在線的第二考勤機(jī)從服務(wù)器獲取所述待同步的數(shù)據(jù),實(shí)現(xiàn)第二考勤機(jī)與第一考勤機(jī)的數(shù)據(jù)同步。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例技術(shù)方案,下面將對(duì)實(shí)施例和現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
圖1為本發(fā)明實(shí)施例中提供的數(shù)據(jù)同步系統(tǒng)的結(jié)構(gòu)示意圖;
圖2為本發(fā)明實(shí)施例中提供的RabbitMQ通信結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例中提供的Storm工作的流程示意圖;
圖4為本發(fā)明實(shí)施例中提供的Supervisor工作的流程示意圖;
圖5為本發(fā)明實(shí)施例中提供的方法實(shí)施例的一個(gè)示意圖;
圖6為本發(fā)明實(shí)施例中提供的服務(wù)器實(shí)施例的一個(gè)示意圖;
圖7為本發(fā)明實(shí)施例中提供的服務(wù)器實(shí)施例的另一個(gè)示意圖;
圖8為本發(fā)明實(shí)施例中提供的服務(wù)器實(shí)施例的另一個(gè)示意圖;
圖9為本發(fā)明實(shí)施例中提供的服務(wù)器數(shù)據(jù)同步系統(tǒng)的一個(gè)示意圖。
具體實(shí)施方式
本發(fā)明實(shí)施例提供了一種數(shù)據(jù)同步方法、服務(wù)器以及數(shù)據(jù)同步系統(tǒng),用于當(dāng)?shù)谝豢记跈C(jī)的數(shù)據(jù)發(fā)生更新時(shí),更新的的數(shù)據(jù)可同步到第二考勤機(jī)。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
在現(xiàn)有技術(shù)中,每個(gè)公司基本上都使用考勤機(jī)進(jìn)行考勤記錄,一般考勤機(jī)的考勤數(shù)據(jù)的導(dǎo)出/導(dǎo)入是需要人為的通過U盤或者連接到電腦上進(jìn)行,或者,公司架設(shè)一個(gè)服務(wù)器,當(dāng)設(shè)備上有數(shù)據(jù)更新時(shí),主動(dòng)上傳到服務(wù)器,當(dāng)有需要時(shí)再人為地導(dǎo)入另外的考勤機(jī)信息。這樣就造成了在數(shù)據(jù)同步中需要人為干涉,效率低;而且設(shè)備間的數(shù)據(jù)共享時(shí),實(shí)時(shí)性也比較差。
在本發(fā)明技術(shù)方案中,應(yīng)用于數(shù)據(jù)同步系統(tǒng),所述數(shù)據(jù)同步系統(tǒng)包括服務(wù)器、第一考勤機(jī)和第二考勤機(jī),每個(gè)考勤機(jī)與服務(wù)器已建立連接關(guān)系。請(qǐng)參閱圖1所示,是本發(fā)明實(shí)施例的系統(tǒng)架構(gòu)圖。當(dāng)?shù)谝豢记跈C(jī)的考勤數(shù)據(jù)發(fā)生更新時(shí),第一考勤機(jī)將更新數(shù)據(jù)向服務(wù)器發(fā)送,服務(wù)器在云端數(shù)據(jù)庫(kù)也做對(duì)應(yīng)的數(shù)據(jù)更新之后,再確定待同步的數(shù)據(jù),即云端數(shù)據(jù)庫(kù)更新的數(shù)據(jù),第二考勤機(jī)在線時(shí),從所述服務(wù)器中獲取同步數(shù)據(jù)實(shí)現(xiàn)所述第二考勤機(jī)與所述第一考勤機(jī)的數(shù)據(jù)同步。需要說明的是,這里的第一考勤機(jī)不是特指某一個(gè)考勤機(jī),可以是一個(gè),也可以是多個(gè),第二考勤機(jī)也是同樣的,可以是一個(gè),也可以是多個(gè)。其中,在圖1所示虛線的第二考勤機(jī)可視為未在線的考勤機(jī),在本發(fā)明下述的內(nèi)容中將未在線的第二考勤機(jī)以第三考勤機(jī)命名來進(jìn)行說明。
下面對(duì)本發(fā)明技術(shù)方案中所用到的相關(guān)技術(shù)先做一下簡(jiǎn)要的說明。需要說明的是,在本發(fā)明技術(shù)方案中不僅僅局限于以下所提供的相關(guān)技術(shù),其他適合本發(fā)明技術(shù)方案的技術(shù)也同樣適用。
1、消息隊(duì)列(RabbitMQ)
RabbitMQ是一個(gè)基于消息隊(duì)列的通信中間件。使用消息隊(duì)列進(jìn)行通信的機(jī)制是異步的通信方式,通信單位為一個(gè)消息。消息的發(fā)送方和接收方之間不必保持直接的連接(比如TCP/IP連接)。發(fā)送方將消息發(fā)送出去后,消息會(huì)先到達(dá)一個(gè)緩存隊(duì)列。此時(shí)如果發(fā)送方掉線了,接收方依然可以收到消息。這個(gè)隊(duì)列是先進(jìn)先出的,當(dāng)接收方在線時(shí),會(huì)按消息的先后到達(dá)順序從隊(duì)列讀取消息并處理。
RabbitMQ基本的通信結(jié)構(gòu)如圖2所示。每個(gè)接收方在服務(wù)器上都有一個(gè)消息緩存隊(duì)列,每個(gè)隊(duì)列綁定一個(gè)密鑰Key(隊(duì)列間的Key可以相同)。交換機(jī)(Exchange)負(fù)責(zé)從發(fā)送方接收消息并轉(zhuǎn)發(fā)給相應(yīng)的隊(duì)列。
2、Storm分布式流式計(jì)算
Storm有兩種工作模式:本地模式和分布模式。本地模式中,Storm完全運(yùn)行在一臺(tái)計(jì)算機(jī)的進(jìn)程中,用線程模擬各個(gè)工作節(jié)點(diǎn)。在分布模式中,Storm運(yùn)作在一個(gè)計(jì)算機(jī)集群中。
Storm是一種實(shí)時(shí)的分布式流式計(jì)算框架。Storm框架有兩種節(jié)點(diǎn):Nimbus和Worker。請(qǐng)參閱圖3所示,為Storm的流程示意圖。Nimbus是控制節(jié)點(diǎn),在一個(gè)Storm集群中有且僅有一個(gè),負(fù)責(zé)分配任務(wù)及監(jiān)控任務(wù)是否失敗。Worker是工作節(jié)點(diǎn),執(zhí)行具體的業(yè)務(wù)邏輯。每個(gè)Worker都配有一個(gè)Supervisor及若干個(gè)任務(wù)進(jìn)程。Supervisor負(fù)責(zé)接受Nimbus分配的任務(wù),啟動(dòng)和停止屬于自己管理的任務(wù)進(jìn)程。Nimbus和Supervisor之間的協(xié)作通過Apache的開源分布式服務(wù)Zookeeper進(jìn)行協(xié)調(diào)。
Supervisor管理的任務(wù)進(jìn)程運(yùn)行在兩種組件上:Spout和Bolt。請(qǐng)參閱圖4所示,為Supervisor管理的流程示意圖。Spout是數(shù)據(jù)流的源頭,從數(shù)據(jù)源(可以是某個(gè)隊(duì)列或者其它)讀取數(shù)據(jù),打包成一個(gè)個(gè)Tuple(任務(wù)節(jié)點(diǎn)間通信的單位)發(fā)給Bolt。Bolt從Tuple中提取出本節(jié)點(diǎn)邏輯需要的數(shù)據(jù),處理完后,繼續(xù)把數(shù)據(jù)打包到Tuple傳給下一節(jié)點(diǎn)。
下面對(duì)本發(fā)明實(shí)施例中的方法實(shí)施例進(jìn)行說明,如圖5所示,本發(fā)明實(shí)施例中數(shù)據(jù)同步的方法的一個(gè)實(shí)施例,包括:
501、當(dāng)?shù)谝豢记跈C(jī)的數(shù)據(jù)發(fā)生更新時(shí),服務(wù)器接收第一考勤機(jī)發(fā)送的更新數(shù)據(jù);
在本發(fā)明實(shí)施例中,當(dāng)?shù)谝豢记跈C(jī)的數(shù)據(jù)發(fā)生更新時(shí),該服務(wù)器會(huì)接收第一考勤機(jī)發(fā)送的更新數(shù)據(jù)。在數(shù)據(jù)同步系統(tǒng)中,當(dāng)考勤機(jī)上新登記一個(gè)員工的信息或者員工打卡時(shí),或者,在網(wǎng)頁上或者手機(jī)上修改員工資料或者考勤信息時(shí),考勤機(jī)將這些更新數(shù)據(jù)發(fā)送到服務(wù)器中,實(shí)際上是發(fā)送到云服務(wù)器中的RabbitMQ。
需要說明的是,由于考勤機(jī)的性能有限,為了避免更新數(shù)據(jù)過于頻繁的網(wǎng)絡(luò)發(fā)送,在考勤機(jī)上的更新數(shù)據(jù)會(huì)先按既定的語法保存在一個(gè)操作operation_log的表里,考勤機(jī)的管理員有一個(gè)登錄云服務(wù)器的帳號(hào),在考勤機(jī)上用對(duì)應(yīng)賬號(hào)登錄后,考勤機(jī)將與相應(yīng)的公司及所屬區(qū)域(如果有劃分區(qū)別的話)通過設(shè)備序列號(hào)(SN,Serial number)建立聯(lián)系。當(dāng)考勤機(jī)在線時(shí),會(huì)按既定的間隔(比如10秒)掃描一次operation_log表,如果有更新數(shù)據(jù),就讀取出來打包發(fā)送到名為device_to_cloud,類型為Direct的Exchange里。名為device_to_cloud的Exchange綁定了一個(gè)隊(duì)列,更新數(shù)據(jù)都轉(zhuǎn)發(fā)到該隊(duì)列中。Storm中名為RabbitMQ的Spout會(huì)從該隊(duì)列中讀取消息,發(fā)送給業(yè)務(wù)處理拓?fù)渲械腂olt。需要說明的是,交換機(jī)的類型和命名不作限定。
502、服務(wù)器將更新數(shù)據(jù)更新到云端數(shù)據(jù)庫(kù)中;
在本發(fā)明實(shí)施例中,服務(wù)器根據(jù)接收到的更新數(shù)據(jù)更新到云端數(shù)據(jù)庫(kù)中。具體的,更新數(shù)據(jù)可包括操作標(biāo)識(shí),即服務(wù)器根據(jù)操作標(biāo)識(shí)對(duì)云端數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行增加、修改或刪除操作。操作標(biāo)識(shí)指示云端數(shù)據(jù)庫(kù)的更新操作具體是增加、修改或刪除等其他操作,具體不作限定。
應(yīng)理解,這里的操作標(biāo)識(shí)可以是一個(gè)操作指令,指示服務(wù)器對(duì)云端數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行相應(yīng)的操作,也可以是其他形式的說明。這個(gè)操作標(biāo)識(shí)還可以包括具體的考勤機(jī)的互聯(lián)網(wǎng)協(xié)議地址(Internet Protocol,IP),指示具體是哪個(gè)第一考勤機(jī)的數(shù)據(jù)發(fā)生更新。
503、服務(wù)器根據(jù)更新數(shù)據(jù)確定待同步的數(shù)據(jù),以使得在線的第二考勤機(jī)從服務(wù)器獲取待同步的數(shù)據(jù),實(shí)現(xiàn)第二考勤機(jī)與第一考勤機(jī)的數(shù)據(jù)同步;
在本發(fā)明實(shí)施例中,服務(wù)器根據(jù)更新數(shù)據(jù)確定待同步的數(shù)據(jù),以使得在線的第二考勤機(jī)從服務(wù)器獲取待同步的數(shù)據(jù),實(shí)現(xiàn)第二考勤機(jī)與第一考勤機(jī)的數(shù)據(jù)同步。
需要說明的是,云端數(shù)據(jù)庫(kù)更新數(shù)據(jù)時(shí),會(huì)觸發(fā)數(shù)據(jù)庫(kù)操作監(jiān)聽器,查詢出所有相關(guān)考勤機(jī)的SN信息,把云端數(shù)據(jù)庫(kù)的更新數(shù)據(jù)及考勤機(jī)SN封裝為待同步的數(shù)據(jù),發(fā)送到云端數(shù)據(jù)庫(kù)的RabbitMQ中,即與第二考勤機(jī)綁定的名為SN_sync的接收隊(duì)列中,這樣當(dāng)?shù)诙记跈C(jī)在線時(shí)可以及時(shí)同步到數(shù)據(jù)。
504、服務(wù)器接收第二考勤機(jī)發(fā)送的第一確認(rèn)信息,第一確認(rèn)信息用于確認(rèn)第二考勤機(jī)與第一考勤機(jī)數(shù)據(jù)同步成功;
在本發(fā)明實(shí)施例中,當(dāng)?shù)诙记跈C(jī)的數(shù)據(jù)同步成功之后,向服務(wù)器發(fā)送第一確認(rèn)信息,服務(wù)器接收第二考勤機(jī)發(fā)送的第一確認(rèn)信息,第一確認(rèn)信息用于確認(rèn)第二考勤機(jī)與第一考勤機(jī)數(shù)據(jù)同步成功。
505、服務(wù)器刪除待同步的數(shù)據(jù)。
在本發(fā)明實(shí)施例中,服務(wù)器接收第二考勤機(jī)發(fā)送的第一確認(rèn)信息之后,確定第二考勤機(jī)的數(shù)據(jù)與第一考勤機(jī)數(shù)據(jù)同步成功,服務(wù)器刪除待同步的數(shù)據(jù)。
需要說明的是,步驟504、步驟505為可選的步驟。在本發(fā)明實(shí)施例中所用到的工作表的命名,交換機(jī)的命名,隊(duì)列的命名都是舉的實(shí)例而已。在實(shí)際應(yīng)用中,也可以作其他命名。
在本發(fā)明實(shí)施例中,當(dāng)?shù)谝豢记跈C(jī)有數(shù)據(jù)更新時(shí),將更新數(shù)據(jù)向服務(wù)器發(fā)送,服務(wù)器接收更新數(shù)據(jù),同時(shí)更新云端數(shù)據(jù)庫(kù)的數(shù)據(jù),再確定待同步的數(shù)據(jù),以使得在線的第二考勤機(jī)從服務(wù)器獲取待同步的數(shù)據(jù),實(shí)現(xiàn)第二考勤機(jī)與第一考勤機(jī)的數(shù)據(jù)同步。充分利用RabbitMQ和Storm的優(yōu)勢(shì),為生物識(shí)別智能辦公云平臺(tái)提供實(shí)時(shí)的考勤數(shù)據(jù)收集與同步;部署在云服務(wù)器上,方便數(shù)據(jù)的擴(kuò)展;可以支持大規(guī)模的考勤設(shè)備管理,并且企業(yè)接入云平臺(tái)即能使用,方便管理。
可選的,在本發(fā)明的一些實(shí)施例中,
若服務(wù)器在預(yù)置閾值時(shí)長(zhǎng)內(nèi),未接收第三考勤機(jī)發(fā)送的確認(rèn)信息,則服務(wù)器記錄第三考勤機(jī)未同步的信息,并刪除待同步的數(shù)據(jù),第三考勤機(jī)為當(dāng)前未在線的第二考勤機(jī);
當(dāng)?shù)谌记跈C(jī)顯示在線時(shí),服務(wù)器根據(jù)第三考勤機(jī)未同步的信息,向第三考勤機(jī)發(fā)送初始化信息,初始化信息用于指示第三考勤機(jī)清空本地?cái)?shù)據(jù),重新同步云端數(shù)據(jù)庫(kù)的數(shù)據(jù);
服務(wù)器接收第三考勤機(jī)發(fā)送的第二確認(rèn)信息,第二確認(rèn)信息用于確認(rèn)第三考勤機(jī)與云端數(shù)據(jù)庫(kù)數(shù)據(jù)同步成功。
需要說明的是,如果在第二考勤機(jī)中有考勤機(jī)掉線了,考勤機(jī)的接收隊(duì)列設(shè)有超時(shí)時(shí)間,當(dāng)超過一定時(shí)間后,接收隊(duì)列中待同步的數(shù)據(jù)將被清空。這時(shí)如果考勤機(jī)又連上云服務(wù)器,服務(wù)器會(huì)發(fā)送一個(gè)狀態(tài)告知考勤機(jī),未與服務(wù)器保持同步,需要重新初始化,這時(shí)考勤機(jī)將把operation_log表里的數(shù)據(jù)發(fā)送到服務(wù)器,然后清空本機(jī)的數(shù)據(jù)重新同步云端的數(shù)據(jù)。在初始化過程中,沒有涉及數(shù)據(jù)的增刪改操作,因此不會(huì)觸發(fā)數(shù)據(jù)操作監(jiān)聽器,Storm的業(yè)務(wù)拓?fù)涞淖詈笠粋€(gè)Bolt業(yè)務(wù)負(fù)責(zé)將服務(wù)器下發(fā)的數(shù)據(jù)打包成RabbitMQ發(fā)送給設(shè)備綁定的名為SN_config隊(duì)列。如果掉線時(shí)間沒有超過隊(duì)列的超時(shí)時(shí)間,則會(huì)按上文提到的方法進(jìn)行同步。
下面對(duì)本發(fā)明實(shí)施例中的服務(wù)器進(jìn)行說明,如圖6所示,本發(fā)明實(shí)施例中的服務(wù)器,包括:
接收模塊601,用于當(dāng)?shù)谝豢记跈C(jī)的數(shù)據(jù)發(fā)生更新時(shí),接收第一考勤機(jī)發(fā)送的更新數(shù)據(jù);
更新模塊602,用于將接收模塊接收的更新數(shù)據(jù)更新到云端數(shù)據(jù)庫(kù)中;
第一確定模塊603,用于根據(jù)更新數(shù)據(jù)確定待同步的數(shù)據(jù),以使得在線的第二考勤機(jī)從服務(wù)器獲取待同步的數(shù)據(jù),實(shí)現(xiàn)第二考勤機(jī)與第一考勤機(jī)的數(shù)據(jù)同步。
可選的,在本發(fā)明的一些實(shí)施例中,更新數(shù)據(jù)包括操作標(biāo)識(shí),
更新模塊602,具體用于根據(jù)操作標(biāo)識(shí)對(duì)云端數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行增加、修改或刪除操作。
可選的,在本發(fā)明的一些實(shí)施例中,如圖7所示,服務(wù)器還包括:
接收模塊601,還用于接收第二考勤機(jī)發(fā)送的第一確認(rèn)信息,第一確認(rèn)信息用于確認(rèn)第二考勤機(jī)與第一考勤機(jī)數(shù)據(jù)同步成功;
刪除模塊604,用于刪除待同步的數(shù)據(jù)。
可選的,在本發(fā)明的一些實(shí)施例中,如圖8所示,服務(wù)器還包括:
記錄模塊605,用于若服務(wù)器在預(yù)置閾值時(shí)長(zhǎng)內(nèi),未接收第三考勤機(jī)發(fā)送的確認(rèn)信息,則記錄模塊記錄第三考勤機(jī)未同步的信息,并刪除待同步的數(shù)據(jù),第三考勤機(jī)為當(dāng)前未在線的第二考勤機(jī);
發(fā)送模塊606,用于當(dāng)?shù)谌记跈C(jī)顯示在線時(shí),發(fā)送模塊根據(jù)第三考勤機(jī)未同步的信息,向第三考勤機(jī)發(fā)送初始化信息,初始化信息用于指示第三考勤機(jī)清空本地?cái)?shù)據(jù),重新同步云端數(shù)據(jù)庫(kù)的數(shù)據(jù);
接收模塊601,還用于接收第三考勤機(jī)發(fā)送的第二確認(rèn)信息,第二確認(rèn)信息用于確認(rèn)第三考勤機(jī)與云端數(shù)據(jù)庫(kù)數(shù)據(jù)同步成功。
如圖9所示,為本發(fā)明提供的一種數(shù)據(jù)同步系統(tǒng),包括:服務(wù)器901、第一考勤機(jī)902和第二考勤機(jī)903,其中,在圖9所示的架構(gòu)圖中,虛線指示的第二考勤機(jī)就是本發(fā)明所提及的第三考勤機(jī);
第一考勤機(jī)902用于當(dāng)數(shù)據(jù)發(fā)生更新時(shí),向服務(wù)器發(fā)送更新數(shù)據(jù);
服務(wù)器901用于接收第一考勤機(jī)發(fā)送的更新數(shù)據(jù);將更新數(shù)據(jù)更新到云端數(shù)據(jù)庫(kù)中;根據(jù)更新數(shù)據(jù)確定待同步的數(shù)據(jù),以使得在線的第二考勤機(jī)903從服務(wù)器獲取待同步的數(shù)據(jù),實(shí)現(xiàn)第二考勤機(jī)與第一考勤機(jī)的數(shù)據(jù)同步。
可選的,在本發(fā)明的一些實(shí)施例中,更新數(shù)據(jù)包括操作標(biāo)識(shí),
服務(wù)器901具體用于根據(jù)操作標(biāo)識(shí)對(duì)云端數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行增加、修改或刪除操作。
可選的,在本發(fā)明的一些實(shí)施例中,
第二考勤機(jī)903用于在線時(shí),從服務(wù)器中獲取待同步的數(shù)據(jù);向服務(wù)器發(fā)送第一確認(rèn)信息,第一確認(rèn)信息用于確認(rèn)第二考勤機(jī)與第一考勤機(jī)數(shù)據(jù)同步成功;
服務(wù)器901用于接收第二考勤機(jī)發(fā)送的第一確認(rèn)信息,第一確認(rèn)信息用于確認(rèn)第二考勤機(jī)與第一考勤機(jī)數(shù)據(jù)同步成功;刪除待同步的數(shù)據(jù)。
可選的,在本發(fā)明的一些實(shí)施例中,
服務(wù)器901還用于若服務(wù)器在預(yù)置閾值時(shí)長(zhǎng)內(nèi),未接收第三考勤機(jī)發(fā)送的確認(rèn)信息,則服務(wù)器記錄第三考勤機(jī)未同步的信息,并刪除待同步的數(shù)據(jù),第三考勤機(jī)為當(dāng)前未在線的第二考勤機(jī);當(dāng)?shù)谌记跈C(jī)顯示在線時(shí),服務(wù)器根據(jù)第三考勤機(jī)未同步的信息,向第三考勤機(jī)發(fā)送初始化信息,初始化信息用于指示第三考勤機(jī)清空本地?cái)?shù)據(jù),重新同步云端數(shù)據(jù)庫(kù)的數(shù)據(jù);服務(wù)器接收第三考勤機(jī)發(fā)送的第二確認(rèn)信息,第二確認(rèn)信息用于確認(rèn)第三考勤機(jī)與云端數(shù)據(jù)庫(kù)數(shù)據(jù)同步成功。
本發(fā)明實(shí)施例還提供了一種計(jì)算機(jī)存儲(chǔ)介質(zhì),用于儲(chǔ)存為上述圖5、圖6、圖7或圖8所述的服務(wù)器所用的計(jì)算機(jī)軟件指令,其包含用于執(zhí)行上述方法實(shí)施例所設(shè)計(jì)的程序。通過執(zhí)行存儲(chǔ)的程序,可以實(shí)現(xiàn)第一考勤機(jī)與第二考勤機(jī)的數(shù)據(jù)同步。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述,以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。