| | |
| | | */ |
| | | @Override |
| | | public List<PatMedInhosp> selectPatMedInhospList(PatMedInhosp patMedInhosp) { |
| | | //入院床位排序只在「在院」查询(cry=0)下生效,其它查询一律忽略,保证原有排序不变 |
| | | patMedInhosp.setBedSort(normalizeBedSort(patMedInhosp.getCry(), patMedInhosp.getBedSort())); |
| | | if (patMedInhosp.getCry() != null && patMedInhosp.getCry() == 0) { |
| | | patMedInhosp.setDeptcodeList(patMedInhosp.getLeaveldeptcodes()); |
| | | patMedInhosp.setHospitaldistrictcodeList(patMedInhosp.getLeavehospitaldistrictcodes()); |
| | |
| | | patMedInhosp1.setTagname(tagname); |
| | | } |
| | | return patMedInhospList; |
| | | } |
| | | |
| | | /** |
| | | * 归一化入院床位排序参数 |
| | | * <p> |
| | | * asc / 1 -> asc(床位正序),desc / 2 -> desc(床位倒序),其余(含不传)-> null(不排序)。 |
| | | * 只对「在院」患者查询(cry=0)生效,出院/转科等查询忽略该参数。 |
| | | * |
| | | * @param cry 出入院标识:0入院 1出院 2转科 3预入院 |
| | | * @param bedSort 前端传入的床位排序值 |
| | | * @return 归一化后的排序值(asc / desc / null) |
| | | */ |
| | | private String normalizeBedSort(Integer cry, String bedSort) { |
| | | if (cry == null || cry != 0 || StringUtils.isEmpty(bedSort)) return null; |
| | | String value = bedSort.trim().toLowerCase(); |
| | | if ("asc".equals(value) || "1".equals(value)) return "asc"; |
| | | if ("desc".equals(value) || "2".equals(value)) return "desc"; |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | |
| | | pmoi.setDeptCodes(deptCodeList); |
| | | pmoi.setWardCodes(wardCodeList); |
| | | pmoi.setOpLevelCodes(opLevelCodeList); |
| | | List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemList(pmoi); |
| | | |
| | | //每次查询只查最大的手术等级记录 |
| | | List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemListMaxLevel(pmoi); |
| | | for (PatMedOperationItem patMedOperationItem : patMedOperationItems) { |
| | | PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOperationItem.getPatid()); |
| | | if (Objects.isNull(patArchive)) { |
| | |
| | | //记录insertServiceSubtask语句返回状态 |
| | | Integer i = 0; |
| | | try { |
| | | // 兜底:任务模板修改会重置 pat_med_inhosp 的处理标记,但已完成的首访不会删除。 |
| | | // 同一 inhospid + taskid 已存在未删除的首次随访(upid 为空)时,不再插入,避免出现两条首次随访。 |
| | | if (check |
| | | && ("2".equals(serviceTask.getServiceType()) || "13".equals(serviceTask.getServiceType())) |
| | | && (type == 1 || type == 2 || type == 3)) { |
| | | ServiceSubtaskEntity firstQuery = new ServiceSubtaskEntity(); |
| | | firstQuery.setInhospid(patMedInhosp1.getInhospid()); |
| | | firstQuery.setTaskid(taskid); |
| | | List<ServiceSubtask> firstList = serviceSubtaskMapper.selectServiceSubtaskList(firstQuery); |
| | | boolean firstExists = CollectionUtils.isNotEmpty(firstList) |
| | | && firstList.stream().anyMatch(item -> item.getUpid() == null); |
| | | if (firstExists) { |
| | | log.info("患者{}已存在首次随访任务,跳过重复生成, taskid={}, type={}", |
| | | patMedInhosp1.getInhospid(), taskid, type); |
| | | PatMedInhosp flagUpdate = new PatMedInhosp(); |
| | | flagUpdate.setInhospid(patMedInhosp1.getInhospid()); |
| | | if (type == 1) flagUpdate.setDeptcheckFlag("1"); |
| | | if (type == 2) flagUpdate.setWardcheckFlag("1"); |
| | | if (type == 3) flagUpdate.setDiagcheckFlag("1"); |
| | | patMedInhospMapper.updatePatMedInhosp(flagUpdate); |
| | | return; |
| | | } |
| | | } |
| | | //先判断一下,是否需要校验 |
| | | if (check && (Objects.isNull(serviceSubtask.getTaskSituation()) || serviceSubtask.getTaskSituation() != 6)) { |
| | | //在新增之前,先通过患者ID,sendstate=2查询一下,在所有长期任务中,是不是还有该患者待执行的任务,有的话,比较之前的endtime是否小于当前的endtaime,如果之前的小于现在的,则直接将之前的停掉(原因再入院) |
| | |
| | | } |
| | | } |
| | | |
| | | private Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) { |
| | | @Override |
| | | public Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) { |
| | | //将preachformDesc的json对象,放到list集合中 |
| | | ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); |
| | | if (Objects.isNull(serviceTask)) { |
| | |
| | | // } |
| | | ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class); |
| | | serviceSubtask.setTaskid(serviceTask.getTaskid()); |
| | | serviceSubtask.setOrgid(serviceTask.getOrgid()); |
| | | serviceSubtask.setCampusid(serviceTask.getCampusid()); |
| | | if (StringUtils.isNotEmpty(serviceTask.getLibtemplateid())) |
| | | serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid())); |
| | | serviceSubtask.setNurseId(patMedInhosp1.getNurseId()); |
| | |
| | | private ServiceSubtask boxedServiceSubtaskForOp(ServiceTask serviceTask, PatMedInhosp patMedInhosp1, PatMedOperationItem patMedOperationItem, PatArchive patArchive, String config) { |
| | | ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class); |
| | | serviceSubtask.setTaskid(serviceTask.getTaskid()); |
| | | serviceSubtask.setOrgid(serviceTask.getOrgid()); |
| | | serviceSubtask.setCampusid(serviceTask.getCampusid()); |
| | | if (StringUtils.isNotEmpty(serviceTask.getLibtemplateid())) |
| | | serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid())); |
| | | serviceSubtask.setNurseId(patMedInhosp1.getNurseId()); |
| | |
| | | pmoi.setOpercheckFlag("0"); |
| | | pmoi.setMainFlag("1"); |
| | | |
| | | List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemList(pmoi); |
| | | //每次查询只查最大的手术等级记录 |
| | | List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemListMaxLevel(pmoi); |
| | | log.info("dealOutHospInfo需要处理的出院手术患者信息:{}", CollectionUtils.isNotEmpty(patMedOperationItems) ? patMedOperationItems.size() : null); |
| | | |
| | | for (PatMedOperationItem opItem : patMedOperationItems) { |
| | |
| | | return generatedCount; |
| | | } |
| | | |
| | | @Override |
| | | public void dealIcd10Subtask(PatMedInhosp pmks, String config) { |
| | | pmks.setDiagcheckFlag("0"); |
| | | pmks.setInhospstate("1"); |
| | | pmks.setFuflag("1"); |
| | | List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks); |
| | | log.info("dealIcd10Subtask 待处理出院疾病患者数:{}", CollectionUtils.isEmpty(patMedInhosps) ? 0 : patMedInhosps.size()); |
| | | if (CollectionUtils.isNotEmpty(patMedInhosps)) { |
| | | int matchedTaskCount = 0; |
| | | for (PatMedInhosp patMedInhosp : patMedInhosps) { |
| | | // 获取患者基本信息,档案不存在时直接标记失败,避免后续空指针 |
| | | PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp.getPatid()); |
| | | if (Objects.isNull(patArchive)) { |
| | | PatMedInhosp updateObj = new PatMedInhosp(); |
| | | updateObj.setInhospid(patMedInhosp.getInhospid()); |
| | | updateObj.setDiagcheckFlag("2"); |
| | | updateObj.setLongTaskReason("患者基本信息为空"); |
| | | patMedInhospMapper.updatePatMedInhosp(updateObj); |
| | | continue; |
| | | } |
| | | matchedTaskCount += addIcd10SubTaskForPatient(patMedInhosp, patArchive, config); |
| | | } |
| | | log.info("dealIcd10Subtask 处理完成,待处理:{},匹配疾病长期任务次数:{}", patMedInhosps.size(), matchedTaskCount); |
| | | } |
| | | } |
| | | |
| | | } |