liusheng
2025-02-25 1468abbfadd8ba623c85e0c871aade69607ce085
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -28,9 +28,14 @@
public class PatMedInhospServiceImpl implements IPatMedInhospService {
    @Autowired
    private PatMedInhospMapper patMedInhospMapper;
    @Autowired
    private ServiceCheckMapper serviceCheckMapper;
    @Autowired
    private ServiceTaskdeptMapper serviceTaskdeptMapper;
    @Autowired
    private ServiceTaskdiagMapper serviceTaskdiagMapper;
    @Autowired
    private PatArchiveMapper patArchiveMapper;
@@ -50,6 +55,7 @@
    private ServiceSubtaskMapper serviceSubtaskMapper;
    @Autowired
    private SysUserDeptMapper sysUserDeptMapper;
    @Value("${createTaskServiceType}")
    private List<String> createTaskServiceType;
@@ -202,7 +208,15 @@
        log.error("dealOutHospInfo需要处理的出院患者信息:{}", patMedInhosps);
        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());
            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);
@@ -212,7 +226,7 @@
                //如果部门模板为空(暂定,将出入院表的check_flag设置为2  ,long_task_reason 记录原因)
                if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) {
                    patMedInhosp1.setCheckFlag("2");
                    patMedInhosp1.setLongTaskReason("该患者所在科室,未配置长期任务");
                        patMedInhosp1.setLongTaskReason("该患者所在科室,未配置长期任务;");
                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                    continue;
                } else if (serviceTaskdepts.size() > 1) {
@@ -225,9 +239,35 @@
                    serviceTaskdepts.add(serviceTaskdept1);
                }
                //获取患者信息
                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
                writeInSubTask(serviceTaskdepts, patMedInhosp1, patArchive);
                    writeInSubTask(serviceTaskdepts.get(0).getTaskId(), true, patMedInhosp1, patArchive);
                } else 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);
                }
            } catch (Exception e) {
                e.printStackTrace();
                log.error("人员处理出异常了:{}", e.getMessage());
@@ -297,11 +337,10 @@
    }
    //将患者放到subtask中
    private void writeInSubTask(List<ServiceTaskdept> serviceTaskdepts, PatMedInhosp patMedInhosp1, PatArchive patArchive) {
    private void writeInSubTask(Long taskid, Boolean check, PatMedInhosp patMedInhosp1, PatArchive patArchive) {
        String longTaskReason = patMedInhosp1.getLongTaskReason();
        if (StringUtils.isEmpty(longTaskReason)) longTaskReason = "";
        for (ServiceTaskdept std : serviceTaskdepts) {
            Long taskid = std.getTaskId();
//            Long taskid = std.getTaskId();
            ServiceTask st = new ServiceTask();
            st.setTaskid(taskid);
            st.setSendState(2L);
@@ -311,7 +350,7 @@
                patMedInhosp1.setCheckFlag("2");
                patMedInhosp1.setLongTaskReason(longTaskReason + " & 该患者出院随访长期任务不存在,任务ID为:" + taskid);
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                continue;
            return;
            }
            ServiceTask serviceTask = serviceTasks.get(0);
            if (!createTaskServiceType.contains(serviceTask.getServiceType())) {
@@ -320,11 +359,13 @@
                patMedInhosp1.setCheckFlag("2");
                patMedInhosp1.setLongTaskReason(longTaskReason + " & 该患者出院随访长期任务的服务类型不在自动生成的服务类型列表中,任务ID为:" + taskid);
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                continue;
            return;
            }
            //封装serviceSubtask
            ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedInhosp1, patArchive);
            Integer i = 0;
        //先判断一下,是否需要校验
        if (check) {
            //在新增之前,先通过患者ID,sendstate=2查询一下,在所有长期任务中,是不是还有该患者待执行的任务,有的话,比较之前的endtime是否小于当前的endtaime,如果之前的小于现在的,则直接将之前的停掉(原因再入院)
            ServiceSubtaskVO subtask = new ServiceSubtaskVO();
            subtask.setPatid(patArchive.getId());
@@ -351,10 +392,13 @@
                        serviceSubtask.setFinishtime(new Date());
                        serviceSubtask.setSendstate(4L);
                        serviceSubtask.setRemark("当前患者出院时间后有待执行的出院随访长期任务");
                    }
                }
            }
            i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                    }
                }
            }
        } else {
            i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
        }
            if (i == 1) {
                //将check_flag改成1(已处理)
                PatMedInhosp patMedInhosp2 = new PatMedInhosp();
@@ -369,7 +413,7 @@
                patMedInhosp2.setRemark("生成子任务失败");
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
            }
        }
    }
    //封装serviceSubtask