黄圣妩,李晓琛,杨 宙,李 松
(广东省建设工程质量安全检测总站有限公司 广州510500)
试验室信息管理系统(LIMS)是试验室管理的核心软件,它负责管理试验室的“人机料法环”等信息。完善和发展LIMS 具有学术意义和社会效益。目前,经过数十年的发展,LIMS 已经在各行各业[1-8]得到了广泛的应用,一些LIMS 强国还制定了详尽的LIMS 功能标准和验收标准[9,10]。还有一些课题使用手持机对LIMS 进行了功能扩展和使用场所扩展,例如在采样过程中使用手持机对样品信息进行加强管理[11]。
本项目甲方单位已有LIMS 系统,但不能满足日益增长的检测进度管理要求,并且不能通过直接采购软件解决,因此委托课题组解决检测进度管理问题,包括原始样品的拆分、流转、养护、同一个样品各检测项目的进度等的管理,并将该管理功能接入既有LIMS 系统。课题组针对这些要求,进行了基于An⁃droid 前端和Springboot 后台的LIMS 检测进度管理软件的设计与实现。本项目的研究内容是:在样品从进入到离开检测中心的过程中,记录接触它的人员、试验室、设备供追溯。
本项目使用C/S架构,在后台使用了Springboot框架、Thymeleaf框架等技术;在前端Android软件使用了JSignature框架、WeUI框架等技术。简而言之,选用的都是JAVA Springboot 家族的技术。选用这套技术的原因是:
⑴Springboot 框架使用自动配置依赖、注解等手段大大简化了开发。以自动配置为例,只需在pom.xml 中进行少量配置,即可自动完成Spring-Data-Jpa、Web、Thymeleaf依赖。
⑵Spring-Data-Jpa 框架与Hibernate 一样,是对JPA(Java Persistence Application Interface)规范的具体实现。Spring-Data-Jpa 的优点是单表操作的速度很快,适合该课题的具体情况。在此类ORM(Object Re⁃lational Mapping)技术中,JAVA 实体类的类名映射到数据库的表名,JAVA 对象名映射到数据库表中的一条记录,JAVA 实体类属性映射到数据库表中的字段,通过JAVA 注解,容易实现数据的持久化和瞬时化,减轻数据库操作的开发工作量。
⑶Thymeleaf框架简化了HTML渲染。
⑷JSignature框架便于实现对手写签名的矢量图捕捉和格式转换。
⑸WeUI 是一个以HTML 和CSS 开发的UI 库,通常用于微信公众号的页面美化,课题组将它用于课题中的Android软件的美化。
课题组通过访谈、问卷等获得了用户需求,并通过名词、动词、形容词整理等手段,整理成需求陈述。其中优先级较高的需求是:
⑴为每个试验室、设备、样品提供条码,当样品在各试验室、各设备流转时,可记录样品编号、流转时间,可拍照上传。
⑵记录仪器设备使用前后的状态。
⑶对试验进度进行记录和提醒(见图1)。
图1 检测进度管理的用例Fig.1 Use Case of Testing Progress Management
公知常识,本阶段应当发现5 种不同的类,分别是:客观实体、角色、应记录的事件、对象间的相互作用和必须说明的概念。从上一节“需求陈述”中不难发现,本项目可发现的类有:
⑴客观实体:包括设备、试验室、照片、样品、菜单选项、手写签名;
⑵角色:检测员、检测分类负责人、科室主任、系统管理员、手持机、原有LIMS;
⑶应记录的事件:设备使用记录、样品流转、委托;
⑷对象间的相互作用:登录、检测超期提醒;
⑸没有“必须说明的概念”。
限于篇幅,选取上述类中的“设备”类和“设备使用记录”类进行说明,如图2所示。
图2 设备实体类和使用记录实体类Fig.2 Equipment Entity Class and Use Record Entity Class
在分析阶段,需要识别类之间的4 个关系,分别是:衍生、组合聚合、实例连接和消息连接。
例如“样品”类和“试验室”类之间的多对多的实例连接(见图3),以及“样品流转控制”类与工具类、线程对象类、使用记录类等类之间的复杂的静态结构(见图4)。
图3 样品和试验室之间的实例连接Fig.3 Instance Connection between Sample Class and Lab Class
图4 样品流转控制类与其他类间的结构Fig.4 Structure between Sample Flow Control Class and Other Classes
本项目甲方单位原有一套基于Struts 的LIMS 系统,因此项目将设计成单独的一套系统,通过原有LIMS系统的接口接入(见图5)。
图5 本项目的应用架构Fig.5 Application Architecture of the Project
本项目的后台部分将在Springboot 框架下开发,该框架通常分为“业务逻辑层、服务层、DAO 层”。其中,业务逻辑层包含了控制类和Bean;服务层包含了服务接口和对服务接口的实现;DAO 层包含了DAO接口和实体类。
将分析阶段的成果,即“需要哪些类”中提及的类融入Springboot 框架之后,得到的新的类如图6 所示。图6中,控制类本身不进行逻辑处理,而是调度各种工具类、服务层类进行逻辑处理。本项目的典型的工具类如图7所示。
图6 本项目的Springboot三层架构Fig.6 The Springboot Three Layers Architecture of the Project
图7 负责格式转换的工具类StringUtilFig.7 Tool Class Named StringUtil Responsible for Format Conversion
其他的工具类包括:承担“分页、统计分页后的总页数、统计总记录数”职责的名为FundPage的类、承担“对图片进行Base64 编码、解码”的名为ImageUtil 的类、承担“使用静态方法打印日志,无需每个类中定义日志对象”职责的名为LoggerUtil 的类、承担“对输入的数据加密后返回”职责的名为PswUtil的类。
详细设计阶段,需要向当前设计成果中加入通信、进程管理等底层支撑环境概念。以及需要将设计成果结合设计模式进行规范化梳理。例如,手持机部分,将采用adapter 设计模式,使前端显示能适应各种变化。
本项目已投入运营,每一个样品何时由谁从业务室转入试验室、何时由谁从试验室转入制样室、何时由谁从制样室转入养护室、何时由谁从养护室转入某台试验机、该试验机何时由谁使用、使用前后的状态如何、样品上机前后的照片如何、相关人员的手写签名,均可通过手持机记录在LIMS中(见图8)。
图8 运行效果展示Fig.8 Operation Effect Display
本项目旨在通过手持机记录样品的全生命期经历,项目课题组通过对安卓前端、Springboot 后台的设计与实现,解决了课题所提出的问题。目前该成果已投入使用,运行状态良好,实现了课题的各项目标。