| | |
| | | @Autowired |
| | | private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper; |
| | | @Autowired |
| | | private PatMedOperationMapper patMedOperationMapper; |
| | | private ServiceTaskmedicalMapper serviceTaskmedicalMapper; |
| | | @Autowired |
| | | private PatMedOperationItemMapper patMedOperationItemMapper; |
| | | @Autowired |
| | |
| | | |
| | | @Override |
| | | public int dealOutHospInfo(String config) { |
| | | PatMedInhosp pmks = new PatMedInhosp(); |
| | | pmks.setDeptcheckFlag("0"); |
| | | pmks.setInhospstate("1"); |
| | | pmks.setFuflag("1"); |
| | | List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks); |
| | | |
| | | //1.入院宣教 |
| | | String helibrarySwitch = iSysConfigService.selectConfigByKey("in.helibrary.switch"); |
| | | if (StringUtils.isNotEmpty(helibrarySwitch) && "2".equals(helibrarySwitch)) { |
| | | PatMedInhosp inhosp = new PatMedInhosp(); |
| | | inhosp.setInDeptcheckFlag("0"); |
| | | inhosp.setInhospstate("0"); |
| | | inhosp.setFuflag("1"); |
| | | List<PatMedInhosp> inPatMedInhosps = patMedInhospMapper.selectPatMedInhospList(inhosp); |
| | | |
| | | //1.1 科室 |
| | | for (PatMedInhosp patMedInhosp1 : inPatMedInhosps) { |
| | | for (PatMedInhosp patMedInhosp1 : patMedInhosps) { |
| | | //获取患者信息 |
| | | PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid()); |
| | | if (Objects.isNull(patArchive)) { |
| | |
| | | |
| | | |
| | | //1.2 病区 |
| | | inhosp.setInDeptcheckFlag(null); |
| | | inhosp.setInWardcheckFlag("0"); |
| | | List<PatMedInhosp> inPatMedInhospsWard = patMedInhospMapper.selectPatMedInhospList(inhosp); |
| | | pmks.setInDeptcheckFlag(null); |
| | | pmks.setInWardcheckFlag("0"); |
| | | pmks.setDeptcheckFlag(null); |
| | | List<PatMedInhosp> inPatMedInhospsWard = patMedInhospMapper.selectPatMedInhospList(pmks); |
| | | for (PatMedInhosp patMedInhosp1 : inPatMedInhospsWard) { |
| | | //获取患者信息 |
| | | PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid()); |
| | |
| | | } |
| | | } |
| | | |
| | | //2.出院随访 - 基于规则的任务生成 |
| | | addSubTaskByRule(config); |
| | | //根据患者所在病区,获取该病区的长期任务,新华医院可以先不用根据病区和疾病来做 |
| | | //2.药品宣教 |
| | | for (PatMedInhosp patMedInhosp : patMedInhosps) { |
| | | String medicalCode = patMedInhosp.getMedicalCode(); |
| | | if (StringUtils.isNotEmpty(medicalCode)) { |
| | | String[] split = medicalCode.split(","); |
| | | // 防御性编程:确保 medicalCompany 和 medicalName 不为 null |
| | | String medicalCompanyStr = patMedInhosp.getMedicalCompany() != null ? patMedInhosp.getMedicalCompany() : ""; |
| | | String medicalNameStr = patMedInhosp.getMedicalName() != null ? patMedInhosp.getMedicalName() : ""; |
| | | String[] medicalCompanyArray = medicalCompanyStr.split(","); |
| | | String[] medicalNameArray = medicalNameStr.split(","); |
| | | |
| | | for (int i = 0; i < split.length; i++) { |
| | | ServiceTaskmedical serviceTaskmedical = new ServiceTaskmedical(); |
| | | //拿药品编码和公司去查 |
| | | serviceTaskmedical.setMedicalCode(split[i]); |
| | | // 防止下标越界:如果数组长度不一致,取最小长度 |
| | | if (i < medicalCompanyArray.length) { |
| | | serviceTaskmedical.setMedicalName(medicalCompanyArray[i]); |
| | | } else { |
| | | log.warn("【药品宣教】药品编码{}对应的公司信息下标越界,medicalCompany 数组长度={}, 当前索引={}", split[i], medicalCompanyArray.length, i); |
| | | serviceTaskmedical.setMedicalName(""); // 越界时设置为空 |
| | | } |
| | | List<ServiceTaskmedical> serviceTaskmedicals = serviceTaskmedicalMapper.selectServiceTaskmedicalList(serviceTaskmedical); |
| | | if (CollectionUtils.isNotEmpty(serviceTaskmedicals)) { |
| | | PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp.getPatid()); |
| | | writeInSubTask(serviceTaskmedicals.get(0).getTaskId(), false, patMedInhosp, patArchive, 0, config); |
| | | } |
| | | //查不到的药品就是不需要宣教的,就不管了 |
| | | } |
| | | } |
| | | } |
| | | |
| | | //3.出院随访 - 基于规则的任务生成 |
| | | // 获取所有需要处理的出院患者(科室维度未处理) |
| | | |
| | | addSubTaskByRule(config, patMedInhosps); |
| | | if (!active.equals("xh")) { |
| | | addOperationSubTask(config); |
| | | } |
| | |
| | | Integer type = 1; |
| | | if (StringUtils.isNotEmpty(deptCodes)) { |
| | | type = 1; |
| | | deptCodeList = Arrays.asList(deptCodes.split(",")); |
| | | deptCodeList = new ArrayList<>(Arrays.asList(deptCodes.split(","))); |
| | | } |
| | | if(StringUtils.isNotEmpty(wardCodes)) { |
| | | type = 2; |
| | | wardCodeList = Arrays.asList(wardCodes.split(",")); |
| | | wardCodeList = new ArrayList<>(Arrays.asList(wardCodes.split(","))); |
| | | } |
| | | if(StringUtils.isNotEmpty(icd10Codes)) { |
| | | type = 3; |
| | | icd10CodeList = Arrays.asList(icd10Codes.split(",")); |
| | | icd10CodeList = new ArrayList<>(Arrays.asList(icd10Codes.split(","))); |
| | | } |
| | | if (StringUtils.isNotEmpty(opLevelCodes)) { |
| | | type = 6; |
| | | opLevelCodeList = Arrays.asList(opLevelCodes.split(",")); |
| | | opLevelCodeList = new ArrayList<>(Arrays.asList(opLevelCodes.split(","))); |
| | | } |
| | | //非手术处理方式 |
| | | if(type != 6){ |
| | |
| | | * @param check 是否需要校验 |
| | | * @param patMedInhosp1 病人出入院信息 |
| | | * @param patArchive 病人信息 |
| | | * @param type 随访类型(1-科室,2-病区,3-疾病 4-入院科室 5-入院病区) |
| | | * @param type 随访类型(0-宣教,1-科室,2-病区,3-疾病 4-入院科室 5-入院病区) |
| | | * @param config 配置信息 visit.early.day |
| | | */ |
| | | //将患者放到subtask中 |
| | |
| | | if (ObjectUtils.isEmpty(serviceSubtask)) { |
| | | return; |
| | | } |
| | | if (StringUtils.isNotEmpty(patMedOperationItem.getDeptcode())) { |
| | | serviceSubtask.setVisitDeptCode(patMedOperationItem.getDeptcode()); |
| | | serviceSubtask.setVisitDeptName(patMedOperationItem.getDeptname()); |
| | | if (StringUtils.isNotEmpty(patMedOperationItem.getLeaveldeptcode())) { |
| | | serviceSubtask.setVisitDeptCode(patMedOperationItem.getLeaveldeptcode()); |
| | | serviceSubtask.setVisitDeptName(patMedOperationItem.getLeaveldeptname()); |
| | | } else { |
| | | serviceSubtask.setVisitDeptCode(patMedOperationItem.getHospitaldistrictcode()); |
| | | serviceSubtask.setVisitDeptName(patMedOperationItem.getHospitaldistrictname()); |
| | | serviceSubtask.setVisitDeptCode(patMedOperationItem.getLeavehospitaldistrictcode()); |
| | | serviceSubtask.setVisitDeptName(patMedOperationItem.getLeavehospitaldistrictname()); |
| | | } |
| | | //记录insertServiceSubtask语句返回状态 |
| | | Integer i = 0; |
| | |
| | | serviceTaskoper.setOplevelcode(opItem.getOplevelcode()); |
| | | |
| | | //根据科室、病区过滤 |
| | | serviceTaskoper.setDeptCode(opItem.getDeptcode()); |
| | | serviceTaskoper.setWardCode(opItem.getHospitaldistrictcode()); |
| | | if(StringUtils.isNotEmpty(opItem.getLeaveldeptcode())){ |
| | | serviceTaskoper.setDeptCode(opItem.getLeaveldeptcode()); |
| | | }else { |
| | | serviceTaskoper.setWardCode(opItem.getLeavehospitaldistrictcode()); |
| | | } |
| | | |
| | | List<ServiceTaskoper> serviceTaskopers = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper); |
| | | //如果部门模板为空(将deptIsNull设置为true) |
| | |
| | | * 根据患者离院科室或病区查询service_task_rule,获取deptRule、wradRule、diagRule |
| | | * 根据规则值决定调用哪个方法生成随访任务 |
| | | */ |
| | | private void addSubTaskByRule(String config) { |
| | | // 获取所有需要处理的出院患者(科室维度未处理) |
| | | PatMedInhosp pmks = new PatMedInhosp(); |
| | | pmks.setDeptcheckFlag("0"); |
| | | pmks.setInhospstate("1"); |
| | | pmks.setFuflag("1"); |
| | | List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks); |
| | | log.info("【基于规则】需要处理的出院患者信息:{}", CollectionUtils.isNotEmpty(patMedInhosps) ? patMedInhosps.size() : null); |
| | | |
| | | private void addSubTaskByRule(String config, List<PatMedInhosp> patMedInhosps) { |
| | | for (PatMedInhosp patMedInhosp1 : patMedInhosps) { |
| | | // 获取患者基本信息 |
| | | PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid()); |