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