周笑宇
(中國人民解放軍聯(lián)勤保障部隊(duì)第九六三醫(yī)院,佳木斯 154002)
對于醫(yī)院而言,HIS系統(tǒng)的穩(wěn)定性是不言而喻的,大到臨床科室與輔診科室之間的信息交互系統(tǒng)(如LIS、PACS 等),小到醫(yī)生對于患者所下的每一條計(jì)價(jià)處方、每一種耗材等,都需要對HIS 系統(tǒng)進(jìn)行數(shù)據(jù)操作。但對于臨床科室的耗材、輔診科室的工作量,卻很少有相應(yīng)的系統(tǒng)進(jìn)行準(zhǔn)確的統(tǒng)計(jì)。數(shù)據(jù)庫用戶權(quán)限的發(fā)放、分配及回收,更是困擾著部分?jǐn)?shù)據(jù)庫管理員。本文旨在對該問題提出一種解決辦法,以PowerBuilder9.0 為開發(fā)工具,基于Oracle 數(shù)據(jù)庫進(jìn)行數(shù)據(jù)表的創(chuàng)建和部署。
開發(fā)本系統(tǒng)的目的是實(shí)現(xiàn)院內(nèi)耗材、診療項(xiàng)目等的精確統(tǒng)計(jì)、輔診科室工作量的統(tǒng)計(jì)、以及對于數(shù)據(jù)庫用戶的權(quán)限復(fù)制和管理,主要包括以下幾個部分:①單一科室的某種項(xiàng)目計(jì)價(jià)情況統(tǒng)計(jì),為系統(tǒng)使用人員提供指定科室的某種耗材或診療項(xiàng)目的計(jì)價(jià)數(shù)量及明細(xì);②全院的某種項(xiàng)目計(jì)價(jià)情況統(tǒng)計(jì),為系統(tǒng)使用人員提供全院某種耗材或診療項(xiàng)目的計(jì)價(jià)數(shù)量及明細(xì);③全院科室所有項(xiàng)目計(jì)價(jià)情況統(tǒng)計(jì),為系統(tǒng)使用人員提供所選時間內(nèi),全院所有耗材的計(jì)價(jià)情況;④輔診科室工作量統(tǒng)計(jì),為系統(tǒng)使用人員提供指定時間內(nèi)輔診科室的總計(jì)價(jià)收入和所有項(xiàng)目的總項(xiàng)數(shù),并支持將明細(xì)導(dǎo)成excel格式的文件;⑤數(shù)據(jù)庫用戶權(quán)限復(fù)制及管理系統(tǒng),可以將系統(tǒng)中的關(guān)鍵用戶的權(quán)限復(fù)制給新創(chuàng)建的用戶或需要更改權(quán)限的用戶,并支持增加、刪除數(shù)據(jù)庫用戶。
系統(tǒng)各模塊的功能如圖1所示。
圖1 系統(tǒng)各模塊功能
該模塊共分為四個部分:科室服務(wù)項(xiàng)目統(tǒng)計(jì)、科室耗材統(tǒng)計(jì)、全院服務(wù)項(xiàng)目統(tǒng)計(jì)及全院耗材統(tǒng)計(jì)。科室服務(wù)項(xiàng)目統(tǒng)計(jì)及科室耗材統(tǒng)計(jì),可以針對某科室,統(tǒng)計(jì)指定時間段內(nèi),該科室所計(jì)價(jià)的服務(wù)項(xiàng)目數(shù)量,以及該時間段內(nèi)該科室計(jì)價(jià)的所有耗材的總數(shù)量。全院服務(wù)項(xiàng)目統(tǒng)計(jì)及全院耗材統(tǒng)計(jì),可以統(tǒng)計(jì)指定時間段內(nèi),全院所有科室計(jì)價(jià)的服務(wù)項(xiàng)目數(shù)量及所有計(jì)價(jià)耗材的總數(shù)量。該功能可以清晰地體現(xiàn)出指定時間段內(nèi)科室或全院服務(wù)項(xiàng)目及耗材方面的工作量,既方便相關(guān)科室統(tǒng)計(jì)工作量,又方便科室與耗材管理相關(guān)科室之間進(jìn)行賬目的核對,也可以輔助院領(lǐng)導(dǎo)或相關(guān)科室領(lǐng)導(dǎo)進(jìn)行決策。
該模塊共分為兩個部分:輔診科室年度工作量查詢和輔診科室指定時間段工作量查詢??梢葬槍λ休o診科室,如檢驗(yàn)科、放射科、超聲科等科室,進(jìn)行指定時間內(nèi)或某年度的工作量統(tǒng)計(jì)。該功能可以清晰地體現(xiàn)出單位時間內(nèi)相應(yīng)科室進(jìn)行的所有服務(wù)項(xiàng)目數(shù)量,并按照數(shù)量從高到低的順序排列,既方便相應(yīng)科室統(tǒng)計(jì)指定時間內(nèi)的工作量,又可直觀地體現(xiàn)出服務(wù)項(xiàng)目的開具情況,為輔助院領(lǐng)導(dǎo)及相關(guān)科室領(lǐng)導(dǎo)做決策、相關(guān)科室數(shù)據(jù)分析提供有效的支撐。
該模塊主要功能分為四個部分:新用戶創(chuàng)建、用戶角色授權(quán)、老用戶權(quán)限修改以及老用戶科室修改。新用戶創(chuàng)建,當(dāng)輸入新用戶相關(guān)的身份信息(用戶身份、用戶姓名、用戶密碼)之后,系統(tǒng)會通過自增主鍵,默認(rèn)為新用戶分配相應(yīng)的工號,點(diǎn)擊保存之后,系統(tǒng)就會在數(shù)據(jù)庫中創(chuàng)建新用戶,并對其賦予基本權(quán)限;角色授權(quán),當(dāng)用戶未分配任何權(quán)限或角色時,可選擇現(xiàn)有角色將該角色授予給選擇的用戶;權(quán)限修改,當(dāng)想修改用戶現(xiàn)有權(quán)限或角色時,可選擇關(guān)鍵用戶,將關(guān)鍵用戶的所有角色和系統(tǒng)權(quán)限一鍵賦值給當(dāng)前的用戶;科室修改,當(dāng)老用戶因?yàn)楣ぷ靼才诺仍蛘{(diào)用至其余科室時,該系統(tǒng)可方便地修改用戶現(xiàn)有的科室信息并保存。該模塊可以極其方便地管理新用戶及原有用戶,尤其是權(quán)限修改功能,可以大大地節(jié)約數(shù)據(jù)庫管理者的時間和精力,不用費(fèi)時費(fèi)力地考慮原有用戶的角色和系統(tǒng)權(quán)限的分配,可以為數(shù)據(jù)庫的管理等做出一定的貢獻(xiàn)。
本系統(tǒng)采用PowerBuilder9.0 工具開發(fā),基于Oracle 數(shù)據(jù)庫來部署,可方便地布置在win?dowsXP 乃至Windows10 等所有主流操作系統(tǒng)上。
PowerBuilder 是美國Sybase 公司研制的一種新型、快速開發(fā)工具,該工具基于C/S 架構(gòu)(客戶端-服務(wù)器),具有輕量、方便部署、查詢速度快、拓展性強(qiáng)、使用簡單等優(yōu)點(diǎn),廣泛地應(yīng)用于醫(yī)院、銀行等領(lǐng)域。
Oracle是當(dāng)今世界上應(yīng)用最廣泛的關(guān)系型數(shù)據(jù)庫之一,是一種效率高、穩(wěn)定性強(qiáng)、可靠性好、吞吐量大的數(shù)據(jù)庫。因其特有的安全性和穩(wěn)定性等優(yōu)勢,被廣泛運(yùn)用在銀行、醫(yī)院、大型企業(yè)等領(lǐng)域。
3.2.1 關(guān)于數(shù)據(jù)查詢功能數(shù)據(jù)庫的構(gòu)建
數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計(jì),對于系統(tǒng)的穩(wěn)定性和可拓展性等是不言而喻的。查詢模塊在設(shè)計(jì)之初,主要分為門診數(shù)據(jù)和住院數(shù)據(jù)兩個方面的統(tǒng)計(jì),之后再通過編寫相應(yīng)的SQL 語句將門診數(shù)據(jù)和住院數(shù)據(jù)合在一起,體現(xiàn)在程序的數(shù)據(jù)窗口中。門診數(shù)據(jù)通過創(chuàng)建門診病人診療費(fèi)用項(xiàng)目表,并統(tǒng)計(jì)表中的數(shù)據(jù)即可分析出來,該表由病人就診日期(patient_visit_date)、收據(jù)號(receipt_number)、項(xiàng)目類別(item_class)、項(xiàng)目代碼(item_code)、項(xiàng)目名稱(item_name)、項(xiàng)目規(guī)格(item_spec)、數(shù)量(amount)、執(zhí)行科室(performed_by_dept)等字段組成,其主鍵為收據(jù)號(receipt_number);住院數(shù)據(jù)通過創(chuàng)建住院病人診療費(fèi)用項(xiàng)目表,并統(tǒng)計(jì)表中的數(shù)據(jù)即可分析出來,該表由病人ID 號(patient_id)、病人本次 住 院 標(biāo) 識(patient_visit_id)、 項(xiàng) 目 類 別(item_class)、項(xiàng)目代碼(item_code)、項(xiàng)目名稱(item_name)、項(xiàng) 目 規(guī) 格(item_spec)、數(shù) 量(amount)、執(zhí)行科室(performed_by_dept)、住院計(jì)價(jià)時間(billing_date_time)等字段組成,病人ID 號(patient_id)及 病 人 本 次 住 院 標(biāo) 識(pa?tient_visit_id)作為聯(lián)合主鍵。
3.2.2 關(guān)于權(quán)限管理功能數(shù)據(jù)庫的構(gòu)建
權(quán)限管理對于數(shù)據(jù)庫來說是非常重要的,一旦授予權(quán)限過程中出現(xiàn)問題,則會導(dǎo)致不可預(yù)計(jì)的后果,甚至?xí)?yán)重影響數(shù)據(jù)庫的安全性和用戶的正常使用。該功能主要以用戶表為核心進(jìn)行構(gòu)建,用戶表由數(shù)據(jù)庫用戶名(user),用戶標(biāo)識(user_id),用戶姓名(user_name),用戶科室(user_dept)組成,其中數(shù)據(jù)庫用戶名(user)為該表的主鍵。創(chuàng)建好用戶后,需要對用戶分配相應(yīng)的科室、工作站、系統(tǒng)使用權(quán)限等,所以還需要醫(yī)院人員信息表來存放相應(yīng)的信息,該 表 由 科 室 代 碼(dept_code)、 人 員 姓 名(user_name)、人員編號(emp_no)、工作類別(user_job)組成,其中人員編號(emp_no)為該表的主鍵。
數(shù)據(jù)表創(chuàng)建完畢后,就可以根據(jù)設(shè)計(jì),進(jìn)入到具體的編碼階段,該部分以幾個模塊為例,簡要介紹一下系統(tǒng)的設(shè)計(jì)。
3.3.1 系統(tǒng)與數(shù)據(jù)庫之間的連接
任何數(shù)據(jù)庫相關(guān)的系統(tǒng)在使用之前,首要步驟都是與該系統(tǒng)所使用的數(shù)據(jù)庫進(jìn)行連接。本文通過PowerBuilder 自帶的SQLCA 事務(wù)對象進(jìn)行連接數(shù)據(jù)庫,連接數(shù)據(jù)庫時,系統(tǒng)通過讀取外部INI 文件的方式來獲取數(shù)據(jù)庫的版本(DBMS)、本地?cái)?shù)據(jù)庫名稱(ServerName)、用戶登錄ID(LogId)、用戶密碼(LogPassword)等關(guān)鍵信息,其中用戶登錄ID、用戶密碼待用戶在登陸界面輸入其用戶名和密碼之后,系統(tǒng)通過校驗(yàn)后,通過函數(shù)將用戶登錄ID、用戶密碼寫入到配置文件中。
3.3.2 科室執(zhí)行項(xiàng)目統(tǒng)計(jì)的具體實(shí)現(xiàn)
創(chuàng)建一個窗口對象(window),之后將所需要的控件拖動到數(shù)據(jù)窗口中,該功能主要使用了如下幾個控件:靜態(tài)文本控件(StaticText Con?trol)、單行編輯控件(SingleLineEdit Control)、按鈕控件(CommandButton Control)、數(shù)據(jù)窗口控件(DataWindow Control),其界面如圖2所示。
圖2 科室執(zhí)行項(xiàng)目統(tǒng)計(jì)
自動獲取時間、以及選擇科室和選擇項(xiàng)目功能是本模塊的特色功能。通過PowerBuilder 自帶的RelativeDate()函數(shù)獲取當(dāng)前的時間,具體代碼如下:
在遇到特殊情況時,如跨月、跨年等場景下,需要對統(tǒng)計(jì)日期和結(jié)束日期進(jìn)行特殊處理,本系統(tǒng)通過自定義函數(shù)進(jìn)行處理,確保該日期的準(zhǔn)確性。
選擇科室和選擇項(xiàng)目功能依賴于KeyDown函數(shù),當(dāng)使用者按照提示在獲取文本框焦點(diǎn)后進(jìn)行按鍵時,會彈出相應(yīng)的窗口來選擇科室或項(xiàng)目,彈出窗口中的所有科室列表和項(xiàng)目列表均為動態(tài)查詢獲取,當(dāng)選擇科室和服務(wù)項(xiàng)目均選擇完畢后,在時間不為空的情況下,點(diǎn)擊查詢則可獲取到相關(guān)的數(shù)據(jù),查詢語句具體如下:
另外,點(diǎn)擊查詢按鈕時,數(shù)據(jù)窗口中也要提取出相應(yīng)的數(shù)據(jù),該功能依賴的是Power?Builder 自帶的事物對象的實(shí)例SQLCA 與后臺數(shù)據(jù)庫之間的交互,以及rerieve()函數(shù),具體的實(shí)現(xiàn)代碼如下:
3.3.3 科室耗材統(tǒng)計(jì)功能的具體實(shí)現(xiàn)
創(chuàng)建一個窗口對象(window),之后將所需要的控件拖動到數(shù)據(jù)窗口中,該功能主要使用了如下幾個控件:靜態(tài)文本控件(StaticText Con?trol)、單行編輯控件(SingleLineEdit Control)、按鈕控件(CommandButton Control)、數(shù)據(jù)窗口控件(DataWindow Control)、下拉列表控件(Drop?DownListBox Control),其界面如圖3所示。
圖3 科室耗材統(tǒng)計(jì)
將結(jié)果保存成EXCEL 文件是本模塊的特色功能,該功能主要依賴于GetFileSaveName()函數(shù),并通過使用自定義函數(shù),使用戶可以看到導(dǎo)出進(jìn)度,該功能具體代碼如下:
當(dāng)點(diǎn)擊查詢按鈕時,數(shù)據(jù)窗口則會提取出相應(yīng)的數(shù)據(jù),具體代碼如下:
3.3.4 權(quán)限管理功能的具體實(shí)現(xiàn)
創(chuàng)建一個窗口對象(window),之后將所需要的控件拖動到數(shù)據(jù)窗口中,該功能主要使用了如下幾個控件:靜態(tài)文本控件(StaticText Con?trol)、單行編輯控件(SingleLineEdit Control)、按鈕控件(CommandButton Control)、數(shù)據(jù)窗口控件(DataWindow Control),其界面如圖4所示。
圖4 權(quán)限管理
當(dāng)用戶在用戶名文本框中輸入相應(yīng)的用戶后,按下回車鍵,若為已經(jīng)存在的用戶,則會自動獲取到當(dāng)前用戶的用戶身份、用戶姓名、用戶單位、創(chuàng)建日期、用戶ID 等信息,若用戶想更改當(dāng)前用戶的信息,則可以任意選擇更改除用戶名外的所有其他文本框,之后點(diǎn)擊修改按鈕即可完成信息修改。若為不存在的用戶,則會將創(chuàng)建日期自動置為服務(wù)器中的當(dāng)前日期,同時將用戶ID 置為自增序列中的最新值,之后使用者需要手動錄入用戶身份、用戶姓名、用戶單位等信息,當(dāng)完成上述信息的錄入后,點(diǎn)擊保存按鈕,新錄入的用戶就會創(chuàng)建成功。按下回車鍵之后,左下角中的權(quán)限人員即可顯示出來,此時單擊想復(fù)制的權(quán)限人員,即可將該權(quán)限人員的所有權(quán)限以及角色復(fù)制或修改給用戶名文本框中輸入的用戶,該功能的具體代碼如下:
本文通過PowerBuilder 與Oracle 數(shù)據(jù)庫的交互實(shí)現(xiàn)了該系統(tǒng)的功能,該系統(tǒng)大大地加快了統(tǒng)計(jì)部分?jǐn)?shù)據(jù)的效率并解決了人員權(quán)限分配的問題,下一步需進(jìn)一步豐富該系統(tǒng)的功能,同時改進(jìn)現(xiàn)有模塊以優(yōu)化查詢效率,進(jìn)一步提升本院信息化水平。