From a123c8563491c4ad9e59e645fc3f5e940528f3d8 Mon Sep 17 00:00:00 2001 From: zengwh <81383286@qq.com> Date: Tue, 11 Aug 2020 15:33:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=88=9D=E5=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/emr/controller/WebServiceLoad.java | 30 ++- .../com/emr/entity/Archive_Master_Vo.java | 6 +- .../ipml/ArchiveCallbackInfoService.java | 6 +- .../service/ipml/ArchiveFlowInfoService.java | 20 +- .../ipml/Archive_MasterServiceImpl.java | 198 ++++++++++------- .../views/beHospitaledDir/beHospList.jsp | 23 +- .../webapp/static/js/beHospList/beHospList.js | 209 ++++++++++++------ 7 files changed, 321 insertions(+), 171 deletions(-) diff --git a/src/main/java/com/emr/controller/WebServiceLoad.java b/src/main/java/com/emr/controller/WebServiceLoad.java index 24ccdc4..e91d3fb 100644 --- a/src/main/java/com/emr/controller/WebServiceLoad.java +++ b/src/main/java/com/emr/controller/WebServiceLoad.java @@ -23,22 +23,20 @@ public class WebServiceLoad { @PostConstruct public void contextInitialized() { new Thread(() -> { - for (int i = 0; i < 2; i++) { - String token = "ORsaVDUBE1RFRFRETE5BR05ERVQ3JyBURkRGRA=="; - String POWER_URLHEAD = PropertiesUtils.getProperty("POWER_JSP"); - //创建连接工厂 - JAXDynamicClientFactory dcf = JAXDynamicClientFactory.newInstance(); - //创建客户端 - Client client = dcf.createClient(POWER_URLHEAD + "/WebService/PowerWebService?wsdl"); - try { - //动态调用getInfosByUserId方法 - client.invoke("getInfosByUserId", token, "emr_medical_record"); - } catch (Exception e) { - e.printStackTrace(); - }finally { - if(null != client) { - client.destroy(); - } + String token = "ORsaVDUBE1RFRFRETE5BR05ERVQ3JyBURkRGRA=="; + String POWER_URLHEAD = PropertiesUtils.getProperty("POWER_JSP"); + //创建连接工厂 + JAXDynamicClientFactory dcf = JAXDynamicClientFactory.newInstance(); + //创建客户端 + Client client = dcf.createClient(POWER_URLHEAD + "/WebService/PowerWebService?wsdl"); + try { + //动态调用getInfosByUserId方法 + client.invoke("getInfosByUserId", token, "emr_medical_record"); + } catch (Exception e) { + e.printStackTrace(); + }finally { + if(null != client) { + client.destroy(); } } }).start(); 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 b466db9..52a0d5d 100644 --- a/src/main/java/com/emr/entity/Archive_Master_Vo.java +++ b/src/main/java/com/emr/entity/Archive_Master_Vo.java @@ -38,9 +38,13 @@ public class Archive_Master_Vo extends Archive_Master{ private Integer role;//操作角色1,2,4 + private String roles;//操作角色字符串 + private Integer infoId;//流转流程的id - private Integer isSuccess = 0;//是否完整1:完整,0:不完整 + private String isSuccess = "0";//是否完整1:完整,0:不完整 + + private String unSuccessAssortNames;//不完整分类字符串 } diff --git a/src/main/java/com/emr/service/ipml/ArchiveCallbackInfoService.java b/src/main/java/com/emr/service/ipml/ArchiveCallbackInfoService.java index 378eacd..84a5107 100644 --- a/src/main/java/com/emr/service/ipml/ArchiveCallbackInfoService.java +++ b/src/main/java/com/emr/service/ipml/ArchiveCallbackInfoService.java @@ -1,6 +1,7 @@ package com.emr.service.ipml; import com.emr.dao.ArchiveCallbackInfoMapper; +import com.emr.dao.ArchiveFlowRoleMapper; import com.emr.entity.ArchiveCallbackInfo; import com.emr.entity.ArchiveFlowRole; import com.emr.entity.Archive_Master; @@ -49,6 +50,8 @@ public class ArchiveCallbackInfoService { private ArchiveFlowInfoService archiveFlowInfoService; @Autowired private StatisticsService statisticsService; + @Autowired + private ArchiveFlowRoleMapper flowRoleMapper; /** * 添加召回记录 * @@ -74,7 +77,8 @@ public class ArchiveCallbackInfoService { String remark = callbackInfo.getCallbackReason(); Integer targetCode = EnumVerify.DocState.CallBacked.getCode(); //获取当前节点和下个节点对象集合 - List currentRoleAndNextRole = archiveFlowInfoService.getCurrentRoleAndNextRole(currentCode,targetCode); + List archiveFlowRoles = flowRoleMapper.selectAll(); + List currentRoleAndNextRole = archiveFlowInfoService.getCurrentRoleAndNextRole(currentCode,targetCode,archiveFlowRoles); archiveFlowInfoService.insertFlowInfo(masterId,remark,currentRoleAndNextRole.get(0),currentRoleAndNextRole.get(1),new Date()); //TODO 删除病案资料 callbackInfoMapper.deleteRecordByRecall(masterId); diff --git a/src/main/java/com/emr/service/ipml/ArchiveFlowInfoService.java b/src/main/java/com/emr/service/ipml/ArchiveFlowInfoService.java index 91cf02f..7843fb9 100644 --- a/src/main/java/com/emr/service/ipml/ArchiveFlowInfoService.java +++ b/src/main/java/com/emr/service/ipml/ArchiveFlowInfoService.java @@ -17,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.LinkedList; import java.util.List; @@ -58,7 +59,7 @@ public class ArchiveFlowInfoService { * @throws Exception */ public Integer insertFlowInfo(String masterId,String remark,ArchiveFlowRole currentRole,ArchiveFlowRole nextRole,Date sumbitDate)throws Exception{ - //添加退回流程 + //添加流程 ArchiveFlowInfo flowInfo = new ArchiveFlowInfo(); //masterId; flowInfo.setMasterId(masterId); @@ -110,18 +111,15 @@ public class ArchiveFlowInfoService { * @param appointNextCode * @return */ - public List getCurrentRoleAndNextRole(String currentStatus,Integer appointNextCode){ + public List getCurrentRoleAndNextRole(String currentStatus,Integer appointNextCode,List archiveFlowRoles){ List currentRoleAndNextRoleList = new LinkedList<>(); //查询审核角色集合,根据有效进行计算状态code - List archiveFlowRoles = flowRoleMapper.selectAll(); //stepIndex:当前步骤 ArchiveFlowRole currentRole = getCurrentRoleByCurrentStatus(currentStatus, archiveFlowRoles); currentRoleAndNextRoleList.add(currentRole); - if(null != appointNextCode){ - //targetStep:下一步骤节点信息 - ArchiveFlowRole nextRole = getNextRoleByCurrentStatus(appointNextCode, archiveFlowRoles, currentRole); - currentRoleAndNextRoleList.add(nextRole); - } + //targetStep:下一步骤节点信息 + ArchiveFlowRole nextRole = getNextRoleByCurrentStatus(appointNextCode, archiveFlowRoles, currentRole); + currentRoleAndNextRoleList.add(nextRole); return currentRoleAndNextRoleList; } @@ -138,11 +136,13 @@ public class ArchiveFlowInfoService { Date preDate = new Date(); //查询上次节点的时间 //查询上次节点的时间方法参数当前节点的名称,当下个节点为病案室终审不带当前审核名称查询该病案最后审核时间 + List archiveFlowInfos = new ArrayList<>(); String currentName = ""; - if(!nextRole.getName().equals(EnumVerify.DocState.MedicalRoomCheck.getName())){ + String name = nextRole.getName(); + if (StringUtils.isNotBlank(name) && !name.equals(EnumVerify.DocState.MedicalRoomCheck.getName())) { currentName = currentRole.getName(); } - List archiveFlowInfos = flowInfoMapper.selectPreInfo(masterId,currentName); + archiveFlowInfos = flowInfoMapper.selectPreInfo(masterId, currentName); if (null != archiveFlowInfos && !archiveFlowInfos.isEmpty()) { //存在取最后一次提交时间 preDate = archiveFlowInfos.get(0).getCreatetime(); 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 aa93230..fb73726 100644 --- a/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java +++ b/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java @@ -80,7 +80,7 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { assort.setIsCheck(1); List assortList = assortMapper.selectAll(assort); //循环遍历list集合判断是否完整,完整isCheck赋值1,且批量更新LockInfo字段为完整 - checkSuccess(list, details, assortList); + updateMasterBySuccess(list, details, assortList); } } long end = System.currentTimeMillis(); @@ -94,7 +94,7 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { * @param details * @param assortList */ - private void checkSuccess(List list, List details, List assortList) { + private void updateMasterBySuccess(List list, List details, List assortList) { //循环遍历list集合判断是否完整,完整isCheck赋值1,且批量更新LockInfo字段为完整 //定义通过完整性校验的masterIds StringBuilder masterIds = new StringBuilder(); @@ -120,7 +120,7 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { //如果成功匹配个数和需校验分类个数相等,全部匹配 if(successCount == assortList.size()){ //list的isSuccess字段值赋值1 - master.setIsSuccess(1); + master.setIsSuccess("1"); //不完整的批量更新为完整 if(!"完整".equals(master.getLockinfo())) { if (StringUtils.isBlank(masterIds)) { @@ -222,18 +222,18 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { //计算属于哪种审核角色 Msg role = getRole(); if(null != role) { - for (Archive_Master_Vo master_vo : list) { - String archivestate = master_vo.getArchivestate(); + for (Archive_Master_Vo masterVo : list) { + String archivestate = masterVo.getArchivestate(); if (StringUtils.isNotBlank(archivestate)) { //转换中文状态 boolean numeric = isNumeric(archivestate); if (numeric) { Integer status = Integer.valueOf(archivestate); archivestate = EnumVerify.DocState.GetStepName(status, role.getCode()); - master_vo.setStatus(archivestate); + masterVo.setStatus(archivestate); //获取审核按钮和退回按钮集合 - String btns = getBtns(status, flowRoles, master_vo.getId()); - master_vo.setBtns(btns); + String btns = getBtns(status, flowRoles, masterVo.getId()); + masterVo.setBtns(btns); } } } @@ -586,7 +586,7 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { //循环添加进流转记录和缺陷记录 for(Integer backToCode : backToCodeList){ //获取当前节点和下个节点对象集合 - List currentRoleAndNextRole = flowInfoService.getCurrentRoleAndNextRole(targetCode, backToCode); + List currentRoleAndNextRole = flowInfoService.getCurrentRoleAndNextRole(targetCode, backToCode,archiveFlowRoles); //添加进流转记录 Integer flowInfoId = flowInfoService.insertFlowInfo(masterId,remark,currentRoleAndNextRole.get(0),currentRoleAndNextRole.get(1),new Date()); emrFaultDetail.setParentId(flowInfoId); @@ -659,32 +659,122 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { @Override public Msg updateStateByArchivId(Archive_Master_Vo master) throws Exception{ //修改病案归档状态 - //计算审核状态code - String archivestate = master.getArchivestate(); - if (StringUtils.isNotBlank(archivestate)) { - Integer code = Integer.valueOf(archivestate); + if (StringUtils.isNotBlank(master.getArchivestate())) { + StringBuilder masterIds = new StringBuilder(); //查询审核角色集合,根据有效进行计算状态code List archiveFlowRoles = flowRoleMapper.selectAll(); - Integer role = master.getRole(); - //计算状态code - //code:当前状态code,role:角色1医生2护士3护士长,archiveFlowRoles:根据有效的审核角色进行计算 - int statuCode = EnumVerify.DocState.GetNextStepCode(code,role, archiveFlowRoles); - master.setArchivestate(statuCode+""); - //复制对象 - Archive_Master archiveMaster = new Archive_Master(); - BeanUtils.copyProperties(master,archiveMaster); - //更新 - updateByClo(archiveMaster); - //获取当前节点和下个节点对象集合 - List currentRoleAndNextRole = flowInfoService.getCurrentRoleAndNextRole(master.getStatus()+"", null); - //添加进流转记录 - flowInfoService.insertFlowInfo(master.getId(),master.getRemark(),currentRoleAndNextRole.get(0),new ArchiveFlowRole(),new Date()); - return Msg.success(); + //获取目前code集合 + String[] archivestates = master.getArchivestate().split(","); + //获取主键id集合 + String[] ids = master.getId().split(","); + //获取审核角色集合 + String[] roleArr = master.getRoles().split(","); + //获取当前操作code集合 + String[] roleCodes = master.getStatus().split(","); + //获取资料完整标识集合 + String[] isSuccesses = master.getIsSuccess().split(","); + for (int i = 0; i < archivestates.length; i++) { + if(StringUtils.isNotBlank(archivestates[i])){ + //完整或只有一个 + if("1".equals(isSuccesses[i]) || ids.length == 1){ + updateApprove(ids[i],master.getRemark(), roleArr[i], archiveFlowRoles, archivestates[i], roleCodes[i]); + }else{ + if(StringUtils.isBlank(masterIds)){ + masterIds.append("'").append(ids[i]).append("'"); + }else{ + masterIds.append(",'").append(ids[i]).append("'"); + } + } + } + } + //不完整,根据不完整主键集合组织不对应不完整分类集合 + List unSuccessList = new ArrayList<>(); + if(StringUtils.isNotBlank(masterIds)){ + unSuccessList = selectUnSuccessAssortByMasterIds(masterIds); + } + if(!CollectionUtils.isEmpty(unSuccessList)){ + //存在不完整 + return Msg.success().add("unSuccessList",unSuccessList); + }else{ + //全部完整返回 + return Msg.success(); + } } else { return Msg.fail("初始状态出错了!"); } } + /** + * 当次初审 + * @param remark + * @param role + * @param archiveFlowRoles + * @param archivestate + * @param masterId + * @param roleCode + * @throws Exception + */ + private void updateApprove(String masterId,String remark, String role, List archiveFlowRoles, String archivestate, String roleCode) throws Exception { + Archive_Master archiveMaster = new Archive_Master(); + Integer code = Integer.valueOf(archivestate); + //计算状态code + // code:当前状态code,role:角色1医生2护士3护士长,archiveFlowRoles:根据有效的审核角色进行计算 + int statuCode = EnumVerify.DocState.GetNextStepCode(code,Integer.valueOf(role), archiveFlowRoles); + archiveMaster.setArchivestate(statuCode+""); + archiveMaster.setId(masterId); + //更新 + updateByClo(archiveMaster); + //获取当前节点和下个节点对象集合 + List currentRoleAndNextRole = flowInfoService.getCurrentRoleAndNextRole(roleCode, null,archiveFlowRoles); + //添加进流转记录 + flowInfoService.insertFlowInfo(masterId,remark,currentRoleAndNextRole.get(0),currentRoleAndNextRole.get(1),new Date()); + } + + /** + * 根据不完整masterId集合返回对应不完整分类集合 + * @param masterIds + * @return + */ + private List selectUnSuccessAssortByMasterIds(StringBuilder masterIds) { + List list = new ArrayList<>(); + if(StringUtils.isNotBlank(masterIds)){ + List details = detailMapper.selectAssortIdsByMasterIds(masterIds.toString()); + //查询需要校验完整性的分类集合 + Zd_Assort assort = new Zd_Assort(); + assort.setIsCheck(1); + List assortList = assortMapper.selectAll(assort); + String[] masterIdArr = masterIds.toString().split(","); + for (String masterId:masterIdArr) { + masterId = masterId.replaceAll("\'", ""); + Archive_Master_Vo master = new Archive_Master_Vo(); + StringBuilder unSuccessAssortNames = new StringBuilder(); + for(Zd_Assort assortFor : assortList){ + //定义无匹配的分类 + boolean flag = false; + for(Archive_Detail detail : details){ + //判断主键相同且分类id相同 + if(masterId.equals(detail.getMasterid()) && assortFor.getAssortId().equals(detail.getAssortid())){ + flag = true; + break; + } + } + //该分类无匹配组织名称集合 + if(!flag){ + if(StringUtils.isBlank(unSuccessAssortNames)){ + unSuccessAssortNames.append(assortFor.getAssortName()); + }else{ + unSuccessAssortNames.append(",").append(assortFor.getAssortName()); + } + } + } + master.setId(masterId); + master.setUnSuccessAssortNames(unSuccessAssortNames.toString()); + list.add(master); + } + } + return list; + } + /** * author:zwh * 终审审核操作 @@ -696,6 +786,7 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String ids = master.getId(); String[] idList = ids.split(","); + List archiveFlowRoles = flowRoleMapper.selectAll(); for(String id : idList) { if(StringUtils.isNotBlank(id)) { //修改病案归档状态 @@ -724,60 +815,11 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { //是已召回,将当前节点code置为病案室审核 String currentStatus = EnumVerify.DocState.MedicalRoomCheck.getCode() + ""; //获取当前节点和下个节点对象集合 - List currentRoleAndNextRole = flowInfoService.getCurrentRoleAndNextRole(currentStatus, EnumVerify.DocState.MedicalRoomCheck.getCode()); + List currentRoleAndNextRole = flowInfoService.getCurrentRoleAndNextRole(currentStatus, EnumVerify.DocState.MedicalRoomCheck.getCode(),archiveFlowRoles); //添加流转节点 flowInfoService.insertFlowInfo(master.getId(), master.getRemark(), currentRoleAndNextRole.get(0), currentRoleAndNextRole.get(1), sumbitDate); } } - /*//masterId; - flowInfo.setMasterId(master.getId()); - //stepIndex:当前步骤 - ArchiveFlowRole currentRole = new ArchiveFlowRole(); - //查询审核角色集合,根据有效进行计算状态code - List archiveFlowRoles = flowRoleMapper.selectAll(); - for (ArchiveFlowRole archiveFlowRole:archiveFlowRoles) { - if(archiveFlowRole.getCode().equals(EnumVerify.DocState.MedicalRoomCheck.getCode()+"")){ - currentRole = archiveFlowRole; - break; - } - } - flowInfo.setStepIndex(currentRole.getStepIndex()); - //startStep:当前步骤name - flowInfo.setStartStep(currentRole.getName()); - //sumbitName:按钮名称 - flowInfo.setSumbitName(currentRole.getSumbitName()); - //targetStep:下一步骤name - flowInfo.setTargetStep("已归档"); - //useSeconds:距离上次提交用时s数 - Date preDate = new Date(); - //查询上次节点的时间 - List archiveFlowInfos = flowInfoMapper.selectPreInfo(master.getId(), currentRole.getName()); - if(null != archiveFlowInfos && !archiveFlowInfos.isEmpty()){ - //存在取最后一次提交时间 - preDate = archiveFlowInfos.get(0).getCreatetime(); - }else{ - //取出院时间 - Archive_Master archiveMaster1 = archiveMasterMapper.selectByPrimaryKey(master.getId()); - SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String dischargeDateTime = archiveMaster1.getDischargeDateTime(); - if(StringUtils.isNotBlank(dischargeDateTime)){ - preDate = fmt.parse(dischargeDateTime); - } - } - if(null != preDate){ - long millis = sumbitDate.getTime() - preDate.getTime(); - flowInfo.setUseSeconds(millis/1000); - } - //remark:提交内容 - flowInfo.setRemark(master.getRemark()); - //userName:提交人用户名 - // 从session获取用户名 - flowInfo.setUserName(username); - //createtime:提交时间 - flowInfo.setSumbitTime(sumbitDate); - //createtime:创建时间 - flowInfo.setCreatetime(new Date()); - flowInfoMapper.insert(flowInfo);*/ } /** diff --git a/src/main/webapp/WEB-INF/views/beHospitaledDir/beHospList.jsp b/src/main/webapp/WEB-INF/views/beHospitaledDir/beHospList.jsp index 4c95675..349d5ee 100644 --- a/src/main/webapp/WEB-INF/views/beHospitaledDir/beHospList.jsp +++ b/src/main/webapp/WEB-INF/views/beHospitaledDir/beHospList.jsp @@ -538,7 +538,7 @@
评分:
-
+
退给角色: @@ -575,6 +575,7 @@ + 内容: @@ -633,6 +634,26 @@
+<%--审核完成不完整表格弹窗--%> + <%--查看流程弹窗--%>