smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -520,7 +520,9 @@
                                pmoi.setDeptCodes(deptCodeList);
                                pmoi.setWardCodes(wardCodeList);
                                pmoi.setOpLevelCodes(opLevelCodeList);
                                List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemList(pmoi);
                                //每次查询只查最大的手术等级记录
                                List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemListMaxLevel(pmoi);
                                for (PatMedOperationItem patMedOperationItem : patMedOperationItems) {
                                    PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOperationItem.getPatid());
                                    if (Objects.isNull(patArchive)) {
@@ -706,6 +708,29 @@
        //记录insertServiceSubtask语句返回状态
        Integer i = 0;
        try {
            // 兜底:任务模板修改会重置 pat_med_inhosp 的处理标记,但已完成的首访不会删除。
            // 同一 inhospid + taskid 已存在未删除的首次随访(upid 为空)时,不再插入,避免出现两条首次随访。
            if (check
                    && ("2".equals(serviceTask.getServiceType()) || "13".equals(serviceTask.getServiceType()))
                    && (type == 1 || type == 2 || type == 3)) {
                ServiceSubtaskEntity firstQuery = new ServiceSubtaskEntity();
                firstQuery.setInhospid(patMedInhosp1.getInhospid());
                firstQuery.setTaskid(taskid);
                List<ServiceSubtask> firstList = serviceSubtaskMapper.selectServiceSubtaskList(firstQuery);
                boolean firstExists = CollectionUtils.isNotEmpty(firstList)
                        && firstList.stream().anyMatch(item -> item.getUpid() == null);
                if (firstExists) {
                    log.info("患者{}已存在首次随访任务,跳过重复生成, taskid={}, type={}",
                            patMedInhosp1.getInhospid(), taskid, type);
                    PatMedInhosp flagUpdate = new PatMedInhosp();
                    flagUpdate.setInhospid(patMedInhosp1.getInhospid());
                    if (type == 1) flagUpdate.setDeptcheckFlag("1");
                    if (type == 2) flagUpdate.setWardcheckFlag("1");
                    if (type == 3) flagUpdate.setDiagcheckFlag("1");
                    patMedInhospMapper.updatePatMedInhosp(flagUpdate);
                    return;
                }
            }
            //先判断一下,是否需要校验
            if (check && (Objects.isNull(serviceSubtask.getTaskSituation()) || serviceSubtask.getTaskSituation() != 6)) {
                //在新增之前,先通过患者ID,sendstate=2查询一下,在所有长期任务中,是不是还有该患者待执行的任务,有的话,比较之前的endtime是否小于当前的endtaime,如果之前的小于现在的,则直接将之前的停掉(原因再入院)
@@ -1010,7 +1035,8 @@
        }
    }
    private Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) {
    @Override
    public Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) {
        //将preachformDesc的json对象,放到list集合中
        ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
        if (Objects.isNull(serviceTask)) {
@@ -1321,7 +1347,8 @@
        pmoi.setOpercheckFlag("0");
        pmoi.setMainFlag("1");
        List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemList(pmoi);
        //每次查询只查最大的手术等级记录
        List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemListMaxLevel(pmoi);
        log.info("dealOutHospInfo需要处理的出院手术患者信息:{}", CollectionUtils.isNotEmpty(patMedOperationItems) ? patMedOperationItems.size() : null);
        for (PatMedOperationItem opItem : patMedOperationItems) {
@@ -1951,5 +1978,30 @@
        return generatedCount;
    }
    @Override
    public void dealIcd10Subtask(PatMedInhosp pmks, String config) {
        pmks.setDiagcheckFlag("0");
        pmks.setInhospstate("1");
        pmks.setFuflag("1");
        List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks);
        log.info("dealIcd10Subtask 待处理出院疾病患者数:{}", CollectionUtils.isEmpty(patMedInhosps) ? 0 : patMedInhosps.size());
        if (CollectionUtils.isNotEmpty(patMedInhosps)) {
            int matchedTaskCount = 0;
            for (PatMedInhosp patMedInhosp : patMedInhosps) {
                // 获取患者基本信息,档案不存在时直接标记失败,避免后续空指针
                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp.getPatid());
                if (Objects.isNull(patArchive)) {
                    PatMedInhosp updateObj = new PatMedInhosp();
                    updateObj.setInhospid(patMedInhosp.getInhospid());
                    updateObj.setDiagcheckFlag("2");
                    updateObj.setLongTaskReason("患者基本信息为空");
                    patMedInhospMapper.updatePatMedInhosp(updateObj);
                    continue;
                }
                matchedTaskCount += addIcd10SubTaskForPatient(patMedInhosp, patArchive, config);
            }
            log.info("dealIcd10Subtask 处理完成,待处理:{},匹配疾病长期任务次数:{}", patMedInhosps.size(), matchedTaskCount);
        }
    }
}