From d5db1ea544362a0e61622ca640dcb9a26e41d8f5 Mon Sep 17 00:00:00 2001 From: zengwh Date: Fri, 18 Sep 2020 14:01:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC20200918?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=B8=A4=E5=BC=A0=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=EF=BC=8C=E9=A6=96=E6=AC=A1=E6=8A=A4=E7=90=86=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=8E=92=E5=89=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/emr/controller/FontController.java | 42 ++- .../com/emr/controller/RecordController.java | 142 ++++++++ src/main/java/com/emr/dao/RecordMapper.java | 34 ++ .../ipml/Archive_DetailServiceImpl.java | 82 +++-- .../com/emr/service/ipml/RecordService.java | 290 +++++++++++++++ .../java/com/emr/util/ExportExcelUtil.java | 2 +- .../java/com/emr/util/HttpClientTool.java | 2 +- src/main/java/com/emr/vo/SubmitRecord.java | 34 ++ .../com/emr/vo/SubmitRecordStatistics.java | 16 + src/main/resources/mapper/RecordMapper.xml | 293 +++++++++++++++ .../mapper/RecordStatisticsMapper.xml | 6 +- .../views/beHospitaledDir/beHospList.jsp | 295 +++++++++------ src/main/webapp/WEB-INF/views/index.jsp | 2 +- .../WEB-INF/views/record/signedRecord.jsp | 136 +++++++ .../WEB-INF/views/record/submitRecord.jsp | 160 +++++++++ src/main/webapp/static/css/comm.css | 13 +- .../js/hospitalCommom/hospitalCommom.js | 208 +++++++++++ .../webapp/static/js/record/signedRecord.js | 336 ++++++++++++++++++ .../{recordStatistics.js => submitRecord.js} | 323 ++++++++++++++--- .../static/js/showRecord/showRecordIframe.js | 20 +- .../static/js/statistics/statisticsCommom.js | 15 + 21 files changed, 2224 insertions(+), 227 deletions(-) create mode 100644 src/main/java/com/emr/controller/RecordController.java create mode 100644 src/main/java/com/emr/dao/RecordMapper.java create mode 100644 src/main/java/com/emr/service/ipml/RecordService.java create mode 100644 src/main/java/com/emr/vo/SubmitRecord.java create mode 100644 src/main/java/com/emr/vo/SubmitRecordStatistics.java create mode 100644 src/main/resources/mapper/RecordMapper.xml create mode 100644 src/main/webapp/WEB-INF/views/record/signedRecord.jsp create mode 100644 src/main/webapp/WEB-INF/views/record/submitRecord.jsp create mode 100644 src/main/webapp/static/js/record/signedRecord.js rename src/main/webapp/static/js/record/{recordStatistics.js => submitRecord.js} (59%) diff --git a/src/main/java/com/emr/controller/FontController.java b/src/main/java/com/emr/controller/FontController.java index b871834..22381b2 100644 --- a/src/main/java/com/emr/controller/FontController.java +++ b/src/main/java/com/emr/controller/FontController.java @@ -12,7 +12,6 @@ import com.emr.service.ipml.ZdAssortService; import com.emr.util.ExceptionPrintUtil; import com.emr.util.Msg; import com.emr.vo.ArchiveFlowInfoVo; -import com.emr.vo.User; import net.sf.json.JSONObject; import org.apache.commons.lang3.StringUtils; import org.apache.http.client.methods.CloseableHttpResponse; @@ -23,7 +22,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @@ -33,7 +31,10 @@ import javax.servlet.http.HttpSession; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; /** * @author zwh @@ -264,7 +265,11 @@ public class FontController { //抽取首次病程记录 String strTemp = "首次病程"; String assortId = "AFB9FBE656D7492C80AEDE6E685A851A"; + //定义护理记录里的首次护理记录排前头 + String nurseTemp = "首次护理"; + String nurseAssortId = "C70E8C427A3648B79BE80798C08F4D12"; Archive_Detail detailTemp = new Archive_Detail(); + Archive_Detail nurseDetailVoTemp = new Archive_Detail(); //分类去重 for(Archive_Detail detail : list){ assortList.add(detail.getSubassort()); @@ -273,6 +278,9 @@ public class FontController { if(StringUtils.isNotBlank(title) && detail.getTitle().contains(strTemp)){ detailTemp = detail; } + if(StringUtils.isNotBlank(title) && detail.getTitle().contains(nurseTemp)){ + nurseDetailVoTemp = detail; + } } //组织树 int id = 1; @@ -301,6 +309,7 @@ public class FontController { int count = 0; //定义是否添加了首次病程 boolean flag = false; + boolean nurseflag = false; for(Archive_Detail detail : list){ if(StringUtils.isNotBlank(detail.getSubassort()) && assortName.equals(detail.getSubassort())){ String assortid = detail.getAssortid(); @@ -320,7 +329,23 @@ public class FontController { flag = true; } } - if(!detail.equals(detailTemp)) { + if(StringUtils.isNotBlank(assortid) && assortid.equals(nurseAssortId)){ + //是护理记录 + if(!nurseflag){ + AssortTypeTree tree2 = new AssortTypeTree(); + //第三层,资料名称 + count++; + tree2.setId(id); + tree2.setParentId(twoParentId); + tree2.setName(nurseDetailVoTemp.getTitle()); + tree2.setSelfId(nurseDetailVoTemp.getId()); + tree2.setChecked("true"); + treeList.add(tree2); + id++; + nurseflag = true; + } + } + if(!detail.equals(detailTemp) && !detail.equals(nurseDetailVoTemp)) { AssortTypeTree tree2 = new AssortTypeTree(); //第三层,资料名称 count++; @@ -355,8 +380,13 @@ public class FontController { public Msg getPdfToPdf(HttpServletResponse response,String detailIds,HttpSession session){ try { Archive_Detail detail = new Archive_Detail(); - detail.setTitle(detailIds); - archiveDetailService.selectByIdStrFont(response,session,detail); + if(StringUtils.isNotBlank(detailIds)){ + detail.setTitle(detailIds); + archiveDetailService.selectByIdStrFont(response,session,detail); + }else{ + //存至session + session.setAttribute("showRecord",null); + } return Msg.success(); } catch (Exception e) { ExceptionPrintUtil.printException(e); diff --git a/src/main/java/com/emr/controller/RecordController.java b/src/main/java/com/emr/controller/RecordController.java new file mode 100644 index 0000000..c797a57 --- /dev/null +++ b/src/main/java/com/emr/controller/RecordController.java @@ -0,0 +1,142 @@ +package com.emr.controller; + +import com.emr.entity.OffsetLimitPage; +import com.emr.service.ipml.RecordService; +import com.emr.util.ExceptionPrintUtil; +import com.emr.util.ExportExcelUtil; +import com.emr.util.Msg; +import com.emr.vo.SubmitRecord; +import com.emr.vo.SubmitRecordStatistics; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletResponse; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +@Controller +@RequestMapping("record/") +public class RecordController { + @Autowired + private RecordService recordService; + /** + * 病案提交统计 + * @return + */ + @RequestMapping("submitRecord") + public String submitRecord(){ + return "record/submitRecord"; + } + + /** + * 病案提交统计分页查询 + * @return + */ + @RequestMapping("getSubmitRecordList") + @ResponseBody + public OffsetLimitPage getSubmitRecordList(Integer offset, Integer limit,String startDate,String endDate,String deptName){ + if(offset != null && limit != null) { + PageHelper.offsetPage(offset, limit); + } + List submitRecords = recordService.selectCountGroupDept(startDate,endDate,deptName); + return new OffsetLimitPage((Page) submitRecords); + } + + /** + * 病案提交导出 + * @param response + * @param startDate + * @param endDate + * @param deptName + */ + @ResponseBody + @RequestMapping(value = "/exportExcelSubmit") + public void exportExcelSubmit(HttpServletResponse response,String startDate,String endDate,String deptName){ + String tableThNames = "科室名称,出院人数,医生已提交,医生未提交,医生提交率," + + "医生质控员已提交,医生质控员未提交,医生质控员提交率," + + "科主任已提交,科主任未提交,科主任提交率," + + "护士已提交,护士未提交,护士提交率," + + "护士质控员已提交,护士质控员未提交,护士质控员提交率," + + "护士长已提交,护士长未提交,护士长提交率"; + String fieldCns = "deptNameCn,count,doctorSubmitCount,unDoctorSubmitCount,doctorSubmitPercent," + + "doctorCheckCount,unDoctorCheckCount,doctorCheckPercent," + + "directorCheckCount,unDirectorCheckCount,directorCheckPercent," + + "nurseSubmitCount,unNurseSubmitCount,nurseSubmitPercent," + + "nurseCheckCount,unNurseCheckCount,nurseCheckPercent," + + "headNurseCount,unHeadNurseCount,headNursePercent"; + //构造excel的数据 + try { + List list = recordService.selectCountGroupDept(startDate, endDate, deptName); + //文件名 + String fileName = "病案提交统计" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls"; + //ExportExcelUtil + ExportExcelUtil exportExcelUtil = new ExportExcelUtil(); + //导出excel的操作 + exportExcelUtil.expordExcel(tableThNames,fieldCns,list,fileName,response); + }catch (Exception e){ + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + } + } + + @RequestMapping("signedRecord") + public String signedRecord(){ + return "record/signedRecord"; + } + + /** + * 统计总病历数,已提交数,已归档数,已采集完整数 + */ + @RequestMapping("selectCount") + @ResponseBody + public Msg selectCount(String startDate,String endDate,String deptName) throws Exception{ + SubmitRecordStatistics recordStatistics = recordService.selectCount(startDate, endDate, deptName); + return Msg.success().add("record",recordStatistics); + } + + /** + * 病案提交统计分页查询 + * @return + */ + @RequestMapping("getSignedRecordList") + @ResponseBody + public OffsetLimitPage getSignedRecordList(Integer offset, Integer limit,String startDate,String endDate,String deptName,Integer dateFlag){ + if(offset != null && limit != null) { + PageHelper.offsetPage(offset, limit); + } + List submitRecords = recordService.getSignedRecordList(startDate,endDate,deptName,dateFlag); + return new OffsetLimitPage((Page) submitRecords); + } + + /** + * 病案签收导出 + * @param response + * @param startDate + * @param endDate + * @param deptName + */ + @ResponseBody + @RequestMapping(value = "/exportExcelSigned") + public void exportExcelSigned(HttpServletResponse response,String startDate,String endDate,String deptName,Integer dateFlag){ + String tableThNames = "出院日期,出院科室,出院人数,采集完整,已提交,已归档,完整率,提交率,归档率"; + String fieldCns = "disDate,deptNameCn,allCount,count3,count1,count2,count3Percent,count1Percent,count2Percent"; + //构造excel的数据 + try { + List list = recordService.getSignedRecordList(startDate, endDate, deptName,dateFlag); + //文件名 + String fileName = "病案室签收统计" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls"; + //ExportExcelUtil + ExportExcelUtil exportExcelUtil = new ExportExcelUtil(); + //导出excel的操作 + exportExcelUtil.expordExcel(tableThNames,fieldCns,list,fileName,response); + }catch (Exception e){ + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/emr/dao/RecordMapper.java b/src/main/java/com/emr/dao/RecordMapper.java new file mode 100644 index 0000000..749830f --- /dev/null +++ b/src/main/java/com/emr/dao/RecordMapper.java @@ -0,0 +1,34 @@ +package com.emr.dao; + +import com.emr.vo.SubmitRecord; +import com.emr.vo.SubmitRecordStatistics; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface RecordMapper { + //查询分组科室数量 + List selectCountGroupDept(@Param("startDate")String startDate, + @Param("endDate")String endDate, + @Param("deptName")String deptName); + //根据审核角色id和分组科室查询该科室完成份数 + List selectCountByRoleAndDeptName(@Param("startDate")String startDate, + @Param("endDate")String endDate, + @Param("deptName")String deptName, + @Param("roleId")Integer roleId, + @Param("backRoleId")Integer backRoleId); + //根据科室分组查询护士长审核份数 + List selectCountWithHeadNurse(@Param("startDate")String startDate, + @Param("endDate")String endDate, + @Param("deptName")String deptName); + //统计总病历数,已提交数,已归档数,已采集完整数 + SubmitRecordStatistics selectCount(@Param("startDate")String startDate, + @Param("endDate")String endDate, + @Param("deptName")String deptName); + //按日期分组查询出院人数,归档情况,提交情况,资料完整情况 + List selectCountWithDate(@Param("startDate")String startDate, + @Param("endDate")String endDate, + @Param("deptName")String deptName, + @Param("dateFlag")Integer dateFlag); + +} diff --git a/src/main/java/com/emr/service/ipml/Archive_DetailServiceImpl.java b/src/main/java/com/emr/service/ipml/Archive_DetailServiceImpl.java index a50276c..e8a3567 100644 --- a/src/main/java/com/emr/service/ipml/Archive_DetailServiceImpl.java +++ b/src/main/java/com/emr/service/ipml/Archive_DetailServiceImpl.java @@ -41,41 +41,46 @@ public class Archive_DetailServiceImpl implements Archive_DetailService { List list = archiveDetailMapper.detailByClo(record); OffsetLimitPage offsetLimitPage = new OffsetLimitPage((Page) list); if(!CollectionUtils.isEmpty(list)) { - //定义新的集合。病程记录分类中的首次病程记录排前头 + //TODO 定义新的集合。病程记录分类中的首次病程记录排前头 String strTemp = "首次病程"; String assortId = "AFB9FBE656D7492C80AEDE6E685A851A"; + //定义护理记录里的首次护理记录排前头 + String nurseTemp = "首次护理"; + String nurseAssortId = "C70E8C427A3648B79BE80798C08F4D12"; List returnList = new Page<>(); - //定义是否存在首次病程 - boolean flagTemp = false; //定义接收首次病程记录的对象 Archive_Detail_Vo detailVoTemp = new Archive_Detail_Vo(); + Archive_Detail_Vo nurseDetailVoTemp = new Archive_Detail_Vo(); for (int i = 0; i < list.size(); i++) { if (list.get(i).getAssortId().equals(assortId) && list.get(i).getTitle().contains(strTemp)) { detailVoTemp = list.get(i); - list.remove(i); - flagTemp = true; - break; + } + if (list.get(i).getAssortId().equals(nurseAssortId) && list.get(i).getTitle().contains(nurseTemp)) { + nurseDetailVoTemp = list.get(i); } } - if (flagTemp) { - if (!CollectionUtils.isEmpty(list)) { - //重新排序 - //定义是否已添加首次病程 - boolean flag = false; - for (Archive_Detail_Vo detailVo : list) { - if (StringUtils.isNotBlank(detailVo.getAssortId()) && detailVo.getAssortId().equals(assortId) && !flag) { - returnList.add(detailVoTemp); - flag = true; - } + if (!CollectionUtils.isEmpty(list)) { + //重新排序 + //定义是否已添加首次病程 + boolean flag = false; + boolean nurseFlag = false; + for (Archive_Detail_Vo detailVo : list) { + if (StringUtils.isNotBlank(detailVo.getAssortId()) && detailVo.getAssortId().equals(assortId) && !flag) { + returnList.add(detailVoTemp); + flag = true; + } + if (StringUtils.isNotBlank(detailVo.getAssortId()) && detailVo.getAssortId().equals(nurseAssortId) && !nurseFlag) { + returnList.add(nurseDetailVoTemp); + nurseFlag = true; + } + if(StringUtils.isNotBlank(detailVo.getTitle()) && + !detailVo.getTitle().contains(strTemp) && !detailVo.getTitle().contains(nurseTemp)) { returnList.add(detailVo); } - } else { - //只有首次病程记录的情况 - returnList.add(detailVoTemp); } - ((Page) returnList).setTotal(offsetLimitPage.getTotal()); - return new OffsetLimitPage((Page) returnList); } + ((Page) returnList).setTotal(offsetLimitPage.getTotal()); + return new OffsetLimitPage((Page) returnList); } return offsetLimitPage; } @@ -119,20 +124,27 @@ public class Archive_DetailServiceImpl implements Archive_DetailService { public List mulFile2OneById(HttpServletResponse response,List arList) { List pdfList = new ArrayList<>(); if (arList != null && !arList.isEmpty()) { - //抽取首次病程记录 + //TODO 抽取首次病程记录 String strTemp = "首次病程"; String assortId = "AFB9FBE656D7492C80AEDE6E685A851A"; - String strPath = ""; - for (int i = 0; i < arList.size(); i++) { - String assortid = arList.get(i).getAssortid(); - if(StringUtils.isNotBlank(assortid) && assortid.equals(assortId) && arList.get(i).getTitle().contains(strTemp)){ - strPath = arList.get(i).getPdfPath(); - break; - } - } + //定义护理记录里的首次护理记录排前头 + String nurseTemp = "首次护理"; + String nurseAssortId = "C70E8C427A3648B79BE80798C08F4D12"; if(!CollectionUtils.isEmpty(arList)) { + String strPath = ""; + String nursePath = ""; + for (int i = 0; i < arList.size(); i++) { + String assortid = arList.get(i).getAssortid(); + if(StringUtils.isNotBlank(assortid) && assortid.equals(assortId) && arList.get(i).getTitle().contains(strTemp)){ + strPath = arList.get(i).getPdfPath(); + } + if(StringUtils.isNotBlank(assortid) && assortid.equals(nurseAssortId) && arList.get(i).getTitle().contains(nurseTemp)){ + nursePath = arList.get(i).getPdfPath(); + } + } //定义是否添加首次病程 boolean flag = false; + boolean nurseFlag = false; for (Archive_Detail detail : arList) { String str = detail.getPdfPath(); if (StringUtils.isNoneBlank(str)) { @@ -141,14 +153,16 @@ public class Archive_DetailServiceImpl implements Archive_DetailService { pdfList.add(strPath); flag = true; } - if(!detail.getPdfPath().equals(strPath)){ + //护理记录单先添加首次护理 + if (detail.getAssortid().equals(nurseAssortId) && !nurseFlag) { + pdfList.add(nursePath); + nurseFlag = true; + } + if(!detail.getPdfPath().equals(strPath) && !detail.getPdfPath().equals(nursePath)){ pdfList.add(str); } } } - }else{ - //只有首次病程记录的情况 - pdfList.add(strPath); } } return pdfList; diff --git a/src/main/java/com/emr/service/ipml/RecordService.java b/src/main/java/com/emr/service/ipml/RecordService.java new file mode 100644 index 0000000..b01ae0e --- /dev/null +++ b/src/main/java/com/emr/service/ipml/RecordService.java @@ -0,0 +1,290 @@ +package com.emr.service.ipml; + +import com.emr.dao.Emr_DictionaryMapper; +import com.emr.dao.RecordMapper; +import com.emr.entity.Emr_Dictionary; +import com.emr.vo.SubmitRecord; +import com.emr.vo.SubmitRecordStatistics; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.util.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class RecordService { + @Autowired + private RecordMapper recordMapper; + @Autowired + private Emr_DictionaryMapper dictionaryMapper; + /** + * 病案提交统计 + * @param startDate + * @param endDate + * @param deptName + * @return + */ + public List selectCountGroupDept(String startDate,String endDate,String deptName){ + //按科室查询总出院人数 + List submitRecords = recordMapper.selectCountGroupDept(startDate,endDate,deptName); + if(!CollectionUtils.isEmpty(submitRecords)) { + //获取科室集合 + String deptNames = getDepts(submitRecords); + //查询医生该科室审核份数 + int roleId = 2; + int backRoleId = 9; + List doctorSubmitList = recordMapper.selectCountByRoleAndDeptName(startDate,endDate,deptNames, roleId, backRoleId); + //查询医生质控员该科室审核份数 + roleId = 3; + List doctorCheckList = recordMapper.selectCountByRoleAndDeptName(startDate,endDate,deptNames, roleId, backRoleId); + //查询科主任该科室审核份数 + roleId = 4; + List directorCheckList = recordMapper.selectCountByRoleAndDeptName(startDate,endDate,deptNames, roleId, backRoleId); + //查询护士审核份数 + roleId = 5; + backRoleId = 10; + List nurseList = recordMapper.selectCountByRoleAndDeptName(startDate,endDate,deptNames, roleId, backRoleId); + //查询护士质控员审核份数 + roleId = 6; + List nurseCheckList = recordMapper.selectCountByRoleAndDeptName(startDate,endDate,deptNames, roleId, backRoleId); + //护士长 + List headNurseList = recordMapper.selectCountWithHeadNurse(startDate,endDate,deptNames); + //填充各个角色数据 + selectList(submitRecords,doctorSubmitList,doctorCheckList,directorCheckList,nurseList,nurseCheckList,headNurseList); + } + return submitRecords; + } + + /** + * 填充集合数据 + * @param submitRecords + * @param doctorSubmitList + * @param doctorCheckList + * @param directorCheckList + * @param nurseList + * @param nurseCheckList + * @param headNurseList + */ + private void selectList(List submitRecords, List doctorSubmitList, + List doctorCheckList, + List directorCheckList, + List nurseList, + List nurseCheckList, + List headNurseList) { + for (SubmitRecord obj:submitRecords) { + //计算医生 + //定义医生是否匹配的科室 + boolean doctorFlag = false; + if(!CollectionUtils.isEmpty(doctorSubmitList)) { + for (SubmitRecord objTemp : doctorSubmitList) { + if (obj.getDeptName().equals(objTemp.getDeptName())) { + int count = objTemp.getCount(); + int unCount = obj.getCount() - count; + int countPercent = Math.round(count * 100 / obj.getCount()); + obj.setDoctorSubmitCount(count); + obj.setUnDoctorSubmitCount(unCount); + obj.setDoctorSubmitPercent(countPercent + "%"); + doctorFlag = true; + break; + } + } + } + //未匹配上科室置0 + if(!doctorFlag){ + obj.setDoctorSubmitCount(0); + obj.setUnDoctorSubmitCount(obj.getCount()); + obj.setDoctorSubmitPercent(0 + "%"); + } + + //计算医生质控员 + //定义医生指控员是否匹配的科室 + boolean doctorCheckFlag = false; + for (SubmitRecord objTemp:doctorCheckList) { + if(obj.getDeptName().equals(objTemp.getDeptName())){ + int count = objTemp.getCount(); + int unCount = obj.getCount() - count; + int countPercent = Math.round(count * 100 / obj.getCount()); + obj.setDoctorCheckCount(count); + obj.setUnDoctorCheckCount(unCount); + obj.setDoctorCheckPercent(countPercent + "%"); + doctorCheckFlag = true; + break; + } + } + //未匹配上科室置0 + if(!doctorCheckFlag){ + obj.setDoctorCheckCount(0); + obj.setUnDoctorCheckCount(obj.getCount()); + obj.setDoctorCheckPercent(0 + "%"); + } + + //计算科主任 + //定义科主任是否匹配的科室 + boolean directorCheckFlag = false; + for (SubmitRecord objTemp:directorCheckList) { + if(obj.getDeptName().equals(objTemp.getDeptName())){ + int count = objTemp.getCount(); + int unCount = obj.getCount() - count; + int countPercent = Math.round(count * 100 / obj.getCount()); + obj.setDirectorCheckCount(count); + obj.setUnDirectorCheckCount(unCount); + obj.setDirectorCheckPercent(countPercent + "%"); + directorCheckFlag = true; + break; + } + } + //未匹配上科室置0 + if(!directorCheckFlag){ + obj.setDirectorCheckCount(0); + obj.setUnDirectorCheckCount(obj.getCount()); + obj.setDirectorCheckPercent(0 + "%"); + } + + //计算护士 + //定义护士是否匹配的科室 + boolean nurseFlag = false; + for (SubmitRecord objTemp:nurseList) { + if(obj.getDeptName().equals(objTemp.getDeptName())){ + int count = objTemp.getCount(); + int unCount = obj.getCount() - count; + int countPercent = Math.round(count * 100 / obj.getCount()); + obj.setNurseSubmitCount(count); + obj.setUnNurseSubmitCount(unCount); + obj.setNurseSubmitPercent(countPercent + "%"); + nurseFlag = true; + break; + } + } + //未匹配上科室置0 + if(!nurseFlag){ + obj.setNurseSubmitCount(0); + obj.setUnNurseSubmitCount(obj.getCount()); + obj.setNurseSubmitPercent(0 + "%"); + } + + //计算护士质控员 + //定义护士质控员是否匹配的科室 + boolean nurseCheckFlag = false; + for (SubmitRecord objTemp:nurseCheckList) { + if(obj.getDeptName().equals(objTemp.getDeptName())){ + int count = objTemp.getCount(); + int unCount = obj.getCount() - count; + int countPercent = Math.round(count * 100 / obj.getCount()); + obj.setNurseCheckCount(count); + obj.setUnNurseCheckCount(unCount); + obj.setNurseCheckPercent(countPercent + "%"); + nurseCheckFlag = true; + break; + } + } + //未匹配上科室置0 + if(!nurseCheckFlag){ + obj.setNurseCheckCount(0); + obj.setUnNurseCheckCount(obj.getCount()); + obj.setNurseCheckPercent(0 + "%"); + } + + //定义护士长是否匹配的科室 + boolean headNurseFlag = false; + //计算护士长 + for (SubmitRecord objTemp : headNurseList) { + if (obj.getDeptName().equals(objTemp.getDeptName())) { + int count = objTemp.getCount(); + int unCount = obj.getCount() - count; + int countPercent = Math.round(count * 100 / obj.getCount()); + obj.setHeadNurseCount(count); + obj.setUnHeadNurseCount(unCount); + obj.setHeadNursePercent(countPercent + "%"); + headNurseFlag = true; + break; + } + } + //未匹配上科室置0 + if(!headNurseFlag) { + obj.setHeadNurseCount(0); + obj.setUnHeadNurseCount(obj.getCount()); + obj.setHeadNursePercent("0%"); + } + } + } + + /** + * 组织出院科室code以逗号隔开的字符串形式 + * @param list + * @return + */ + private String getDepts(List list) { + StringBuilder depeNames = new StringBuilder(); + for (SubmitRecord obj:list) { + if(StringUtils.isNotBlank(obj.getDeptName())) { + if (StringUtils.isNoneBlank(depeNames)) { + depeNames.append(",").append(obj.getDeptName()); + } else { + depeNames.append(obj.getDeptName()); + } + } + } + return depeNames.toString(); + } + + /** + * 病案归档统计 + * @param startDate + * @param endDate + * @param deptName + * @return + */ + public SubmitRecordStatistics selectCount(String startDate,String endDate,String deptName) { + SubmitRecordStatistics record = recordMapper.selectCount(startDate, endDate, deptName); + //计算百分比并赋值 + SetStatisticsPercent(record); + return record; + } + + /** + * 病案室签收统计 + * @param startDate + * @param endDate + * @param deptName + * @return + */ + public List getSignedRecordList(String startDate, String endDate, String deptName,Integer dateFlag) { + List list = recordMapper.selectCountWithDate(startDate, endDate, deptName,dateFlag); + String deptNameCn = "全部"; + if(StringUtils.isNotBlank(deptName)){ + Emr_Dictionary dictionary = new Emr_Dictionary(); + dictionary.setCode(deptName); + //转换科室 + List dictionaries = dictionaryMapper.dicByClo(dictionary); + if(!CollectionUtils.isEmpty(dictionaries)){ + deptNameCn = dictionaries.get(0).getName(); + } + } + if(!CollectionUtils.isEmpty(list)){ + for (SubmitRecordStatistics obj:list) { + //计算百分比并赋值 + SetStatisticsPercent(obj); + obj.setDeptNameCn(deptNameCn); + } + } + return list; + } + + /** + * 计算百分比并赋值 + * @param record + */ + private void SetStatisticsPercent(SubmitRecordStatistics record) { + Integer count = record.getAllCount(); + if (count != 0) { + record.setCount1Percent(Math.round(record.getCount1() * 100 / count) + "%"); + record.setCount2Percent(Math.round(record.getCount2() * 100 / count) + "%"); + record.setCount3Percent(Math.round(record.getCount3() * 100 / count) + "%"); + } else { + record.setCount1Percent("0%"); + record.setCount2Percent("0%"); + record.setCount3Percent("0%"); + } + } +} diff --git a/src/main/java/com/emr/util/ExportExcelUtil.java b/src/main/java/com/emr/util/ExportExcelUtil.java index 93710ed..f5f1ab3 100644 --- a/src/main/java/com/emr/util/ExportExcelUtil.java +++ b/src/main/java/com/emr/util/ExportExcelUtil.java @@ -145,7 +145,7 @@ public class ExportExcelUtil { sheet.autoSizeColumn(j); int width = sheet.getColumnWidth(j)*2; if(width < 3000){ - sheet.setColumnWidth(j,sheet.getColumnWidth(j)*17/7); + sheet.setColumnWidth(j,sheet.getColumnWidth(j)*18); } } //冻结表头 diff --git a/src/main/java/com/emr/util/HttpClientTool.java b/src/main/java/com/emr/util/HttpClientTool.java index e738c7e..5bee0d5 100644 --- a/src/main/java/com/emr/util/HttpClientTool.java +++ b/src/main/java/com/emr/util/HttpClientTool.java @@ -30,7 +30,7 @@ public class HttpClientTool { public static final String CHARSET = "UTF-8"; // 采用静态代码块,初始化超时时间配置,再根据配置生成默认httpClient对象 static { - RequestConfig config = RequestConfig.custom().setConnectTimeout(60000).setSocketTimeout(15000).build(); + RequestConfig config = RequestConfig.custom().setConnectTimeout(60000).setSocketTimeout(60000).build(); httpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build(); } diff --git a/src/main/java/com/emr/vo/SubmitRecord.java b/src/main/java/com/emr/vo/SubmitRecord.java new file mode 100644 index 0000000..5c2b022 --- /dev/null +++ b/src/main/java/com/emr/vo/SubmitRecord.java @@ -0,0 +1,34 @@ +package com.emr.vo; + +import lombok.Data; + +@Data +public class SubmitRecord { + private String deptName; + private String deptNameCn; + private Integer count; + + private Integer doctorSubmitCount; + private Integer unDoctorSubmitCount; + private String doctorSubmitPercent; + + private Integer doctorCheckCount; + private Integer unDoctorCheckCount; + private String doctorCheckPercent; + + private Integer directorCheckCount; + private Integer unDirectorCheckCount; + private String directorCheckPercent; + + private Integer nurseSubmitCount; + private Integer unNurseSubmitCount; + private String nurseSubmitPercent; + + private Integer nurseCheckCount; + private Integer unNurseCheckCount; + private String nurseCheckPercent; + + private Integer headNurseCount; + private Integer unHeadNurseCount; + private String headNursePercent; +} diff --git a/src/main/java/com/emr/vo/SubmitRecordStatistics.java b/src/main/java/com/emr/vo/SubmitRecordStatistics.java new file mode 100644 index 0000000..3ac2449 --- /dev/null +++ b/src/main/java/com/emr/vo/SubmitRecordStatistics.java @@ -0,0 +1,16 @@ +package com.emr.vo; + +import lombok.Data; + +@Data +public class SubmitRecordStatistics { + private Integer allCount;//总病历数 + private Integer count1;//已提交数量 + private Integer count2;//已归档数量 + private Integer count3;//已完整数量 + private String count1Percent;//总提交率 + private String count2Percent;//总归档率 + private String count3Percent;//总采集完整率 + private String disDate;//出院日期:格式yyyy-MM-dd + private String deptNameCn;//科室 +} diff --git a/src/main/resources/mapper/RecordMapper.xml b/src/main/resources/mapper/RecordMapper.xml new file mode 100644 index 0000000..e9864fa --- /dev/null +++ b/src/main/resources/mapper/RecordMapper.xml @@ -0,0 +1,293 @@ + + + + + + + + AND CONVERT(varchar(10),archive_master.discharge_date_time, 23) != '1801-02-03' + + AND archive_master.dept_name in (${deptName}) + + + + and discharge_date_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and + #{endDate,jdbcType=NCHAR}+ ' 23:59:59' + + + and discharge_date_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) + + + and discharge_date_time <= #{endDate,jdbcType=NCHAR}+ ' 23:59:59' + + + + + AND CONVERT(varchar(10),archive_master.discharge_date_time, 23) != '1801-02-03' + + AND archive_master.dept_name in (${deptName}) + + + + + + and discharge_date_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and + #{endDate,jdbcType=NCHAR}+ ' 23:59:59' + + + and CONVERT(VARCHAR(7),discharge_date_time,120) between #{startDate,jdbcType=NCHAR} and + #{endDate,jdbcType=NCHAR} + + + and CONVERT(VARCHAR(4),discharge_date_time,120) between #{startDate,jdbcType=NCHAR} and + #{endDate,jdbcType=NCHAR} + + + + + + + and discharge_date_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) + + + and CONVERT(VARCHAR(7),discharge_date_time,120) >= #{startDate,jdbcType=NCHAR} + + + and CONVERT(VARCHAR(4),discharge_date_time,120) >= #{startDate,jdbcType=NCHAR} + + + + + + + and discharge_date_time <= #{endDate,jdbcType=NCHAR}+ ' 23:59:59' + + + and CONVERT(VARCHAR(7),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR} + + + and CONVERT(VARCHAR(4),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR} + + + + + + + + + + + + + + + + + + + + + CONVERT ( VARCHAR ( 10 ), archive_master.discharge_date_time, 23 ) + + + CONVERT ( VARCHAR ( 7 ), archive_master.discharge_date_time, 120 ) + + + CONVERT ( VARCHAR ( 4 ), archive_master.discharge_date_time, 120 ) + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/RecordStatisticsMapper.xml b/src/main/resources/mapper/RecordStatisticsMapper.xml index 07b41c8..332edef 100644 --- a/src/main/resources/mapper/RecordStatisticsMapper.xml +++ b/src/main/resources/mapper/RecordStatisticsMapper.xml @@ -5,6 +5,7 @@ + AND CONVERT(varchar(10),archive_master.discharge_date_time, 23) != '1801-02-03' AND archive_master.dept_name IN @@ -40,13 +41,8 @@ + 入院科室: + +
+ 入院日期: +
+
+ 缺陷管理: + +
+ +
+
+ 出院科室: +
+
+ 出院日期: +
+
+ 完整性审核: +
+
- + + diff --git a/src/main/webapp/WEB-INF/views/index.jsp b/src/main/webapp/WEB-INF/views/index.jsp index c9a8a78..9d29b5e 100644 --- a/src/main/webapp/WEB-INF/views/index.jsp +++ b/src/main/webapp/WEB-INF/views/index.jsp @@ -354,7 +354,7 @@