(1.泰山职业技术学院,山东 泰安 271000; 2.泰山医学院,山东 泰安 271016)
住院收费管理系统是医院信息管理系统的一个功能模块,包括住院病人费用结算、费用录入、费用查询和打印、欠款管理等功能。费用查询和打印是患者和家属最关心的一个功能,能够提供给病人或者家属查询和打印自己各种费用的使用情况,在查询信息时,需要通过后台服务器访问数据库对该用户性进行查找和确认,才能显示相应的信息。在传统的服务器端的Web应用程序中,任何与服务器的交互都要求刷新页面,当服务器处理客户端的请求时,客户只能空闲等待,降低了Web应用的执行速度,AJAX技术在用户与服务器之间引入Ajax引擎,用户执行一个操作,系统可以在后台处理该任务,同时用户可以继续处理其他任务,不需要在提交后等待,从而提高系统性能,使得应用程序更加完善和友好[1],在教学项目的实践和应用中取得了良好的效果。
系统通过AJAX技术减少网络内容传输,使用jQuery访问struts2中的Action, Action获得响应信息,当响应的信息不是一个简单的字符串而是一个对象时,采用Json格式进行交换,Action不需要使用视图资源来显示状态信息,由JSON负责将Action里的状态信息返回给调用页面,完成Ajax交互,然后利用jQuery直接获得JSON格式的数据,在客户端直接绑定到数据控件,而JSON则可以把传输内容缩减到纯数据,从而达到最优。
1.2.1AJAX全称为“Asynchronous JavaScript + XML”(异步JavaScript和XML),是JavaScript、JSON、CSS、HTML等技术的综合。其中HTML是一种文本标记语言,不需要编译,直接由浏览器执行,它通过HTML元素,标签等标记要显示的网页中的各个部分[2];JavaScript是一种基于对象和事件驱动的客户端脚本语言,被设计用来给页面添加交互行为,它可以检测表单的正确性,实现Ajax读、写、改变HTML页面的架构和美化网页效果等[3];JSON是一种适合AJAX应用的轻量级数据交换格式,JSON中的值(value)是用双引号括起来的字符串、数值、对象或者数组等,而且这些结构可以嵌套,使得JSON表达数据有无限的可能,它既可以表达一个简单的key/value,也可以表达一个复杂的Map或List,易于阅读和理解的[4]。
1.2.2jQuery是一个优秀的跨浏览器的JavaScript框架,提供丰富的属性和方法,能更方便地处理HTML 文档、事件、实现动画效果,并且为网站提供AJAX交互,使设计人员不需要在HTML里面插入一堆JS来调用命令,只需定义id即可[5]。
1.2.3Struts2是在WebWork基础上发展起来的一个MVC框架,实现页面跳转与逻辑控制的分离,提供AJAX支持,通过AJAX标志增加互动性和灵活性,而且使用简单。
住院费用查询子系统的开发采用MyEclipse集成Struts2和jQuery框架,数据库设计采用Oracle 10g,同时利用AJAX技术提高页面访问效率。
住院费用查询子系统可以分为4个模块:前台显示模块、客户端处理模块、服务器端响应模块和数据库管理模块。其中前台显示模块为用户提供各项费用的查询和打印,包括住院的费用总统计,和每天的费用详细清单;客户端处理模块获取页面元素,得到用户的住院编号,与服务器交互,更新客户端页面,响应用户事件;服务器端响应模块获取提交数据,验证数据合法性;数据库管理模块访问数据库,返回数据库信息。
2.2.1数据库设计
病历病人基本信息:病历号(主键,recordId),姓名(pName),年龄(age ),家庭住址(address),电话(phone)。
住院病人基本信息:病历号(外键,recordId)、住院编号(主键,pId)、科室(department)、病区(room)、床号(bed)、住院日期(inDate)、出院日期(outDate)、主治医师(doctorId)、医保费用类别(insuranceType),费用总额(totalCost)、医保自付比例(rate)、应付费用总额(payCost),结算情况(settlement)。
病人费用信息:住院编号(外键,pId),项目名称(feeName)、项目编码(主键,feeId)、规格(specification)、计量单位(unit)、单价(price)、数量(feeNumber)、项目费用(feeCost=price*feeNumber)、日期(date)。
其中住院病人信息通过“recordId”(外键)和病人基本信息中的病历号(主键)关联,可以查询病人姓名和住院费用等基本信息,通过“pId”(主键)和病人费用信息中的pId(外键)关联,查询每天的费用信息和总额。病人费用信息又可以通过”feeId”(外键)与其他子系统中的数据库表如药品数据库等相关联,完成数据的查询。
2.2.2类设计
①建Pinfo(病历病人信息)类、Patient(住院病人信息)类和Pcost(病人费用信息)实体类,属性分别和数据库中各个字段相对应,添加setter、getter方法。
②建PAllcost和PEverydaycost类,分别包含pId、pName、pCost属性和pId、pName、feeName、 feeNumber、price、 feeCost、date属性,添加setter、getter方法,和在页面上要显示信息一致。
③建PatientManager类,创建queryAllCost()方法,连接数据库,根据传入的住院编号参数(pid),查询病人的费用总额信息,如果找到信息则把结果存放在pallcost对象中(PAllcost类型)中返回否则提示错误信息。创建queryEverydayCost()方法,根据住院日期和出院日期,查询每一天的费用信息,存放在peverydaycostlist并返回。
④建action,如PAction.java,定义pid,pallcost和peverydaycostlist属性,new一个PatientManager对象,定义方法给pallcost和peverydaycostlist赋值,这样action能够通过pid获得AJAX传递的住院编号,AJAX也能通过json获得返回的结果。
①下载必要的jar包和jquery-*.*.*.js加入到web工程,包括json类库、struts2的包和struts2-json-plugin.jar,它可以将Struts2 Action中的结果直接返回为JSON。
②创建struts.xml,添加专为ajax使用的package,配置包时继承json-default包,因为在该包下才有json类型的Result,以总的费用查询为例部分关键代码如下:
pAllcost。pId, pAllcost。pName, pAllcost。pCost, //param定义包含pAllcost的属性
①创建index.jsp,共有两个查询,一是住院信息和总费用的查询,二是每天的费用信息查询,返回的结果是费用的列表。为页面中的按钮事件注册单击事件,把这些事件和校验事件代码单独的放到一个querycost.js文件里。要使用jQuery,需要在页面之中引入jQuery库,另外还需引入自定义的querycost.js文件,如下:
JSP页面需要一个文本框、两个按钮和一个空白的div层,用于显示服务器端返回的处理结果,按钮的单击事件触发queryAll()方法。部分代码如下:
住院编号: //焦点离开事件触发校验
onclick="queryAllcost()" />
function queryAllcost(){
$.getJSON("PAction?pid="+$("#pid").val(),null,function callback(data){
var cost= eval("("+data+")");//解析JSON var Allcost=" ";
Allcost+= "住院编号: "+cost.pallcost.pId+" 姓名 : "+ cost.pallcost.pName+" 应付费用信息: "+ cost.pallcost.pCost;}) //显示病人的住院编号,姓名和应付费用信息$("#result").html(Allcost);}}
②PAction部分代码如下: private String pid; private PALLcost pallcost;
private List
省略getter和setter方法
public String returnPallcost() {
patientmanager.queryAllCost(pid);// 根据病人的ID获取数据
return SUCCESS; }}
住院费用查询子系统作为java-WEB项目的一部分,采用AJAX技术提高了用户体验,为整个系统的设计和开发打下良好的基础,提高了整个系统的性能和实用性,同时也在教学项目的实践和应用中取得了良好的效果。
[1] 张桂元,贾燕枫,姜波.征服Ajax Web2.0快速入门与项目实践(Java) [M].北京:人民邮电出版社,2006:3-10.
[2] Oliver D, Morrison M. HTML与CSS入门经典[M].第7版.陈秋萍,译.北京:人民邮电出版社,2007:10-15.
[3] 叶青.完全手册:HTML+CSS+JavaScript实用详解[M].北京:电子工业出版社,2008: 90-100.
[4] 杨旭士.基于JQuery框架的Web查询视图设计与实现[J].计算机与现代化杂志,2010,8(2):128-129.
[5] 丁波,晁爱农. 基于Struts2框架的AJAX开发研究[J].计算机工程与设计杂志,2009,30(16):3910-3912.