陈昶聿
2 天以前 2d6018d0d3a4e21ddf805d8f2eaae7260f512c1a
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -16,7 +16,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.io.IOException;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.*;
@@ -249,16 +251,18 @@
                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                } else {
                    for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) {
                        //todo 1
                        writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 1, config);
                    }
                    patMedInhosp1.setDeptcheckFlag("1");
                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
//                    patMedInhosp1.setDeptcheckFlag("1");
//                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                }
            } catch (Exception e) {
                e.printStackTrace();
                log.error("人员处理出异常了:{}", e.getMessage());
                log.error("人员科室处理出异常了:{}", e.getMessage());
                patMedInhosp1.setDeptcheckFlag("2");
                patMedInhosp1.setLongTaskReason("人员科室处理异常:" + e.getMessage());
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
            }
        }
@@ -301,17 +305,19 @@
                        patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
                    } else {
                        for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) {
                            //todo 2
                            writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiBQ1, patArchive, 2, config);
                        }
                        pmiBQ1.setWardcheckFlag("1");
                        patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
//                        pmiBQ1.setWardcheckFlag("1");
//                        patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    log.error("人员处理出异常了:{}", e.getMessage());
                    log.error("人员病区处理出异常了:{}", e.getMessage());
                    pmiBQ1.setWardcheckFlag("2");
                    pmiBQ1.setLongTaskReason("人员病区处理异常:" + e.getMessage());
                    patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
                }
            }
@@ -355,16 +361,18 @@
                        patMedInhospMapper.updatePatMedInhosp(pmiJB);
                    } else {
                        for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) {
                            //todo 3
                            writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiJB, patArchive, 3, config);
                        }
                        pmiJB.setDiagcheckFlag("1");
                        patMedInhospMapper.updatePatMedInhosp(pmiJB);
//                        pmiJB.setDiagcheckFlag("1");
//                        patMedInhospMapper.updatePatMedInhosp(pmiJB);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    log.error("人员处理出异常了:{}", e.getMessage());
                    log.error("人员疾病处理出异常了:{}", e.getMessage());
                    pmiJB.setDiagcheckFlag("2");
                    pmiJB.setLongTaskReason("人员疾病处理异常:" + e.getMessage());
                    patMedInhospMapper.updatePatMedInhosp(pmiJB);
                }
            }
        }
@@ -380,6 +388,149 @@
        }
        return 1;
    }
    /**
     * 多维度随访
     * @param config
     * @return
     */
    public int dealOutHospInfoByDimension(String config) {
        // 一次性查出所有需要处理的出院患者(三个维度任意一个未完成)
        List<PatMedInhosp> patList = patMedInhospMapper.selectNeedProcessList();
        log.info("【统一扫描】待处理患者数:{}", patList.size());
        for (PatMedInhosp patMedInhosp1 : patList) {
            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
            if (Objects.isNull(patArchive)) {
                // 三个维度都标记为失败
                markAllFlagsAsError(patMedInhosp1, "患者基本信息为空");
                continue;
            }
            // ── 维度1:科室 ──
            if ("0".equals(patMedInhosp1.getDeptcheckFlag())) {
                processTasksByDimension(patMedInhosp1, patArchive, config, 1);
            }
            // ── 维度2:病区 ──(新华医院跳过)
            if (!active.equals("xh") && "0".equals(patMedInhosp1.getWardcheckFlag())) {
                processTasksByDimension(patMedInhosp1, patArchive, config, 2);
            }
            // ── 维度3:疾病 ──(新华医院跳过)
            if (!active.equals("xh") && "0".equals(patMedInhosp1.getDiagcheckFlag())) {
                processTasksByDimension(patMedInhosp1, patArchive, config, 3);
            }
        }
        return 1;
    }
    /**
     * 按维度找到所有匹配长期任务,批量生成 subtask
     * type: 1=科室, 2=病区, 3=疾病
     */
    private void processTasksByDimension(PatMedInhosp patMedInhosp1,
            PatArchive patArchive,
            String config, int type) {
        List<Long> matchedTaskIds = findMatchingTaskIds(patMedInhosp1, type);
        if (CollectionUtils.isEmpty(matchedTaskIds)) {
                String reason = getDimensionReason(type);
                markFlagAsNoConfig(patMedInhosp1, type, reason);
            return;
        }
        // 一条 inhosp 记录 → 多个匹配任务 → 多条 subtask
        for (Long taskId : matchedTaskIds) {
            writeInSubTask(taskId, true, patMedInhosp1, patArchive, type, config);
        }
    }
    private String getDimensionReason(int type){
        switch (type) {
            case 1: { // 科室
                return "未找到科室匹配的长期任务";
                 }
            case 2: { // 病区
                return "未找到病区匹配的长期任务";
            }
            case 3: { // 疾病
                return "未找到疾病匹配的长期任务";
            }
        }
        return "多维长期任务-匹配类型为空";
    }
    private void markFlagAsNoConfig(PatMedInhosp patMedInhosp,
                                    int type,
                                    String reason){
        switch (type) {
            case 1: { // 科室
                patMedInhosp.setDeptcheckFlag("2");
                patMedInhosp.setRemark(reason);
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
                break;
            }
            case 2: { // 病区
                patMedInhosp.setWardcheckFlag("2");
                patMedInhosp.setRemark(reason);
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
                break;
            }
            case 3: { // 疾病
                patMedInhosp.setDiagcheckFlag("2");
                patMedInhosp.setRemark(reason);
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
                break;
            }
        }
    }
    private void markAllFlagsAsError(PatMedInhosp patMedInhosp,
                                    String reason){
        patMedInhosp.setDeptcheckFlag("2");
        patMedInhosp.setWardcheckFlag("2");
        patMedInhosp.setDiagcheckFlag("2");
        patMedInhosp.setRemark(reason);
        patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
    }
    /**
     * 根据维度类型查询匹配的长期任务 ID 列表
     */
    private List<Long> findMatchingTaskIds(PatMedInhosp patMedInhosp1, int type) {
        switch (type) {
            case 1: { // 科室
                ServiceTaskdept query = new ServiceTaskdept();
                query.setLongtask(1L);
                query.setDeptCode(patMedInhosp1.getLeaveldeptcode());
                query.setDeptType("1");
                query.setOrgid(patMedInhosp1.getOrgid());
                return serviceTaskdeptMapper.selectServiceTaskdeptList(query)
                        .stream().map(ServiceTaskdept::getTaskId).collect(Collectors.toList());
            }
            case 2: { // 病区
                ServiceTaskdept query = new ServiceTaskdept();
                query.setLongtask(1L);
                query.setDeptCode(patMedInhosp1.getLeavehospitaldistrictcode());
                query.setDeptType("2");
                query.setOrgid(patMedInhosp1.getOrgid());
                return serviceTaskdeptMapper.selectServiceTaskdeptList(query)
                        .stream().map(ServiceTaskdept::getTaskId).collect(Collectors.toList());
            }
            case 3: { // 疾病
                if (StringUtils.isEmpty(patMedInhosp1.getLeaveicd10code())) return Collections.emptyList();
                ServiceTaskdiag query = new ServiceTaskdiag();
                query.setLongtask(1L);
                query.setIcd10code(patMedInhosp1.getLeaveicd10code());
                query.setOrgid(patMedInhosp1.getOrgid());
                return serviceTaskdiagMapper.selectServiceTaskdiagList(query)
                        .stream().map(ServiceTaskdiag::getTaskId).collect(Collectors.toList());
            }
        }
        return Collections.emptyList();
    }
//
//    @Override
@@ -539,17 +690,26 @@
        return calendar.getTime();
    }
    //todo
    /**
     *
     * @param taskid 任务id
     * @param check 是否需要校验
     * @param patMedInhosp1 病人出入院信息
     * @param patArchive 病人信息
     * @param type 随访类型(1-科室,2-病区,3-疾病)
     * @param config 配置信息 visit.early.day
     */
    //将患者放到subtask中
    private void writeInSubTask(Long taskid, Boolean check, PatMedInhosp patMedInhosp1, PatArchive patArchive, Integer type, String config) {
        String longTaskReason = patMedInhosp1.getLongTaskReason();
        String orgId = patMedInhosp1.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)){
        if (CollectionUtils.isEmpty(serviceTasks)) {
            if (type == 1) {
                log.info("该患者出院随访长期任务不存在,任务ID为:{}", taskid);
                patMedInhosp1.setDeptcheckFlag("2");
@@ -567,14 +727,17 @@
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                return;
            }
        } else {
            serviceTask = serviceTasks.get(0);
        }
        if (Objects.isNull(patMedInhosp1.getEndtime())) {
            return;
        }
        //封装serviceSubtask
        ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedInhosp1, patArchive, config);
        if (ObjectUtils.isEmpty(serviceSubtask)) {
            return;
        }
        if (type != 2) {
            //科室和疾病 都用 科室填充
            serviceSubtask.setVisitDeptCode(patMedInhosp1.getLeaveldeptcode());
@@ -583,71 +746,114 @@
            serviceSubtask.setVisitDeptCode(patMedInhosp1.getLeavehospitaldistrictcode());
            serviceSubtask.setVisitDeptName(patMedInhosp1.getLeavehospitaldistrictname());
        }
        //记录insertServiceSubtask语句返回状态
        Integer i = 0;
        //先判断一下,是否需要校验
        if (check && serviceSubtask.getTaskSituation() != 6) {
            //在新增之前,先通过患者ID,sendstate=2查询一下,在所有长期任务中,是不是还有该患者待执行的任务,有的话,比较之前的endtime是否小于当前的endtaime,如果之前的小于现在的,则直接将之前的停掉(原因再入院)
            ServiceSubtaskVO subtask = new ServiceSubtaskVO();
            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;
                    }
                    //type = 1或2 表示 ”科室、病区“
                    if (type == 1 || type == 2) {
                        Date endTime = serviceSubtask.getEndtime();
                        Date endTime1 = serviceSubtask1.getEndtime();
                        String serviceType1 = serviceSubtask1.getServiceType();
                        if (endTime1.before(endTime) && "2".equals(serviceType1)) {
                            //如果当前循环的子任务的出院时间在“准备新增的子任务”的出院时间之前,则将循环的子任务停掉
        try {
            //先判断一下,是否需要校验
            if (check && (Objects.isNull(serviceSubtask.getTaskSituation()) || serviceSubtask.getTaskSituation() != 6)) {
                //在新增之前,先通过患者ID,sendstate=2查询一下,在所有长期任务中,是不是还有该患者待执行的任务,有的话,比较之前的endtime是否小于当前的endtaime,如果之前的小于现在的,则直接将之前的停掉(原因再入院)
                ServiceSubtaskVO subtask = new ServiceSubtaskVO();
                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;
                        }
                        //type = 1或2 表示 ”科室、病区“
                        if (type == 1 || type == 2) {
                            Date endTime = serviceSubtask.getEndtime();
                            Date endTime1 = serviceSubtask1.getEndtime();
                            //出院时间判空,如果为空跳过
                            if (ObjectUtils.isEmpty(endTime)) {
                                serviceSubtask.setResult("error");
                                serviceSubtask.setRemark("出院时间为空,serviceSubtask的Id为" + serviceSubtask.getId());
                                serviceSubtask.setUpdateBy(serviceTask.getUpdateBy());
                                serviceSubtask.setUpdateTime(new Date());
                                Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                                if (aBoolean) i = 1;
                                continue;
                            }
                            if (ObjectUtils.isEmpty(endTime1)) {
                                serviceSubtask1.setResult("error");
                                serviceSubtask1.setRemark("出院时间为空,serviceSubtask的Id为" + serviceSubtask1.getId());
                                serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy());
                                serviceSubtask1.setUpdateTime(new Date());
                                Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
                                if (aBoolean) i = 1;
                                continue;
                            }
                            //再入院逻辑
                            //景宁 出院首次(7天)随访一定要做
                            boolean firstVisit = false;
                            if (orgId.equals("47255004333112711A1001") && serviceSubtask1.getVisitCount() != null && serviceSubtask1.getVisitCount() == 1) {
                                firstVisit = true;
                            }
                            if (!firstVisit) {
                                //景宁的不需要将之前的任务停掉,全生成
                                if (endTime1.before(endTime) && serviceSubtask1.getServiceType().equals("2")) {
                                    //如果当前循环的子任务的出院时间在“准备新增的子任务”的出院时间之前,则将循环的子任务停掉
                                    serviceSubtask1.setSendstate(4L);
                                    if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
                                        serviceSubtask.setRemark(serviceSubtask.getRemark() + ",科室/病区患者再入院");
                                    else serviceSubtask.setRemark("科室/病区患者再入院");
                                    serviceSubtask1.setResult("error");
                                    serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy());
                                    serviceSubtask1.setUpdateTime(new Date());
                                    Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
                                    if (aBoolean) i = 1;
                                } else {
                                    //相反,则将当有的数据停掉
                                    serviceSubtask.setResult("error");
                                    serviceSubtask.setSendstate(4L);
                                    if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
                                        serviceSubtask.setRemark(serviceSubtask.getRemark() + ",当前患者出院时间后有待执行的出院随访长期任务");
                                    else serviceSubtask.setRemark("当前患者出院时间后有待执行的出院随访长期任务");
                                    serviceSubtask.setCreateBy(serviceTask.getCreateBy());
                                    serviceSubtask.setCreateTime(new Date());
                                    i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                                }
                            }
                        } else if (type == 3) {
                            //type=3 表示疾病
                            //将之前的停掉
                            serviceSubtask1.setSendstate(4L);
                            if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
                                serviceSubtask.setRemark(serviceSubtask.getRemark() + ",疾病患者再入院");
                            else serviceSubtask.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);
                            if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
                                serviceSubtask.setRemark(serviceSubtask.getRemark() + ",当前患者出院时间后有待执行的出院随访长期任务");
                            else serviceSubtask.setRemark("当前患者出院时间后有待执行的出院随访长期任务");
                            serviceSubtask.setCreateBy(serviceTask.getCreateBy());
                            serviceSubtask.setCreateTime(new Date());
                            i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                        }
                    } else if (type == 3) {
                        //type=3 表示疾病
                        //将之前的停掉
                        serviceSubtask1.setSendstate(4L);
                        if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
                            serviceSubtask.setRemark(serviceSubtask.getRemark() + ",疾病患者再入院");
                        else serviceSubtask.setRemark("疾病患者再入院");
                        serviceSubtask1.setResult("error");
//                        serviceSubtask1.setFinishtime(new Date());
                        serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy());
                        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
                        //重新新增子任务
                        i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                        //这里需要全失败
                        addServiceSubtaskPreachform(serviceSubtask, "5");
                            serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy());
                            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
                            //重新新增子任务
                            i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                            //这里需要全失败
                            addServiceSubtaskPreachform(serviceSubtask, "5");
                        }
                    }
                } 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()))
@@ -661,43 +867,37 @@
                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);
        }
        if (i == 1) {
            //将check_flag改成1(已处理)
            PatMedInhosp patMedInhosp2 = new PatMedInhosp();
            patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
            if (type == 1) patMedInhosp2.setDeptcheckFlag("1");
            if (type == 2) patMedInhosp2.setWardcheckFlag("1");
            if (type == 3) patMedInhosp2.setDiagcheckFlag("1");
            patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
        } else {
            //生成子任务失败,
            log.info("生成子任务失败serviceSubtask的taskid为:{},patid为:{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid());
            //将check_flag改成1(已处理)
            if (i == 1) {
                PatMedInhosp patMedInhosp2 = new PatMedInhosp();
                patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
                if (type == 1) patMedInhosp2.setDeptcheckFlag("1");
                if (type == 2) patMedInhosp2.setWardcheckFlag("1");
                if (type == 3) patMedInhosp2.setDiagcheckFlag("1");
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
            } else {
                //生成子任务失败,
                log.info("生成子任务失败serviceSubtask的taskid为:{},patid为:{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid());
                PatMedInhosp patMedInhosp2 = new PatMedInhosp();
                patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
                if (type == 1) patMedInhosp2.setDeptcheckFlag("2");
                if (type == 2) patMedInhosp2.setWardcheckFlag("2");
                if (type == 3) patMedInhosp2.setDiagcheckFlag("2");
                patMedInhosp2.setRemark("生成子任务失败 " + type);
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
            }
        } catch (Exception e) {
            //出错回滚事务
            log.info("生成子任务报错回滚serviceSubtask的taskid为:{},patid为:{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid());
            PatMedInhosp patMedInhosp2 = new PatMedInhosp();
            patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
            if (type == 1) patMedInhosp2.setDeptcheckFlag("2");
            if (type == 2) patMedInhosp2.setWardcheckFlag("2");
            if (type == 3) patMedInhosp2.setDiagcheckFlag("2");
            patMedInhosp2.setRemark("生成子任务失败 " + type);
            patMedInhosp2.setRemark("生成子任务报错回滚 " + type);
            patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
            e.printStackTrace();
        }
    }
@@ -786,6 +986,9 @@
        if (!Objects.isNull(patMedInhosp1.getEndtime())) {
            newDate = addDays(patMedInhosp1.getEndtime(), serviceTask.getSendDay().intValue());
        } else {
            patMedInhosp1.setDeptcheckFlag("2");
            patMedInhosp1.setRemark(patMedInhosp1.getRemark() + "& 该患者疾病出院时间为空,出院记录ID为:" + patMedInhosp1.getInhospid());
            patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
            //如果出院时间为空,则返回一个新对象
            return new ServiceSubtask();
        }
@@ -796,13 +999,19 @@
        //如果是通知的话,需要提前几天将通过短信发出去(具体几天,这个可以配置在sys_conf表中)
        if ("3".equals(serviceTask.getType())) {
            serviceSubtask.setVisitTime(minusDay(newDate, StringUtils.isNotEmpty(config) ? Integer.parseInt(config) : 0));
            //判断是不是景宁
            if (patMedInhosp1.getOrgid().equals("47255004333112711A1001"))
                serviceSubtask.setVisitTime(null);
            //如果该出院记录有随访时间,则用他自己的随访时间
            if (patMedInhosp1.getFudate() != null)
            if (patMedInhosp1.getFudate() != null) {
                serviceSubtask.setVisitTime(minusDay(patMedInhosp1.getFudate(), StringUtils.isNotEmpty(config) ? Integer.parseInt(config) : 0));
            } else {
                //判断是不是景宁
                if (patMedInhosp1.getOrgid().equals("47255004333112711A1001")) {
                    serviceSubtask.setVisitTime(null);
                    //不执行
                    serviceSubtask.setSendstate(4L);
                    serviceSubtask.setRemark("景宁没有给随访时间,不发送通知短信");
                }
            }
        }
        //患者发送时间
@@ -845,7 +1054,7 @@
                subtask.setSendstate(2L);
                List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask);
//                log.error("入院的患者待执行的任务:{}", selectServiceSubtaskList);
                if (CollectionUtils.isNotEmpty(selectServiceSubtaskList) && selectServiceSubtaskList.size() > 0) {
                if (CollectionUtils.isNotEmpty(selectServiceSubtaskList)) {
                    for (ServiceSubtask serviceSubtask1 : selectServiceSubtaskList) {
                        if (Objects.isNull(serviceSubtask1.getLongSendTime())) {
                            //不是长期任务,不处理
@@ -863,7 +1072,8 @@
                    }
                }
                //将患入的入院数据设置为已处理
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                //更新状态值 patMedInhosp1.setDeptcheckFlag("0");
                //patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
            } catch (Exception e) {
                log.error("入院数据信息出异常了:{},{}", patMedInhosp1, e.getMessage());
            }