|  |  | 
 |  |  | package com.smartor.service.impl; | 
 |  |  |  | 
 |  |  | import com.fasterxml.jackson.core.JsonProcessingException; | 
 |  |  | import com.fasterxml.jackson.core.type.TypeReference; | 
 |  |  | import com.fasterxml.jackson.databind.ObjectMapper; | 
 |  |  | import com.ruoyi.common.core.domain.entity.SysDept; | 
 |  |  | import com.ruoyi.common.utils.DateUtils; | 
 |  |  | import com.ruoyi.common.utils.DtoConversionUtils; | 
 |  |  | 
 |  |  | import org.springframework.beans.factory.annotation.Value; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  |  | 
 |  |  | import java.time.Instant; | 
 |  |  | import java.time.temporal.ChronoUnit; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | 
 |  |  | public class PatMedInhospServiceImpl implements IPatMedInhospService { | 
 |  |  |     @Autowired | 
 |  |  |     private PatMedInhospMapper patMedInhospMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private ServiceCheckMapper serviceCheckMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private ServiceTaskdeptMapper serviceTaskdeptMapper; | 
 |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private PatArchiveMapper patArchiveMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private TemplateDeptMapper templateDeptMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private PatArchiveImportMapper patArchiveImportMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private Icd10AssociationMapper icd10AssociationMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private SvyTaskTemplateMapper svyTaskTemplateMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private IvrTaskTemplateMapper ivrTaskTemplateMappte; | 
 |  |  |     @Autowired | 
 |  |  |     private ServiceTaskMapper serviceTaskMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private ServiceSubtaskMapper serviceSubtaskMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private SysUserDeptMapper sysUserDeptMapper; | 
 |  |  |     private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper; | 
 |  |  |  | 
 |  |  |     @Value("${createTaskServiceType}") | 
 |  |  |     private List<String> createTaskServiceType; | 
 |  |  |     @Value("${spring.profiles.active}") | 
 |  |  |     private String active; | 
 |  |  |  | 
 |  |  |     //记录长期任务基础信息 | 
 |  |  |     List<IvrLibaTemplate> libaTemplates = new ArrayList<>(); | 
 |  |  |     List<IvrTaskTemplate> ivrTaskTemplates = new ArrayList<>(); | 
 |  |  |     List<ServiceTask> serviceTaskList = new ArrayList<>(); | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 查询患者住院记录 | 
 |  |  | 
 |  |  |             patMedInhosp1.setTagname(tagname); | 
 |  |  |         } | 
 |  |  |         return patMedInhospList; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Map<String, Integer> queryPersonCount(PatServiceCount patServiceCount) { | 
 |  |  |         if (patServiceCount.getInterval() == 1) { | 
 |  |  |             //周 | 
 |  |  |         } else if (patServiceCount.getInterval() == 2) { | 
 |  |  |             //月 | 
 |  |  |         } else if (patServiceCount.getInterval() == 3) { | 
 |  |  |             //年 | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |         PatMedRes patMedRes = null; | 
 |  |  |         // 获取当前登陆人的部门权限 | 
 |  |  |         if (org.springframework.util.CollectionUtils.isEmpty(patMedReq.getDeptcodeList())) { | 
 |  |  |             Long userId = SecurityUtils.getUserId(); | 
 |  |  |             List<SysDept> sysDepts = sysUserDeptMapper.selectDeptListByUserId(userId); | 
 |  |  |             List<String> deptCode = new ArrayList<>(); | 
 |  |  |             for (SysDept sysDept : sysDepts) { | 
 |  |  |                 deptCode.add(sysDept.getDeptId().toString()); | 
 |  |  |             } | 
 |  |  |             patMedReq.setDeptcodeList(deptCode); | 
 |  |  |             patMedRes = patMedInhospMapper.selectPatMedInhospCount(patMedReq); | 
 |  |  | //            Long userId = SecurityUtils.getUserId(); | 
 |  |  | //            List<SysDept> sysDepts = sysUserDeptMapper.selectDeptListByUserId(userId); | 
 |  |  | //            List<String> deptCode = new ArrayList<>(); | 
 |  |  | //            for (SysDept sysDept : sysDepts) { | 
 |  |  | //                deptCode.add(sysDept.getDeptId().toString()); | 
 |  |  | //            } | 
 |  |  | //            patMedReq.setDeptcodeList(deptCode); | 
 |  |  | //            patMedRes = patMedInhospMapper.selectPatMedInhospCount(patMedReq); | 
 |  |  |         } | 
 |  |  |         patMedRes = patMedInhospMapper.selectPatMedInhospCount(patMedReq); | 
 |  |  |         return patMedRes; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         return patMedInhospMapper.deletePatMedInhospByInhospno(inhospno); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public int dealOutHospInfo() { | 
 |  |  |         PatMedInhosp patMedInhosp = new PatMedInhosp(); | 
 |  |  |         //获取需要出院随访,未处理的数据 | 
 |  |  |         patMedInhosp.setCheckFlag("0"); | 
 |  |  |         patMedInhosp.setInhospstate("1"); | 
 |  |  |         patMedInhosp.setFuflag("1"); | 
 |  |  |         List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); | 
 |  |  |         log.error("dealOutHospInfo需要处理的出院患者信息:{}", patMedInhosps); | 
 |  |  |  | 
 |  |  |         PatMedInhosp pmks = new PatMedInhosp(); | 
 |  |  |         //获取需要出院部门随访,未处理的数据 | 
 |  |  |         pmks.setDeptcheckFlag("0"); | 
 |  |  |         pmks.setInhospstate("1"); | 
 |  |  |         pmks.setFuflag("1"); | 
 |  |  |         List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks); | 
 |  |  |         log.info("dealOutHospInfo需要处理的出院部门患者信息:{}", patMedInhosps); | 
 |  |  |         for (PatMedInhosp patMedInhosp1 : patMedInhosps) { | 
 |  |  |             String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); | 
 |  |  |             patMedInhosp1.setTagname(tagname); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         //科室 | 
 |  |  |         for (PatMedInhosp patMedInhosp1 : patMedInhosps) { | 
 |  |  |             //先根据科室去service_check查询check_visit_flag是根据“科室”随访,还是根据“第一诊断”随访 | 
 |  |  |             ServiceCheck serviceCheck = new ServiceCheck(); | 
 |  |  |             serviceCheck.setDeptCode(patMedInhosp1.getDeptcode()); | 
 |  |  |             serviceCheck.setOrgid(patMedInhosp1.getOrgid()); | 
 |  |  |             List<ServiceCheck> serviceChecks = serviceCheckMapper.selectServiceCheckList(serviceCheck); | 
 |  |  |             //获取患者信息 | 
 |  |  |             PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid()); | 
 |  |  |             if (Objects.isNull(patArchive)) { | 
 |  |  |                 patMedInhosp1.setCheckFlag("2"); | 
 |  |  |                 patMedInhosp1.setDeptcheckFlag("2"); | 
 |  |  |                 patMedInhosp1.setLongTaskReason("患者基本信息为空"); | 
 |  |  |                 patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             try { | 
 |  |  |                 if (CollectionUtils.isEmpty(serviceChecks) || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 1 || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 3) { | 
 |  |  |                     //根据患者所在科室,获取该科室的长期任务 | 
 |  |  |                     ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); | 
 |  |  |                     serviceTaskdept.setLongtask(1L); | 
 |  |  |                     serviceTaskdept.setDeptCode(patMedInhosp1.getLeaveldeptcode()); | 
 |  |  |                     serviceTaskdept.setServiceType("2"); | 
 |  |  |                     List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); | 
 |  |  |                     //如果部门模板为空(暂定,将出入院表的check_flag设置为2  ,long_task_reason 记录原因) | 
 |  |  |                     if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) { | 
 |  |  |                         patMedInhosp1.setCheckFlag("2"); | 
 |  |  |                         patMedInhosp1.setLongTaskReason("该患者所在科室,未配置长期任务;"); | 
 |  |  |                         patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |                         continue; | 
 |  |  |                     } else if (serviceTaskdepts.size() > 1) { | 
 |  |  |                         //如果查询出多个任务,那就取第一个,并在患者备注一下 | 
 |  |  |                         List<Long> tempList = serviceTaskdepts.stream().map(ServiceTaskdept::getTaskId).collect(Collectors.toList()); | 
 |  |  |                         patMedInhosp1.setLongTaskReason("该患者所在科室,有多个出院随访长期任务:" + tempList); | 
 |  |  |                         patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |                         ServiceTaskdept serviceTaskdept1 = serviceTaskdepts.get(0); | 
 |  |  |                         serviceTaskdepts = new ArrayList<>(); | 
 |  |  |                         serviceTaskdepts.add(serviceTaskdept1); | 
 |  |  |                 //根据患者所在科室,获取该科室的长期任务 | 
 |  |  |                 ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); | 
 |  |  |                 serviceTaskdept.setLongtask(1L); | 
 |  |  |                 serviceTaskdept.setDeptCode(patMedInhosp1.getLeaveldeptcode()); | 
 |  |  |                 serviceTaskdept.setDeptType("1"); | 
 |  |  |                 serviceTaskdept.setOrgid(patMedInhosp1.getOrgid()); | 
 |  |  |                 List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); | 
 |  |  |                 //如果部门模板为空(将deptIsNull设置为true) | 
 |  |  |                 if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) { | 
 |  |  |                     PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid()); | 
 |  |  |                     patMedInhosp1.setDeptcheckFlag("2"); | 
 |  |  |                     patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "该患者所在科室未配置长期任务;"); | 
 |  |  |                     patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |                 } else { | 
 |  |  |                     for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) { | 
 |  |  |                         writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 1); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     writeInSubTask(serviceTaskdepts.get(0).getTaskId(), true, patMedInhosp1, patArchive); | 
 |  |  |                 } | 
 |  |  |                 if (serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 2 || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 3) { | 
 |  |  |                     //丽水需要根据离院疾病对该病人生成一次随访 | 
 |  |  |                     String[] split = patMedInhosp1.getIcd10code().split(","); | 
 |  |  |                     ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); | 
 |  |  |                     serviceTaskdiag.setLongtask(1L); | 
 |  |  |                     serviceTaskdiag.setIcd10code(split[0]); | 
 |  |  |                     serviceTaskdiag.setServiceType("2"); | 
 |  |  |                     List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag); | 
 |  |  |                     PatMedInhosp patMedInhosp2 = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid()); | 
 |  |  |                     //如果疾病编码为空(暂定,将出入院表的check_flag设置为3  ,long_task_reason 记录原因) | 
 |  |  |                     if (CollectionUtils.isEmpty(serviceTaskdiags) || serviceTaskdiags.size() == 0) { | 
 |  |  |                         patMedInhosp1.setCheckFlag("3"); | 
 |  |  |                         patMedInhosp1.setLongTaskReason(patMedInhosp2.getLongTaskReason() + "该患者的第一疾病编码,未配置长期任务;"); | 
 |  |  |                         patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |                         continue; | 
 |  |  |                     } else if (serviceTaskdiags.size() > 1) { | 
 |  |  |                         //如果查询出多个任务,那就取第一个,并在患者备注一下 | 
 |  |  |                         List<Long> tempList = serviceTaskdiags.stream().map(ServiceTaskdiag::getTaskId).collect(Collectors.toList()); | 
 |  |  |                         patMedInhosp1.setLongTaskReason(patMedInhosp2.getLongTaskReason() + "该患者的第一疾病编码,有多个出院随访长期任务:" + tempList); | 
 |  |  |                         patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |                         ServiceTaskdiag serviceTaskdiag1 = serviceTaskdiags.get(0); | 
 |  |  |                         serviceTaskdiags = new ArrayList<>(); | 
 |  |  |                         serviceTaskdiags.add(serviceTaskdiag1); | 
 |  |  |                     } | 
 |  |  |                     writeInSubTask(serviceTaskdiags.get(0).getTaskId(), false, patMedInhosp1, patArchive); | 
 |  |  |                     patMedInhosp1.setDeptcheckFlag("1"); | 
 |  |  |                     patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } catch (Exception e) { | 
 |  |  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         //根据患者所在病区,获取该病区的长期任务,新华医院可以先不用根据病区和疾病来做 | 
 |  |  |         if (active.equals("xh")) { | 
 |  |  |             PatMedInhosp pmbq = new PatMedInhosp(); | 
 |  |  |             //获取需要出院部门随访,未处理的数据 | 
 |  |  |             pmbq.setWardcheckFlag("0"); | 
 |  |  |             pmbq.setInhospstate("1"); | 
 |  |  |             pmbq.setFuflag("1"); | 
 |  |  |             List<PatMedInhosp> patMedInhospBQs = patMedInhospMapper.selectPatMedInhospList(pmbq); | 
 |  |  |             log.info("dealOutHospInfo需要处理的出院病区患者信息:{}", patMedInhosps); | 
 |  |  |             for (PatMedInhosp patMedInhosp1 : patMedInhospBQs) { | 
 |  |  |                 String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); | 
 |  |  |                 patMedInhosp1.setTagname(tagname); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             //病区数据处理 | 
 |  |  |             for (PatMedInhosp pmiBQ1 : patMedInhospBQs) { | 
 |  |  |                 //获取患者信息 | 
 |  |  |                 PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiBQ1.getPatid()); | 
 |  |  |                 if (Objects.isNull(patArchive)) { | 
 |  |  |                     pmiBQ1.setWardcheckFlag("2"); | 
 |  |  |                     pmiBQ1.setLongTaskReason("患者基本信息为空"); | 
 |  |  |                     patMedInhospMapper.updatePatMedInhosp(pmiBQ1); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 try { | 
 |  |  |                     ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); | 
 |  |  |                     serviceTaskdept.setLongtask(1L); | 
 |  |  |                     serviceTaskdept.setDeptCode(pmiBQ1.getLeavehospitaldistrictcode()); | 
 |  |  |                     serviceTaskdept.setDeptType("2"); | 
 |  |  |                     serviceTaskdept.setOrgid(pmiBQ1.getOrgid()); | 
 |  |  |                     List<ServiceTaskdept> serviceTaskdeptList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); | 
 |  |  |                     //如果部门模板为空(将deptIsNull设置为true) | 
 |  |  |                     if (CollectionUtils.isEmpty(serviceTaskdeptList) || serviceTaskdeptList.size() == 0) { | 
 |  |  |                         PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiBQ1.getInhospid()); | 
 |  |  |                         pmiBQ1.setWardcheckFlag("2"); | 
 |  |  |                         pmiBQ1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "该患者所在病区未配置长期任务;"); | 
 |  |  |                         patMedInhospMapper.updatePatMedInhosp(pmiBQ1); | 
 |  |  |                     } else { | 
 |  |  |                         for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) { | 
 |  |  |                             writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiBQ1, patArchive, 2); | 
 |  |  |                         } | 
 |  |  |                         pmiBQ1.setWardcheckFlag("1"); | 
 |  |  |                         patMedInhospMapper.updatePatMedInhosp(pmiBQ1); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                 } catch (Exception e) { | 
 |  |  |                     e.printStackTrace(); | 
 |  |  |                     log.error("人员处理出异常了:{}", e.getMessage()); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             PatMedInhosp pmjb = new PatMedInhosp(); | 
 |  |  |             //获取需要出院疾病随访,未处理的数据 | 
 |  |  |             pmjb.setDiagcheckFlag("0"); | 
 |  |  |             pmjb.setInhospstate("1"); | 
 |  |  |             pmjb.setFuflag("1"); | 
 |  |  |             List<PatMedInhosp> patMedInhospJBs = patMedInhospMapper.selectPatMedInhospList(pmjb); | 
 |  |  |             log.info("dealOutHospInfo需要处理的出院疾病患者信息:{}", patMedInhosps); | 
 |  |  |             for (PatMedInhosp patMedInhosp1 : patMedInhospJBs) { | 
 |  |  |                 String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); | 
 |  |  |                 patMedInhosp1.setTagname(tagname); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             for (PatMedInhosp pmiJB : patMedInhospJBs) { | 
 |  |  |                 //获取患者信息 | 
 |  |  |                 PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiJB.getPatid()); | 
 |  |  |                 if (Objects.isNull(patArchive)) { | 
 |  |  |                     pmiJB.setDiagcheckFlag("2"); | 
 |  |  |                     pmiJB.setLongTaskReason("患者基本信息为空"); | 
 |  |  |                     patMedInhospMapper.updatePatMedInhosp(pmiJB); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 try { | 
 |  |  |                     if (StringUtils.isEmpty(pmiJB.getLeaveicd10code())) { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     // 根据患者的疾病,获取该疾病的长期任务 | 
 |  |  |                     ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); | 
 |  |  |                     serviceTaskdiag.setLongtask(1L); | 
 |  |  |                     serviceTaskdiag.setIcd10code(pmiJB.getLeaveicd10code()); | 
 |  |  |                     serviceTaskdiag.setOrgid(pmiJB.getOrgid()); | 
 |  |  |  | 
 |  |  |                     List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag); | 
 |  |  |                     //如果部门模板为空(将deptIsNull设置为true) | 
 |  |  |                     if (CollectionUtils.isEmpty(serviceTaskdiags) || serviceTaskdiags.size() == 0) { | 
 |  |  |                         PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid()); | 
 |  |  |                         pmiJB.setDiagcheckFlag("2"); | 
 |  |  |                         pmiJB.setLongTaskReason(patMedInhosp.getLongTaskReason() + "所患的疾病未配置长期任务;"); | 
 |  |  |                         patMedInhospMapper.updatePatMedInhosp(pmiJB); | 
 |  |  |                     } else { | 
 |  |  |                         for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) { | 
 |  |  |                             writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiJB, patArchive, 3); | 
 |  |  |                         } | 
 |  |  |                         pmiJB.setDiagcheckFlag("1"); | 
 |  |  |                         patMedInhospMapper.updatePatMedInhosp(pmiJB); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } catch (Exception e) { | 
 |  |  |                     e.printStackTrace(); | 
 |  |  |                     log.error("人员处理出异常了:{}", e.getMessage()); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         //获取未处理在院的数据(如果刚刚出院的患者数据的出院时间,在下面查询出的入院时间之前,那之前的出院患者的数据,也得停掉,因为又入院了) | 
 |  |  |         patMedInhosp.setCheckFlag("0"); | 
 |  |  |         PatMedInhosp patMedInhosp = new PatMedInhosp(); | 
 |  |  |         //获取需要出院部门随访,未处理的数据 | 
 |  |  |         patMedInhosp.setDeptcheckFlag("0"); | 
 |  |  |         patMedInhosp.setInhospstate("0"); | 
 |  |  |         List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); | 
 |  |  |         for (PatMedInhosp patMedInhosp1 : patMedInhosps) { | 
 |  |  |             String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); | 
 |  |  |             patMedInhosp1.setTagname(tagname); | 
 |  |  |         } | 
 |  |  |         if (CollectionUtils.isNotEmpty(patMedInhospList) && patMedInhospList.size() > 0) { | 
 |  |  |             dealInHospInfo(patMedInhospList); | 
 |  |  |         } | 
 |  |  |         return 1; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | // | 
 |  |  | //    @Override | 
 |  |  | //    public int dealOutHospInfo() { | 
 |  |  | //        PatMedInhosp patMedInhosp = new PatMedInhosp(); | 
 |  |  | //        //获取需要出院部门随访,未处理的数据 | 
 |  |  | //        patMedInhosp.setDeptcheckFlag("0"); | 
 |  |  | //        patMedInhosp.setInhospstate("1"); | 
 |  |  | //        patMedInhosp.setFuflag("1"); | 
 |  |  | //        List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); | 
 |  |  | //        log.error("dealOutHospInfo需要处理的出院患者信息:{}", patMedInhosps); | 
 |  |  | //        for (PatMedInhosp patMedInhosp1 : patMedInhosps) { | 
 |  |  | //            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); | 
 |  |  | //            patMedInhosp1.setTagname(tagname); | 
 |  |  | //        } | 
 |  |  | // | 
 |  |  | //        for (PatMedInhosp patMedInhosp1 : patMedInhosps) { | 
 |  |  | //            //先根据科室去service_check查询check_visit_flag是根据“科室”随访,还是根据“第一诊断”随访 | 
 |  |  | //            ServiceCheck serviceCheck = new ServiceCheck(); | 
 |  |  | //            serviceCheck.setDeptCode(patMedInhosp1.getDeptcode()); | 
 |  |  | //            serviceCheck.setOrgid(patMedInhosp1.getOrgid()); | 
 |  |  | //            List<ServiceCheck> serviceChecks = serviceCheckMapper.selectServiceCheckList(serviceCheck); | 
 |  |  | //            //获取患者信息 | 
 |  |  | //            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid()); | 
 |  |  | //            if (Objects.isNull(patArchive)) { | 
 |  |  | //                patMedInhosp1.setDeptcheckFlag("2"); | 
 |  |  | //                patMedInhosp1.setLongTaskReason("患者基本信息为空"); | 
 |  |  | //                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  | //                continue; | 
 |  |  | //            } | 
 |  |  | //            try { | 
 |  |  | //                if (CollectionUtils.isEmpty(serviceChecks) || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 1 || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 3) { | 
 |  |  | //                    //根据患者所在科室,获取该科室的长期任务 | 
 |  |  | //                    ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); | 
 |  |  | //                    serviceTaskdept.setLongtask(1L); | 
 |  |  | //                    serviceTaskdept.setDeptCode(patMedInhosp1.getLeaveldeptcode()); | 
 |  |  | //                    serviceTaskdept.setServiceType("2"); | 
 |  |  | //                    List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); | 
 |  |  | //                    //如果部门模板为空(暂定,将出入院表的check_flag设置为2  ,long_task_reason 记录原因) | 
 |  |  | //                    if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) { | 
 |  |  | //                        patMedInhosp1.setDeptcheckFlag("2"); | 
 |  |  | //                        patMedInhosp1.setLongTaskReason("该患者所在科室,未配置长期任务;"); | 
 |  |  | //                        patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  | //                        continue; | 
 |  |  | //                    } else if (serviceTaskdepts.size() > 1) { | 
 |  |  | //                        //如果查询出多个任务,那就取第一个,并在患者备注一下 | 
 |  |  | //                        List<Long> tempList = serviceTaskdepts.stream().map(ServiceTaskdept::getTaskId).collect(Collectors.toList()); | 
 |  |  | //                        patMedInhosp1.setLongTaskReason("该患者所在科室,有多个出院随访长期任务:" + tempList); | 
 |  |  | //                        patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  | //                        ServiceTaskdept serviceTaskdept1 = serviceTaskdepts.get(0); | 
 |  |  | //                        serviceTaskdepts = new ArrayList<>(); | 
 |  |  | //                        serviceTaskdepts.add(serviceTaskdept1); | 
 |  |  | //                    } | 
 |  |  | // | 
 |  |  | //                    writeInSubTask(serviceTaskdepts.get(0).getTaskId(), true, patMedInhosp1, patArchive); | 
 |  |  | //                } | 
 |  |  | //                if (serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 2 || serviceChecks != null && serviceChecks.get(0).getCheckVisitFlag() == 3) { | 
 |  |  | //                    //丽水需要根据离院疾病对该病人生成一次随访 | 
 |  |  | //                    String[] split = patMedInhosp1.getIcd10code().split(","); | 
 |  |  | //                    ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); | 
 |  |  | //                    serviceTaskdiag.setLongtask(1L); | 
 |  |  | //                    serviceTaskdiag.setIcd10code(split[0]); | 
 |  |  | //                    serviceTaskdiag.setServiceType("2"); | 
 |  |  | //                    List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag); | 
 |  |  | //                    PatMedInhosp patMedInhosp2 = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid()); | 
 |  |  | //                    //如果疾病编码为空(暂定,将出入院表的check_flag设置为3  ,long_task_reason 记录原因) | 
 |  |  | //                    if (CollectionUtils.isEmpty(serviceTaskdiags) || serviceTaskdiags.size() == 0) { | 
 |  |  | //                        patMedInhosp1.setDeptcheckFlag("3"); | 
 |  |  | //                        patMedInhosp1.setLongTaskReason(patMedInhosp2.getLongTaskReason() + "该患者的第一疾病编码,未配置长期任务;"); | 
 |  |  | //                        patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  | //                        continue; | 
 |  |  | //                    } else if (serviceTaskdiags.size() > 1) { | 
 |  |  | //                        //如果查询出多个任务,那就取第一个,并在患者备注一下 | 
 |  |  | //                        List<Long> tempList = serviceTaskdiags.stream().map(ServiceTaskdiag::getTaskId).collect(Collectors.toList()); | 
 |  |  | //                        patMedInhosp1.setLongTaskReason(patMedInhosp2.getLongTaskReason() + "该患者的第一疾病编码,有多个出院随访长期任务:" + tempList); | 
 |  |  | //                        patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  | //                        ServiceTaskdiag serviceTaskdiag1 = serviceTaskdiags.get(0); | 
 |  |  | //                        serviceTaskdiags = new ArrayList<>(); | 
 |  |  | //                        serviceTaskdiags.add(serviceTaskdiag1); | 
 |  |  | //                    } | 
 |  |  | //                    writeInSubTask(serviceTaskdiags.get(0).getTaskId(), false, patMedInhosp1, patArchive); | 
 |  |  | //                } | 
 |  |  | // | 
 |  |  | //            } catch (Exception e) { | 
 |  |  | //                e.printStackTrace(); | 
 |  |  | //                log.error("人员处理出异常了:{}", e.getMessage()); | 
 |  |  | //            } | 
 |  |  | //        } | 
 |  |  | // | 
 |  |  | //        //获取未处理在院的数据(如果刚刚出院的患者数据的出院时间,在下面查询出的入院时间之前,那之前的出院患者的数据,也得停掉,因为又入院了) | 
 |  |  | //        patMedInhosp.setDeptcheckFlag("0"); | 
 |  |  | //        patMedInhosp.setInhospstate("0"); | 
 |  |  | //        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); | 
 |  |  | //        for (PatMedInhosp patMedInhosp1 : patMedInhosps) { | 
 |  |  | //            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); | 
 |  |  | //            patMedInhosp1.setTagname(tagname); | 
 |  |  | //        } | 
 |  |  | //        if (CollectionUtils.isNotEmpty(patMedInhospList) && patMedInhospList.size() > 0) { | 
 |  |  | //            dealInHospInfo(patMedInhospList); | 
 |  |  | //        } | 
 |  |  | //        return 1; | 
 |  |  | //    } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 获取出院,住院,门诊服务人次 | 
 |  |  | 
 |  |  |     @Override | 
 |  |  |     public List<PatMedRes> getDeptRanking(PatMedReq patMedReq) { | 
 |  |  |  | 
 |  |  |         return patMedInhospMapper.getDeptRanking(patMedReq); | 
 |  |  |         return serviceSubtaskMapper.getDeptRanking(patMedReq); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //将患者放到subtask中 | 
 |  |  |     private void writeInSubTask(Long taskid, Boolean check, PatMedInhosp patMedInhosp1, PatArchive patArchive) { | 
 |  |  |     private void writeInSubTask(Long taskid, Boolean check, PatMedInhosp patMedInhosp1, PatArchive patArchive, Integer type) { | 
 |  |  |         String longTaskReason = patMedInhosp1.getLongTaskReason(); | 
 |  |  |         if (StringUtils.isEmpty(longTaskReason)) longTaskReason = ""; | 
 |  |  | //            Long taskid = std.getTaskId(); | 
 |  |  |         ServiceTask st = new ServiceTask(); | 
 |  |  |         st.setTaskid(taskid); | 
 |  |  |         st.setSendState(2L); | 
 |  |  |         List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st); | 
 |  |  |         if (CollectionUtils.isEmpty(serviceTasks)) { | 
 |  |  |             log.error("该患者出院随访长期任务不存在,任务ID为:{}", taskid); | 
 |  |  |             patMedInhosp1.setCheckFlag("2"); | 
 |  |  |             patMedInhosp1.setLongTaskReason(longTaskReason + " & 该患者出院随访长期任务不存在,任务ID为:" + taskid); | 
 |  |  |         if (CollectionUtils.isEmpty(serviceTasks) && type == 1) { | 
 |  |  |             log.info("该患者出院随访长期任务不存在,任务ID为:{}", taskid); | 
 |  |  |             patMedInhosp1.setDeptcheckFlag("2"); | 
 |  |  |             patMedInhosp1.setLongTaskReason(longTaskReason + " & 该患者离院科室长期任务不存在,任务ID为:" + taskid); | 
 |  |  |             patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |             return; | 
 |  |  |         } else if (CollectionUtils.isEmpty(serviceTasks) && type == 2) { | 
 |  |  |             patMedInhosp1.setWardcheckFlag("2"); | 
 |  |  |             patMedInhosp1.setLongTaskReason(longTaskReason + " & 该患者离院病区长期任务不存在,任务ID为:" + taskid); | 
 |  |  |             patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |             return; | 
 |  |  |         } else if (CollectionUtils.isEmpty(serviceTasks) && type == 3) { | 
 |  |  |             patMedInhosp1.setDiagcheckFlag("2"); | 
 |  |  |             patMedInhosp1.setLongTaskReason(longTaskReason + " & 该患者疾病长期任务不存在,任务ID为:" + taskid); | 
 |  |  |             patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         ServiceTask serviceTask = serviceTasks.get(0); | 
 |  |  |         if (!createTaskServiceType.contains(serviceTask.getServiceType())) { | 
 |  |  |             //不是允许的服务类型,则continue | 
 |  |  |             log.error("该患者出院随访长期任务的服务类型不在自动生成的服务类型列表中,任务ID为:{}", taskid); | 
 |  |  |             patMedInhosp1.setCheckFlag("2"); | 
 |  |  |             patMedInhosp1.setLongTaskReason(longTaskReason + " & 该患者出院随访长期任务的服务类型不在自动生成的服务类型列表中,任务ID为:" + taskid); | 
 |  |  |             patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         //封装serviceSubtask | 
 |  |  |         ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedInhosp1, patArchive); | 
 |  |  |         if (type != 2) { | 
 |  |  |             //科室和疾病 都用 科室填充 | 
 |  |  |             serviceSubtask.setVisitDeptCode(patMedInhosp1.getLeaveldeptcode()); | 
 |  |  |             serviceSubtask.setVisitDeptName(patMedInhosp1.getLeaveldeptname()); | 
 |  |  |         } else if (type == 2) { | 
 |  |  |             serviceSubtask.setVisitDeptCode(patMedInhosp1.getLeavehospitaldistrictcode()); | 
 |  |  |             serviceSubtask.setVisitDeptName(patMedInhosp1.getLeavehospitaldistrictname()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         Integer i = 0; | 
 |  |  |         //先判断一下,是否需要校验 | 
 |  |  |         if (check) { | 
 |  |  | 
 |  |  |             ServiceSubtaskVO subtask = new ServiceSubtaskVO(); | 
 |  |  |             subtask.setPatid(patArchive.getId()); | 
 |  |  |             subtask.setSendstate(2L); | 
 |  |  |             subtask.setTaskid(taskid); | 
 |  |  |             List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask); | 
 |  |  |             log.error("该患者待执行的任务:{}", selectServiceSubtaskList); | 
 |  |  |             log.info("该患者待执行的任务:{}", selectServiceSubtaskList); | 
 |  |  |             if (CollectionUtils.isNotEmpty(selectServiceSubtaskList) && selectServiceSubtaskList.size() > 0) { | 
 |  |  |                 for (ServiceSubtask serviceSubtask1 : selectServiceSubtaskList) { | 
 |  |  |                     if (Objects.isNull(serviceSubtask1.getLongSendTime())) { | 
 |  |  |                         //不是长期任务,不处理 | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     if (serviceSubtask1.getEndtime().before(serviceSubtask.getEndtime())) { | 
 |  |  |                         //如果当前循环的子任务的出院时间在“准备新增的子任务”的出院时间之前,则将循环的子任务停掉 | 
 |  |  |                     //type = 1或2 表示 ”科室、病区“ | 
 |  |  |                     if (type == 1 || type == 2) { | 
 |  |  |                         if (serviceSubtask1.getEndtime().before(serviceSubtask.getEndtime()) && serviceSubtask1.getServiceType().equals("2")) { | 
 |  |  |                             //如果当前循环的子任务的出院时间在“准备新增的子任务”的出院时间之前,则将循环的子任务停掉 | 
 |  |  |                             serviceSubtask1.setSendstate(4L); | 
 |  |  |                             serviceSubtask1.setRemark("患者再入院"); | 
 |  |  |                             serviceSubtask1.setResult("error"); | 
 |  |  | //                            serviceSubtask1.setFinishtime(new Date()); | 
 |  |  |                             serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy()); | 
 |  |  |                             serviceSubtask1.setUpdateTime(new Date()); | 
 |  |  |                             Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1); | 
 |  |  |                             if (aBoolean) i = 1; | 
 |  |  |                         } else { | 
 |  |  |                             //相反,则将当有的数据停掉 | 
 |  |  |                             serviceSubtask.setResult("error"); | 
 |  |  | //                            serviceSubtask.setFinishtime(new Date()); | 
 |  |  |                             serviceSubtask.setSendstate(4L); | 
 |  |  |                             serviceSubtask.setRemark("当前患者出院时间后有待执行的出院随访长期任务"); | 
 |  |  |                             serviceSubtask.setCreateBy(serviceTask.getCreateBy()); | 
 |  |  |                             serviceSubtask.setCreateTime(new Date()); | 
 |  |  |                             i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); | 
 |  |  |                         } | 
 |  |  |                     } else if (type == 3) { | 
 |  |  |                         //type=3 表示疾病 | 
 |  |  |                         //将之前的停掉 | 
 |  |  |                         serviceSubtask1.setSendstate(4L); | 
 |  |  |                         serviceSubtask1.setRemark("患者再入院"); | 
 |  |  |                         serviceSubtask1.setRemark("疾病患者再入院"); | 
 |  |  |                         serviceSubtask1.setResult("error"); | 
 |  |  |                         serviceSubtask1.setFinishtime(new Date()); | 
 |  |  | //                        serviceSubtask1.setFinishtime(new Date()); | 
 |  |  |                         serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy()); | 
 |  |  |                         serviceSubtask1.setUpdateTime(new Date()); | 
 |  |  |                         Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1); | 
 |  |  |                         if (aBoolean) i = 1; | 
 |  |  |                     } else { | 
 |  |  |                         //相反,则将当有的数据停掉 | 
 |  |  |                         serviceSubtask.setResult("error"); | 
 |  |  |                         serviceSubtask.setFinishtime(new Date()); | 
 |  |  |                         serviceSubtask.setSendstate(4L); | 
 |  |  |                         serviceSubtask.setRemark("当前患者出院时间后有待执行的出院随访长期任务"); | 
 |  |  |                         serviceSubtask.setCreateBy(serviceTask.getCreateBy()); | 
 |  |  |                         serviceSubtask.setCreateTime(new Date()); | 
 |  |  |                         serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1); | 
 |  |  |                         //重新新增子任务 | 
 |  |  |                         i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); | 
 |  |  |                         //这里需要全失败 | 
 |  |  |                         addServiceSubtaskPreachform(serviceSubtask, "5"); | 
 |  |  |  | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } else { | 
 |  |  |                 if (StringUtils.isEmpty(serviceSubtask.getPhone())) { | 
 |  |  |                     serviceSubtask.setRemark("手机号为空"); | 
 |  |  |                     serviceSubtask.setSendstate(4L); | 
 |  |  |                     serviceSubtask.setResult("error"); | 
 |  |  |                     serviceSubtask.setFinishtime(new Date()); | 
 |  |  |                 } | 
 |  |  |                 serviceSubtask.setCreateBy(serviceTask.getCreateBy()); | 
 |  |  |                 serviceSubtask.setCreateTime(new Date()); | 
 |  |  |                 i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); | 
 |  |  |             } | 
 |  |  |         } else { | 
 |  |  |             if (StringUtils.isEmpty(serviceSubtask.getPhone())) { | 
 |  |  |                 serviceSubtask.setRemark("手机号为空"); | 
 |  |  |                 serviceSubtask.setSendstate(4L); | 
 |  |  |                 serviceSubtask.setResult("error"); | 
 |  |  |                 serviceSubtask.setFinishtime(new Date()); | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |             serviceSubtask.setCreateBy(serviceTask.getCreateBy()); | 
 |  |  |             serviceSubtask.setCreateTime(new Date()); | 
 |  |  |             i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); | 
 |  |  |             addServiceSubtaskPreachform(serviceSubtask, null); | 
 |  |  |         } | 
 |  |  |         if (i == 1) { | 
 |  |  |             //将check_flag改成1(已处理) | 
 |  |  |             PatMedInhosp patMedInhosp2 = new PatMedInhosp(); | 
 |  |  |             patMedInhosp2.setInhospid(patMedInhosp1.getInhospid()); | 
 |  |  |             patMedInhosp2.setCheckFlag("1"); | 
 |  |  |             if (type == 1) patMedInhosp2.setDeptcheckFlag("1"); | 
 |  |  |             if (type == 2) patMedInhosp2.setWardcheckFlag("1"); | 
 |  |  |             if (type == 3) patMedInhosp2.setDiagcheckFlag("1"); | 
 |  |  |  | 
 |  |  |             patMedInhospMapper.updatePatMedInhosp(patMedInhosp2); | 
 |  |  |         } else { | 
 |  |  |             //生成子任务失败, | 
 |  |  |             log.error("生成子任务失败serviceSubtask为:{}", serviceSubtask); | 
 |  |  |             log.info("生成子任务失败serviceSubtask为:{}", serviceSubtask); | 
 |  |  |             PatMedInhosp patMedInhosp2 = new PatMedInhosp(); | 
 |  |  |             patMedInhosp2.setInhospid(patMedInhosp1.getInhospid()); | 
 |  |  |             patMedInhosp2.setRemark("生成子任务失败"); | 
 |  |  |             if (type == 1) patMedInhosp2.setDeptcheckFlag("2"); | 
 |  |  |             if (type == 2) patMedInhosp2.setWardcheckFlag("2"); | 
 |  |  |             if (type == 3) patMedInhosp2.setDiagcheckFlag("2"); | 
 |  |  |             patMedInhosp2.setRemark("生成子任务失败 " + type); | 
 |  |  |             patMedInhospMapper.updatePatMedInhosp(patMedInhosp2); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) { | 
 |  |  |         //将preachform的json对象,放到list集合中 | 
 |  |  |         String preachform = serviceSubtask.getPreachform(); | 
 |  |  |         ObjectMapper objectMapper = new ObjectMapper(); | 
 |  |  |         if (org.apache.commons.lang3.StringUtils.isNotEmpty(preachform)) { | 
 |  |  |             List<ServiceSubtaskPreachform> serviceSubtaskPreachformList = null; | 
 |  |  |             try { | 
 |  |  |                 serviceSubtaskPreachformList = objectMapper.readValue(preachform, new TypeReference<List<ServiceSubtaskPreachform>>() { | 
 |  |  |                 }); | 
 |  |  |             } catch (JsonProcessingException e) { | 
 |  |  |                 log.error("preachform转List<ServiceSubtaskPreachform>报错了:{}", e.getMessage()); | 
 |  |  |             } | 
 |  |  |             for (ServiceSubtaskPreachform serviceSubtaskPreachform : serviceSubtaskPreachformList) { | 
 |  |  |                 serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid()); | 
 |  |  |                 serviceSubtaskPreachform.setSubid(serviceSubtask.getId()); | 
 |  |  |                 //这个sendstate需要在数据库设置一个默认值为“1” | 
 |  |  |                 serviceSubtaskPreachform.setSendstate("1"); | 
 |  |  |                 if (StringUtils.isNotEmpty(sendstate)) serviceSubtaskPreachform.setSendstate(sendstate); | 
 |  |  |  | 
 |  |  |                 serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid()); | 
 |  |  |                 return serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform); | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return 0; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     //封装serviceSubtask | 
 |  |  |     private ServiceSubtask boxedServiceSubtask(ServiceTask serviceTask, PatMedInhosp patMedInhosp1, PatArchive patArchive) { | 
 |  |  | 
 |  |  |         serviceSubtask.setDrname(patMedInhosp1.getDrname()); | 
 |  |  |         serviceSubtask.setDeptcode(patMedInhosp1.getLeaveldeptcode()); | 
 |  |  |         serviceSubtask.setDeptname(patMedInhosp1.getLeaveldeptname()); | 
 |  |  |         serviceSubtask.setLeaveicd10code(patMedInhosp1.getLeaveicd10code()); | 
 |  |  |         serviceSubtask.setLeavediagname(patMedInhosp1.getDiagname()); | 
 |  |  |         serviceSubtask.setTemplateid(serviceTask.getTemplateid()); | 
 |  |  |         serviceSubtask.setTemplatename(serviceTask.getTemplatename()); | 
 |  |  |         serviceSubtask.setPatid(patArchive.getId()); | 
 |  |  | 
 |  |  |         serviceSubtask.setSex(patArchive.getSex()); | 
 |  |  |         serviceSubtask.setAge(patArchive.getAge()); | 
 |  |  |         serviceSubtask.setSendstate(2L); | 
 |  |  |         serviceSubtask.setManagementDoctor(patMedInhosp1.getManagementDoctor()); | 
 |  |  |         serviceSubtask.setManagementDoctorCode(patMedInhosp1.getManagementDoctorCode()); | 
 |  |  |         serviceSubtask.setStarttime(patMedInhosp1.getStarttime()); | 
 |  |  |         serviceSubtask.setEndtime(patMedInhosp1.getEndtime()); | 
 |  |  |         serviceSubtask.setServiceType("2"); | 
 |  |  |         serviceSubtask.setServiceType(serviceTask.getServiceType()); | 
 |  |  |         serviceSubtask.setPreachform(serviceTask.getPreachform()); | 
 |  |  |         serviceSubtask.setHospType("2"); | 
 |  |  |         serviceSubtask.setCreateTime(new Date()); | 
 |  |  | 
 |  |  |         if (serviceTask.getSendDay() == null) serviceTask.setSendDay(1L); | 
 |  |  |         Date newDate = addDays(patMedInhosp1.getEndtime(), serviceTask.getSendDay().intValue()); | 
 |  |  |         serviceSubtask.setLongSendTime(newDate); | 
 |  |  |         serviceSubtask.setVisitTime(newDate); | 
 |  |  |         //如果是通知的话,需要提前几天将通过短信发出去(具体几天,这个可以配置在sys_conf表中) | 
 |  |  |         if ("3".equals(serviceTask.getType())) { | 
 |  |  |             serviceSubtask.setVisitTime(minusDay(newDate, 2)); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         //患者发送时间 | 
 |  |  |         if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1")) { | 
 |  |  |             String remark = patArchive.getNotrequiredreason(); | 
 |  |  |             serviceSubtask.setRemark(remark); | 
 |  |  |             serviceSubtask.setResult("error"); | 
 |  |  |             serviceSubtask.setFinishtime(new Date()); | 
 |  |  |             //不执行 | 
 |  |  |             serviceSubtask.setSendstate(4L); | 
 |  |  |         } | 
 |  |  |         return serviceSubtask; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 减去相应天数 | 
 |  |  |      * | 
 |  |  |      * @param originalDate | 
 |  |  |      * @param day | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public Date minusDay(Date originalDate, Integer day) { | 
 |  |  |         // 1. 将 Date 转换为 Instant | 
 |  |  |         Instant instant = originalDate.toInstant(); | 
 |  |  |  | 
 |  |  |         // 2. 在 Instant 上减去2天 | 
 |  |  |         Instant twoDaysAgoInstant = instant.minus(2, ChronoUnit.DAYS); | 
 |  |  |  | 
 |  |  |         // 3. 将计算后的 Instant 转回 Date | 
 |  |  |         return Date.from(twoDaysAgoInstant); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //处理入院信息 | 
 |  |  | 
 |  |  |                 subtask.setPatid(patMedInhosp1.getPatid()); | 
 |  |  |                 subtask.setSendstate(2L); | 
 |  |  |                 List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask); | 
 |  |  |                 log.error("入院的患者待执行的任务:{}", selectServiceSubtaskList); | 
 |  |  | //                log.error("入院的患者待执行的任务:{}", selectServiceSubtaskList); | 
 |  |  |                 if (CollectionUtils.isNotEmpty(selectServiceSubtaskList) && selectServiceSubtaskList.size() > 0) { | 
 |  |  |                     for (ServiceSubtask serviceSubtask1 : selectServiceSubtaskList) { | 
 |  |  |                         if (Objects.isNull(serviceSubtask1.getLongSendTime())) { | 
 |  |  | 
 |  |  |                         } | 
 |  |  |                         if (serviceSubtask1.getEndtime().before(patMedInhosp1.getStarttime())) { | 
 |  |  |                             //如果当前循环的子任务的出院时间在“准备新增的子任务”的出院时间之前,则将循环的子任务停掉 | 
 |  |  |                             log.error("患者再入院的serviceSubtask1为:{}", serviceSubtask1); | 
 |  |  | //                            log.error("患者再入院的serviceSubtask1为:{}", serviceSubtask1); | 
 |  |  |                             serviceSubtask1.setSendstate(4L); | 
 |  |  |                             serviceSubtask1.setRemark("患者再入院"); | 
 |  |  |                             serviceSubtask1.setResult("error"); | 
 |  |  |                             serviceSubtask1.setFinishtime(new Date()); | 
 |  |  | //                            serviceSubtask1.setFinishtime(new Date()); | 
 |  |  |                             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1); | 
 |  |  | //                            patMedInhosp1.setCheckFlag("1"); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } |