黃圣嫵,李曉琛,楊 宙,李 松
(廣東省建設(shè)工程質(zhì)量安全檢測總站有限公司 廣州510500)
試驗室信息管理系統(tǒng)(LIMS)是試驗室管理的核心軟件,它負責(zé)管理試驗室的“人機料法環(huán)”等信息。完善和發(fā)展LIMS 具有學(xué)術(shù)意義和社會效益。目前,經(jīng)過數(shù)十年的發(fā)展,LIMS 已經(jīng)在各行各業(yè)[1-8]得到了廣泛的應(yīng)用,一些LIMS 強國還制定了詳盡的LIMS 功能標準和驗收標準[9,10]。還有一些課題使用手持機對LIMS 進行了功能擴展和使用場所擴展,例如在采樣過程中使用手持機對樣品信息進行加強管理[11]。
本項目甲方單位已有LIMS 系統(tǒng),但不能滿足日益增長的檢測進度管理要求,并且不能通過直接采購軟件解決,因此委托課題組解決檢測進度管理問題,包括原始樣品的拆分、流轉(zhuǎn)、養(yǎng)護、同一個樣品各檢測項目的進度等的管理,并將該管理功能接入既有LIMS 系統(tǒng)。課題組針對這些要求,進行了基于An?droid 前端和Springboot 后臺的LIMS 檢測進度管理軟件的設(shè)計與實現(xiàn)。本項目的研究內(nèi)容是:在樣品從進入到離開檢測中心的過程中,記錄接觸它的人員、試驗室、設(shè)備供追溯。
本項目使用C/S架構(gòu),在后臺使用了Springboot框架、Thymeleaf框架等技術(shù);在前端Android軟件使用了JSignature框架、WeUI框架等技術(shù)。簡而言之,選用的都是JAVA Springboot 家族的技術(shù)。選用這套技術(shù)的原因是:
⑴Springboot 框架使用自動配置依賴、注解等手段大大簡化了開發(fā)。以自動配置為例,只需在pom.xml 中進行少量配置,即可自動完成Spring-Data-Jpa、Web、Thymeleaf依賴。
⑵Spring-Data-Jpa 框架與Hibernate 一樣,是對JPA(Java Persistence Application Interface)規(guī)范的具體實現(xiàn)。Spring-Data-Jpa 的優(yōu)點是單表操作的速度很快,適合該課題的具體情況。在此類ORM(Object Re?lational Mapping)技術(shù)中,JAVA 實體類的類名映射到數(shù)據(jù)庫的表名,JAVA 對象名映射到數(shù)據(jù)庫表中的一條記錄,JAVA 實體類屬性映射到數(shù)據(jù)庫表中的字段,通過JAVA 注解,容易實現(xiàn)數(shù)據(jù)的持久化和瞬時化,減輕數(shù)據(jù)庫操作的開發(fā)工作量。
⑶Thymeleaf框架簡化了HTML渲染。
⑷JSignature框架便于實現(xiàn)對手寫簽名的矢量圖捕捉和格式轉(zhuǎn)換。
⑸WeUI 是一個以HTML 和CSS 開發(fā)的UI 庫,通常用于微信公眾號的頁面美化,課題組將它用于課題中的Android軟件的美化。
課題組通過訪談、問卷等獲得了用戶需求,并通過名詞、動詞、形容詞整理等手段,整理成需求陳述。其中優(yōu)先級較高的需求是:
⑴為每個試驗室、設(shè)備、樣品提供條碼,當(dāng)樣品在各試驗室、各設(shè)備流轉(zhuǎn)時,可記錄樣品編號、流轉(zhuǎn)時間,可拍照上傳。
⑵記錄儀器設(shè)備使用前后的狀態(tài)。
⑶對試驗進度進行記錄和提醒(見圖1)。
圖1 檢測進度管理的用例Fig.1 Use Case of Testing Progress Management
公知常識,本階段應(yīng)當(dāng)發(fā)現(xiàn)5 種不同的類,分別是:客觀實體、角色、應(yīng)記錄的事件、對象間的相互作用和必須說明的概念。從上一節(jié)“需求陳述”中不難發(fā)現(xiàn),本項目可發(fā)現(xiàn)的類有:
⑴客觀實體:包括設(shè)備、試驗室、照片、樣品、菜單選項、手寫簽名;
⑵角色:檢測員、檢測分類負責(zé)人、科室主任、系統(tǒng)管理員、手持機、原有LIMS;
⑶應(yīng)記錄的事件:設(shè)備使用記錄、樣品流轉(zhuǎn)、委托;
⑷對象間的相互作用:登錄、檢測超期提醒;
⑸沒有“必須說明的概念”。
限于篇幅,選取上述類中的“設(shè)備”類和“設(shè)備使用記錄”類進行說明,如圖2所示。
圖2 設(shè)備實體類和使用記錄實體類Fig.2 Equipment Entity Class and Use Record Entity Class
在分析階段,需要識別類之間的4 個關(guān)系,分別是:衍生、組合聚合、實例連接和消息連接。
例如“樣品”類和“試驗室”類之間的多對多的實例連接(見圖3),以及“樣品流轉(zhuǎn)控制”類與工具類、線程對象類、使用記錄類等類之間的復(fù)雜的靜態(tài)結(jié)構(gòu)(見圖4)。
圖3 樣品和試驗室之間的實例連接Fig.3 Instance Connection between Sample Class and Lab Class
圖4 樣品流轉(zhuǎn)控制類與其他類間的結(jié)構(gòu)Fig.4 Structure between Sample Flow Control Class and Other Classes
本項目甲方單位原有一套基于Struts 的LIMS 系統(tǒng),因此項目將設(shè)計成單獨的一套系統(tǒng),通過原有LIMS系統(tǒng)的接口接入(見圖5)。
圖5 本項目的應(yīng)用架構(gòu)Fig.5 Application Architecture of the Project
本項目的后臺部分將在Springboot 框架下開發(fā),該框架通常分為“業(yè)務(wù)邏輯層、服務(wù)層、DAO 層”。其中,業(yè)務(wù)邏輯層包含了控制類和Bean;服務(wù)層包含了服務(wù)接口和對服務(wù)接口的實現(xiàn);DAO 層包含了DAO接口和實體類。
將分析階段的成果,即“需要哪些類”中提及的類融入Springboot 框架之后,得到的新的類如圖6 所示。圖6中,控制類本身不進行邏輯處理,而是調(diào)度各種工具類、服務(wù)層類進行邏輯處理。本項目的典型的工具類如圖7所示。
圖6 本項目的Springboot三層架構(gòu)Fig.6 The Springboot Three Layers Architecture of the Project
圖7 負責(zé)格式轉(zhuǎn)換的工具類StringUtilFig.7 Tool Class Named StringUtil Responsible for Format Conversion
其他的工具類包括:承擔(dān)“分頁、統(tǒng)計分頁后的總頁數(shù)、統(tǒng)計總記錄數(shù)”職責(zé)的名為FundPage的類、承擔(dān)“對圖片進行Base64 編碼、解碼”的名為ImageUtil 的類、承擔(dān)“使用靜態(tài)方法打印日志,無需每個類中定義日志對象”職責(zé)的名為LoggerUtil 的類、承擔(dān)“對輸入的數(shù)據(jù)加密后返回”職責(zé)的名為PswUtil的類。
詳細設(shè)計階段,需要向當(dāng)前設(shè)計成果中加入通信、進程管理等底層支撐環(huán)境概念。以及需要將設(shè)計成果結(jié)合設(shè)計模式進行規(guī)范化梳理。例如,手持機部分,將采用adapter 設(shè)計模式,使前端顯示能適應(yīng)各種變化。
本項目已投入運營,每一個樣品何時由誰從業(yè)務(wù)室轉(zhuǎn)入試驗室、何時由誰從試驗室轉(zhuǎn)入制樣室、何時由誰從制樣室轉(zhuǎn)入養(yǎng)護室、何時由誰從養(yǎng)護室轉(zhuǎn)入某臺試驗機、該試驗機何時由誰使用、使用前后的狀態(tài)如何、樣品上機前后的照片如何、相關(guān)人員的手寫簽名,均可通過手持機記錄在LIMS中(見圖8)。
圖8 運行效果展示Fig.8 Operation Effect Display
本項目旨在通過手持機記錄樣品的全生命期經(jīng)歷,項目課題組通過對安卓前端、Springboot 后臺的設(shè)計與實現(xiàn),解決了課題所提出的問題。目前該成果已投入使用,運行狀態(tài)良好,實現(xiàn)了課題的各項目標。