liusheng
2025-04-08 71c4428446f6d5692de5dd6d0b9451bbe046247b
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;
@@ -77,7 +83,12 @@
     */
    @Override
    public List<PatMedInhosp> selectPatMedInhospList(PatMedInhosp patMedInhosp) {
        return patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
        for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
            patMedInhosp1.setTagname(tagname);
        }
        return patMedInhospList;
    }
    /**
@@ -198,36 +209,81 @@
        //获取需要出院随访,未处理的数据
        patMedInhosp.setCheckFlag("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.setCheckFlag("2");
                patMedInhosp1.setLongTaskReason("患者基本信息为空");
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                continue;
            }
            try {
                //根据患者所在科室,获取该科室的长期任务
                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);
                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);
                    }
                    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);
                }
                //获取患者信息
                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
                writeInSubTask(serviceTaskdepts, patMedInhosp1, patArchive);
            } catch (Exception e) {
                e.printStackTrace();
                log.error("人员处理出异常了:{}", e.getMessage());
@@ -238,6 +294,10 @@
        patMedInhosp.setCheckFlag("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);
        }
@@ -259,6 +319,10 @@
    @Override
    public List<PatMedInhosp> getDocAndPat(PatMedInhosp patMedInhosp) {
        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
        for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
            patMedInhosp1.setTagname(tagname);
        }
        if (StringUtils.isNotEmpty(patMedInhosp.getPatname()) || StringUtils.isNotEmpty(patMedInhosp.getNurseName()) || StringUtils.isNotEmpty(patMedInhosp.getDrname())) {
            //获取外部导入信息,并将外部患者放到patMedInhospList中
            PatArchiveImport patArchiveImport = new PatArchiveImport();
@@ -297,34 +361,35 @@
    }
    //将患者放到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();
            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);
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                continue;
            }
            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);
                continue;
            }
            //封装serviceSubtask
            ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedInhosp1, patArchive);
            Integer i = 0;
//            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);
            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);
        Integer i = 0;
        //先判断一下,是否需要校验
        if (check) {
            //在新增之前,先通过患者ID,sendstate=2查询一下,在所有长期任务中,是不是还有该患者待执行的任务,有的话,比较之前的endtime是否小于当前的endtaime,如果之前的小于现在的,则直接将之前的停掉(原因再入院)
            ServiceSubtaskVO subtask = new ServiceSubtaskVO();
            subtask.setPatid(patArchive.getId());
@@ -343,6 +408,8 @@
                        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 {
@@ -351,25 +418,49 @@
                        serviceSubtask.setFinishtime(new Date());
                        serviceSubtask.setSendstate(4L);
                        serviceSubtask.setRemark("当前患者出院时间后有待执行的出院随访长期任务");
                        serviceSubtask.setCreateBy(serviceTask.getCreateBy());
                        serviceSubtask.setCreateTime(new Date());
                        i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                    }
                }
            }
            i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
            if (i == 1) {
                //将check_flag改成1(已处理)
                PatMedInhosp patMedInhosp2 = new PatMedInhosp();
                patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
                patMedInhosp2.setCheckFlag("1");
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
            } else {
                //生成子任务失败,
                log.error("生成子任务失败serviceSubtask为:{}", serviceSubtask);
                PatMedInhosp patMedInhosp2 = new PatMedInhosp();
                patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
                patMedInhosp2.setRemark("生成子任务失败");
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
                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);
        }
        if (i == 1) {
            //将check_flag改成1(已处理)
            PatMedInhosp patMedInhosp2 = new PatMedInhosp();
            patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
            patMedInhosp2.setCheckFlag("1");
            patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
        } else {
            //生成子任务失败,
            log.error("生成子任务失败serviceSubtask为:{}", serviceSubtask);
            PatMedInhosp patMedInhosp2 = new PatMedInhosp();
            patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
            patMedInhosp2.setRemark("生成子任务失败");
            patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
        }
    }
    //封装serviceSubtask
@@ -405,6 +496,8 @@
        serviceSubtask.setCreateBy(patMedInhosp1.getNurseName());
        serviceSubtask.setLeavehospitaldistrictcode(patMedInhosp1.getLeavehospitaldistrictcode());
        serviceSubtask.setLeavehospitaldistrictname(patMedInhosp1.getLeavehospitaldistrictname());
        serviceSubtask.setUpdateBy(serviceTask.getUpdateBy());
        serviceSubtask.setUpdateTime(new Date());
        //设置发送时间
        if (serviceTask.getSendDay() == null) serviceTask.setSendDay(1L);
        Date newDate = addDays(patMedInhosp1.getEndtime(), serviceTask.getSendDay().intValue());