From 4913fbf7cae3941b5ba480bb67b28fa60abf4258 Mon Sep 17 00:00:00 2001 From: zengwh <81383286@qq.com> Date: Mon, 8 Feb 2021 23:12:51 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E7=9A=84=E5=AE=8C=E6=95=B4=E6=80=A7?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E7=AD=96=E7=95=A5=202.=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E6=B5=8F=E8=A7=88=E7=97=85=E6=A1=88=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=9F=A5=E8=AF=A2=E4=B8=8D=E5=88=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3=EF=BC=8C=E4=B8=8B=E6=96=B9pdf.js=E4=B8=8D=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=203.=E5=AE=8C=E6=95=B4=E6=80=A7=E6=83=85=E5=86=B5?= =?UTF-8?q?=E5=80=BC=E7=94=A8=E7=A8=8B=E5=BA=8F=E8=BF=9B=E7=A8=8B=E5=88=B7?= =?UTF-8?q?=E5=80=BC=EF=BC=8C=E4=B8=80=E5=B0=8F=E6=97=B6=E5=88=B7=E4=B8=80?= =?UTF-8?q?=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/beHospitaledController.java | 2 +- .../dao/ArchiveTransferDeptUserMapper.java | 2 + .../com/emr/dao/Archive_DetailMapper.java | 2 + .../com/emr/dao/Archive_MasterMapper.java | 5 + .../java/com/emr/dao/CompleteTaskMapper.java | 44 ++ .../com/emr/entity/Archive_Master_Vo.java | 4 + src/main/java/com/emr/quart/CompleteTask.java | 176 +++++++ src/main/java/com/emr/quart/Task1.java | 9 +- .../emr/service/Archive_MasterService.java | 2 +- .../ipml/Archive_MasterServiceImpl.java | 190 +++---- .../com/emr/service/ipml/RecordService.java | 6 +- .../emr/service/ipml/StatisticsService.java | 13 - src/main/java/com/emr/vo/CompleteVo.java | 16 + src/main/resources/log4j.properties | 12 +- .../mapper/ArchiveTransferDeptUserMapper.xml | 4 + .../resources/mapper/Archive_DetailMapper.xml | 25 + .../resources/mapper/Archive_MasterMapper.xml | 474 ++++++++++++------ .../resources/mapper/CompleteTaskMapper.xml | 144 ++++++ src/main/resources/mapper/RecordMapper.xml | 20 +- .../views/beHospitaledDir/beHospList.jsp | 2 +- .../WEB-INF/views/font/showRecordIframe.jsp | 2 +- src/main/webapp/WEB-INF/views/index.jsp | 2 +- .../webapp/static/js/beHospList/beHospList.js | 8 +- .../static/js/showRecord/showRecordIframe.js | 72 +-- 24 files changed, 917 insertions(+), 319 deletions(-) create mode 100644 src/main/java/com/emr/dao/CompleteTaskMapper.java create mode 100644 src/main/java/com/emr/quart/CompleteTask.java create mode 100644 src/main/java/com/emr/vo/CompleteVo.java create mode 100644 src/main/resources/mapper/CompleteTaskMapper.xml diff --git a/src/main/java/com/emr/controller/beHospitaledController.java b/src/main/java/com/emr/controller/beHospitaledController.java index edcf603..33ecb3b 100644 --- a/src/main/java/com/emr/controller/beHospitaledController.java +++ b/src/main/java/com/emr/controller/beHospitaledController.java @@ -161,7 +161,7 @@ public class beHospitaledController { archiveMasterVo.setEndDateTo(null); } try { - List list = archiveMasterService.selectByColumn(archiveMasterVo,request); + List list = archiveMasterService.selectByColumn(null,null,archiveMasterVo,request); //文件名 String fileName = "出院浏览" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls"; //ExportExcelUtil diff --git a/src/main/java/com/emr/dao/ArchiveTransferDeptUserMapper.java b/src/main/java/com/emr/dao/ArchiveTransferDeptUserMapper.java index ada0a13..7f73cea 100644 --- a/src/main/java/com/emr/dao/ArchiveTransferDeptUserMapper.java +++ b/src/main/java/com/emr/dao/ArchiveTransferDeptUserMapper.java @@ -21,4 +21,6 @@ public interface ArchiveTransferDeptUserMapper extends CommomMapper{ List selectAllByMasterId(@Param("masterId")String masterId); void deleteTransferDeptUserByMasterId(@Param("masterId")String masterId); + + List selectMasterIdByTranDept(@Param("userName")String userName); } \ No newline at end of file diff --git a/src/main/java/com/emr/dao/Archive_DetailMapper.java b/src/main/java/com/emr/dao/Archive_DetailMapper.java index 2174bc7..e5c0e02 100644 --- a/src/main/java/com/emr/dao/Archive_DetailMapper.java +++ b/src/main/java/com/emr/dao/Archive_DetailMapper.java @@ -51,4 +51,6 @@ public interface Archive_DetailMapper { List getSourceByMasterId(@Param("masterid") String masterid); List selectIsScan(@Param("ids") String ids,@Param("fieldFlag")Integer fieldFlag); + + List selectRepeatRecordFileForMasterIds(@Param("masterIds")String masterIds); } \ No newline at end of file diff --git a/src/main/java/com/emr/dao/Archive_MasterMapper.java b/src/main/java/com/emr/dao/Archive_MasterMapper.java index 6860a36..41140ab 100644 --- a/src/main/java/com/emr/dao/Archive_MasterMapper.java +++ b/src/main/java/com/emr/dao/Archive_MasterMapper.java @@ -55,4 +55,9 @@ public interface Archive_MasterMapper { List loadOverTimeDoctorInCharge(); List selectPatientIdsForSign(); + + /** + * 自定义完整性校验查询 + */ + List selectCompleteMasterIds(Archive_Master_Vo master); } \ No newline at end of file diff --git a/src/main/java/com/emr/dao/CompleteTaskMapper.java b/src/main/java/com/emr/dao/CompleteTaskMapper.java new file mode 100644 index 0000000..5afbb99 --- /dev/null +++ b/src/main/java/com/emr/dao/CompleteTaskMapper.java @@ -0,0 +1,44 @@ +package com.emr.dao; + +import com.emr.vo.CompleteVo; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface CompleteTaskMapper { + /** + * 根据最后一次刷表的时间查询出院记录里的且比刷表时间还晚的采集单的masterId集合 + * @param nowDate + * @return + */ + List selectCompleteMasterIds(@Param("nowDate")Date nowDate); + + /** + * 查询自定义的完整性策略缺失 + * @param masterId + * @return + */ + List selectMasterIdByCustomComplete(@Param("masterId") String masterId); + + /** + * 查询同组需要校验的文档名称集合 + * @param isCheck + * @return + */ + List selectRecordNames(@Param("isCheck")Integer isCheck); + + /** + * 查询缺失的检验检查报告集合 + * @param masterId + * @return + */ + List selectMasterIdByInspection(@Param("masterId") String masterId); + + /** + * 判断重复文件 + * @param masterId + * @return + */ + List selectMasterIdByRepeat(@Param("masterId") String masterId); +} 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 43fa84a..c9535ed 100644 --- a/src/main/java/com/emr/entity/Archive_Master_Vo.java +++ b/src/main/java/com/emr/entity/Archive_Master_Vo.java @@ -63,6 +63,10 @@ public class Archive_Master_Vo extends Archive_Master{ private String assortId;//分段id private Integer count;//数量 + + private String masterIds;//id集合 + + private String masterIdsByTranDept;//转科的id集合 } diff --git a/src/main/java/com/emr/quart/CompleteTask.java b/src/main/java/com/emr/quart/CompleteTask.java new file mode 100644 index 0000000..e6058e1 --- /dev/null +++ b/src/main/java/com/emr/quart/CompleteTask.java @@ -0,0 +1,176 @@ +package com.emr.quart; + +import com.emr.dao.CompleteTaskMapper; +import com.emr.dao.Emr_Commom_SetMapper; +import com.emr.entity.Archive_Master; +import com.emr.entity.Emr_Commom_Set; +import com.emr.service.Archive_MasterService; +import com.emr.vo.CompleteVo; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Component +public class CompleteTask { + private static Logger log = Logger.getLogger("compeleteMsg"); + @Autowired + private Emr_Commom_SetMapper commomSetMapper; + @Autowired + private CompleteTaskMapper completeTaskMapper; + @Autowired + private Archive_MasterService archiveMasterService; + @Scheduled(cron="0 0 0/1 * * ?") + public void completeTask(){ + Date newDate = new Date(); + log.info("===================任务开始==================="); + //查询最后一次刷表的时间 + Emr_Commom_Set commomSet = commomSetMapper.selectByPrimaryKey(1); + //根据最后一次刷表的时间查询出院记录里的且比刷表时间还晚的采集单的masterId集合 + List masterList= completeTaskMapper.selectCompleteMasterIds(commomSet.getDate1()); + log.info("此次任务菜单病历有"+masterList.size()+"份"); + //遍历masterId集合 + if(!CollectionUtils.isEmpty(masterList)) { + for(CompleteVo masterVo : masterList) { + String masterId = masterVo.getId(); + //原来的完整性值 + String oldLockInfo = masterVo.getLockInfo(); + //定义新的完整性值 + String newLockInfo = selectLockInfoByMasterId(masterId); + if(StringUtils.isNotBlank(newLockInfo)){ + newLockInfo = newLockInfo.substring(1,newLockInfo.length()); + //控制新值不能超过100个字符,超过100个字符则后面部分用...代替 + if(newLockInfo.length() > 100){ + newLockInfo = newLockInfo.substring(0,100) + "..."; + } + }else{ + newLockInfo = "完整"; + } + //完整性值不一样则更新完整性值 + if(StringUtils.isBlank(oldLockInfo) || !oldLockInfo.equals(newLockInfo)){ + Archive_Master master = new Archive_Master(); + master.setId(masterId); + master.setLockinfo(newLockInfo); + archiveMasterService.updateByClo(master); + //输出更新的原来的和最新的完整性值 + log.info(masterId+":"+oldLockInfo+"-->"+newLockInfo); + } + } + } + //更新最后一次时间 + commomSet.setDate1(newDate); + commomSet.setId(1); + commomSetMapper.updateByPrimaryKeySelective(commomSet); + log.info("===================任务结束==================="); + } + + public String selectLockInfoByMasterId(String masterId){ + //定义缺失的LockInfo + StringBuilder lockInfo = new StringBuilder(); + //查询自定义的完整性策略缺失 + lockInfo = selectMasterIdByCustomComplete(masterId,lockInfo); + //缺少检验检查报告缺失 + lockInfo = selectMasterIdByInspection(masterId,lockInfo); + //判断重复文件 + lockInfo = selectMasterIdByRepeat(masterId,lockInfo); + String newLockInfo = ""; + if(StringUtils.isNotBlank(lockInfo)){ + newLockInfo = lockInfo.substring(1,lockInfo.length()); + //控制新值不能超过100个字符,超过100个字符则后面部分用...代替 + if(newLockInfo.length() > 100){ + newLockInfo = newLockInfo.substring(0,100) + "..."; + } + }else{ + newLockInfo = "完整"; + } + return newLockInfo; + } + + /** + * 查询自定义的完整性策略缺失 + * @param masterId + * @param lockInfo + * @return + */ + private StringBuilder selectMasterIdByCustomComplete(String masterId, StringBuilder lockInfo) { + //查询自定义的完整性策略判断集合 + List masterVos = completeTaskMapper.selectMasterIdByCustomComplete(masterId); + if(!CollectionUtils.isEmpty(masterVos)){ + //定义普通的判断集合 + List generalList = new ArrayList<>(); + //定义可能麻醉存在的集合 + List anaesthesiaList = new ArrayList<>(); + for(CompleteVo vo : masterVos){ + Integer isCheck = vo.getIsCheck(); + if(isCheck == 1){ + generalList.add(vo); + }else if(isCheck == 11){ + anaesthesiaList.add(vo); + } + } + //拼接一般的缺失记录 + lockInfo = appendRecordName(generalList,lockInfo); + if(!CollectionUtils.isEmpty(anaesthesiaList)) { + //查询第一组同时存在校验文档的集合 + List completeList = completeTaskMapper.selectRecordNames(11); + if (completeList.size() != anaesthesiaList.size()) { + //拼接第一组同时存在校验文档的缺失记录 + lockInfo = appendRecordName(anaesthesiaList, lockInfo); + } + } + } + return lockInfo; + } + + /** + * 拼接缺失的档案文件名称 + * @param masterVos + * @param lockInfo + * @return + */ + private StringBuilder appendRecordName(List masterVos, StringBuilder lockInfo) { + if(!CollectionUtils.isEmpty(masterVos)) { + for (CompleteVo obj : masterVos) { + lockInfo.append(",").append(obj.getRecordName()); + } + } + return lockInfo; + } + + /** + * 缺少检验检查报告缺失 + * @param masterId + * @param lockInfo + * @return + */ + private StringBuilder selectMasterIdByInspection(String masterId, StringBuilder lockInfo) { + List list = completeTaskMapper.selectMasterIdByInspection(masterId); + lockInfo = appendRecordName(list, lockInfo); + if(StringUtils.isNotBlank(lockInfo)) { + lockInfo = lockInfo.append("缺失"); + } + return lockInfo; + } + + /** + * 判断重复文件 + * @param masterId + * @param lockInfo + * @return + */ + private StringBuilder selectMasterIdByRepeat(String masterId, StringBuilder lockInfo) { + List list = completeTaskMapper.selectMasterIdByRepeat(masterId); + if(!CollectionUtils.isEmpty(list)){ + for(CompleteVo obj : list){ + lockInfo.append(",").append(obj.getRecordName()).append("重复").append(obj.getCount()).append("份"); + } + } + return lockInfo; + } +} diff --git a/src/main/java/com/emr/quart/Task1.java b/src/main/java/com/emr/quart/Task1.java index bce9c25..a271ccf 100644 --- a/src/main/java/com/emr/quart/Task1.java +++ b/src/main/java/com/emr/quart/Task1.java @@ -4,11 +4,12 @@ import com.emr.dao.ArchiveRemindDeptUserInfoMapper; import com.emr.dao.ArchiveRemindDeptUserMapper; import com.emr.dao.ArchiveRemindcancleDeptMapper; import com.emr.dao.RecordMapper; -import com.emr.entity.*; +import com.emr.entity.ArchiveRemindDeptUser; +import com.emr.entity.ArchiveRemindDeptUserInfo; +import com.emr.entity.ArchiveRemindcancleDept; +import com.emr.entity.Archive_Master_Vo; import com.emr.service.ipml.CommomService; -import com.emr.service.ipml.EmrOvertimeSetService; import com.emr.service.ipml.SendMessageService; -import com.emr.service.ipml.StatisticsService; import com.emr.util.ExceptionPrintUtil; import com.emr.util.IDHelper; import com.emr.util.OracleConnect; @@ -18,9 +19,7 @@ import com.emr.vo.User; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.apache.shiro.util.CollectionUtils; -import org.aspectj.weaver.ast.Var; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.lang.reflect.Field; diff --git a/src/main/java/com/emr/service/Archive_MasterService.java b/src/main/java/com/emr/service/Archive_MasterService.java index c0aede1..30497e3 100644 --- a/src/main/java/com/emr/service/Archive_MasterService.java +++ b/src/main/java/com/emr/service/Archive_MasterService.java @@ -36,7 +36,7 @@ public interface Archive_MasterService { * @param archiveMasterVo * @return */ - List selectByColumn(Archive_Master_Vo archiveMasterVo,HttpServletRequest request); + List selectByColumn(Integer offset, Integer limit,Archive_Master_Vo archiveMasterVo,HttpServletRequest request); //验证字符串是否是数字 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 dcb5cc6..d66bfad 100644 --- a/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java +++ b/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java @@ -54,6 +54,8 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { private Zd_AssortMapper assortMapper; @Autowired private Emr_DictionaryMapper dictionaryMapper; + @Autowired + private ArchiveTransferDeptUserMapper transferDeptUserMapper; /** * 在院列表 * */ @@ -69,96 +71,103 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { * */ @Override public OffsetLimitPage selectByColumn(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit,HttpServletRequest request) { - PageHelper.offsetPage(offset, limit); - //查询出院集合 - List list = selectByColumn(archiveMasterVo,request); - //组织完整性字段 - //list集合的分组分类集合 - if(!CollectionUtils.isEmpty(list)){ - //获取masterIds - String masterIds = getMasterIdsByList(list); - //查询缺少检验检查报告masterId集合 - List selectNotInspectionList = detailMapper.selectNotInspectionList(masterIds); - //查询需要校验完整性的患者的分类集合 - List details = detailMapper.selectAssortIdsByMasterIds(masterIds); - if(!CollectionUtils.isEmpty(details)){ - //查询需要校验完整性的分类集合 - Zd_Assort assort = new Zd_Assort(); - assort.setIsCheck(1); - List assortList = assortMapper.selectAll(assort); - //循环遍历list集合判断是否完整,完整isCheck赋值1,且批量更新LockInfo字段为完整 - updateMasterBySuccess(list, selectNotInspectionList,details, assortList); - } + //设置查询条件审核角色 + setInfoId(archiveMasterVo); + //设置登录用户 + Power_User user = (Power_User)request.getSession().getAttribute("CURRENT_USER"); + if(user.getRoleId() != -100 && user.getRoleId() != 0){ + archiveMasterVo.setUserName(user.getUserName()); } + //查询 + List list = selectByColumn(offset, limit,archiveMasterVo,request); return new OffsetLimitPage((Page) list); } /** * //循环遍历list集合判断是否完整,完整isCheck赋值1,且批量更新LockInfo字段为完整 * @param list - * @param selectNotInspectionList - * @param details - * @param assortList */ - private void updateMasterBySuccess(List list,List selectNotInspectionList, List details, List assortList) { - //循环遍历list集合判断是否完整,完整isCheck赋值1,且批量更新LockInfo字段为完整 - //定义通过完整性校验的masterIds - StringBuilder masterIds = new StringBuilder(); - for(Archive_Master_Vo master : list){ - //定义检验检查报告分类是完整的 - boolean inspectionFlag = true; - //判断是否存在缺少校验检查分类 - if(!CollectionUtils.isEmpty(selectNotInspectionList)){ - for (Archive_Detail detail : selectNotInspectionList) { - if (master.getId().equals(detail.getMasterid())) { - inspectionFlag = false; - break; - } + private void updateMasterBySuccess(List list) { + //list集合的分组分类集合 + if(!CollectionUtils.isEmpty(list)){ + //获取资料完整的masterIds + String masterIds = getMasterIdsByList(list); + Archive_Master_Vo masterVo = new Archive_Master_Vo(); + masterVo.setMasterIds(masterIds); + masterVo.setIsSuccess("1"); + //查询自定义的完整性的masterIds集合 + List selectCompleteMasterIds = archiveMasterMapper.selectCompleteMasterIds(masterVo); + if(!CollectionUtils.isEmpty(selectCompleteMasterIds)) { + //将暂时赋值完整的isSuccess = 1 + setIsSuccess(selectCompleteMasterIds,list); + //获取mastertIds集合 + masterIds = getMasterIdsByList(selectCompleteMasterIds); + List selectNotInspectionList = null; + List repeatRecordFileForMasterIds = null; + if (StringUtils.isNotBlank(masterIds)) { + //查询缺少检验检查报告masterId集合 + selectNotInspectionList = detailMapper.selectNotInspectionList(masterIds); + //查询有重复采集文件的masterIds集合 + repeatRecordFileForMasterIds = detailMapper.selectRepeatRecordFileForMasterIds(masterIds); } - } - //检验检查报告分类完整才判断需要校验的分类是否完整 - if(inspectionFlag) { - //定义匹配分类成功次数 - int successCount = 0; - for (Zd_Assort assortFor : assortList) { - for (Archive_Detail detail : details) { - //判断主键相同且分类id相同 - if (master.getId().equals(detail.getMasterid()) && assortFor.getAssortId().equals(detail.getAssortid())) { - successCount++; - break; + //循环遍历list集合判断是否完整,完整isCheck赋值1,且批量更新LockInfo字段为完整 + //定义通过完整性校验的masterIds + StringBuilder masterIdsTemp = new StringBuilder(); + for(Archive_Master_Vo master : list) { + //定义检验检查报告分类是完整的 + boolean inspectionFlag = false; + //判断不存在缺少校验检查分类 + if (!CollectionUtils.isEmpty(selectNotInspectionList)) { + for (Archive_Detail detail : selectNotInspectionList) { + if (master.getId().equals(detail.getMasterid())) { + inspectionFlag = true; + break; + } } } - } - //如果成功匹配个数和需校验分类个数相等,全部匹配 - //特殊情况验证完整性,婴儿带B的住院号少验证两类:病案首页、入(出、死亡)院记录 - int verificationCount = 0; - String inpNo = master.getInpNo(); - if(StringUtils.isNotBlank(inpNo)){ - //最后一个字符带B的是婴儿 - String lastChar = inpNo.substring(inpNo.length() - 1, inpNo.length()); - if("B".equals(lastChar)){ - verificationCount = assortList.size() - 2; - }else{ - verificationCount = assortList.size(); + //判断不存在重复文件 + boolean repeatFileFlag = true; + if (!CollectionUtils.isEmpty(repeatRecordFileForMasterIds)) { + for (Archive_Detail detail : repeatRecordFileForMasterIds) { + if (master.getId().equals(detail.getMasterid())) { + repeatFileFlag = false; + break; + } + } + } + //检验检查报告分类完整才判断需要校验的分类是否完整 + if (inspectionFlag || !repeatFileFlag) { + //list的isSuccess字段值赋值1 + master.setIsSuccess("0"); } - } - if (verificationCount > 0 && successCount == verificationCount) { - //list的isSuccess字段值赋值1 - master.setIsSuccess("1"); //不完整的批量更新为完整 - if (!"完整".equals(master.getLockinfo())) { - if (StringUtils.isBlank(masterIds)) { - masterIds.append("'").append(master.getId()).append("'"); - } else { - masterIds.append(",'").append(master.getId()).append("'"); + if (!"完整".equals(master.getLockinfo()) && "1".equals(master.getIsSuccess())) { + if (StringUtils.isNotBlank(masterIdsTemp)) { + masterIdsTemp.append(","); } + masterIdsTemp.append("'").append(master.getId()).append("'"); } } + if (StringUtils.isNotBlank(masterIdsTemp)) { + archiveMasterMapper.updateLockInfoByMasterId(masterIdsTemp.toString(), "完整"); + } } } - //不完整的批量批量更新master表的LockInfo字段为完整 - if(StringUtils.isNotBlank(masterIds)){ - archiveMasterMapper.updateLockInfoByMasterId(masterIds.toString(),"完整"); + } + + /** + * 暂时设置完整isSuccess = 1 + * @param selectCompleteMasterIds + * @param list + */ + private void setIsSuccess(List selectCompleteMasterIds, List list) { + for(Archive_Master_Vo vo : list){ + for(Archive_Master_Vo vo1 : selectCompleteMasterIds){ + if(vo.getId().equals(vo1.getId())){ + vo.setIsSuccess("1"); + break; + } + } } } @@ -169,12 +178,11 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { */ private String getMasterIdsByList(List list) { StringBuilder masterIds = new StringBuilder(); - for (int i = 0; i < list.size(); i++) { - if(i == 0){ - masterIds.append("'").append(list.get(i).getId()).append("'"); - }else{ - masterIds.append(",'").append(list.get(i).getId()).append("'"); + for (Archive_Master_Vo vo : list) { + if (StringUtils.isNotBlank(masterIds)) { + masterIds.append(","); } + masterIds.append("'").append(vo.getId()).append("'"); } return masterIds.toString(); } @@ -341,15 +349,15 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { } @Override - public List selectByColumn(Archive_Master_Vo archiveMasterVo,HttpServletRequest request) { - //设置查询条件审核角色 - setInfoId(archiveMasterVo); - //设置登录用户 - Power_User user = (Power_User)request.getSession().getAttribute("CURRENT_USER"); - if(user.getRoleId() != 1 && user.getRoleId() != -100 && user.getRoleId() != 0){ - archiveMasterVo.setUserName(user.getUserName()); + public List selectByColumn(Integer offset, Integer limit,Archive_Master_Vo archiveMasterVo,HttpServletRequest request) { + //分是否按完整性查询 + List list = null; + if(null != offset && null != limit) { + PageHelper.offsetPage(offset, limit); } - List list = archiveMasterMapper.selectByColumn(archiveMasterVo); + list = archiveMasterMapper.selectByColumn(archiveMasterVo); + //组织完整性字段并完整的更新archive_master表的完整性字段值为完整LockInfo='完整' + //updateMasterBySuccess(list); //转换科室与赋值超期天数 selectByColumnChange(list); //根据状态code转换状态及判断显示按钮 @@ -379,6 +387,18 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { return list; } + /** + * 带完整性查询的出院记录查询 + * @param archiveMasterVo + * @return + */ + private List selectBeHospitalByIsSuccess(Integer offset,Integer limit,Archive_Master_Vo archiveMasterVo) { + if(null != offset && null != limit) { + PageHelper.offsetPage(offset, limit); + } + return archiveMasterMapper.selectCompleteMasterIds(archiveMasterVo); + } + /** * 设置审核角色 * @param archiveMasterVo diff --git a/src/main/java/com/emr/service/ipml/RecordService.java b/src/main/java/com/emr/service/ipml/RecordService.java index 5761a40..e06740c 100644 --- a/src/main/java/com/emr/service/ipml/RecordService.java +++ b/src/main/java/com/emr/service/ipml/RecordService.java @@ -283,9 +283,9 @@ public class RecordService { recordSearch.setStartDate(dateList.get(dateList.size()-1).getDisDate()); List masterVoList = recordMapper.selectAllWithCompleteAssort(recordSearch); //组织masterId分组数据 - List masterIdVoList = selectGroupDataByMasterId(masterVoList); + //List masterIdVoList = selectGroupDataByMasterId(masterVoList); //按日期分组和masterId分组组织已提交和已归档的数量 - selectGroupDateByMasterIdList(dateList,masterIdVoList); + selectGroupDateByMasterIdList(dateList,masterVoList); //转换百分比并有按科室查询时转换科室名称 setDeptNameAndPercent(recordSearch, dateList); } @@ -319,7 +319,7 @@ public class RecordService { if("128".equals(archivestate)){ count2++; } - if("1".equals(obj.getIsSuccess())){ + if("完整".equals(obj.getLockinfo())){ count3++; } } diff --git a/src/main/java/com/emr/service/ipml/StatisticsService.java b/src/main/java/com/emr/service/ipml/StatisticsService.java index c444289..513066a 100644 --- a/src/main/java/com/emr/service/ipml/StatisticsService.java +++ b/src/main/java/com/emr/service/ipml/StatisticsService.java @@ -1,6 +1,5 @@ package com.emr.service.ipml; -import com.alibaba.fastjson.JSON; import com.emr.dao.RecordStatisticsMapper; import com.emr.dao.StatisticsMapper; import com.emr.dao.TUuInfoMapper; @@ -10,24 +9,12 @@ import com.emr.entity.OffsetLimitPage; import com.emr.vo.*; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; -import net.sf.json.JSONObject; import org.apache.commons.lang3.StringUtils; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.util.EntityUtils; -import org.apache.poi.ss.formula.functions.T; import org.apache.shiro.util.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Date; import java.util.List; diff --git a/src/main/java/com/emr/vo/CompleteVo.java b/src/main/java/com/emr/vo/CompleteVo.java new file mode 100644 index 0000000..a96271c --- /dev/null +++ b/src/main/java/com/emr/vo/CompleteVo.java @@ -0,0 +1,16 @@ +package com.emr.vo; + +import lombok.Data; + +@Data +public class CompleteVo { + private String id; + + private Integer isCheck;//是否校验 + + private String recordName;//校验的文档名称 + + private Integer count; + + private String lockInfo; +} diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties index caf5683..b5f96f4 100644 --- a/src/main/resources/log4j.properties +++ b/src/main/resources/log4j.properties @@ -1,4 +1,4 @@ -log4j.rootLogger=info,myLog,errorMsg +log4j.rootLogger=info,myLog,errorMsg,compeleteMsg log4j.appender.myLog=org.apache.log4j.DailyRollingFileAppender log4j.appender.myLog.File=D:\\logs\\emr_medical_record\\info\\info_log log4j.appender.myLog.DatePattern=-yyyy-MM-dd'.log' @@ -15,8 +15,16 @@ log4j.appender.errorMsg.Threshold = error log4j.appender.errorMsg.layout=org.apache.log4j.PatternLayout log4j.appender.errorMsg.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}:%m%n +log4j.appender.compeleteMsg=org.apache.log4j.DailyRollingFileAppender +log4j.appender.compeleteMsg.File=D:\\logs\\emr_medical_record\\compeleteTask\\compeleteTask_log +log4j.appender.compeleteMsg.DatePattern=-yyyy-MM-dd'.log' +log4j.appender.compeleteMsg.Append = true +log4j.appender.compeleteMsg.Threshold = INFO +log4j.appender.compeleteMsg.layout=org.apache.log4j.PatternLayout +log4j.appender.compeleteMsg.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}:%m%n + #Console sql -#log4j.rootLogger=debug,myLog,errorMsg,CONSOLE +#log4j.rootLogger=debug,myLog,errorMsg,compeleteMsg,CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern =%d %-5p [%c{5}] - %m%n diff --git a/src/main/resources/mapper/ArchiveTransferDeptUserMapper.xml b/src/main/resources/mapper/ArchiveTransferDeptUserMapper.xml index e7ad4d0..2d4bea2 100644 --- a/src/main/resources/mapper/ArchiveTransferDeptUserMapper.xml +++ b/src/main/resources/mapper/ArchiveTransferDeptUserMapper.xml @@ -183,4 +183,8 @@ #{item.str1,jdbcType=NVARCHAR}, #{item.str2,jdbcType=NVARCHAR}) + + \ No newline at end of file diff --git a/src/main/resources/mapper/Archive_DetailMapper.xml b/src/main/resources/mapper/Archive_DetailMapper.xml index 715f84d..c73eb50 100644 --- a/src/main/resources/mapper/Archive_DetailMapper.xml +++ b/src/main/resources/mapper/Archive_DetailMapper.xml @@ -448,4 +448,29 @@ GROUP BY MasterID + + \ No newline at end of file diff --git a/src/main/resources/mapper/Archive_MasterMapper.xml b/src/main/resources/mapper/Archive_MasterMapper.xml index f1e8692..a8f2bed 100644 --- a/src/main/resources/mapper/Archive_MasterMapper.xml +++ b/src/main/resources/mapper/Archive_MasterMapper.xml @@ -22,7 +22,7 @@ - + @@ -178,118 +178,101 @@ ORDER BY m.admission_date_time desc - - + + and ArchiveState != '1024' and ArchiveState != '128' and YEAR(discharge_date_time) != '1801' /**根据待审核节点查询*/ /**根据审核状态查询*/ - and m.inp_no like '%'+#{inpNo,jdbcType=NCHAR}+'%' + and inp_no like '%'+#{inpNo,jdbcType=NCHAR}+'%' - and m.visit_id=#{visitId,jdbcType=NCHAR} + and visit_id=#{visitId,jdbcType=NCHAR} - and m.name like '%'+#{name,jdbcType=NCHAR}+'%' - - - and m.dept_name in - - #{item} - + and name like '%'+#{name,jdbcType=NCHAR}+'%' - and m.discharge_date_time between CONVERT(VARCHAR(10),#{startDateTo,jdbcType=NCHAR},120) and + and discharge_date_time between CONVERT(VARCHAR(10),#{startDateTo,jdbcType=NCHAR},120) and #{endDateTo,jdbcType=NCHAR}+ ' 23:59:59' - and m.discharge_date_time >= CONVERT(VARCHAR(10),#{startDateTo,jdbcType=NCHAR},120) + and discharge_date_time >= CONVERT(VARCHAR(10),#{startDateTo,jdbcType=NCHAR},120) - and m.discharge_date_time <= #{endDateTo,jdbcType=NCHAR}+ ' 23:59:59' + and discharge_date_time <= #{endDateTo,jdbcType=NCHAR}+ ' 23:59:59' - and m.DOCTOR_IN_CHARGE in (${doctorInCharge}) + and DOCTOR_IN_CHARGE in (${doctorInCharge}) - - - - and ArchiveState != '1024' and ArchiveState != '128' and YEAR(discharge_date_time) != '1801' - /**根据待审核节点查询*/ - - /**根据审核状态查询*/ - - - and m.inp_no like '%'+#{inpNo,jdbcType=NCHAR}+'%' - - - and m.visit_id=#{visitId,jdbcType=NCHAR} - - - and m.name like '%'+#{name,jdbcType=NCHAR}+'%' + + + + and LockInfo = '完整' + + + and LockInfo != '完整' + + - - - and m.discharge_date_time between CONVERT(VARCHAR(10),#{startDateTo,jdbcType=NCHAR},120) and - #{endDateTo,jdbcType=NCHAR}+ ' 23:59:59' - - - and m.discharge_date_time >= CONVERT(VARCHAR(10),#{startDateTo,jdbcType=NCHAR},120) - - - and m.discharge_date_time <= #{endDateTo,jdbcType=NCHAR}+ ' 23:59:59' - - - - and m.DOCTOR_IN_CHARGE in (${doctorInCharge}) + + + + + + + and dept_name in + + #{item} + - SELECT id + SELECT archive_master.id FROM - archive_master m + archive_master LEFT JOIN ( - SELECT - MasterID, - COUNT( AssortID ) count - FROM - ( - SELECT - archive_detail.MasterID, - dbo.archive_detail.AssortID - FROM - dbo.archive_detail - INNER JOIN dbo.zd_assort ON dbo.archive_detail.AssortID = dbo.zd_assort.assort_id - AND dbo.zd_assort.print_flag = 0 - AND dbo.zd_assort.is_check = 1 - WHERE - ( dbo.archive_detail.flag = 0 ) - GROUP BY - archive_detail.MasterID, - dbo.archive_detail.AssortID - ) temp - GROUP BY - MasterID - ) temp ON m.id = temp.MasterID + SELECT + MasterID, + COUNT( AssortID ) count + FROM + ( + SELECT + archive_detail.MasterID, + dbo.archive_detail.AssortID + FROM + dbo.archive_detail + INNER JOIN dbo.zd_assort ON dbo.archive_detail.AssortID = dbo.zd_assort.assort_id + AND dbo.zd_assort.print_flag = 0 + AND dbo.zd_assort.is_check = 1 + WHERE + ( dbo.archive_detail.flag = 0 ) + GROUP BY + archive_detail.MasterID, + dbo.archive_detail.AssortID + ) temp + GROUP BY + MasterID + ) temp ON archive_master.id = temp.MasterID LEFT JOIN ( - SELECT - MID, - COUNT( MID ) inspectionCount - FROM - archive_other_ext - WHERE - sysFlag IN ( 3, 4, 6 ) - AND ISNULL( DID, '' )= '' - AND ISNULL( MID, '' )!= '' - GROUP BY - MID - ) archive_other_ext ON m.id = archive_other_ext.MID + SELECT + MID, + COUNT( MID ) inspectionCount + FROM + archive_other_ext + WHERE + sysFlag IN ( 3, 4, 6 ) + AND ISNULL( DID, '' )= '' + AND ISNULL( MID, '' )!= '' + GROUP BY + MID + ) archive_other_ext ON archive_master.id = archive_other_ext.MID WHERE @@ -297,10 +280,11 @@ AND count = ( CASE WHEN substring( - m.inp_no, - LEN ( m.inp_no ), - LEN ( m.inp_no )) = 'B' THEN - (( SELECT count( assort_id ) FROM zd_assort WHERE is_check = 1 ) - 2 ) ELSE ( SELECT count( assort_id ) FROM zd_assort WHERE is_check = 1 ) END) + archive_master.inp_no, + LEN ( archive_master.inp_no ), + LEN ( archive_master.inp_no )) = 'B' THEN + (( SELECT count( assort_id ) FROM zd_assort WHERE is_check = 1 ) - 2 ) ELSE ( SELECT count( assort_id ) + FROM zd_assort WHERE is_check = 1 ) END) inspectionCount is not null @@ -308,13 +292,14 @@ OR count != ( CASE WHEN substring( - m.inp_no, - LEN ( m.inp_no ), - LEN ( m.inp_no )) = 'B' THEN - (( SELECT count( assort_id ) FROM zd_assort WHERE is_check = 1 ) - 2 ) ELSE ( SELECT count( assort_id ) FROM zd_assort WHERE is_check = 1 ) END) + archive_master.inp_no, + LEN ( archive_master.inp_no ), + LEN ( archive_master.inp_no )) = 'B' THEN + (( SELECT count( assort_id ) FROM zd_assort WHERE is_check = 1 ) - 2 ) ELSE ( SELECT count( assort_id ) + FROM zd_assort WHERE is_check = 1 ) END) - + AND ( - - - - ArchiveState IN ('1','16','48','512','256','272','304','768') - - - ArchiveState IN ('2','18', - '50','514') - - - ArchiveState IN ('6','22','54','518') - - - ArchiveState IN ('1','2','6','14','256','512','514','518','526','768') - - - ArchiveState IN ('16','18','22','30','272') - - - ArchiveState IN ('62') - - - + + + + ArchiveState IN ('1','16','48','512','256','272','304','768') + + + ArchiveState IN ('2','18', + '50','514') + + + ArchiveState IN ('6','22','54','518') + + + ArchiveState IN ('1','2','6','14','256','512','514','518','526','768') + + + ArchiveState IN ('16','18','22','30','272') + + + ArchiveState IN ('62') + + + ) @@ -458,33 +443,191 @@ - m.id,m.patient_id,m.inp_no,m.visit_id,m.name,m.sex,m. - dept_name,m.discharge_date_time,m.ArchiveState,m.admission_date_time,m. - dept_admission_to,m.LockInfo,m.DOCTOR_IN_CHARGE,m.D1 + archive_master.id, + archive_master.patient_id, + archive_master.inp_no, + archive_master.visit_id, + archive_master.name, + archive_master.sex, + archive_master.dept_name, + archive_master.discharge_date_time, + archive_master.ArchiveState, + archive_master.admission_date_time, + archive_master.dept_admission_to, + archive_master.LockInfo, + archive_master.DOCTOR_IN_CHARGE, + archive_master.D1 + + + + + + + SELECT + archive_master.* + FROM + v_record_completeness_info archive_master + LEFT JOIN archive_detail ON archive_master.id = archive_detail.MasterID + AND archive_detail.flag = 0 + AND CHARINDEX ( + ',' + Title + ',', + ',' + archive_master.record_name + ',' + ) > 0 + WHERE + is_check = 11 + AND Title IS NULL + + + and archive_detail.MasterID in (${masterIds}) + + + + and archive_detail.MasterID not in () + + + or archive_detail.MasterID in () + + + + or archive_detail.MasterID in ( + ${masterIdsByTranDept} + ) + + + + + + + + SELECT DISTINCT + MasterID + FROM + ( + SELECT + MasterID + FROM + archive_detail + LEFT JOIN archive_other_ext ON archive_other_ext.DID = archive_detail.id + AND MasterID = archive_other_ext.MID + WHERE + Source NOT IN ( + '电子病历系统采集服务-长临医嘱', + '扫描上传', + '手工上传' + ) + AND flag = 0 + AND DID IS NULL + GROUP BY + MasterID, + Title + HAVING + (COUNT(Title)) > 1 + UNION ALL + SELECT + MID MasterID + FROM + archive_other_ext + WHERE + sysFlag IN (3, 4, 6) + AND ISNULL(DID, '') = '' + AND ISNULL(MID, '') != '' + ) temp + + + + select archive_master.id from archive_transfer_dept_user + inner join + archive_master + on archive_master.id = archive_transfer_dept_user.master_id + where user_name = #{userName} + @@ -505,10 +648,11 @@ '否' ELSE '是' END checkName from archive_master m - LEFT JOIN ( SELECT MasterID FROM archive_detail INNER JOIN archive_master ON archive_detail.MasterID = archive_master.id WHERE Source = '扫描上传' GROUP BY MasterID ) archive_detail ON m.id = archive_detail.MasterID + LEFT JOIN ( SELECT MasterID FROM archive_detail INNER JOIN archive_master ON archive_detail.MasterID = + archive_master.id WHERE Source = '扫描上传' GROUP BY MasterID ) archive_detail ON m.id = archive_detail.MasterID where 1=1 and ArchiveState in ('64','1024') - AND MasterID IS + AND MasterID IS NULL @@ -524,19 +668,19 @@ - in + in not in ( - - - #{item} - - '无效' - + + + #{item} + + '无效' + ) @@ -1152,45 +1296,45 @@ FROM archive_master m - - and m.id IN( - #{item.id,jdbcType=NVARCHAR} - ) - + + and m.id IN( + #{item.id,jdbcType=NVARCHAR} + ) + + SELECT + archive_master.id,LockInfo + FROM + archive_master + INNER JOIN archive_detail ON archive_master.id = archive_detail.MasterID + WHERE + ArchiveState != '1024' + AND ArchiveState != '128' + AND YEAR (discharge_date_time) != '1801' + + AND archive_detail.UpLoadDateTime >= #{nowDate} + + GROUP BY + archive_master.id,LockInfo + + + + ( + SELECT + dbo.archive_record_name_info.record_name, + dbo.archive_record_name_info.is_check, + dbo.archive_master.id + FROM + dbo.archive_master + CROSS JOIN dbo.archive_record_name_info + WHERE + ( + dbo.archive_record_name_info.effective = 1 + ) + AND ( + dbo.archive_record_name_info.is_check + <> + 0 + ) + AND ( + dbo.archive_record_name_info.contain_dept_name = '-1' + ) + AND ( + CHARINDEX ( + ',' + dbo.archive_master.dept_name + ',', + ',' + dbo.archive_record_name_info.exclude_dept_name + ',' + )<= 0 + ) + OR ( + dbo.archive_record_name_info.effective = 1 + ) + AND ( + dbo.archive_record_name_info.is_check <> 0 + ) + AND ( + CHARINDEX ( + ',' + dbo.archive_master.dept_name + ',', + ',' + dbo.archive_record_name_info.exclude_dept_name + ',' + ) <= 0 + ) + AND ( + CHARINDEX ( + ',' + dbo.archive_master.dept_name + ',', + ',' + dbo.archive_record_name_info.contain_dept_name + ',' + ) > 0 + ) + ) + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/RecordMapper.xml b/src/main/resources/mapper/RecordMapper.xml index f1a83e4..acce14a 100644 --- a/src/main/resources/mapper/RecordMapper.xml +++ b/src/main/resources/mapper/RecordMapper.xml @@ -353,7 +353,8 @@ FROM archive_master - + where archive_master.LockInfo = '完整' + ) count3 @@ -410,7 +411,8 @@ FROM archive_master - + where archive_master.LockInfo = '完整' + GROUP BY @@ -527,6 +529,19 @@ + +