From b1253f28b12a2e6a2fdc4aba74bac586e768e95a Mon Sep 17 00:00:00 2001 From: ALW <850658129@qq.com> Date: Fri, 15 Apr 2022 14:44:04 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=BD=92=E6=A1=A3=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=BC=BA=E9=99=B7=E5=88=97=E8=A1=A8=E8=AF=84=E5=88=86=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E9=94=99=E8=AF=AF=E4=BF=AE=E5=A4=8D=202=E3=80=81?= =?UTF-8?q?=E5=BD=92=E6=A1=A3=E7=B3=BB=E7=BB=9F=E5=88=9D=E5=AE=A1=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=EF=BC=8C=E6=97=A0=E6=8A=A4=E5=A3=AB=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=EF=BC=8C=E6=8C=89=E7=BC=BA=E9=99=B7=E6=9F=A5=E8=AF=A2=E6=97=B6?= =?UTF-8?q?=E4=BC=9A=E6=98=BE=E7=A4=BA=E6=8A=A4=E5=A3=AB=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E7=BC=BA=E9=99=B7=E6=8C=89=E9=92=AE=E4=BF=AE=E5=A4=8D=203?= =?UTF-8?q?=E3=80=81=E5=BD=92=E6=A1=A3=E7=B3=BB=E7=BB=9F=E9=80=80=E5=9B=9E?= =?UTF-8?q?=E7=97=85=E5=8E=86=EF=BC=8C=E5=8F=AA=E9=80=80=E5=9B=9E=E7=BB=99?= =?UTF-8?q?=E7=A7=91=E4=B8=BB=E4=BB=BB=EF=BC=8C=E8=BF=98=E6=9C=AA=E9=80=80?= =?UTF-8?q?=E5=9B=9E=E5=8C=BB=E7=94=9F=E6=8A=A4=E5=A3=AB=EF=BC=8C=E5=8C=BB?= =?UTF-8?q?=E7=94=9F=E6=8A=A4=E5=A3=AB=E7=8A=B6=E6=80=81=E4=BC=9A=E5=8F=98?= =?UTF-8?q?=E6=88=90=E6=9C=AA=E6=8F=90=E4=BA=A4=204=E3=80=81=E5=BD=92?= =?UTF-8?q?=E6=A1=A3=E7=B3=BB=E7=BB=9F=E8=B6=85=E6=9C=9F=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E8=B6=85=E6=9C=9F=E6=97=B6=E9=97=B4=E8=AE=A1=E7=AE=97=E6=9C=89?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E4=BF=AE=E6=94=B9=205=E3=80=81=E7=A4=BA?= =?UTF-8?q?=E8=B8=AA=E5=AF=BC=E5=87=BA=E5=B4=A9=E6=BA=83=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=206=E3=80=81=E6=96=B0=E5=A2=9E=E8=B6=85=E6=9C=9F=E7=9A=84?= =?UTF-8?q?=E7=97=85=E6=A1=88=E6=97=A0=E6=8F=90=E9=86=92=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/emr/controller/FontController.java | 60 +++++ .../com/emr/controller/commitController.java | 2 +- .../controller/medicalOverdueController.java | 126 ++++++++- .../controller/unfileMedicalController.java | 155 ++++++++++- .../com/emr/dao/Archive_MasterMapper.java | 9 + .../dao/MedicalRecordHomepageCacheMapper.java | 4 + .../java/com/emr/dao/OverdueRemindMapper.java | 17 ++ .../com/emr/entity/Archive_Master_Vo.java | 30 +++ .../emr/service/Archive_MasterService.java | 19 ++ .../com/emr/service/OverdueRemindService.java | 17 ++ .../ipml/Archive_MasterServiceImpl.java | 12 + .../ipml/OverdueRemindServiceImpl.java | 39 +++ .../java/com/emr/util/ThreadExcelUtils.java | 9 + src/main/java/com/emr/vo/GetTime.java | 23 ++ src/main/java/com/emr/vo/OverdueRemindVO.java | 32 +++ .../resources/mapper/Archive_MasterMapper.xml | 241 +++++++++++++++--- .../mapper/Emr_Fault_DetailMapper.xml | 56 ++-- .../MedicalRecordHomepageCacheMapper.xml | 12 + .../resources/mapper/overdueRemindMapper.xml | 88 +++++++ src/main/webapp/WEB-INF/jspf/webSocket.jspf | 14 +- .../WEB-INF/views/faultDir/faultList.jsp | 3 +- src/main/webapp/WEB-INF/views/index.jsp | 10 + .../views/lastVerifyDir/lastVerifyList.jsp | 4 +- .../medicalOverdueDir/medicalOverdueList.jsp | 35 +-- .../unfileMedicalDir/unfileMedicalList.jsp | 7 +- 25 files changed, 930 insertions(+), 94 deletions(-) create mode 100644 src/main/java/com/emr/dao/OverdueRemindMapper.java create mode 100644 src/main/java/com/emr/service/OverdueRemindService.java create mode 100644 src/main/java/com/emr/service/ipml/OverdueRemindServiceImpl.java create mode 100644 src/main/java/com/emr/vo/GetTime.java create mode 100644 src/main/java/com/emr/vo/OverdueRemindVO.java create mode 100644 src/main/resources/mapper/overdueRemindMapper.xml diff --git a/src/main/java/com/emr/controller/FontController.java b/src/main/java/com/emr/controller/FontController.java index fb48905d..c0be30ce 100644 --- a/src/main/java/com/emr/controller/FontController.java +++ b/src/main/java/com/emr/controller/FontController.java @@ -5,11 +5,15 @@ import com.emr.dao.Emr_DictionaryMapper; import com.emr.entity.*; import com.emr.service.Archive_DetailService; import com.emr.service.Archive_MasterService; +import com.emr.service.OverdueRemindService; import com.emr.service.Zd_AssortService; import com.emr.service.ipml.TBasicBrowseHistoryService; import com.emr.util.ExceptionPrintUtil; import com.emr.util.Msg; +import com.emr.vo.OverdueRemindVO; import org.apache.commons.lang3.StringUtils; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.HttpClients; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; @@ -51,6 +55,8 @@ public class FontController { private Zd_AssortService assortService; @Autowired private TBasicBrowseHistoryService tBasicBrowseHistoryService; + @Autowired + private OverdueRemindService overdueRemindService; /***************************提供第三方按多个分段id和记账号查询病历pdf***********************************/ /** @@ -406,4 +412,58 @@ public class FontController { ExceptionPrintUtil.printException(e); } } + /** + * 请求权限系统发送信息 + * @param userId 用户id + * @param title 标题 + * @param content 内容 + */ + @ResponseBody + @RequestMapping(value = "sendMessageWith") + public void sendMessageWith(Integer userId, String title, String content) { + title="超期的病案通知"; + OverdueRemindVO overdueRemindVO= new OverdueRemindVO(); + overdueRemindVO.setUserId(userId); + //查询主治医生id + String s = overdueRemindService.selectDoctorId(overdueRemindVO); + overdueRemindVO.setDoctorInCharge(s); + //判断这个医生今天是否已读超期消息提醒 + int i = overdueRemindService.selectOverdueStatcByDoctorId(overdueRemindVO); + if (i ==0) { + //查询该主治医生有多少超期的病案未归档 + String overdueNum = overdueRemindService.selectoverdueNumAndDoctorId(overdueRemindVO); + //调用接口 + // 创建uri + content = "尊敬的医生!您有'" + overdueNum + "'条超期的病案未归档"; + String url = powerUrlHead + "/font/sendMessage?" + + "userId=" + userId.toString() + + "&sysFlag=emr_medical_record" + + "&title=" + title + + "&content=" + content.replace(" ", ""); + // 执行请求 + try { + HttpClients.createDefault().execute(new HttpGet(url)); + //保存到提醒日志 + overdueRemindVO.setDOCTOR_IN_CHARGE(s); + System.out.println("s:::" + s); + overdueRemindService.insertRemind(overdueRemindVO); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** + * 请求权限系统发送信息 + * @param overdueRemindVO 用户id + */ + @ResponseBody + @RequestMapping(value = "updatetOverdueStatc") + public void updatetOverdueStatcByDoctorId(OverdueRemindVO overdueRemindVO) { + //查询主治医生id + String s = overdueRemindService.selectDoctorId(overdueRemindVO); + overdueRemindVO.setDoctorInCharge(s); + overdueRemindService.updatetOverdueStatcByDoctorId(overdueRemindVO); + } + } diff --git a/src/main/java/com/emr/controller/commitController.java b/src/main/java/com/emr/controller/commitController.java index b9a61365..e3b29ae6 100644 --- a/src/main/java/com/emr/controller/commitController.java +++ b/src/main/java/com/emr/controller/commitController.java @@ -59,7 +59,7 @@ public class commitController { public void exportExcel(HttpServletResponse response, Archive_Master_Vo archiveMasterVo) throws Exception { response.setContentType("application/vnd.ms-excel;charset=UTF-8"); String[] header = {"病历清单id","住院号","住院次数","名字","性别","身份证","出院科室","出院日期","主管医生","状态","医生是否提交","医生","医生提交日期","护士是否提交","护士","护士提交日期","是否死亡"}; - String[] fileNames = {"id","inpNo","visitId","name","sex","idNo","deptName","dischargeDateTime","doctorInCharge","archivestate","cmtDoctor","doctorName","cmtDoctorDate","cmtNurse","nurseName","cmtDurseDate","deathFlag"}; + String[] fileNames = {"id","inpNo","visitId","name","sex","idNo","deptName","dischargeDateTime","doctorInCharge","archivestate","cmtDoctor","doctorName","cmtDoctorDate","cmtNurse","nurseName","cmtNurseDate","deathFlag"}; //文件名 String fileName = "科主任审核" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls"; //构造excel的数据 diff --git a/src/main/java/com/emr/controller/medicalOverdueController.java b/src/main/java/com/emr/controller/medicalOverdueController.java index bd808a54..b6c15ed8 100644 --- a/src/main/java/com/emr/controller/medicalOverdueController.java +++ b/src/main/java/com/emr/controller/medicalOverdueController.java @@ -1,5 +1,16 @@ package com.emr.controller; +import com.alibaba.fastjson.JSONObject; +import com.emr.vo.GetTime; +import sun.net.www.protocol.http.HttpURLConnection; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + import com.alibaba.fastjson.JSONObject; import com.emr.dao.MedicalRecordHomepageCacheMapper; import com.emr.entity.Archive_Master_Vo; @@ -14,12 +25,13 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.text.ParseException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; -import java.util.List; @Controller @RequestMapping("/medicalOverdue") @@ -191,8 +203,118 @@ public class medicalOverdueController { ThreadExcelUtils utils = new ThreadExcelUtils(fileName, "", header, fileNames); String result=utils.exportExcelToFilePath(response,utils.listConvert(list)); } +// /** +// * 两个日期相减 +// * @param beginDateStr +// * @param endDateStr +// * @return +// */ +// public static long getDaySub(String beginDateStr,String endDateStr){ +// long day=0; +// SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd"); +// Date beginDate; +// Date endDate; +// try{ +// beginDate = format.parse(beginDateStr); +// endDate= format.parse(endDateStr); +// day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000); +// //System.out.println("相隔的天数="+day); +// } catch (ParseException e){ +// // TODO 自动生成 catch 块 +// e.printStackTrace(); +// } +// return day+1; +// } +// private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); +// /* +// * 传入查询工作日api地址,用于查询当天是否是工作日,返回的是JSON格式的数据,需要在代码中进行转换。 +// * */ +// public static String getData(String addess){ +// URL url = null; +// HttpURLConnection httpConn = null; +// BufferedReader in = null; +// StringBuffer sb = new StringBuffer(); +// try{ +// url = new URL(addess); +// in = new BufferedReader(new InputStreamReader(url.openStream(),"utf-8") ); +// String str = null; +// while((str = in.readLine()) != null) { +// sb.append( str ); +// } +// } catch (Exception ex) { +// ex.printStackTrace(); +// } finally{ +// try{ +// if(in!=null) { +// in.close(); +// } +// }catch(IOException ex) { +// ex.printStackTrace(); +// } +// } +// String data =sb.toString(); +// return data; +// } +// /* +// * 计算两个时间点的工作日 +// * +// * */ +// @ResponseBody +// @RequestMapping(value = "/getTimeoutDay") +// public static long getWorkDayBetweenStartAndEnd(GetTime getTime) throws ParseException { +// List getTimeList= new ArrayList<>(); +// getTimeList.add(getTime); +// int timeoutDay = 0; +// //工作日 +// long workDay = 0; +// //先算出两个时间中间的天数 +// long dayOfMiddle = getDaySub(getTime.getStartTime(),getTime.getEndTime()); +// long l = dayOfMiddle - 1; +// System.out.println("dayOfMiddle::::"+dayOfMiddle); +// //从开始时间起,算出中间的周末和及假日 +// for (int i = 0; i < l; i++) { +// Date now = sdf.parse(getTime.getStartTime()); +// Calendar c = Calendar.getInstance(); +// c.setTime(now); +// c.set(Calendar.DATE, c.get(Calendar.DATE) + i); +// String urlData = sdf.format(c.getTime()); +// System.out.println("urlData::::"+urlData); +// String urlDress = "http://timor.tech/api/holiday/info/" + urlData; +// +// System.out.println("urlDress::::"+urlDress); +// //获得当前是否是工作日 +// String data = getData(urlDress); +// System.out.println("data::::"+data); +// JSONObject json = getjson(data); +// System.out.println("json:::::"+json); +// String value = json.get("data").toString(); +// if (value.equals("0")) { +// workDay++; +// } +// timeoutDay = Integer.parseInt(String.valueOf(workDay - 3)); +// } +// if (timeoutDay < 0) { +// return 0; +// } else { +// return timeoutDay; +// } +// } +// //json串转化为json对象 +// public static JSONObject getjson(String data) { +// JSONObject json = JSONObject.parseObject(data); +// return json; +// } + /* + * 计算两个时间点的工作日 + * + * */ - + @RequestMapping(value = "/getTimeoutDay") + public long getWorkDayBetweenStartAndEnd(GetTime getTime) throws ParseException { + int i = archiveMasterService.selectWorkDateNum(getTime); + System.out.println("i:::::::::"+i); + return i; + } } diff --git a/src/main/java/com/emr/controller/unfileMedicalController.java b/src/main/java/com/emr/controller/unfileMedicalController.java index 41850fff..0a5b3a55 100644 --- a/src/main/java/com/emr/controller/unfileMedicalController.java +++ b/src/main/java/com/emr/controller/unfileMedicalController.java @@ -11,6 +11,10 @@ import com.emr.entity.OffsetLimitPage; import com.emr.service.Archive_MasterService; import com.emr.service.Emr_DictionaryService; import com.emr.util.ThreadExcelUtils; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -20,9 +24,11 @@ import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -53,7 +59,7 @@ public class unfileMedicalController { public void exportExcel(HttpServletResponse response, Archive_Master_Vo archiveMasterVo) throws Exception { response.setContentType("application/vnd.ms-excel;charset=UTF-8"); String[] header = {"病历清单id","住院号","住院次数","名字","性别","身份证","入院科室","入院日期","出院科室","出院日期","主管医生","状态","医生是否提交","医生","医生提交日期","护士是否提交","护士","护士提交日期","电子病历医生提交","电子病历护士提交","是否死亡"}; - String[] fileNames = {"id","inpNo","visitId","name","sex","idNo","deptAdmissionTo","admissionDateTime","deptName","dischargeDateTime","doctorInCharge","archivestate","cmtDoctor","doctorName","cmtDoctorDate","cmtNurse","nurseName","cmtDurseDate","emrDoctorCmt","emrNureCmt","deathFlag"}; + String[] fileNames = {"id","inpNo","visitId","name","sex","idNo","deptAdmissionTo","admissionDateTime","deptName","dischargeDateTime","doctorInCharge","archivestate","cmtDoctor","doctorName","cmtDoctorDate","cmtNurse","nurseName","cmtNurseDate","emrDoctorCmt","emrNureCmt","deathFlag"}; //文件名 String fileName = "未归档病历列表" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls"; //构造excel的数据 @@ -88,6 +94,153 @@ public class unfileMedicalController { } } + @ResponseBody + @RequestMapping(value = "/exportExcel2") + public void exportBigDataExcel(HttpServletResponse response, Archive_Master_Vo archiveMasterVo) + throws Exception { + // 最重要的就是使用SXSSFWorkbook,表示流的方式进行操作 + // 在内存中保持100行,超过100行将被刷新到磁盘 + SXSSFWorkbook wb = new SXSSFWorkbook(1000); + Sheet sh = wb.createSheet(); // 建立新的sheet对象 + Row row = sh.createRow(0); // 创建第一行对象 + // -----------定义表头----------- + Cell cel0 = row.createCell(0); + cel0.setCellValue("病历清单id"); + Cell cel2 = row.createCell(1); + cel2.setCellValue("住院号"); + Cell cel3 = row.createCell(2); + cel3.setCellValue("住院次数"); + Cell cel4 = row.createCell(3); + cel4.setCellValue("名字"); + Cell cel5 = row.createCell(4); + cel5.setCellValue("性别"); + Cell cel6 = row.createCell(5); + cel6.setCellValue("身份证"); + Cell cel7 = row.createCell(6); + cel7.setCellValue("入院科室"); + Cell cel8 = row.createCell(7); + cel8.setCellValue("入院日期"); + Cell cel9 = row.createCell(8); + cel9.setCellValue("出院科室"); + Cell cel10 = row.createCell(9); + cel10.setCellValue("出院日期"); + Cell cel11 = row.createCell(10); + cel11.setCellValue("主管医生"); + Cell cel12 = row.createCell(11); + cel12.setCellValue("状态"); + Cell cel13 = row.createCell(12); + cel13.setCellValue("医生是否提交"); + Cell cel14 = row.createCell(13); + cel14.setCellValue("医生"); + Cell cel15 = row.createCell(14); + cel15.setCellValue("医生提交日期"); + Cell cel16 = row.createCell(15); + cel16.setCellValue("护士是否提交"); + Cell cel17 = row.createCell(16); + cel17.setCellValue("护士"); + Cell cel18 = row.createCell(17); + cel18.setCellValue("护士提交日期"); + Cell cel19 = row.createCell(18); + cel19.setCellValue("电子病历医生提交"); + Cell cel20 = row.createCell(19); + cel20.setCellValue("电子病历护士提交"); + Cell cel21 = row.createCell(20); + cel21.setCellValue("是否死亡"); + List list = new ArrayList(); + + // 数据库中存储的数据行 + int page_size = 10000; + // 求数据库中待导出数据的行数 + Integer list_count = archiveMasterService.selectCountNum(archiveMasterVo); + System.out.println("list_count:::::"+list_count); + // 根据行数求数据提取次数 + int export_times = list_count % page_size > 0 ? list_count / page_size + + 1 : list_count / page_size; + // 按次数将数据写入文件 + for (int j = 0; j < export_times; j++) { + list = archiveMasterService.selectByUnfileAndColumn(archiveMasterVo,j + 1, page_size); + int len = list.size() < page_size ? list.size() : page_size; + for (int i = 0; i < len; i++) { + Row row_value = sh.createRow(j * page_size + i + 1); + Cell cel0_value = row_value.createCell(0); + cel0_value.setCellValue(list.get(i).getId()); + Cell cel2_value = row_value.createCell(1); + cel2_value.setCellValue(list.get(i).getInpNo()); + Cell cel3_value = row_value.createCell(2); + cel3_value.setCellValue(list.get(i).getVisitId()); + Cell cel4_value = row_value.createCell(3); + cel4_value.setCellValue(list.get(i).getName()); + Cell cel5_value = row_value.createCell(4); + cel5_value.setCellValue(list.get(i).getSex()); + Cell cel6_value = row_value.createCell(5); + cel6_value.setCellValue(list.get(i).getIdNo()); + Cell cel7_value = row_value.createCell(6); + cel7_value.setCellValue(list.get(i).getDeptAdmissionTo()); + Cell cel8_value = row_value.createCell(7); + cel8_value.setCellValue(list.get(i).getAdmissionDateTime()); + Cell cel9_value = row_value.createCell(8); + cel9_value.setCellValue(list.get(i).getDeptName()); + Cell cel10_value = row_value.createCell(9); + cel10_value.setCellValue(list.get(i).getDischargeDateTime()); + Cell cel11_value = row_value.createCell(10); + cel11_value.setCellValue(list.get(i).getDoctorInCharge()); + Cell cel12_value = row_value.createCell(11); + cel12_value.setCellValue(list.get(i).getArchivestate()); + Cell cel13_value = row_value.createCell(12); + cel13_value.setCellValue(list.get(i).getCmtDoctor()); + Cell cel14_value = row_value.createCell(13); + cel14_value.setCellValue(list.get(i).getDoctorName()); + Cell cel15_value = row_value.createCell(14); + cel15_value.setCellValue(list.get(i).getCmtDoctorDate()); + Cell cel16_value = row_value.createCell(15); + cel16_value.setCellValue(list.get(i).getCmtNurse()); + Cell cel17_value = row_value.createCell(16); + cel17_value.setCellValue(list.get(i).getNurseName()); + Cell cel18_value = row_value.createCell(17); + cel18_value.setCellValue(list.get(i).getCmtNurseDate()); + Cell cel19_value = row_value.createCell(18); + cel19_value.setCellValue(list.get(i).getEmrDoctorCmt()); + Cell cel20_value = row_value.createCell(19); + cel20_value.setCellValue(list.get(i).getEmrNureCmt()); + Cell cel21_value = row_value.createCell(20); + cel21_value.setCellValue(list.get(i).getDeathFlag()); + + + + } + list.clear(); // 每次存储len行,用完了将内容清空,以便内存可重复利用 + } + + OutputStream os = response.getOutputStream(); + //导出excel建议加上重置输出流,可以不加该代码,但是如果不加必须要保证输出流中不应该在存在其他数据,否则导出会有问题 + response.reset(); + //处理乱码 + String fileName = "未归档病历列表" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xlsx"; + //attachment为以附件方式下载 + response.setContentType("application/vnd.ms-excel"); + //代码里面使用Content-Disposition来确保浏览器弹出下载对话框的时候。 + response.setHeader("Content-disposition", "attachment;filename=" + fileName); + response.setBufferSize(1024); + /* File file = new File(filePath); + if (!file.exists()) {//文件夹不存在 + file.mkdirs();//创建目录 + }*/ + //FileOutputStream fout = new FileOutputStream(new File(file, fileName)); + try { + //wb.write(fout); + wb.write(os);//将excel中的数据写到输出流中,用于文件的输出 + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + + + } + + + + } diff --git a/src/main/java/com/emr/dao/Archive_MasterMapper.java b/src/main/java/com/emr/dao/Archive_MasterMapper.java index 47986e9e..e1213d9a 100644 --- a/src/main/java/com/emr/dao/Archive_MasterMapper.java +++ b/src/main/java/com/emr/dao/Archive_MasterMapper.java @@ -191,4 +191,13 @@ public interface Archive_MasterMapper { * @return */ List copyCountList(Archive_Master_Vo record); + + + + /** + * 查询记录数量 + * @param archiveMasterVo + * @return + */ + Integer selectCountNum(Archive_Master_Vo archiveMasterVo); } \ No newline at end of file diff --git a/src/main/java/com/emr/dao/MedicalRecordHomepageCacheMapper.java b/src/main/java/com/emr/dao/MedicalRecordHomepageCacheMapper.java index 24fdc6dc..706ce201 100644 --- a/src/main/java/com/emr/dao/MedicalRecordHomepageCacheMapper.java +++ b/src/main/java/com/emr/dao/MedicalRecordHomepageCacheMapper.java @@ -2,6 +2,8 @@ package com.emr.dao; import com.emr.entity.MedicalRecordHomepageCache; import com.emr.entity.MedicalRecordHomepageCacheExample; +import com.emr.vo.GetTime; + import java.util.List; public interface MedicalRecordHomepageCacheMapper { @@ -18,4 +20,6 @@ public interface MedicalRecordHomepageCacheMapper { int updateByPrimaryKeySelective(MedicalRecordHomepageCache record); int updateByPrimaryKey(MedicalRecordHomepageCache record); + + int selectWorkDateNum(GetTime getTime); } \ No newline at end of file diff --git a/src/main/java/com/emr/dao/OverdueRemindMapper.java b/src/main/java/com/emr/dao/OverdueRemindMapper.java new file mode 100644 index 00000000..2c6bb894 --- /dev/null +++ b/src/main/java/com/emr/dao/OverdueRemindMapper.java @@ -0,0 +1,17 @@ +package com.emr.dao; + +import com.emr.vo.OverdueRemindVO; + +public interface OverdueRemindMapper { + + //查询主管医生id + String selectDoctorId(OverdueRemindVO overdueRemindVO); + //查询主管医医生有多少条超期记录 + String selectoverdueNumAndDoctorId(OverdueRemindVO overdueRemindVO); + // 保存操作日志 + int insertRemind(OverdueRemindVO overdueRemindVO); + //判断超期提醒状态 + int selectOverdueStatcByDoctorId(OverdueRemindVO overdueRemindVO); + //修改日志超期提醒状态 + int updatetOverdueStatcByDoctorId(OverdueRemindVO overdueRemindVO); +} diff --git a/src/main/java/com/emr/entity/Archive_Master_Vo.java b/src/main/java/com/emr/entity/Archive_Master_Vo.java index 22f00ea1..19be3660 100644 --- a/src/main/java/com/emr/entity/Archive_Master_Vo.java +++ b/src/main/java/com/emr/entity/Archive_Master_Vo.java @@ -178,8 +178,38 @@ public class Archive_Master_Vo { //退回急诊室总数 private Integer backNum; + public Integer getOverTime() { + return overTime; + } + + public void setOverTime(Integer overTime) { + this.overTime = overTime; + } + private String isFault; + private Integer overTime; + + public Integer getCountNum() { + return countNum; + } + + public void setCountNum(Integer countNum) { + this.countNum = countNum; + } + + private Integer flag; + + private Integer countNum; + + public Integer getFlag() { + return flag; + } + + public void setFlag(Integer flag) { + this.flag = flag; + } + public String getIsFault() { return isFault; } diff --git a/src/main/java/com/emr/service/Archive_MasterService.java b/src/main/java/com/emr/service/Archive_MasterService.java index cad39524..f9ec1b7f 100644 --- a/src/main/java/com/emr/service/Archive_MasterService.java +++ b/src/main/java/com/emr/service/Archive_MasterService.java @@ -10,6 +10,7 @@ import com.emr.entity.Archive_Master; import com.emr.entity.Archive_Master_Vo; import com.emr.entity.Emr_Fault_Detail; import com.emr.entity.OffsetLimitPage; +import com.emr.vo.GetTime; import javax.servlet.http.HttpServletRequest; import java.util.List; @@ -295,6 +296,24 @@ public interface Archive_MasterService { * @return */ OffsetLimitPage copyCountList(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit); + + + /** + * 查询非工作日日期 + * + * + * + * + */ + int selectWorkDateNum(GetTime getTime); + + + /** + * 查询记录数量 + * @param archiveMasterVo + * @return + */ + Integer selectCountNum(Archive_Master_Vo archiveMasterVo); } diff --git a/src/main/java/com/emr/service/OverdueRemindService.java b/src/main/java/com/emr/service/OverdueRemindService.java new file mode 100644 index 00000000..38b3d65a --- /dev/null +++ b/src/main/java/com/emr/service/OverdueRemindService.java @@ -0,0 +1,17 @@ +package com.emr.service; + +import com.emr.vo.OverdueRemindVO; + +public interface OverdueRemindService { + + //查询主管医生id + String selectDoctorId(OverdueRemindVO overdueRemindVO); + //查询主管医医生有多少条超期记录 + String selectoverdueNumAndDoctorId(OverdueRemindVO overdueRemindVO); + // 保存操作日志 + int insertRemind(OverdueRemindVO overdueRemindVO); + //判断超期提醒状态 + int selectOverdueStatcByDoctorId(OverdueRemindVO overdueRemindVO); + //修改日志超期提醒状态 + int updatetOverdueStatcByDoctorId(OverdueRemindVO overdueRemindVO); +} diff --git a/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java b/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java index 9f9699b6..c25aab12 100644 --- a/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java +++ b/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java @@ -11,6 +11,7 @@ import com.alibaba.fastjson.JSONObject; import com.emr.dao.*; import com.emr.util.HttpClientTool; import com.emr.util.IDHelper; +import com.emr.vo.GetTime; import com.emr.vo.Power_User_Dto; import com.emr.entity.*; import com.emr.service.Archive_MasterService; @@ -497,6 +498,7 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { @Override public OffsetLimitPage selectOverdue(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit) { PageHelper.offsetPage(offset, limit); + List list = archiveMasterMapper.selectOverdue(archiveMasterVo); if(list!=null && list.size()>0) { //查询用户集合 @@ -811,6 +813,16 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { List list = archiveMasterMapper.copyCountList(archiveMasterVo); return new OffsetLimitPage((Page) list); } + + @Override + public int selectWorkDateNum(GetTime getTime) { + return medicalRecordHomepageCacheMapper.selectWorkDateNum(getTime) ; + } + + @Override + public Integer selectCountNum(Archive_Master_Vo archiveMasterVo) { + return archiveMasterMapper.selectCountNum(archiveMasterVo); + } } diff --git a/src/main/java/com/emr/service/ipml/OverdueRemindServiceImpl.java b/src/main/java/com/emr/service/ipml/OverdueRemindServiceImpl.java new file mode 100644 index 00000000..9cc62126 --- /dev/null +++ b/src/main/java/com/emr/service/ipml/OverdueRemindServiceImpl.java @@ -0,0 +1,39 @@ +package com.emr.service.ipml; + +import com.emr.dao.Archive_MasterMapper; +import com.emr.dao.OverdueRemindMapper; +import com.emr.service.OverdueRemindService; +import com.emr.vo.OverdueRemindVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class OverdueRemindServiceImpl implements OverdueRemindService { + + @Autowired + private OverdueRemindMapper overdueRemindMapper; + @Override + public String selectDoctorId(OverdueRemindVO overdueRemindVO) { + return overdueRemindMapper.selectDoctorId(overdueRemindVO); + } + + @Override + public String selectoverdueNumAndDoctorId(OverdueRemindVO overdueRemindVO) { + return overdueRemindMapper.selectoverdueNumAndDoctorId(overdueRemindVO); + } + + @Override + public int insertRemind(OverdueRemindVO overdueRemindVO) { + return overdueRemindMapper.insertRemind(overdueRemindVO); + } + + @Override + public int selectOverdueStatcByDoctorId(OverdueRemindVO overdueRemindVO) { + return overdueRemindMapper.selectOverdueStatcByDoctorId(overdueRemindVO); + } + + @Override + public int updatetOverdueStatcByDoctorId(OverdueRemindVO overdueRemindVO) { + return overdueRemindMapper.updatetOverdueStatcByDoctorId(overdueRemindVO); + } +} diff --git a/src/main/java/com/emr/util/ThreadExcelUtils.java b/src/main/java/com/emr/util/ThreadExcelUtils.java index a1e63295..2da3a841 100644 --- a/src/main/java/com/emr/util/ThreadExcelUtils.java +++ b/src/main/java/com/emr/util/ThreadExcelUtils.java @@ -1,5 +1,6 @@ package com.emr.util; +import com.emr.entity.Archive_Master_Vo; import com.emr.entity.Emr_Fault_Vo; import org.apache.commons.beanutils.PropertyUtilsBean; import org.apache.commons.collections.CollectionUtils; @@ -11,6 +12,7 @@ import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.*; import java.beans.PropertyDescriptor; +import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; @@ -38,6 +40,11 @@ public class ThreadExcelUtils { private String[] hearders; private String[] fields; + public ThreadExcelUtils(FileOutputStream fileOut) { + + } + + public Workbook getWb() { return wb; } @@ -225,6 +232,8 @@ public class ThreadExcelUtils { return params; } + + /*** * 线程写入sheet */ diff --git a/src/main/java/com/emr/vo/GetTime.java b/src/main/java/com/emr/vo/GetTime.java new file mode 100644 index 00000000..4cc90ba7 --- /dev/null +++ b/src/main/java/com/emr/vo/GetTime.java @@ -0,0 +1,23 @@ +package com.emr.vo; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + + + +@Data +public class GetTime { + /** 开始时间 */ + @DateTimeFormat(pattern="yyyy-MM-dd") + private String startTime; + /** 结束时间 */ + @DateTimeFormat(pattern="yyyy-MM-dd") + private String endTime; + /** id */ + private Integer id; + /** 时间 */ + private String date; + /** 1工作日 2休息日 */ + private String flag; + +} diff --git a/src/main/java/com/emr/vo/OverdueRemindVO.java b/src/main/java/com/emr/vo/OverdueRemindVO.java new file mode 100644 index 00000000..25ee50f4 --- /dev/null +++ b/src/main/java/com/emr/vo/OverdueRemindVO.java @@ -0,0 +1,32 @@ +package com.emr.vo; + +import lombok.Data; + +import java.util.Date; + +@Data +public class OverdueRemindVO { + /** 用户Id */ + private Integer userId; + /** power_user表的工号Id */ + private String userName; + /** 超期数量 */ + private String overdueNum; + /**主治医生Id */ + private String doctorInCharge; + /** Master_Following表的工号Id */ + private String handleId; + /**姓名 */ + private String handleName; + /**出院时间 */ + private Date dischargeDateTime; + /**归档时间 */ + private Date handleTime; + /**id */ + private Integer id; + /**i提醒状态1、未读2、已读*/ + private Integer reminderStatus; + /**提醒时间*/ + private Date reminderTime; + private String DOCTOR_IN_CHARGE; +} diff --git a/src/main/resources/mapper/Archive_MasterMapper.xml b/src/main/resources/mapper/Archive_MasterMapper.xml index 345f558c..b3530709 100644 --- a/src/main/resources/mapper/Archive_MasterMapper.xml +++ b/src/main/resources/mapper/Archive_MasterMapper.xml @@ -46,6 +46,7 @@ + @@ -104,6 +105,9 @@ + + + id, patient_id, inp_no, visit_id, name, sex, dept_name, discharge_date_time, ArchiveState, @@ -671,12 +675,18 @@ ,CONVERT(varchar(10),m.discharge_date_time, 120) discharge_date_time,m.ArchiveState,CONVERT(varchar(10),m.admission_date_time, 120) admission_date_time,ISNULL(d.name,m.dept_admission_to) dept_admission_to ,m.check_doctor,m.checked_datetime,m.checked_doctor,m.LockInfo,m.DOCTOR_IN_CHARGE,m.ID_NO,m.DISCHARGE_DISPOSITION,m.dept_code_lend,m.isscaned, m.cmt_doctor,m.cmt_nurse,m.doctor_name,m.nurse_name,m.cmt_doctor_date,m.cmt_nurse_date,m.emr_doctor_cmt,m.emr_nure_cmt,m.death_flag,m.is_scanning, - m.bed_number,ISNULL(s.numb, 0) numb,ISNULL(amf.num, 0) checkFlag + m.bed_number,ISNULL(s.numb, 0) numb,ISNULL(amf.num, 9) checkFlag ,ISNULL(sDoctor.numb, 0) faultDoctorNum,ISNULL(sNurse.numb, 0) faultNurseNum,ISNULL(printTable.num, 0) printNum from archive_master m - LEFT JOIN(select master_id,count(*) num from Archive_Master_Following where following_type=5 GROUP BY master_id ) amf + LEFT JOIN(SELECT amfa.id ,amfa.master_id, amfa.following_type num FROM Archive_Master_Following amfa left join + (SELECT amfb.master_id ida,max(handle_time) t FROM Archive_Master_Following amfb GROUP BY master_id) amfc + on amfa.master_id = amfc.ida + AND amfa.handle_time = amfc.t + WHERE ida is not NULL + AND t is not null + AND following_type in (5,9)) amf on m.id=amf.master_id - LEFT JOIN(select archive_detail_id,count(*) numb from emr_fault_detail where 1=1 and back_flag in ('1','5') GROUP BY archive_detail_id) sDoctor + LEFT JOIN(select archive_detail_id,count(*) numb from emr_fault_detail where 1=1 and back_flag in ('1','5') GROUP BY archive_detail_id) sDoctor on m.id=sDoctor.archive_detail_id LEFT JOIN(select archive_detail_id,count(*) numb from emr_fault_detail where 1=1 and back_flag in ('2','6') GROUP BY archive_detail_id) sNurse on m.id=sNurse.archive_detail_id @@ -1446,26 +1456,41 @@ + + + \ No newline at end of file diff --git a/src/main/resources/mapper/Emr_Fault_DetailMapper.xml b/src/main/resources/mapper/Emr_Fault_DetailMapper.xml index 42843927..8f9914fe 100644 --- a/src/main/resources/mapper/Emr_Fault_DetailMapper.xml +++ b/src/main/resources/mapper/Emr_Fault_DetailMapper.xml @@ -835,40 +835,40 @@ select a.archive_detail_id,a.creater,convert(varchar,a.create_time,120) create_time,m.inp_no,m.visit_id,m.name,a.content,convert(varchar,m.discharge_date_time,120) discharge_date_time,m.dept_name,m.ArchiveState,isnull(m.score,0) score,m.DOCTOR_IN_CHARGE from( - select DISTINCT archive_detail_id,content,creater,create_time from emr_fault_detail - where 1=1 and back_flag in(5,6) and assort_id is not null and assort_id!='' + select DISTINCT archive_detail_id,content,creater,create_time from emr_fault_detail + where 1=1 and back_flag in(5,6) and assort_id is not null and assort_id!='' )a left join( select m.id,m.inp_no,m.visit_id,m.name,m.discharge_date_time,m.dept_name,m.ArchiveState, score,m.DOCTOR_IN_CHARGE from Archive_Master m where 1=1 and ArchiveState not in('作废','已封存','') and ArchiveState is not null and Is_Valid!=1 )m on a.archive_detail_id=m.id - 1=1 and ArchiveState not in('作废','已封存','','取消入院') and ArchiveState is not null - - and a.archive_detail_id=#{archiveDetailId,jdbcType=NCHAR} - - - and a.creater in - - #{item} - - - - and m.inp_no like '%'+#{inpNo,jdbcType=NCHAR}+'%' - - - and m.visit_id=#{visitId,jdbcType=NCHAR} - - - and m.name like '%'+#{name,jdbcType=NCHAR}+'%' - - - and m.dept_name in - - #{item} - - - + 1=1 and ArchiveState not in('作废','已封存','','取消入院') and ArchiveState is not null + + and a.archive_detail_id=#{archiveDetailId,jdbcType=NCHAR} + + + and a.creater in + + #{item} + + + + and m.inp_no like '%'+#{inpNo,jdbcType=NCHAR}+'%' + + + and m.visit_id=#{visitId,jdbcType=NCHAR} + + + and m.name like '%'+#{name,jdbcType=NCHAR}+'%' + + + and m.dept_name in + + #{item} + + + and m.dept_admission_to in #{item} diff --git a/src/main/resources/mapper/MedicalRecordHomepageCacheMapper.xml b/src/main/resources/mapper/MedicalRecordHomepageCacheMapper.xml index 227f8382..9d565fd0 100644 --- a/src/main/resources/mapper/MedicalRecordHomepageCacheMapper.xml +++ b/src/main/resources/mapper/MedicalRecordHomepageCacheMapper.xml @@ -134,4 +134,16 @@ is_add = #{isAdd,jdbcType=INTEGER} where master_id = #{masterId,jdbcType=VARCHAR} + + \ No newline at end of file diff --git a/src/main/resources/mapper/overdueRemindMapper.xml b/src/main/resources/mapper/overdueRemindMapper.xml new file mode 100644 index 00000000..45ac85fc --- /dev/null +++ b/src/main/resources/mapper/overdueRemindMapper.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + INSERT INTO reminder_journal + + DOCTOR_IN_CHARGE, + REMINDER_STATUS, + REMINDER_TIME + + + #{DOCTOR_IN_CHARGE}, + 1, + getdate() + + + + + + + update reminder_journal set REMINDER_STATUS='2' + where + DOCTOR_IN_CHARGE=#{doctorInCharge} and + CONVERT(varchar(8),GETDATE(),112) <= REMINDER_TIME and + REMINDER_TIME <= dateadd(day,1,CONVERT(varchar(8),GETDATE(),112)) + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jspf/webSocket.jspf b/src/main/webapp/WEB-INF/jspf/webSocket.jspf index 768d33fd..69219b3a 100644 --- a/src/main/webapp/WEB-INF/jspf/webSocket.jspf +++ b/src/main/webapp/WEB-INF/jspf/webSocket.jspf @@ -17,12 +17,13 @@ var strSplit = $("#strSplit").val(); var ws = new WebSocket("ws://" + webSocketUrl); ws.onopen = function () { - ws.send(userId); + ws.send("emr_medical_record_"+userId); console.log("连接...") } //处理服务器发送来的数据 ws.onmessage = function (e) { + debugger var msg = e.data.split(strSplit); var a1 = msg[0]; if (msg.length == 5 && msg[2] == 2) { @@ -49,9 +50,16 @@ text: text, timeout: 1000 * 60, buttons: [{ - text: '查看详情', + text: '已读', click: function (e) { - noticeManage1(noticeId) + $.ajax({ + url:"${path}/font/updatetOverdueStatc", + type : "POST", + data:{"userId":userId}, + success:function (data) { + + } + }) } }] }) diff --git a/src/main/webapp/WEB-INF/views/faultDir/faultList.jsp b/src/main/webapp/WEB-INF/views/faultDir/faultList.jsp index d5bcbab8..01385bc8 100644 --- a/src/main/webapp/WEB-INF/views/faultDir/faultList.jsp +++ b/src/main/webapp/WEB-INF/views/faultDir/faultList.jsp @@ -162,6 +162,7 @@ +
@@ -1179,7 +1180,7 @@ window.location.href = "${path}/fault/exportExcel?inpNo=" + inpNo + "&visitId=" + visitId + "&name=" + name + "&startDate=" + startDate + "&endDate=" + endDate + "&archivestate=" + archivestate+ "&deptName="+ deptName + "&doctorInCharge=" + doctorInCharge - + "&assortId=" + assortId + "&creater=" + creater+"&backFlag="+backFlag; + + "&assortId=" + assortId + "&creater=" + creater+"&backFlag="+backFlag+"&score="+score; }); diff --git a/src/main/webapp/WEB-INF/views/index.jsp b/src/main/webapp/WEB-INF/views/index.jsp index 5662d819..dd7feaaf 100644 --- a/src/main/webapp/WEB-INF/views/index.jsp +++ b/src/main/webapp/WEB-INF/views/index.jsp @@ -35,7 +35,17 @@