廣州大學(xué)圖書(shū)館與廣州大學(xué)城一卡通系統(tǒng)應(yīng)用集成的實(shí)現(xiàn)
文章出處:http://m.luckydriving.com 作者: 人氣: 發(fā)表時(shí)間:2011年09月16日
摘要:以廣州大學(xué)圖書(shū)館與廣州大學(xué)城一卡通的系統(tǒng)應(yīng)用集成為例,介紹在不修改圖書(shū)館現(xiàn)有系統(tǒng)的前提下,如何實(shí)現(xiàn)與一卡通系統(tǒng)進(jìn)行集成。簡(jiǎn)單介紹要解決的問(wèn)題,重點(diǎn)對(duì)所采取的解決方案、在實(shí)現(xiàn)過(guò)程中所用到的主要技術(shù)及關(guān)鍵問(wèn)題如何實(shí)現(xiàn)等幾方面進(jìn)行介紹。
隨著信息技術(shù)的發(fā)展,計(jì)算機(jī)技術(shù)在圖書(shū)館中的應(yīng)用從廣度和深度上都有了很大的提高,從深度上來(lái)說(shuō),圖書(shū)館應(yīng)用從以前單純的采、編、流、檢的集成管理系統(tǒng),發(fā)展成為數(shù)字圖書(shū)館、門(mén)禁、機(jī)房管理、網(wǎng)上參考咨詢(xún)、外采管理等多種系統(tǒng);從廣度來(lái)說(shuō),圖書(shū)館的內(nèi)部各系統(tǒng)間有關(guān)聯(lián),并且和館外系統(tǒng)(如財(cái)務(wù)報(bào)賬、一卡通等)也有著密切的關(guān)系。但目前的各種系統(tǒng)都是各自開(kāi)發(fā)、購(gòu)買(mǎi),沒(méi)有統(tǒng)一的接口、標(biāo)準(zhǔn),這就造成了各系統(tǒng)間不能做到互通、互聯(lián),實(shí)現(xiàn)資源共享。如何將這些系統(tǒng)有機(jī)地聯(lián)系起來(lái),充分發(fā)揮它們的功能,是目前圖書(shū)館現(xiàn)代化進(jìn)一步發(fā)展所要解決的重要問(wèn)題之一。本文實(shí)現(xiàn)了廣州大學(xué)圖書(shū)館的ILAS Ⅱ圖書(shū)館集成管理系統(tǒng)、北京圣安機(jī)房管理系統(tǒng)、上海華銘門(mén)禁管理系統(tǒng)與廣州大學(xué)城一卡通系統(tǒng)的應(yīng)用集成。
1 需要解決的問(wèn)題
1.1 身份識(shí)別號(hào)的讀取
廣州大學(xué)圖書(shū)館有兩萬(wàn)多讀者,讀者主要是本校教職員工和學(xué)生。目前教職員工以工作證號(hào)(一卡通卡上是“編號(hào)”)作為在圖書(shū)館的讀者號(hào),學(xué)生以學(xué)號(hào)(一卡通卡上是“編號(hào)”)作為在圖書(shū)館的讀者號(hào)。在進(jìn)行借還、查詢(xún)借還情況及使用電子閱覽室計(jì)算機(jī)等服務(wù)時(shí),系統(tǒng)都要求讀入讀者號(hào),而ILASⅡ及機(jī)房管理等現(xiàn)有系統(tǒng)都不具備直接讀取一卡通卡上信息的功能。所以要實(shí)現(xiàn)廣州大學(xué)圖書(shū)館系統(tǒng)與一卡通集成,要解決的首要問(wèn)題就是從一卡通卡中讀出該讀者的讀者號(hào),即卡上的“編號(hào)”內(nèi)容;同時(shí)還要進(jìn)行該卡的有效性驗(yàn)證。
1.2 數(shù)據(jù)同步更新
廣州大學(xué)圖書(shū)館管理系統(tǒng)的數(shù)據(jù)要根據(jù)一卡通系統(tǒng)及時(shí)進(jìn)行數(shù)據(jù)同步,主要是ILASⅡ、機(jī)房管理及門(mén)禁等系統(tǒng)的讀者數(shù)據(jù)與一卡通系統(tǒng)中的廣州大學(xué)用戶數(shù)據(jù)進(jìn)行同步。當(dāng)學(xué)校師生在一卡通系統(tǒng)中有新辦卡、掛失、停用等數(shù)據(jù)變動(dòng)時(shí),要求在廣州大學(xué)圖書(shū)館對(duì)應(yīng)的系統(tǒng)中進(jìn)行相應(yīng)的數(shù)據(jù)變動(dòng)。例如:新生辦卡后,在ILASⅡ系統(tǒng)中要新增該新生的讀者記錄;卡信息發(fā)生變動(dòng)(如修改編號(hào)、姓名等)后,要在ILASⅡ系統(tǒng)中修改相應(yīng)的讀者記錄對(duì)應(yīng)內(nèi)容;卡掛失后,要在ILASⅡ系統(tǒng)中將相應(yīng)的讀者記錄設(shè)置成掛失狀態(tài);以及掛失后的重新開(kāi)通等。
2 集成解決方案
要解決廣州大學(xué)圖書(shū)館現(xiàn)有系統(tǒng)與一卡通系統(tǒng)的集成,筆者首先想到的方法是修改廣州大學(xué)圖書(shū)館的現(xiàn)有系統(tǒng),使它們可以讀取一卡通數(shù)據(jù),并且可以與一卡通系統(tǒng)進(jìn)行數(shù)據(jù)同步。但由于ILASⅡ、圣安機(jī)房管理等要進(jìn)行集成的系統(tǒng)都是外購(gòu)系統(tǒng),都不提供源程序或擴(kuò)展編程接口;如要進(jìn)行以上修改必需請(qǐng)對(duì)應(yīng)公司完成,這樣從費(fèi)用及時(shí)間上都會(huì)有一定問(wèn)題。
筆者對(duì)廣州大學(xué)圖書(shū)館各系統(tǒng)及一卡通系統(tǒng)進(jìn)行詳細(xì)分析后,結(jié)合廣州大學(xué)圖書(shū)館的具體情況,決定不修改現(xiàn)有系統(tǒng),而采用自行開(kāi)發(fā)附加程序的方案實(shí)現(xiàn)這些系統(tǒng)的集成。廣州大學(xué)圖書(shū)館一卡通集成系統(tǒng)主要由讀卡和數(shù)據(jù)同步兩個(gè)程序組成,這兩個(gè)程序都是通過(guò)一卡通系統(tǒng)提供的第三方接入子系統(tǒng)從一卡通系統(tǒng)讀取所需數(shù)據(jù)。各系統(tǒng)之間的結(jié)構(gòu)見(jiàn)圖1,各系統(tǒng)之間的關(guān)系見(jiàn)圖2。采用這一方案的優(yōu)點(diǎn)是節(jié)省資金、通用性強(qiáng)。讀卡和數(shù)據(jù)同步這兩個(gè)程序都可以設(shè)置成當(dāng)Windows啟動(dòng)后自動(dòng)運(yùn)行;運(yùn)行后自動(dòng)最小化成Windows任務(wù)欄右下角的托盤(pán)小圖標(biāo),以后臺(tái)方式運(yùn)行,不影響其它系統(tǒng)操作;雙擊圖標(biāo)可以顯示參數(shù)設(shè)置、操作界面,進(jìn)行手工操作。這兩個(gè)程序都是用Delphi開(kāi)發(fā)完成,用MSSQLServer作為數(shù)據(jù)庫(kù)服務(wù)器。
圖1 一卡通集成系統(tǒng)結(jié)構(gòu)圖
圖2 一卡通集成系統(tǒng)關(guān)系圖
3 一卡通系統(tǒng)第三方接入子系統(tǒng)API的使用
開(kāi)始使用時(shí),需要調(diào)用TA_Init()函數(shù)初始化動(dòng)態(tài)庫(kù),如果不需要對(duì)卡內(nèi)容進(jìn)行讀寫(xiě)操作,而只是讀卡片的序列號(hào),則不需要調(diào)用TA_Init()函數(shù)。
程序調(diào)用需要讀寫(xiě)卡操作的函數(shù)時(shí),必須首先調(diào)用TA_CRInit()函數(shù)對(duì)讀卡器進(jìn)行初始化,當(dāng)程序不再使用讀卡器時(shí),需要調(diào)用TA_CRClose()關(guān)閉讀卡器。
調(diào)用TA_CRBeep()可使讀卡器發(fā)出蜂鳴,作為讀卡出錯(cuò)等信息提示。
調(diào)用TA_ReadCard()可以直接從卡中讀出用戶信息并檢驗(yàn)白名單,判斷卡片的有效性。
調(diào)用TA_InqAcc()根據(jù)賬號(hào)、卡號(hào)、學(xué)工號(hào)或證件號(hào)4個(gè)查詢(xún)條件中的一個(gè),從服務(wù)器中精確查詢(xún)用戶信息。
調(diào)用TA_HazyInqAcc(),可以根據(jù)查詢(xún)條件(可以是姓名、部門(mén)代碼、性別、學(xué)號(hào)、身份代碼)模糊查詢(xún)賬戶信息,如查詢(xún)條件為空,表示查詢(xún)?nèi)康馁~戶信息;查詢(xún)結(jié)果返回的文件保存在RecvTemp目錄下。
用戶信息,通過(guò)TA_ReadCard()、TA_InqAcc()、TA_HazyInqAcc()可以得到,用戶信息的主要內(nèi)容結(jié)構(gòu)如下:
其中Flag幾個(gè)主要字節(jié)代表的意義如下:
Flag[0]:身份信息變更標(biāo)志:0-沒(méi)變更,1-已變更;
Flag[1]:卡狀態(tài):0-正常,1-預(yù)開(kāi)戶,2-預(yù)銷(xiāo)戶,3-申請(qǐng)賬號(hào);
Flag[2]:掛失:0-正???,1-掛失;
Flag[3]:凍結(jié)標(biāo)志:0-正常,1-凍結(jié)。
通過(guò)TA_DownControlFile()可以下載控制文件,控制文件以Control.bin為文件名保存在ControlFile目錄中??刂莆募ú块T(mén)組織表、身份代碼表、校區(qū)代碼表等系統(tǒng)編碼信息。
通過(guò)TA_ExtractConFile()可以導(dǎo)出控制文件中的內(nèi)容,將編碼信息導(dǎo)出成各列用“,”號(hào)分隔的文本文件。
4 讀卡程序的實(shí)現(xiàn)
4.1 讀卡程序的功能及操作流程
可以用讀卡程序解決身份識(shí)別號(hào)(即讀者號(hào))的讀取。該程序啟動(dòng)后自動(dòng)最小化成Windows系統(tǒng)的托盤(pán)圖標(biāo),以后臺(tái)方式運(yùn)行;雙擊該圖標(biāo)可顯示它的設(shè)置界面(見(jiàn)圖3)。對(duì)于要從卡上讀取讀者號(hào)的系統(tǒng)就不需作任何修改,只要在該計(jì)算機(jī)上運(yùn)行該讀卡程序,接上一卡通USB讀卡器便可。
圖3 讀卡程序界面
該程序的主要功能及操作流程:
(1)初始化:該程序運(yùn)行后首先讀取系統(tǒng)設(shè)置參數(shù),然后初始化一卡通第三方接入動(dòng)態(tài)庫(kù)、讀卡器。初始化成功后就進(jìn)入監(jiān)測(cè)狀態(tài),隨時(shí)檢測(cè)一卡通讀卡器,如果有卡則進(jìn)行讀卡處理。
(2)讀卡處理:當(dāng)讀者將一卡通卡放在讀卡器感應(yīng)區(qū)時(shí),自動(dòng)讀出該卡上的信息;讀卡成功后,根據(jù)設(shè)置進(jìn)行有效性檢測(cè);如果該卡有效,就仿真鍵盤(pán)輸入該讀者號(hào),實(shí)現(xiàn)將該讀者號(hào)輸入到對(duì)應(yīng)系統(tǒng)的輸入框??ǖ挠行灾饕峭ㄟ^(guò)檢測(cè)該卡的狀態(tài)是否正常、是否已掛失、是否被凍結(jié),該卡是否為已丟失卡等。因有效性檢測(cè)一定要讀取一卡通服務(wù)器數(shù)據(jù),如果一卡通服務(wù)器或網(wǎng)絡(luò)出現(xiàn)故障,就不能有效讀卡;所以,通過(guò)設(shè)置可臨時(shí)停用該功能,保證在一卡通系統(tǒng)出現(xiàn)故障時(shí),不影響本館業(yè)務(wù)。該程序還可根據(jù)設(shè)置,實(shí)現(xiàn)在輸入編號(hào)之前、之后加上指定的字符,以此實(shí)現(xiàn)一些特殊的功能,例如:可以實(shí)現(xiàn)輸入讀者號(hào)前刪除原來(lái)的讀者號(hào)、輸入讀者號(hào)后自動(dòng)加回車(chē)等功能。
4.2 使用掛鉤(Hook)實(shí)現(xiàn)鍵盤(pán)仿真函數(shù)
鍵盤(pán)仿真函數(shù)的功能是模仿用戶用鍵盤(pán)在當(dāng)前活動(dòng)窗口中輸入某一個(gè)字符串。在VisualBasis中有SendKeys()函數(shù)實(shí)現(xiàn)該功能,在Delphi中則沒(méi)有直接實(shí)現(xiàn)該功能的相應(yīng)函數(shù),但可以使用掛鉤實(shí)現(xiàn)(因無(wú)法知道發(fā)送消息窗口的句柄,所以不能直接發(fā)送wm_KeyDowm、wm_KeyUp消息實(shí)現(xiàn))。程序員使用掛鉤能控制Windows系統(tǒng)事件的發(fā)生和處理,它能預(yù)演和修改系統(tǒng)事件和消息,并且能在系統(tǒng)范圍內(nèi)阻止系統(tǒng)事件和消息的發(fā)生。鍵盤(pán)仿真函數(shù)就是使用WH_JOURNALPLAYBACK類(lèi)型的掛鉤,在系統(tǒng)的消息隊(duì)列中插入一系列的按鍵事件[1]。
SendKeys()函數(shù)的處理過(guò)程如下:將傳入的字符串分解成一系列的系統(tǒng)按鍵消息,組成消息列表;通過(guò)SetWindowsHookEx()設(shè)置掛鉤;使用掛鉤CallNextHookEx()將生成的消息列表依次發(fā)送到Windows的系統(tǒng)消息隊(duì)列中,實(shí)現(xiàn)鍵盤(pán)仿真輸入字符串;結(jié)束時(shí)用UnHookWindowsHookEx()釋放掛鉤。通過(guò)鍵盤(pán)輸入一個(gè)字符,其實(shí)就向系統(tǒng)發(fā)送多個(gè)系統(tǒng)消息。例如:鍵盤(pán)輸入A就對(duì)應(yīng)了“A”鍵的wm_KeyDown、wm_KeyUp兩個(gè)系統(tǒng)消息;鍵盤(pán)輸入 +A就對(duì)應(yīng)了鍵的wm_SysKeyDown,“A”鍵的wm_KeyDown、wm_KeyUp,鍵的wm_SysKeyUp這4個(gè)系統(tǒng)消息。生成系統(tǒng)按鍵消息時(shí)要用到對(duì)應(yīng)字符的虛擬碼和鍵盤(pán)掃描碼,虛擬碼可以通過(guò)KeyDefs單元映射得到,通過(guò)Win32API的MapVirtralKey()函數(shù),可將字符的虛擬碼轉(zhuǎn)換成鍵盤(pán)掃描碼。
5 數(shù)據(jù)同步程序的實(shí)現(xiàn)
5.1 數(shù)據(jù)同步程序的功能及操作流程
用數(shù)據(jù)同步程序?qū)崿F(xiàn)廣州大學(xué)圖書(shū)館的系統(tǒng),并根據(jù)一卡通系統(tǒng)數(shù)據(jù)進(jìn)行同步更新。該程序啟動(dòng)后自動(dòng)最小化成Windows系統(tǒng)的托盤(pán)圖標(biāo),以后臺(tái)方式運(yùn)行;雙擊該圖標(biāo)可顯示它的設(shè)置及操作界面,如圖4所示。該程序可手工方式進(jìn)行數(shù)據(jù)同步,也可以按照設(shè)定的時(shí)間自動(dòng)進(jìn)行數(shù)據(jù)同步。該程序的主要功能及操作流程:
(1)初始化:該程序運(yùn)行后首先讀取系統(tǒng)設(shè)置參數(shù),然后初始化一卡通第三方接入動(dòng)態(tài)庫(kù)等;初始化參數(shù)包括一卡通第三方接入系統(tǒng)地址、數(shù)據(jù)庫(kù)連接信息、是否自動(dòng)同步、自動(dòng)同步的時(shí)間等信息。初始化成功后該程序就進(jìn)入監(jiān)測(cè)狀態(tài),當(dāng)設(shè)置了自動(dòng)同步并到達(dá)了指定的時(shí)間,就會(huì)自動(dòng)進(jìn)行數(shù)據(jù)下載、數(shù)據(jù)同步等操作。
(2)一卡通用戶數(shù)據(jù)下載:可以手工下載基礎(chǔ)數(shù)據(jù),自動(dòng)或手工下載用戶數(shù)據(jù)。
圖4 數(shù)據(jù)同步程序界面
(3)數(shù)據(jù)同步:因?yàn)镮LASⅡ系統(tǒng)使用的是專(zhuān)用數(shù)據(jù)庫(kù),不向外提供編程接口,所以ILASⅡ系統(tǒng)的數(shù)據(jù)同步要手工定期參與;而機(jī)房和門(mén)禁管理系統(tǒng)則是使用MSSQLServer數(shù)據(jù)庫(kù),可直接對(duì)對(duì)應(yīng)的數(shù)據(jù)庫(kù)中的表內(nèi)容進(jìn)行操作,所以這兩個(gè)系統(tǒng)的數(shù)據(jù)同步可根據(jù)需要,按設(shè)置的時(shí)間、次數(shù)每天自動(dòng)進(jìn)行。
第1頁(yè)第2頁(yè) |