| | |
| | | private ServiceSubtaskMapper serviceSubtaskMapper; |
| | | @Autowired |
| | | private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper; |
| | | @Autowired |
| | | private PatMedOperationMapper patMedOperationMapper; |
| | | @Autowired |
| | | private PatMedOperationItemMapper patMedOperationItemMapper; |
| | | |
| | | @Value("${spring.profiles.active}") |
| | | private String active; |
| | | |
| | |
| | | } |
| | | } |
| | | // 手术随访 |
| | | // PatMedInhosp pmss = new PatMedInhosp(); |
| | | // //获取需要出院疾病随访,未处理的数据 |
| | | // pmss.setOpercheckFlag("0"); |
| | | // pmss.setInhospstate("1"); |
| | | // pmss.setFuflag("1"); |
| | | // List<PatMedInhosp> patMedInhospSSs = patMedInhospMapper.selectPatMedInhospList(pmss); |
| | | // log.info("dealOutHospInfo需要处理的出院疾病患者信息:{}", CollectionUtils.isNotEmpty(patMedInhospSSs) ? patMedInhospSSs.size() : null); |
| | | // for (PatMedInhosp patMedInhosp1 : patMedInhospSSs) { |
| | | // String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | // patMedInhosp1.setTagname(tagname); |
| | | // } |
| | | // |
| | | // for (PatMedInhosp pmiSS : patMedInhospSSs) { |
| | | // //获取患者信息 |
| | | // PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiSS.getPatid()); |
| | | // if (Objects.isNull(patArchive)) { |
| | | // pmiSS.setDiagcheckFlag("2"); |
| | | // pmiSS.setLongTaskReason("患者基本信息为空"); |
| | | // patMedInhospMapper.updatePatMedInhosp(pmiSS); |
| | | // continue; |
| | | // } |
| | | // try { |
| | | //// if (StringUtils.isEmpty(pmiSS.getLeaveicd10code())) { |
| | | //// continue; |
| | | //// } |
| | | // // 根据患者的疾病,获取该疾病的长期任务 |
| | | // ServiceTaskoper serviceTaskoper = new ServiceTaskoper(); |
| | | // serviceTaskoper.setLongtask(1L); |
| | | // serviceTaskoper.setOrgid(pmiSS.getOrgid()); |
| | | // //todo |
| | | // serviceTaskoper.setOplevelcode(""); |
| | | // |
| | | // List<ServiceTaskoper> serviceTaskopers = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper); |
| | | // //如果部门模板为空(将deptIsNull设置为true) |
| | | // if (CollectionUtils.isEmpty(serviceTaskopers) || serviceTaskopers.size() == 0) { |
| | | // PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiSS.getInhospid()); |
| | | // pmiSS.setOpercheckFlag("2"); |
| | | // pmiSS.setLongTaskReason(patMedInhosp.getLongTaskReason() + "所患的手术未配置长期任务;"); |
| | | // patMedInhospMapper.updatePatMedInhosp(pmiSS); |
| | | // } else { |
| | | // for (ServiceTaskoper serviceTaskoper1 : serviceTaskopers) { |
| | | // writeInSubTask(serviceTaskoper1.getTaskId(), true, pmiSS, patArchive, 3, config); |
| | | // } |
| | | // } |
| | | // |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // log.error("人员手术处理出异常了:{}", e.getMessage()); |
| | | // pmiSS.setOpercheckFlag("2"); |
| | | // pmiSS.setLongTaskReason("人员手术处理异常:" + e.getMessage()); |
| | | // patMedInhospMapper.updatePatMedInhosp(pmiSS); |
| | | // } |
| | | // } |
| | | PatMedOperationItem pmoi = new PatMedOperationItem(); |
| | | //获取需要出院疾病随访,未处理的数据 |
| | | pmoi.setOpercheckFlag("0"); |
| | | pmoi.setMainFlag("1"); |
| | | |
| | | List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectPatMedOperationItemList(pmoi); |
| | | log.info("dealOutHospInfo需要处理的出院手术患者信息:{}", CollectionUtils.isNotEmpty(patMedOperationItems) ? patMedOperationItems.size() : null); |
| | | |
| | | for (PatMedOperationItem opItem : patMedOperationItems) { |
| | | |
| | | try { |
| | | if (StringUtils.isEmpty(opItem.getOplevelcode())) { |
| | | continue; |
| | | } |
| | | // 根据患者的疾病,获取该疾病的长期任务 |
| | | ServiceTaskoper serviceTaskoper = new ServiceTaskoper(); |
| | | serviceTaskoper.setLongtask(1L); |
| | | serviceTaskoper.setOrgid(opItem.getOrgid()); |
| | | serviceTaskoper.setOplevelcode(opItem.getOplevelcode()); |
| | | |
| | | List<ServiceTaskoper> serviceTaskopers = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper); |
| | | //如果部门模板为空(将deptIsNull设置为true) |
| | | if (CollectionUtils.isEmpty(serviceTaskopers) || serviceTaskopers.size() == 0) { |
| | | PatMedOperationItem patMedOperationItem = patMedOperationItemMapper.selectPatMedOperationItemById(opItem.getId()); |
| | | patMedOperationItem.setOpercheckFlag("2"); |
| | | patMedOperationItem.setLongTaskReason(patMedOperationItem.getLongTaskReason() + "所患的手术未配置长期任务;"); |
| | | patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem); |
| | | } else { |
| | | for (ServiceTaskoper serviceTaskoper1 : serviceTaskopers) { |
| | | writeInSubTaskForOp(serviceTaskoper1.getTaskId(), true, opItem, config); |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("人员手术处理出异常了:{}", e.getMessage()); |
| | | opItem.setOpercheckFlag("2"); |
| | | opItem.setLongTaskReason("人员手术处理异常:" + e.getMessage()); |
| | | patMedOperationItemMapper.updatePatMedOperationItem(opItem); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //获取未处理在院的数据(如果刚刚出院的患者数据的出院时间,在下面查询出的入院时间之前,那之前的出院患者的数据,也得停掉,因为又入院了) |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * @param taskid 任务id |
| | | * @param check 是否需要校验 |
| | | * @param patMedOperationItem 手术记录 |
| | | * @param config 配置信息 visit.early.day |
| | | */ |
| | | //将患者放到subtask中 手术专用 |
| | | private void writeInSubTaskForOp(Long taskid, Boolean check, PatMedOperationItem patMedOperationItem, String config) { |
| | | String longTaskReason = patMedOperationItem.getLongTaskReason(); |
| | | String orgId = patMedOperationItem.getOrgid(); |
| | | if (StringUtils.isEmpty(longTaskReason)) longTaskReason = ""; |
| | | ServiceTask st = new ServiceTask(); |
| | | st.setTaskid(taskid); |
| | | st.setSendState(2L); |
| | | List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st); |
| | | ServiceTask serviceTask = null; |
| | | if (CollectionUtils.isEmpty(serviceTasks)) { |
| | | log.info("该手术对应手术等级的长期任务不存在,任务ID为:{}", taskid); |
| | | patMedOperationItem.setOpercheckFlag("2"); |
| | | patMedOperationItem.setLongTaskReason(longTaskReason + " & 该手术对应手术等级的长期任务不存在,任务ID为:" + taskid); |
| | | patMedOperationItemMapper.insertPatMedOperationItem(patMedOperationItem); |
| | | return; |
| | | } else { |
| | | serviceTask = serviceTasks.get(0); |
| | | } |
| | | if (Objects.isNull(patMedOperationItem.getOpid())) { |
| | | return; |
| | | } |
| | | if (Objects.isNull(patMedOperationItem.getOplevelcode())) { |
| | | return; |
| | | } |
| | | PatMedOperation patMedOperation = patMedOperationMapper.selectPatMedOperationById(patMedOperationItem.getOpid()); |
| | | if (Objects.isNull(patMedOperation)) { |
| | | return; |
| | | } |
| | | PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOperation.getPatid()); |
| | | if (Objects.isNull(patArchive)) { |
| | | return; |
| | | } |
| | | //封装serviceSubtask |
| | | ServiceSubtask serviceSubtask = boxedServiceSubtaskForOp(serviceTask, patMedOperation, patArchive, config); |
| | | if (ObjectUtils.isEmpty(serviceSubtask)) { |
| | | return; |
| | | } |
| | | serviceSubtask.setVisitDeptCode(patMedOperation.getReqdeptcode()); |
| | | serviceSubtask.setVisitDeptName(patMedOperation.getReqdeptname()); |
| | | //记录insertServiceSubtask语句返回状态 |
| | | Integer i = 0; |
| | | try { |
| | | //先判断一下,是否需要校验 |
| | | if (check && (Objects.isNull(serviceSubtask.getTaskSituation()) || serviceSubtask.getTaskSituation() != 6)) { |
| | | //在新增之前,先通过患者ID,sendstate=2查询一下,在所有长期任务中,是不是还有该患者待执行的任务,有的话,比较之前的endtime是否小于当前的endtaime,如果之前的小于现在的,则直接将之前的停掉(原因再入院) |
| | | ServiceSubtaskEntity subtask = new ServiceSubtaskEntity(); |
| | | subtask.setPatid(patArchive.getId()); |
| | | subtask.setSendstate(2L); |
| | | subtask.setTaskid(taskid); |
| | | List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask); |
| | | // log.info("该患者待执行的任务:{}", CollectionUtils.isNotEmpty(selectServiceSubtaskList) ? selectServiceSubtaskList.size() : null); |
| | | if (CollectionUtils.isNotEmpty(selectServiceSubtaskList) && selectServiceSubtaskList.size() > 0) { |
| | | for (ServiceSubtask serviceSubtask1 : selectServiceSubtaskList) { |
| | | if (Objects.isNull(serviceSubtask1.getLongSendTime())) { |
| | | //不是长期任务,不处理 |
| | | continue; |
| | | } |
| | | } |
| | | } else { |
| | | if (StringUtils.isEmpty(serviceSubtask.getPhone())) { |
| | | if (StringUtils.isNotEmpty(serviceSubtask.getRemark())) |
| | | serviceSubtask.setRemark(serviceSubtask.getRemark() + ",手机号为空"); |
| | | else serviceSubtask.setRemark("手机号为空"); |
| | | serviceSubtask.setSendstate(4L); |
| | | serviceSubtask.setResult("error"); |
| | | } |
| | | serviceSubtask.setCreateBy(serviceTask.getCreateBy()); |
| | | serviceSubtask.setCreateTime(new Date()); |
| | | i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); |
| | | addServiceSubtaskPreachform(serviceSubtask, null); |
| | | } |
| | | } else if (serviceSubtask.getTaskSituation() == 6) { |
| | | //说明该患者是被过滤的,不用再执行了 |
| | | serviceSubtask.setCreateBy(serviceTask.getCreateBy()); |
| | | serviceSubtask.setCreateTime(new Date()); |
| | | i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); |
| | | } else { |
| | | if (StringUtils.isEmpty(serviceSubtask.getPhone())) { |
| | | if (StringUtils.isNotEmpty(serviceSubtask.getRemark())) |
| | | serviceSubtask.setRemark(serviceSubtask.getRemark() + ",手机号为空"); |
| | | else serviceSubtask.setRemark("手机号为空"); |
| | | serviceSubtask.setSendstate(4L); |
| | | serviceSubtask.setResult("error"); |
| | | } |
| | | serviceSubtask.setCreateBy(serviceTask.getCreateBy()); |
| | | serviceSubtask.setCreateTime(new Date()); |
| | | i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); |
| | | addServiceSubtaskPreachform(serviceSubtask, null); |
| | | } |
| | | |
| | | //将check_flag改成1(已处理) |
| | | if (i == 1) { |
| | | PatMedOperationItem patMedOperationItem2 = new PatMedOperationItem(); |
| | | patMedOperationItem2.setId(patMedOperationItem.getId()); |
| | | patMedOperationItem2.setOpercheckFlag("1"); |
| | | patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem2); |
| | | } else { |
| | | //生成子任务失败, |
| | | log.info("生成子任务失败serviceSubtask的taskid为:{},patid为:{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid()); |
| | | PatMedOperationItem patMedOperationItem2 = new PatMedOperationItem(); |
| | | patMedOperationItem2.setId(patMedOperationItem.getId()); |
| | | patMedOperationItem2.setOpercheckFlag("2"); |
| | | patMedOperationItem2.setRemark("生成子任务失败 4"); |
| | | patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem2); |
| | | } |
| | | } catch (Exception e) { |
| | | //出错回滚事务 |
| | | |
| | | log.info("生成子任务报错回滚sserviceSubtask的taskid为:{},patid为:{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid()); |
| | | PatMedOperationItem patMedOperationItem2 = new PatMedOperationItem(); |
| | | patMedOperationItem2.setId(patMedOperationItem.getId()); |
| | | patMedOperationItem2.setOpercheckFlag("2"); |
| | | patMedOperationItem2.setRemark("生成子任务报错回滚 4"); |
| | | patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem2); |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | private Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) { |
| | | //将preachformDesc的json对象,放到list集合中 |
| | | ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); |
| | |
| | | return serviceSubtask; |
| | | } |
| | | |
| | | //封装serviceSubtask |
| | | private ServiceSubtask boxedServiceSubtaskForOp(ServiceTask serviceTask, PatMedOperation patMedOperation, PatArchive patArchive, String config) { |
| | | ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class); |
| | | serviceSubtask.setTaskid(serviceTask.getTaskid()); |
| | | if (StringUtils.isNotEmpty(serviceTask.getLibtemplateid())) |
| | | serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid())); |
| | | serviceSubtask.setNurseId(patMedOperation.getNurseId()); |
| | | serviceSubtask.setNurseName(patMedOperation.getNurseName()); |
| | | // serviceSubtask.setInhospid(patMedInhosp.getInhospid()); |
| | | serviceSubtask.setDrcode(patMedOperation.getDrcode()); |
| | | serviceSubtask.setDrname(patMedOperation.getDrname()); |
| | | serviceSubtask.setDeptcode(patMedOperation.getDeptcode()); |
| | | serviceSubtask.setDeptname(patMedOperation.getDeptname()); |
| | | |
| | | serviceSubtask.setTemplateid(serviceTask.getTemplateid()); |
| | | serviceSubtask.setTemplatename(serviceTask.getTemplatename()); |
| | | serviceSubtask.setPatid(patArchive.getId()); |
| | | serviceSubtask.setSendname(patArchive.getName()); |
| | | serviceSubtask.setSfzh(patArchive.getIdcardno()); |
| | | serviceSubtask.setPhone(patArchive.getTelcode()); |
| | | if (StringUtils.isBlank(patArchive.getTelcode())) serviceSubtask.setPhone(patArchive.getRelativetelcode()); |
| | | serviceSubtask.setSex(patArchive.getSex()); |
| | | serviceSubtask.setAge(patArchive.getAge()); |
| | | serviceSubtask.setSendstate(2L); |
| | | serviceSubtask.setManagementDoctor(patMedOperation.getDrname()); |
| | | serviceSubtask.setManagementDoctorCode(patMedOperation.getDrcode()); |
| | | // serviceSubtask.setStarttime(patMedInhosp.getStarttime()); |
| | | // serviceSubtask.setEndtime(patMedInhosp.getEndtime()); |
| | | |
| | | serviceSubtask.setServiceType(serviceTask.getServiceType()); |
| | | serviceSubtask.setPreachform(serviceTask.getPreachform()); |
| | | serviceSubtask.setHospType("2"); |
| | | serviceSubtask.setCreateTime(new Date()); |
| | | serviceSubtask.setUpdateTime(new Date()); |
| | | serviceSubtask.setCreateBy(patMedOperation.getNurseName()); |
| | | // serviceSubtask.setLeavehospitaldistrictcode(patArchive.getLeavehospitaldistrictcode()); |
| | | // serviceSubtask.setLeavehospitaldistrictname(patArchive.getLeavehospitaldistrictname()); |
| | | serviceSubtask.setUpdateBy(serviceTask.getUpdateBy()); |
| | | serviceSubtask.setUpdateTime(new Date()); |
| | | //设置发送时间 |
| | | if (serviceTask.getSendDay() == null) serviceTask.setSendDay(1L); |
| | | Date newDate = null; |
| | | //todo |
| | | newDate = addDays(patMedOperation.getCreateTime(), serviceTask.getSendDay().intValue()); |
| | | serviceSubtask.setLongSendTime(newDate); |
| | | serviceSubtask.setVisitTime(newDate); |
| | | |
| | | //如果是通知的话,需要提前几天将通过短信发出去(具体几天,这个可以配置在sys_conf表中) |
| | | if ("3".equals(serviceTask.getType())) { |
| | | serviceSubtask.setVisitTime(minusDay(newDate, StringUtils.isNotEmpty(config) ? Integer.parseInt(config) : 0)); |
| | | } |
| | | |
| | | //患者发送时间 |
| | | if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1")) { |
| | | String remark = patArchive.getNotrequiredreason(); |
| | | serviceSubtask.setRemark(remark); |
| | | serviceSubtask.setResult("error"); |
| | | serviceSubtask.setTaskSituation(6); |
| | | //不执行 |
| | | serviceSubtask.setSendstate(4L); |
| | | } |
| | | return serviceSubtask; |
| | | } |
| | | |
| | | /** |
| | | * 减去相应天数 |
| | | * |