运行环境:
- 开发工具:IDEA /Webstrom
- 数据库:MYSQL5.7
- 使用框架springboot+vue
- 数据库:MYSQL5.7
项目介绍:
本系统以医护端流程业务为基本需求,深入研究如何有效提高就诊效率,为医生书写病历、开药品提供便利化操作。在提高效率的同时兼顾医疗信息系统该有的网络权限以及安全机制,对输入的数据进行限制以及规范化处理,能减少医护人员失误操作带来的危害,也能主动对信息进行安全校验,减少医生、收费员人为进行校验的时间。优化患者的就医流程,有效减少患者在就诊时等待的时间。
项目分为门诊医生,门诊收费处,门诊药房三个模块。
模块功能:
在系统中实现中病人门诊信息注册,医生登记、修改病人病历,在系统中对病人信息的读取。
医生可以在医生职能页面进行书写病历、注册病人、修改病人信息、开设医嘱。收费处可以在收费模块进行预交金充值、预交金管理、门诊药品扣费、单据作废、退预交金。药房可以在摆药界面进行扣费、摆药。
示例图:
医生模块
病人注册界面
病人信息查看界面
诊断录入辅助
开药弹窗显示
收费模块
预交金充值图
预交金管理图
药房模块
药品扣费
使用教程:
通过idea打开后端项目hisSystem点击运行,
前端项目hisvue在控制终端中输入npm run dev等项目启动成功后
在浏览器输入http://localhost:8080/#/login即可访问本项目。
依赖管理:
2.1前端依赖
前端使用依赖如下,可以在package.json中修改依赖配置。
2.2后端依赖
通过使用maven管理依赖,本系统使用依赖如下。可在pom.xml中修改依赖配置。
2.3数据库
将文件中的sql文件导入到MySQL数据库,数据库名称为hismdb,在后端项目中的application.properties文件中更改数据库配置。
部分代码:
为提升检索速率,结合诊疗项目的字典名以及拼音码在后端进行模糊查询。其主要代码如下:
<el-input width="100%" ref="diagDictFilter"
placeholder="输入名称/编码/拼音码/五笔码检索"
v-model="pageParam.query"
delay-time="200"
@change="searchDict"
:clickselect="false">
</el-input>
searchDict(){
this.pageParam.current=1;
this.selectDict(); //获取项目名称数据
},
//后端代码
@PostMapping("select")
@ResponseBody
public Result selectDiagnosis(@RequestBody com.zhaoshaoyu.hisSystem.entity.Page page){
System.out.println(page.getCurrent());
System.out.println(page.getQuery());
String query =page.getQuery();
Page<DiagnosisDict> diagnosisDictPage = new Page<>(page.getCurrent(),10);
QueryWrapper<DiagnosisDict> wrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(query)) {
wrapper.like("ICD10_NAME", query)
.or()
.like("SPELL_CODE",query);
}
diagnosisDictService.page(diagnosisDictPage, wrapper);
long total = diagnosisDictPage.getTotal();
List<DiagnosisDict> list = diagnosisDictPage.getRecords();
return Result.success().data("list", list).data("total",total);
}
计算药品价格代码如图下所示:
//根据输入的剂量、频次、天数自动计算预计发药量
calculateDrug(item,index){
if(Utils.isNullOrEmpty(item.days) || Utils.isNullOrEmpty(item.dose) || Utils.isNullOrEmpty(item.outpFreqCode)){
return
}
let estimatedDosage = Math.ceil((item.days * item.outpFreqCode * item.dose)/item.packageUnit)
let totalPrice ;
if(!Utils.isNullOrEmpty(estimatedDosage)){
totalPrice = (estimatedDosage * item.referenceRetailPrice)
}
this.$refs.table.editRow(index,{estimatedDosage:estimatedDosage})
this.$refs.table.editRow(index,{totalPrice:totalPrice})
},
收费代码如下
public Result insertAndUpdate(@RequestBody OutpConRecord outpConRecord) throws Exception {
OutpConRecord outpConRecordBefore = this.outpConRecordService.selectBalance(String.valueOf(outpConRecord.getPatientId()));
if(outpConRecord.getPaymentNo()==null){
outpConRecord.setBeforeBalance("0") ;
}
else {
outpConRecord.setBeforeBalance(outpConRecordBefore.getAfterBalance()) ;
}
Integer amount = null;
Integer beforeBalande = null;
if(outpConRecord.getAmount()!=null&&outpConRecord.getBeforeBalance()!=null){
amount = Integer.valueOf(outpConRecord.getAmount());
beforeBalande = Integer.valueOf(outpConRecord.getBeforeBalance());
}
Integer operationCode = null;
operationCode = Integer.valueOf(outpConRecord.getOperationCode());
if(operationCode==1 || operationCode==2){
outpConRecord.setAfterBalance(String.valueOf(beforeBalande+amount));
}else if(operationCode==3 || operationCode==4){
//退预交金 扣费
outpConRecord.setAfterBalance(String.valueOf(beforeBalande-amount));
}
boolean save = outpConRecordService.save(outpConRecord);
if (save) {
return Result.success().data("back", true);
} else {
return Result.error();
}
}