From c4dc6a5d66524d08b768046d9d2d5974bf96f45c Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 11 十一月 2026 14:06:23 +0800
Subject: [PATCH] Merge branch 'smartor_ls_261103' into smartor_ls_merge

---
 smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java | 1078 +++++++++++++++++++---------------------------------------
 1 files changed, 359 insertions(+), 719 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
index 5d469aa..6830191 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -1,18 +1,20 @@
 package com.smartor.service.impl;
 
+import com.ruoyi.othervisit.api.OtherVisitFacade;
+import com.ruoyi.inhospvisit.api.InhospVisitFacade;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.service.dto.PatMedReq;
+import com.ruoyi.common.core.service.dto.PatMedRes;
 import com.ruoyi.common.core.service.IConfigService;
+import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DtoConversionUtils;
-import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.smartor.common.ScheduleSubtaskBuilder;
 import com.smartor.domain.*;
-import com.smartor.domain.DTO.PatMedInhospDTO;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.inhospvisit.domain.PatMedInhospDTO;
+import com.smartor.domain.DTO.ManualVisitDTO;
 import com.smartor.mapper.*;
 import com.smartor.service.IPatMedInhospService;
 import lombok.extern.slf4j.Slf4j;
@@ -20,14 +22,41 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
-import java.io.IOException;
 import java.time.Instant;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
-
+import com.ruoyi.othervisit.domain.PatMedOperationItem;
+import com.ruoyi.inhospvisit.domain.PatMedInhospVO;
+import com.ruoyi.inhospvisit.domain.PatMedInhosp;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.ServiceTaskdept;
+import com.ruoyi.task.domain.ServiceTaskdiag;
+import com.ruoyi.task.domain.ServiceTaskoper;
+import com.ruoyi.task.domain.ServiceTaskRule;
+import com.ruoyi.task.domain.ServiceTaskSchedule;
+import com.ruoyi.task.domain.ServiceTaskScheduleDetail;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskdeptMapper;
+import com.ruoyi.task.mapper.ServiceTaskdiagMapper;
+import com.ruoyi.task.mapper.ServiceTaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskoperMapper;
+import com.ruoyi.task.mapper.ServiceTaskRuleMapper;
+import com.ruoyi.task.mapper.ServiceTaskScheduleDetailMapper;
+import com.ruoyi.task.mapper.ServiceTaskScheduleMapper;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.common.ScheduleSubtaskBuilder;
+import com.ruoyi.task.mapper.ServiceSubtaskPreachformMapper;
+import com.ruoyi.patarchive.domain.PatArchiveImport;
+import com.ruoyi.patarchive.mapper.PatArchiveImportMapper;
+import com.ruoyi.patarchive.mapper.PatArchiveMapper;
 /**
  * 鎮h�呬綇闄㈣褰昐ervice涓氬姟灞傚鐞�
  *
@@ -37,8 +66,15 @@
 @Slf4j
 @Service
 public class PatMedInhospServiceImpl implements IPatMedInhospService {
+
     @Autowired
-    private PatMedInhospMapper patMedInhospMapper;
+    private InhospVisitFacade inhospVisitFacade;
+
+    /**
+     * 鎵嬫湳鏁版嵁涓�寰嬬粡 ruoyi-othervisit 鐨勯棬闈㈠彇鐢紙璺ㄦā鍧楁暟鎹闂師鍒欙級銆�
+     */
+    @Autowired
+    private OtherVisitFacade otherVisitFacade;
     @Autowired
     private ServiceTaskdeptMapper serviceTaskdeptMapper;
     @Autowired
@@ -56,16 +92,15 @@
     @Autowired
     private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
     @Autowired
-    private ServiceTaskmedicalMapper serviceTaskmedicalMapper;
-    @Autowired
-    private PatMedOperationItemMapper patMedOperationItemMapper;
-    @Autowired
     private ServiceTaskRuleMapper serviceTaskRuleMapper;
+    /**
+     * 鍙傛暟閰嶇疆锛堝疄鐜板湪 ruoyi-system锛夛紝浜哄伐闅忚 addManualVisit 闇�瑕佸湪鏈嶅姟灞傝鍙� visit.early.day銆�
+     */
+    @Autowired
+    private IConfigService iSysConfigService;
 
     @Value("${spring.profiles.active}")
     private String active;
-    @Autowired
-    private IConfigService iSysConfigService;
     @Autowired
     private ServiceTaskScheduleMapper serviceTaskScheduleMapper;
 
@@ -74,21 +109,9 @@
     @Autowired
     private ServiceTaskScheduleDetailMapper serviceTaskScheduleDetailMapper;
 
-
-    /**
-     * 鏌ヨ鎮h�呬綇闄㈣褰�
-     *
-     * @param inhospid 鎮h�呬綇闄㈣褰曚富閿�
-     * @return 鎮h�呬綇闄㈣褰�
-     */
-    @Override
-    public PatMedInhosp selectPatMedInhospByInhospid(Long inhospid) {
-        return patMedInhospMapper.selectPatMedInhospByInhospid(inhospid);
-    }
-
     @Override
     public List<PatMedInhosp> selectPatMedInhosp(PatMedInhosp patMedInhosp) {
-        return patMedInhospMapper.selectPatMedInhosp(patMedInhosp);
+        return inhospVisitFacade.selectPatMedInhosp(patMedInhosp);
     }
 
     /**
@@ -115,12 +138,58 @@
             patMedInhosp.setInhospstate("3");
         }
 
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
-        for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
-            patMedInhosp1.setTagname(tagname);
-        }
+        List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
+        fillTagname(patMedInhospList);
         return patMedInhospList;
+    }
+
+    /**
+     * 鎵归噺濉厖鎮h�呮爣绛�
+     * <p>
+     * 鍘熷疄鐜版槸姣忚璋冧竴娆� getTagnameBypatid锛孲QL 寰�杩旀鏁伴殢 pageSize 绾挎�у闀匡紱
+     * 杩欓噷鎸� patid 鍘婚噸鍚庡垎鎵逛竴娆℃煡鍥烇紝缁撴灉涓庨�愯鏌ヨ瀹屽叏涓�鑷达紙鎮h�呮棤鏍囩鏃朵粛涓� null锛夈��
+     *
+     * @param patMedInhospList 寰呭~鍏呯殑浣忛櫌璁板綍锛屽厑璁镐负绌�
+     */
+    private void fillTagname(List<PatMedInhosp> patMedInhospList) {
+        if (CollectionUtils.isEmpty(patMedInhospList)) {
+            return;
+        }
+        // LinkedHashSet 鍘婚噸鍚屾椂淇濇寔椤哄簭锛岄伩鍏� IN 鍒楄〃鍑虹幇閲嶅 patid
+        Set<Long> patids = new LinkedHashSet<>();
+        for (PatMedInhosp patMedInhosp : patMedInhospList) {
+            if (patMedInhosp.getPatid() != null) {
+                patids.add(patMedInhosp.getPatid());
+            }
+        }
+        if (patids.isEmpty()) {
+            return;
+        }
+
+        Map<Long, String> tagnameMap = new HashMap<>();
+        List<Long> patidList = new ArrayList<>(patids);
+        // 鍒嗙墖锛岄槻姝� IN 鍙傛暟杩囧
+        int batchSize = 1000;
+        for (int i = 0; i < patidList.size(); i += batchSize) {
+            List<Long> batch = patidList.subList(i, Math.min(i + batchSize, patidList.size()));
+            List<Map<String, Object>> rows = inhospVisitFacade.getTagnameByPatids(batch);
+            if (CollectionUtils.isEmpty(rows)) {
+                continue;
+            }
+            for (Map<String, Object> row : rows) {
+                Object patid = row.get("patid");
+                Object tagname = row.get("tagname");
+                if (patid != null) {
+                    tagnameMap.put(((Number) patid).longValue(), tagname == null ? null : tagname.toString());
+                }
+            }
+        }
+
+        for (PatMedInhosp patMedInhosp : patMedInhospList) {
+            if (patMedInhosp.getPatid() != null) {
+                patMedInhosp.setTagname(tagnameMap.get(patMedInhosp.getPatid()));
+            }
+        }
     }
 
     /**
@@ -159,19 +228,6 @@
         return patMedInhospDTOList;
     }
 
-    @Override
-    public Map<String, Integer> queryPersonCount(PatServiceCount patServiceCount) {
-        if (patServiceCount.getInterval() == 1) {
-            //鍛�
-        } else if (patServiceCount.getInterval() == 2) {
-            //鏈�
-        } else if (patServiceCount.getInterval() == 3) {
-            //骞�
-        }
-
-        return null;
-    }
-
     /**
      * 鏌ヨ褰撳墠鐧婚檰浜鸿嚜宸憋紙鐥呭尯銆侀儴闂級鐨勬偅鑰呬綇闄㈣褰曞垪琛�
      *
@@ -179,7 +235,7 @@
      * @return
      */
     public List<PatMedInhosp> selectPatMedInhospListByCondition(PatMedInhospVO patMedInhospVO) {
-        return patMedInhospMapper.selectPatMedInhospListByCondition(patMedInhospVO);
+        return inhospVisitFacade.selectPatMedInhospListByCondition(patMedInhospVO);
     }
 
 
@@ -203,20 +259,6 @@
     }
 
     /**
-     * 鏌ヨ鍑哄叆闄汉娆�
-     *
-     * @param patMedReq
-     * @return
-     */
-    @Override
-    public PatMedRes selectPatMedInhospListCount(PatMedReq patMedReq) {
-        PatMedRes patMedRes = null;
-        // 鑾峰彇褰撳墠鐧婚檰浜虹殑閮ㄩ棬鏉冮檺
-        patMedRes = patMedInhospMapper.selectPatMedInhospCount(patMedReq);
-        return patMedRes;
-    }
-
-    /**
      * 鏂板鎮h�呬綇闄㈣褰�
      *
      * @param patMedInhosp 鎮h�呬綇闄㈣褰�
@@ -226,7 +268,7 @@
     public int insertPatMedInhosp(PatMedInhosp patMedInhosp) {
         patMedInhosp.setCreateTime(DateUtils.getNowDate());
         patMedInhosp.setUpdateTime(DateUtils.getNowDate());
-        return patMedInhospMapper.insertPatMedInhosp(patMedInhosp);
+        return inhospVisitFacade.insertPatMedInhosp(patMedInhosp);
     }
 
     /**
@@ -238,333 +280,8 @@
     @Override
     public int updatePatMedInhosp(PatMedInhosp patMedInhosp) {
         patMedInhosp.setUpdateTime(DateUtils.getNowDate());
-        return patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
+        return inhospVisitFacade.updatePatMedInhosp(patMedInhosp);
     }
-
-    /**
-     * 鎵归噺鍒犻櫎鎮h�呬綇闄㈣褰�
-     *
-     * @param inhospids 闇�瑕佸垹闄ょ殑鎮h�呬綇闄㈣褰曚富閿�
-     * @return 缁撴灉
-     */
-    @Override
-    public int deletePatMedInhospByInhospids(Long[] inhospids) {
-        return patMedInhospMapper.deletePatMedInhospByInhospids(inhospids);
-    }
-
-    /**
-     * 鍒犻櫎鎮h�呬綇闄㈣褰曚俊鎭�
-     *
-     * @param inhospid 鎮h�呬綇闄㈣褰曚富閿�
-     * @return 缁撴灉
-     */
-    @Override
-    public int deletePatMedInhospByInhospid(Long inhospid) {
-        return patMedInhospMapper.deletePatMedInhospByInhospid(inhospid);
-    }
-
-    /**
-     * 鍒犻櫎鎮h�呬綇闄㈣褰曚俊鎭�
-     *
-     * @param inhospno 鎮h�呬綇闄㈢紪鐮�
-     * @return 缁撴灉
-     */
-    @Override
-    public int deletePatMedInhospByInhospno(String inhospno) {
-        return patMedInhospMapper.deletePatMedInhospByInhospno(inhospno);
-    }
-
-    @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.鍏ラ櫌瀹f暀
-        String helibrarySwitch = iSysConfigService.selectConfigByKey("in.helibrary.switch");
-        if (StringUtils.isNotEmpty(helibrarySwitch) && "2".equals(helibrarySwitch)) {
-
-            //1.1 绉戝
-            for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
-                //鑾峰彇鎮h�呬俊鎭�
-                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
-                if (Objects.isNull(patArchive)) {
-                    patMedInhosp1.setInDeptcheckFlag("2");
-                    patMedInhosp1.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
-                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
-                    continue;
-                }
-                try {
-                    //鏍规嵁鎮h�呮墍鍦ㄧ瀹わ紝鑾峰彇璇ョ瀹ょ殑鍏ラ櫌闀挎湡瀹f暀浠诲姟
-                    ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
-                    serviceTaskdept.setLongtask(1L);
-                    serviceTaskdept.setDeptCode(patMedInhosp1.getDeptcode());
-                    serviceTaskdept.setDeptType("1");
-                    serviceTaskdept.setServiceType("17");
-                    serviceTaskdept.setOrgid(patMedInhosp1.getOrgid());
-                    List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
-                    //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
-                    if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) {
-                        PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
-                        patMedInhosp1.setInDeptcheckFlag("2");
-                        patMedInhosp1.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + "璇ユ偅鑰呮墍鍦ㄧ瀹ゆ湭閰嶇疆鍏ラ櫌闀挎湡瀹f暀浠诲姟;" : "璇ユ偅鑰呮墍鍦ㄧ瀹ゆ湭閰嶇疆鍏ラ櫌闀挎湡瀹f暀浠诲姟;");
-                        patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
-                    } else {
-                        for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) {
-                            writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 4, config);
-                        }
-                    }
-
-                } catch (Exception e) {
-                    log.error("浜哄憳鍏ラ櫌绉戝澶勭悊鍑哄紓甯镐簡锛歿}", e.getMessage());
-                    patMedInhosp1.setInDeptcheckFlag("2");
-                    patMedInhosp1.setLongTaskReason("浜哄憳鍏ラ櫌绉戝澶勭悊鍑哄紓甯镐簡");
-                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
-                }
-            }
-
-
-            //1.2 鐥呭尯
-            pmks.setInDeptcheckFlag(null);
-            pmks.setInWardcheckFlag("0");
-            pmks.setDeptcheckFlag(null);
-            List<PatMedInhosp> inPatMedInhospsWard = patMedInhospMapper.selectPatMedInhospList(pmks);
-            for (PatMedInhosp patMedInhosp1 : inPatMedInhospsWard) {
-                //鑾峰彇鎮h�呬俊鎭�
-                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
-                if (Objects.isNull(patArchive)) {
-                    patMedInhosp1.setInDeptcheckFlag("2");
-                    patMedInhosp1.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
-                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
-                    continue;
-                }
-                //鏍规嵁鎮h�呮墍鍦ㄧ梾鍖猴紝鑾峰彇璇ョ梾鍖虹殑鍏ラ櫌闀挎湡瀹f暀浠诲姟锛堜細鍑虹幇涓�涓棶棰橈紝绉戝鍜岀梾鍖哄彂鐨勫悓涓�涓ā鏉匡級
-                ServiceTaskdept serviceTaskWard = new ServiceTaskdept();
-                serviceTaskWard.setLongtask(1L);
-                serviceTaskWard.setDeptCode(patMedInhosp1.getHospitaldistrictcode());
-                serviceTaskWard.setDeptType("2");
-                serviceTaskWard.setServiceType("17");
-                serviceTaskWard.setOrgid(patMedInhosp1.getOrgid());
-                List<ServiceTaskdept> serviceTaskWardList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskWard);
-                //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
-                if (CollectionUtils.isEmpty(serviceTaskWardList) || serviceTaskWardList.size() == 0) {
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
-                    patMedInhosp1.setInDeptcheckFlag("2");
-                    patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "璇ユ偅鑰呮墍鍦ㄧ梾鍖烘湭閰嶇疆鍏ラ櫌闀挎湡瀹f暀浠诲姟;");
-                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
-                } else {
-                    for (ServiceTaskdept serviceTaskdept1 : serviceTaskWardList) {
-                        writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 5, config);
-                    }
-                }
-            }
-        }
-
-        //2.鑽搧瀹f暀(鐪佺珛鍚屽痉鐨勯渶姹傦紝鍏跺畠鍦版柟娌℃彁)
-        if (active.equals("sltd")) {
-            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.setMedicalCompany(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());
-                            // check=true锛岃 writeInSubTask 鍐呴儴鍋氬幓閲嶆牎楠�
-                            writeInSubTask(serviceTaskmedicals.get(0).getTaskId(), true, patMedInhosp, patArchive, 0, config);
-                        }
-                        //鏌ヤ笉鍒扮殑鑽搧灏辨槸涓嶉渶瑕佸鏁欑殑锛屽氨涓嶇浜�
-                    }
-                }
-            }
-        }
-        //3.鍑洪櫌闅忚 - 鍩轰簬瑙勫垯鐨勪换鍔$敓鎴�
-        // 鑾峰彇鎵�鏈夐渶瑕佸鐞嗙殑鍑洪櫌鎮h�咃紙绉戝缁村害鏈鐞嗭級
-
-        addSubTaskByRule(config, patMedInhosps);
-        if (!active.equals("xh")) {
-            addOperationSubTask(config);
-        }
-
-
-        //鑾峰彇鏈鐞嗗湪闄㈢殑鏁版嵁(濡傛灉鍒氬垰鍑洪櫌鐨勬偅鑰呮暟鎹殑鍑洪櫌鏃堕棿,鍦ㄤ笅闈㈡煡璇㈠嚭鐨勫叆闄㈡椂闂翠箣鍓�,閭d箣鍓嶇殑鍑洪櫌鎮h�呯殑鏁版嵁,涔熷緱鍋滄帀,鍥犱负鍙堝叆闄簡)
-        PatMedInhosp patMedInhosp = new PatMedInhosp();
-        patMedInhosp.setDeptcheckFlag("0");
-        patMedInhosp.setInhospstate("0");
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
-        if (CollectionUtils.isNotEmpty(patMedInhospList) && patMedInhospList.size() > 0) {
-            dealInHospInfo(patMedInhospList);
-        }
-        return 1;
-    }
-
-    /**
-     * 浠诲姟缁勯殢璁�
-     *
-     * @param config
-     * @return
-     */
-    public int dealOutHospInfoBySchedule(String config) {
-
-        ServiceTask serviceTaskVo = new ServiceTask();
-        serviceTaskVo.setLongTask(1);
-        serviceTaskVo.setAppltype("5");
-        List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(serviceTaskVo);
-
-        if (CollectionUtils.isNotEmpty(serviceTasks)) {
-            for (ServiceTask serviceTask : serviceTasks) {
-                if (!ObjectUtils.isEmpty(serviceTask.getTaskid())) {
-                    ServiceTaskSchedule serviceTaskSchedule = new ServiceTaskSchedule();
-                    ServiceTaskSchedule taskSchedule = new ServiceTaskSchedule();
-                    taskSchedule.setTaskid(serviceTask.getTaskid());
-                    List<ServiceTaskSchedule> serviceTaskSchedules = serviceTaskScheduleMapper.selectServiceTaskScheduleList(taskSchedule);
-                    if (CollectionUtils.isNotEmpty(serviceTaskSchedules)) {
-                        serviceTaskSchedule = serviceTaskSchedules.get(0);
-                        String deptCodes = serviceTaskSchedule.getDeptCodes();
-                        String wardCodes = serviceTaskSchedule.getWardCodes();
-                        String icd10Codes = serviceTaskSchedule.getIcd10Codes();
-                        String opLevelCodes = serviceTaskSchedule.getOplevelCodes();
-
-                        List<String> icd10CodeList = new ArrayList<>();
-                        List<String> opLevelCodeList = new ArrayList<>();
-                        List<String> deptCodeList = new ArrayList<>();
-                        List<String> wardCodeList = new ArrayList<>();
-
-                        /**
-                         * 闅忚绫诲瀷(1-绉戝锛�2-鐥呭尯锛�3-鐤剧梾 4-鍏ラ櫌绉戝 5-鍏ラ櫌鐥呭尯 6-鎵嬫湳)
-                         */
-                        Integer type = 1;
-                        if (StringUtils.isNotEmpty(deptCodes)) {
-                            type = 1;
-                            deptCodeList = new ArrayList<>(Arrays.asList(deptCodes.split(",")));
-                        }
-                        if (StringUtils.isNotEmpty(wardCodes)) {
-                            type = 2;
-                            wardCodeList = new ArrayList<>(Arrays.asList(wardCodes.split(",")));
-                        }
-                        if (StringUtils.isNotEmpty(icd10Codes)) {
-                            type = 3;
-                            icd10CodeList = new ArrayList<>(Arrays.asList(icd10Codes.split(",")));
-                        }
-                        if (StringUtils.isNotEmpty(opLevelCodes)) {
-                            type = 6;
-                            opLevelCodeList = new ArrayList<>(Arrays.asList(opLevelCodes.split(",")));
-                        }
-                        //闈炴墜鏈鐞嗘柟寮�
-                        if (type != 6) {
-                            PatMedInhosp patMedInhospVo = new PatMedInhosp();
-                            patMedInhospVo.setScheduleCheckFlag("0");
-                            patMedInhospVo.setInhospstate("1");
-                            patMedInhospVo.setFuflag("1");
-//                            patMedInhospVo.setDeptcodeList(deptCodeList);
-                            patMedInhospVo.setLeaveldeptcodes(deptCodeList);
-                            patMedInhospVo.setLeavehospitaldistrictcodes(wardCodeList);
-                            patMedInhospVo.setIcd10codeList(icd10CodeList);
-                            List<PatMedInhosp> patList = patMedInhospMapper.selectPatMedInhospList(patMedInhospVo);
-                            log.info("dealOutHospInfoBySchedule 浠诲姟缁勯殢璁�, taskid = {}, 鎵弿鎮h�呬汉鏁� {}", serviceTask.getTaskid(), patList.size());
-
-                            for (PatMedInhosp patMedInhosp : patList) {
-                                ServiceTaskScheduleDetail scheduleDetailVo = new ServiceTaskScheduleDetail();
-                                scheduleDetailVo.setTaskid(serviceTask.getTaskid());
-                                scheduleDetailVo.setScheduleid(serviceTaskSchedule.getId());
-                                List<ServiceTaskScheduleDetail> serviceTaskScheduleDetails = serviceTaskScheduleDetailMapper.selectServiceTaskScheduleDetailList(scheduleDetailVo);
-
-                                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp.getPatid());
-                                if (Objects.isNull(patArchive)) {
-                                    continue;
-                                }
-                                //灏佽serviceSubtask
-
-                                ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedInhosp, patArchive, config, type);
-                                List<Map<String, Object>> preachformList = new ArrayList<>();
-                                if (StringUtils.isNotEmpty(serviceTask.getPreachformDesc())) {
-                                    try {
-                                        ObjectMapper objectMapper = new ObjectMapper();
-                                        preachformList = objectMapper.readValue(serviceTask.getPreachformDesc(), List.class);
-                                    } catch (Exception e) {
-                                        log.error("浠诲姟缁刾reachformDesc瑙f瀽澶辫触,taskid={},inhospid={}", serviceTask.getTaskid(), patMedInhosp.getInhospid());
-                                    }
-                                }
-                                scheduleSubtaskBuilder.buildSubtasksForPatient(serviceTask, serviceTaskSchedule, serviceTaskScheduleDetails, serviceSubtask, preachformList);
-                                //缃杞撼鍏ユ爣璁帮紝閬垮厤涓嬫鎵弿閲嶅鐢熸垚锛堝悗缁疆娆$敱 rollTaskGroupCycle 璐熻矗锛�
-                                PatMedInhosp flagUpd = new PatMedInhosp();
-                                flagUpd.setInhospid(patMedInhosp.getInhospid());
-                                flagUpd.setScheduleCheckFlag("1");
-                                patMedInhospMapper.updatePatMedInhosp(flagUpd);
-                            }
-                        } else {
-                            //浠诲姟缁� - 鎵嬫湳闅忚
-                            if (CollectionUtils.isNotEmpty(opLevelCodeList)) {
-                                PatMedOperationItem pmoi = new PatMedOperationItem();
-                                //鑾峰彇闇�瑕佸嚭闄㈢柧鐥呴殢璁匡紝鏈鐞嗙殑鏁版嵁
-                                pmoi.setOpercheckFlag("0");
-                                pmoi.setMainFlag("1");
-                                pmoi.setDeptCodes(deptCodeList);
-                                pmoi.setWardCodes(wardCodeList);
-                                pmoi.setOpLevelCodes(opLevelCodeList);
-                                List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemList(pmoi);
-                                for (PatMedOperationItem patMedOperationItem : patMedOperationItems) {
-                                    PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOperationItem.getPatid());
-                                    if (Objects.isNull(patArchive)) {
-                                        continue;
-                                    }
-                                    PatMedInhosp patMedInhospVo = new PatMedInhosp();
-                                    patMedInhospVo.setPatid((patMedOperationItem.getPatid()));
-                                    patMedInhospVo.setScheduleCheckFlag("0");
-                                    patMedInhospVo.setInhospstate("1");
-                                    patMedInhospVo.setFuflag("1");
-                                    List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhospVo);
-                                    if (CollectionUtils.isNotEmpty(patMedInhospList)) {
-                                        ServiceTaskScheduleDetail scheduleDetailVo = new ServiceTaskScheduleDetail();
-                                        scheduleDetailVo.setTaskid(serviceTask.getTaskid());
-                                        scheduleDetailVo.setScheduleid(serviceTaskSchedule.getId());
-                                        List<ServiceTaskScheduleDetail> serviceTaskScheduleDetails = serviceTaskScheduleDetailMapper.selectServiceTaskScheduleDetailList(scheduleDetailVo);
-                                        //灏佽serviceSubtask
-                                        ServiceSubtask serviceSubtask = boxedServiceSubtaskForOp(serviceTask, patMedInhospList.get(0), patMedOperationItem, patArchive, config);
-                                        List<Map<String, Object>> preachformList = new ArrayList<>();
-                                        if (StringUtils.isNotEmpty(serviceTask.getPreachformDesc())) {
-                                            try {
-                                                ObjectMapper objectMapper = new ObjectMapper();
-                                                preachformList = objectMapper.readValue(serviceTask.getPreachformDesc(), List.class);
-                                            } catch (Exception e) {
-                                                log.error("浠诲姟缁�(鎵嬫湳)preachformDesc瑙f瀽澶辫触,taskid={}", serviceTask.getTaskid());
-                                            }
-                                        }
-                                        scheduleSubtaskBuilder.buildSubtasksForPatient(serviceTask, serviceTaskSchedule, serviceTaskScheduleDetails, serviceSubtask, preachformList);
-                                        //缃杞撼鍏ユ爣璁帮紝閬垮厤閲嶅鐢熸垚
-                                        PatMedInhosp flagUpd = new PatMedInhosp();
-                                        flagUpd.setInhospid(patMedInhospList.get(0).getInhospid());
-                                        flagUpd.setScheduleCheckFlag("1");
-                                        patMedInhospMapper.updatePatMedInhosp(flagUpd);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return 1;
-    }
-
 
     /**
      * 鑾峰彇鍑洪櫌锛屼綇闄紝闂ㄨ瘖鏈嶅姟浜烘
@@ -580,9 +297,9 @@
 
     @Override
     public List<PatMedInhosp> getDocAndPat(PatMedInhosp patMedInhosp) {
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+        List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
         for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
+            String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid());
             patMedInhosp1.setTagname(tagname);
         }
         if (StringUtils.isNotEmpty(patMedInhosp.getPatname()) || StringUtils.isNotEmpty(patMedInhosp.getNurseName()) || StringUtils.isNotEmpty(patMedInhosp.getDrname())) {
@@ -645,34 +362,34 @@
                 log.info("璇ユ偅鑰呰嵂鍝佸鏁欓暱鏈熶换鍔′笉瀛樺湪,浠诲姟ID涓猴細{}", taskid);
                 patMedInhosp1.setMedcheckFlag("2");
                 patMedInhosp1.setLongTaskReason(longTaskReason + " & 璇ユ偅鑰呰嵂鍝佸鏁欓暱鏈熶换鍔′笉瀛樺湪,浠诲姟ID涓�:" + taskid);
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 return;
             }
             if (type == 1) {
                 log.info("璇ユ偅鑰呭嚭闄㈤殢璁块暱鏈熶换鍔′笉瀛樺湪,浠诲姟ID涓猴細{}", taskid);
                 patMedInhosp1.setDeptcheckFlag("2");
                 patMedInhosp1.setLongTaskReason(longTaskReason + " & 璇ユ偅鑰呯闄㈢瀹ら暱鏈熶换鍔′笉瀛樺湪,浠诲姟ID涓�:" + taskid);
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 return;
             } else if (type == 2) {
                 patMedInhosp1.setWardcheckFlag("2");
                 patMedInhosp1.setLongTaskReason(longTaskReason + " & 璇ユ偅鑰呯闄㈢梾鍖洪暱鏈熶换鍔′笉瀛樺湪,浠诲姟ID涓�:" + taskid);
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 return;
             } else if (type == 3) {
                 patMedInhosp1.setDiagcheckFlag("2");
                 patMedInhosp1.setLongTaskReason(longTaskReason + " & 璇ユ偅鑰呯柧鐥呴暱鏈熶换鍔′笉瀛樺湪,浠诲姟ID涓�:" + taskid);
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 return;
             } else if (type == 4) {
                 patMedInhosp1.setInDeptcheckFlag("2");
                 patMedInhosp1.setLongTaskReason(longTaskReason + " & 璇ユ偅鑰呭叆闄㈢瀹ら暱鏈熶换鍔′笉瀛樺湪,浠诲姟ID涓�:" + taskid);
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 return;
             } else if (type == 5) {
                 patMedInhosp1.setInWardcheckFlag("2");
                 patMedInhosp1.setLongTaskReason(longTaskReason + " & 璇ユ偅鑰呭叆闄㈢梾鍖洪暱鏈熶换鍔′笉瀛樺湪,浠诲姟ID涓�:" + taskid);
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 return;
             }
         } else {
@@ -706,6 +423,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("鎮h�厈}宸插瓨鍦ㄩ娆¢殢璁夸换鍔★紝璺宠繃閲嶅鐢熸垚, 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");
+                    inhospVisitFacade.updatePatMedInhosp(flagUpdate);
+                    return;
+                }
+            }
             //鍏堝垽鏂竴涓嬶紝鏄惁闇�瑕佹牎楠�
             if (check && (Objects.isNull(serviceSubtask.getTaskSituation()) || serviceSubtask.getTaskSituation() != 6)) {
                 //鍦ㄦ柊澧炰箣鍓嶏紝鍏堥�氳繃鎮h�匢D锛宻endstate=2鏌ヨ涓�涓嬶紝鍦ㄦ墍鏈夐暱鏈熶换鍔′腑锛屾槸涓嶆槸杩樻湁璇ユ偅鑰呭緟鎵ц鐨勪换鍔★紝鏈夌殑璇�,姣旇緝涔嬪墠鐨別ndtime鏄惁灏忎簬褰撳墠鐨別ndtaime,濡傛灉涔嬪墠鐨勫皬浜庣幇鍦ㄧ殑锛屽垯鐩存帴灏嗕箣鍓嶇殑鍋滄帀锛堝師鍥犲啀鍏ラ櫌锛�
@@ -835,7 +575,7 @@
                 if (type == 3) patMedInhosp2.setDiagcheckFlag("1");
                 if (type == 4) patMedInhosp2.setInDeptcheckFlag("1");
                 if (type == 5) patMedInhosp2.setInWardcheckFlag("1");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp2);
             } else {
                 //鐢熸垚瀛愪换鍔″け璐ワ紝
                 log.info("鐢熸垚瀛愪换鍔″け璐erviceSubtask鐨則askid涓猴細{},patid涓猴細{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid());
@@ -847,7 +587,7 @@
                 if (type == 4) patMedInhosp2.setInDeptcheckFlag("2");
                 if (type == 5) patMedInhosp2.setInWardcheckFlag("2");
                 patMedInhosp2.setRemark("鐢熸垚瀛愪换鍔″け璐� " + type);
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp2);
             }
         } catch (Exception e) {
             //鍑洪敊鍥炴粴浜嬪姟
@@ -859,7 +599,7 @@
             if (type == 3) patMedInhosp2.setDiagcheckFlag("2");
             if (type == 0) patMedInhosp2.setMedcheckFlag("2");
             patMedInhosp2.setRemark("鐢熸垚瀛愪换鍔℃姤閿欏洖婊� " + type);
-            patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
+            inhospVisitFacade.updatePatMedInhosp(patMedInhosp2);
             e.printStackTrace();
         }
     }
@@ -886,7 +626,7 @@
             log.info("璇ユ墜鏈搴旀墜鏈瓑绾х殑闀挎湡浠诲姟涓嶅瓨鍦�,浠诲姟ID涓猴細{}", taskid);
             patMedOperationItem.setOpercheckFlag("2");
             patMedOperationItem.setLongTaskReason(" & 璇ユ墜鏈搴旀墜鏈瓑绾х殑闀挎湡浠诲姟涓嶅瓨鍦�,浠诲姟ID涓�:" + taskid +";");
-            patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem);
+            otherVisitFacade.updateOperationItem(patMedOperationItem);
             return;
         } else {
             serviceTask = serviceTasks.get(0);
@@ -909,7 +649,7 @@
         if(!active.equals("hzszlyy")){
             patMedInhosp.setSerialnum(patMedOperationItem.getSerialnum());
         }
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+        List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
 
         if (CollectionUtils.isEmpty(patMedInhospList)) {
             return;
@@ -984,7 +724,7 @@
                 PatMedOperationItem patMedOperationItem2 = new PatMedOperationItem();
                 patMedOperationItem2.setId(patMedOperationItem.getId());
                 patMedOperationItem2.setOpercheckFlag("1");
-                patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem2);
+                otherVisitFacade.updateOperationItem(patMedOperationItem2);
             } else {
                 //鐢熸垚瀛愪换鍔″け璐ワ紝
                 log.info("鐢熸垚瀛愪换鍔″け璐erviceSubtask鐨則askid涓猴細{},patid涓猴細{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid());
@@ -993,7 +733,7 @@
                 patMedOperationItem2.setOpercheckFlag("2");
                 patMedOperationItem2.setLongTaskReason("鐢熸垚瀛愪换鍔″け璐� 4;");
                 patMedOperationItem2.setUpdateTime(new Date());
-                patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem2);
+                otherVisitFacade.updateOperationItem(patMedOperationItem2);
             }
         } catch (Exception e) {
             //鍑洪敊鍥炴粴浜嬪姟
@@ -1005,12 +745,13 @@
             patMedOperationItem2.setOpercheckFlag("2");
             patMedOperationItem2.setUpdateTime(new Date());
             patMedOperationItem2.setLongTaskReason("鐢熸垚瀛愪换鍔℃姤閿欏洖婊� 4;");
-            patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem2);
+            otherVisitFacade.updateOperationItem(patMedOperationItem2);
             e.printStackTrace();
         }
     }
 
-    private Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) {
+    @Override
+    public Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) {
         //灏唒reachformDesc鐨刯son瀵硅薄锛屾斁鍒發ist闆嗗悎涓�
         ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
         if (Objects.isNull(serviceTask)) {
@@ -1073,20 +814,23 @@
         serviceSubtask.setInhospid(patMedInhosp1.getInhospid());
         serviceSubtask.setDrcode(patMedInhosp1.getDrcode());
         serviceSubtask.setDrname(patMedInhosp1.getDrname());
-        serviceSubtask.setDeptcode(patMedInhosp1.getLeaveldeptcode());
-        serviceSubtask.setDeptname(patMedInhosp1.getLeaveldeptname());
+        serviceSubtask.setLeaveldeptcode(patMedInhosp1.getLeaveldeptcode());
+        serviceSubtask.setLeaveldeptname(patMedInhosp1.getLeaveldeptname());
         serviceSubtask.setLeavehospitaldistrictcode(patMedInhosp1.getLeavehospitaldistrictcode());
         serviceSubtask.setLeavehospitaldistrictname(patMedInhosp1.getLeavehospitaldistrictname());
         if (type == 4 || type == 5) {
             //璁剧疆鍏ラ櫌鐨�
-            serviceSubtask.setDeptcode(patMedInhosp1.getDeptcode());
-            serviceSubtask.setDeptname(patMedInhosp1.getDeptname());
+            serviceSubtask.setLeaveldeptcode(patMedInhosp1.getDeptcode());
+            serviceSubtask.setLeaveldeptname(patMedInhosp1.getDeptname());
             serviceSubtask.setLeavehospitaldistrictcode(patMedInhosp1.getHospitaldistrictcode());
             serviceSubtask.setLeavehospitaldistrictname(patMedInhosp1.getHospitaldistrictname());
         }
         serviceSubtask.setLeaveicd10code(patMedInhosp1.getLeaveicd10code());
         serviceSubtask.setLeavediagname(patMedInhosp1.getLeavediagname());
         serviceSubtask.setDiagname(patMedInhosp1.getDiagname());
+        // 2026-11锛氶噸瑕佹�ф爣璁帮紙鍚�屾棩闂淬�嶏級闅忎换鍔¤蛋锛屼笌 ruoyi-inhospvisit 鐨勫彛寰勪竴鑷淬��
+        // 鏈潯閾捐矾鏄�屼汉宸ユ柊澧為殢璁� / 鐤剧梾缁村害銆嶄粛鍦ㄧ敤鐨勯仐鐣欏疄鐜般��
+        serviceSubtask.setImportanceFlagCode(patMedInhosp1.getImportanceFlagCode());
         serviceSubtask.setTemplateid(serviceTask.getTemplateid());
         serviceSubtask.setTemplatename(serviceTask.getTemplatename());
         serviceSubtask.setPatid(patArchive.getId());
@@ -1125,7 +869,7 @@
             if (type != 4 && type != 5) {
                 patMedInhosp1.setDeptcheckFlag("2");
                 patMedInhosp1.setRemark(patMedInhosp1.getRemark() + "& 璇ユ偅鑰呯柧鐥呭嚭闄㈡椂闂翠负绌�,鍑洪櫌璁板綍ID涓�:" + patMedInhosp1.getInhospid());
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 //濡傛灉鍑洪櫌鏃堕棿涓虹┖锛屽垯杩斿洖涓�涓柊瀵硅薄
                 return new ServiceSubtask();
             }
@@ -1186,10 +930,14 @@
         serviceSubtask.setInhospid(patMedInhosp1.getInhospid());
         serviceSubtask.setDrcode(patMedInhosp1.getDrcode());
         serviceSubtask.setDrname(patMedInhosp1.getDrname());
-        serviceSubtask.setDeptcode(patMedInhosp1.getLeaveldeptcode());
-        serviceSubtask.setDeptname(patMedInhosp1.getLeaveldeptname());
+        serviceSubtask.setLeaveldeptcode(patMedInhosp1.getLeaveldeptcode());
+        serviceSubtask.setLeaveldeptname(patMedInhosp1.getLeaveldeptname());
         serviceSubtask.setLeavehospitaldistrictcode(patMedInhosp1.getLeavehospitaldistrictcode());
         serviceSubtask.setLeavehospitaldistrictname(patMedInhosp1.getLeavehospitaldistrictname());
+        serviceSubtask.setLeaveicd10code(patMedInhosp1.getLeaveicd10code());
+        serviceSubtask.setLeavediagname(patMedInhosp1.getLeavediagname());
+        // 2026-11锛氶噸瑕佹�ф爣璁帮紙鍚�屾棩闂淬�嶏級闅忎换鍔¤蛋锛堝彛寰勫悓涓婏級
+        serviceSubtask.setImportanceFlagCode(patMedInhosp1.getImportanceFlagCode());
 
         serviceSubtask.setTemplateid(serviceTask.getTemplateid());
         serviceSubtask.setTemplatename(serviceTask.getTemplatename());
@@ -1225,10 +973,10 @@
         } else {
             patMedOperationItem.setOpercheckFlag("2");
             patMedOperationItem.setLongTaskReason("璇ユ偅鑰呮墜鏈嚭闄㈡椂闂翠负绌�,鎵嬫湳璇︽儏ID涓�:" + patMedOperationItem.getId() + ";");
-            patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem);
+            otherVisitFacade.updateOperationItem(patMedOperationItem);
 //            patMedInhosp1.setDeptcheckFlag("2");
 //            patMedInhosp1.setRemark(patMedInhosp1.getRemark() + "& 璇ユ偅鑰呮墜鏈嚭闄㈡椂闂翠负绌�,鍑洪櫌璁板綍ID涓�:" + patMedInhosp1.getInhospid());
-//            patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+//            inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
             //濡傛灉鍑洪櫌鏃堕棿涓虹┖锛屽垯杩斿洖涓�涓柊瀵硅薄
             return null;
         }
@@ -1310,296 +1058,6 @@
         }
     }
 
-    @Override
-    public void addOperationSubTask(String config) {
-        //            鎵嬫湳闅忚
-        PatMedOperationItem pmoi = new PatMedOperationItem();
-        //鑾峰彇闇�瑕佸嚭闄㈡墜鏈殢璁匡紝鏈鐞嗙殑鏁版嵁
-        if(!active.equals("hzszlyy")){
-            pmoi.setInhospstate("1");
-        }
-        pmoi.setOpercheckFlag("0");
-        pmoi.setMainFlag("1");
-
-        List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemList(pmoi);
-        log.info("dealOutHospInfo闇�瑕佸鐞嗙殑鍑洪櫌鎵嬫湳鎮h�呬俊鎭細{}", CollectionUtils.isNotEmpty(patMedOperationItems) ? patMedOperationItems.size() : null);
-
-        for (PatMedOperationItem opItem : patMedOperationItems) {
-
-            try {
-                if (StringUtils.isEmpty(opItem.getOplevelcode())) {
-                    continue;
-                }
-                // 鏍规嵁鎮h�呯殑鐤剧梾锛岃幏鍙栬鐤剧梾鐨勯暱鏈熶换鍔�
-                List<ServiceTaskoper> serviceTaskopersDept = new ArrayList<>();
-                if(StringUtils.isNotEmpty(opItem.getLeaveldeptcode())){
-                    ServiceTaskoper serviceTaskoper1 = new ServiceTaskoper();
-                    serviceTaskoper1.setLongtask(1L);
-                    serviceTaskoper1.setOrgid(opItem.getOrgid());
-                    serviceTaskoper1.setOplevelcode(opItem.getOplevelcode());
-                    serviceTaskoper1.setDeptCode(opItem.getLeaveldeptcode());
-                    serviceTaskopersDept = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper1);
-                }
-
-
-                List<ServiceTaskoper> serviceTaskopersWard = new ArrayList<>();
-                if(StringUtils.isNotEmpty(opItem.getLeavehospitaldistrictcode())){
-                    ServiceTaskoper serviceTaskoper2 = new ServiceTaskoper();
-                    serviceTaskoper2.setLongtask(1L);
-                    serviceTaskoper2.setOrgid(opItem.getOrgid());
-                    serviceTaskoper2.setOplevelcode(opItem.getOplevelcode());
-                    serviceTaskoper2.setWardCode(opItem.getLeavehospitaldistrictcode());
-                    serviceTaskopersWard = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper2);
-                }
-
-
-                List<ServiceTaskoper> serviceTaskopers = new ArrayList<>();
-                serviceTaskopers.addAll(serviceTaskopersDept);
-                serviceTaskopers.addAll(serviceTaskopersWard);
-                //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
-                if (CollectionUtils.isEmpty(serviceTaskopers) || serviceTaskopers.size() == 0) {
-                    PatMedOperationItem patMedOperationItem = patMedOperationItemMapper.selectPatMedOperationItemById(opItem.getId());
-                    patMedOperationItem.setOpercheckFlag("2");
-                    patMedOperationItem.setLongTaskReason("鎵�鎮g殑鎵嬫湳鏈厤缃暱鏈熶换鍔�;");
-                    patMedOperationItem.setUpdateTime(new Date());
-                    patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem);
-                } else {
-                    for (ServiceTaskoper serviceTaskoper : serviceTaskopers) {
-                        writeInSubTaskForOp(serviceTaskoper.getTaskId(), true, opItem, config);
-                    }
-                }
-
-            } catch (Exception e) {
-                e.printStackTrace();
-                log.error("浜哄憳鎵嬫湳澶勭悊鍑哄紓甯镐簡锛歿}", e.getMessage());
-                opItem.setUpdateTime(new Date());
-                opItem.setOpercheckFlag("2");
-                opItem.setLongTaskReason("浜哄憳鎵嬫湳澶勭悊寮傚父");
-                patMedOperationItemMapper.updatePatMedOperationItem(opItem);
-            }
-        }
-    }
-
-    private void addIcd10SubTask(String config) {
-        PatMedInhosp pmjb = new PatMedInhosp();
-        //鑾峰彇闇�瑕佸嚭闄㈢柧鐥呴殢璁匡紝鏈鐞嗙殑鏁版嵁
-        pmjb.setDiagcheckFlag("0");
-        pmjb.setInhospstate("1");
-        pmjb.setFuflag("1");
-        List<PatMedInhosp> patMedInhospJBs = patMedInhospMapper.selectPatMedInhospList(pmjb);
-        log.info("dealOutHospInfo闇�瑕佸鐞嗙殑鍑洪櫌鐤剧梾鎮h�呬俊鎭細{}", CollectionUtils.isNotEmpty(patMedInhospJBs) ? patMedInhospJBs.size() : null);
-        for (PatMedInhosp patMedInhosp1 : patMedInhospJBs) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
-            patMedInhosp1.setTagname(tagname);
-        }
-
-        for (PatMedInhosp pmiJB : patMedInhospJBs) {
-            //鑾峰彇鎮h�呬俊鎭�
-            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiJB.getPatid());
-            if (Objects.isNull(patArchive)) {
-                pmiJB.setDiagcheckFlag("2");
-                pmiJB.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
-                patMedInhospMapper.updatePatMedInhosp(pmiJB);
-                continue;
-            }
-            try {
-                String errorIcd = null;
-                if (StringUtils.isEmpty(pmiJB.getLeaveicd10code())) {
-                    continue;
-                }
-                // 鏍规嵁鎮h�呯殑鐤剧梾锛岃幏鍙栬鐤剧梾鐨勯暱鏈熶换鍔�
-                ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
-                serviceTaskdiag.setLongtask(1L);
-//                serviceTaskdiag.setServiceType("2");
-                if (active.equals("nhfy")) {
-                    //鍗楀崕闄勪竴鐨刬cd10code鏈夐噸澶嶏紝鎵�浠ョ敤涓昏瘖鏂悕绉板幓鏌ヨ
-                    serviceTaskdiag.setIcd10name(pmiJB.getLeavediagname());
-                    if (StringUtils.isEmpty(pmiJB.getLeavediagname())) {
-                        errorIcd = "璇ユ偅鑰呬富璇婃柇鍚嶇О涓虹┖;";
-                    }
-                } else {
-                    serviceTaskdiag.setIcd10code(pmiJB.getLeaveicd10code());
-                    if (StringUtils.isEmpty(pmiJB.getLeaveicd10code())) {
-                        errorIcd = "璇ユ偅鑰呬富璇婃柇ICD10鐮佷负绌�;";
-                    }
-                }
-                serviceTaskdiag.setOrgid(pmiJB.getOrgid());
-                List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagListByIcdName(serviceTaskdiag);
-
-                //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
-                if (StringUtils.isNotEmpty(errorIcd)) {
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid());
-                    pmiJB.setDiagcheckFlag("2");
-                    pmiJB.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorIcd : errorIcd);
-                    patMedInhospMapper.updatePatMedInhosp(pmiJB);
-                } else if (CollectionUtils.isEmpty(serviceTaskdiags)) {
-                    errorIcd = "璇ユ偅鑰呮墍鎮g柧鐥呮湭閰嶇疆闀挎湡浠诲姟;";
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid());
-                    pmiJB.setDiagcheckFlag("2");
-                    pmiJB.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorIcd : errorIcd);
-                    patMedInhospMapper.updatePatMedInhosp(pmiJB);
-                } else {
-                    int flag = 0;
-                    for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) {
-                        //蹇呴』绉戝鎴栫梾鍖鸿兘鍖归厤涓�,鎵嶅彲浠ョ敤杩欎釜鐤剧梾鍒涘缓瀛愪换鍔★紙涓昏澶勭悊涓�涓柧鐥呭湪澶氫釜鐥呭尯鎴栫瀹ゅ嚭鐜帮級
-                        if (StringUtils.isNotEmpty(serviceTaskdept1.getDeptCode()) && serviceTaskdept1.getDeptCode().equals(pmiJB.getLeaveldeptcode())) {
-                            writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiJB, patArchive, 3, config);
-                            flag = 1;
-                        } else if (StringUtils.isNotEmpty(serviceTaskdept1.getWardCode()) && serviceTaskdept1.getWardCode().equals(pmiJB.getLeavehospitaldistrictcode())) {
-                            writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiJB, patArchive, 3, config);
-                            flag = 1;
-                        }
-                    }
-                    if (flag == 0) {
-                        log.error("璇ョ瀹ゆ垨鐥呭尯瀵逛簬鎮h�呮墍鎮g柧鐥呮湭閰嶇疆闀挎湡浠诲姟,鎮h�咃細{}", pmiJB.getInhospid());
-                        errorIcd = "璇ョ瀹ゆ垨鐥呭尯瀵逛簬鎮h�呮墍鎮g柧鐥呮湭閰嶇疆闀挎湡浠诲姟;";
-                        PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid());
-                        pmiJB.setDiagcheckFlag("2");
-                        pmiJB.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorIcd : errorIcd);
-                        patMedInhospMapper.updatePatMedInhosp(pmiJB);
-                    }
-
-                }
-
-            } catch (Exception e) {
-                e.printStackTrace();
-                log.error("浜哄憳鐤剧梾澶勭悊鍑哄紓甯镐簡锛歿}", e.getMessage());
-                pmiJB.setDiagcheckFlag("2");
-                pmiJB.setLongTaskReason("浜哄憳鐤剧梾澶勭悊寮傚父");
-                patMedInhospMapper.updatePatMedInhosp(pmiJB);
-            }
-        }
-    }
-
-    private void addWardSubTask(String config) {
-        PatMedInhosp pmbq = new PatMedInhosp();
-        //鑾峰彇闇�瑕佸嚭闄㈤儴闂ㄩ殢璁匡紝鏈鐞嗙殑鏁版嵁
-        pmbq.setWardcheckFlag("0");
-        pmbq.setInhospstate("1");
-        pmbq.setFuflag("1");
-        List<PatMedInhosp> patMedInhospBQs = patMedInhospMapper.selectPatMedInhospList(pmbq);
-        log.info("dealOutHospInfo闇�瑕佸鐞嗙殑鍑洪櫌鐥呭尯鎮h�呬俊鎭細{}", CollectionUtils.isNotEmpty(patMedInhospBQs) ? patMedInhospBQs.size() : null);
-        for (PatMedInhosp patMedInhosp1 : patMedInhospBQs) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
-            patMedInhosp1.setTagname(tagname);
-        }
-
-        //鐥呭尯鏁版嵁澶勭悊
-        for (PatMedInhosp pmiBQ1 : patMedInhospBQs) {
-            if ("1".equals(pmiBQ1.getLeavehospitaldistrictcode()) && pmiBQ1.getDiagcheckFlag().equals("1")) {
-                pmiBQ1.setWardcheckFlag("2");
-                pmiBQ1.setLongTaskReason("鏍规嵁浜ゅ弶鐢熸垚闅忚浠诲姟瑙勫垯锛岀梾鍖轰换鍔″彲浠ヤ笉鐢ㄧ敓鎴�");
-                patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
-                continue;
-            }
-
-            //鑾峰彇鎮h�呬俊鎭�
-            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiBQ1.getPatid());
-            if (Objects.isNull(patArchive)) {
-                pmiBQ1.setWardcheckFlag("2");
-                pmiBQ1.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
-                patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
-                continue;
-            }
-            try {
-                String errorreason = null;
-                List<ServiceTaskdept> serviceTaskdeptList = null;
-                if (!StringUtils.isEmpty(pmiBQ1.getLeavehospitaldistrictcode())) {
-                    ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
-                    serviceTaskdept.setLongtask(1L);
-                    serviceTaskdept.setDeptCode(pmiBQ1.getLeavehospitaldistrictcode());
-                    serviceTaskdept.setDeptType("2");
-                    serviceTaskdept.setServiceType("2");
-                    serviceTaskdept.setOrgid(pmiBQ1.getOrgid());
-                    serviceTaskdeptList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
-                    if (CollectionUtils.isEmpty(serviceTaskdeptList)) {
-                        errorreason = "璇ユ偅鑰呮墍鍦ㄧ梾鍖烘湭閰嶇疆闀挎湡浠诲姟;";
-                    }
-                } else {
-                    errorreason = "绂婚櫌鐥呭尯涓虹┖;";
-                }
-                //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
-                if (StringUtils.isNotEmpty(errorreason)) {
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiBQ1.getInhospid());
-                    pmiBQ1.setWardcheckFlag("2");
-                    pmiBQ1.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorreason : errorreason);
-                    patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
-                } else {
-                    for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) {
-                        writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiBQ1, patArchive, 2, config);
-                    }
-                }
-
-            } catch (Exception e) {
-                e.printStackTrace();
-                log.error("浜哄憳鐥呭尯澶勭悊鍑哄紓甯镐簡锛歿}", e.getMessage());
-                pmiBQ1.setWardcheckFlag("2");
-                pmiBQ1.setLongTaskReason("浜哄憳鐥呭尯澶勭悊寮傚父");
-                patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
-            }
-        }
-    }
-
-    private void addDeptSubTask(String config) {
-        //鑾峰彇闇�瑕佸嚭闄㈤儴闂ㄩ殢璁匡紝鏈鐞嗙殑鏁版嵁
-        PatMedInhosp pmks = new PatMedInhosp();
-        pmks.setDeptcheckFlag("0");
-        pmks.setInhospstate("1");
-        pmks.setFuflag("1");
-        List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks);
-        log.info("dealOutHospInfo闇�瑕佸鐞嗙殑鍑洪櫌閮ㄩ棬鎮h�呬俊鎭細{}", CollectionUtils.isNotEmpty(patMedInhosps) ? patMedInhosps.size() : null);
-        for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
-            patMedInhosp1.setTagname(tagname);
-        }
-
-        //绉戝
-        for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
-            if ("1".equals(patMedInhosp1.getLeavehospitaldistrictcode()) && patMedInhosp1.getDiagcheckFlag().equals("1")) {
-                patMedInhosp1.setDeptcheckFlag("2");
-                patMedInhosp1.setLongTaskReason("鏍规嵁浜ゅ弶鐢熸垚闅忚浠诲姟瑙勫垯锛岄儴闂ㄤ换鍔″彲浠ヤ笉鐢ㄧ敓鎴�");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
-                continue;
-            }
-            //鑾峰彇鎮h�呬俊鎭�
-            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
-            if (Objects.isNull(patArchive)) {
-                patMedInhosp1.setDeptcheckFlag("2");
-                patMedInhosp1.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
-                continue;
-            }
-            try {
-                //鏍规嵁鎮h�呮墍鍦ㄧ瀹わ紝鑾峰彇璇ョ瀹ょ殑闀挎湡浠诲姟
-                ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
-                serviceTaskdept.setLongtask(1L);
-                serviceTaskdept.setDeptCode(patMedInhosp1.getLeaveldeptcode());
-                serviceTaskdept.setDeptType("1");
-                serviceTaskdept.setServiceType("2");
-                serviceTaskdept.setOrgid(patMedInhosp1.getOrgid());
-                List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
-                //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
-                if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) {
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
-                    patMedInhosp1.setDeptcheckFlag("2");
-                    patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "璇ユ偅鑰呮墍鍦ㄧ瀹ゆ湭閰嶇疆绂婚櫌闀挎湡浠诲姟;");
-                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
-                } else {
-                    for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) {
-                        writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 1, config);
-                    }
-                }
-
-            } catch (Exception e) {
-                e.printStackTrace();
-                log.error("浜哄憳绉戝澶勭悊鍑哄紓甯镐簡锛歿}", e.getMessage());
-                patMedInhosp1.setDeptcheckFlag("2");
-                patMedInhosp1.setLongTaskReason("浜哄憳绉戝澶勭悊寮傚父");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
-            }
-        }
-    }
-
     /**
      * 缁熶竴鏇存柊pat_med_inhosp鐨刢heck_flag
      *
@@ -1631,7 +1089,7 @@
         if (StringUtils.isNotEmpty(remark)) {
             updateObj.setRemark(remark + " (type=" + type + ")");
         }
-        patMedInhospMapper.updatePatMedInhosp(updateObj);
+        inhospVisitFacade.updatePatMedInhosp(updateObj);
     }
 
     /**
@@ -1646,7 +1104,7 @@
             if (Objects.isNull(patArchive)) {
                 patMedInhosp1.setDeptcheckFlag("2");
                 patMedInhosp1.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 continue;
             }
 
@@ -1792,7 +1250,7 @@
                 log.error("銆愬熀浜庤鍒欍�戞偅鑰厈}澶勭悊寮傚父锛歿}", patMedInhosp1.getInhospid(), e.getMessage());
                 patMedInhosp1.setDeptcheckFlag("2");
                 patMedInhosp1.setLongTaskReason("鍩轰簬瑙勫垯澶勭悊寮傚父");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
             }
         }
     }
@@ -1815,12 +1273,12 @@
             List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
 
             if (CollectionUtils.isEmpty(serviceTaskdepts)) {
-                PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
+                PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
                 patMedInhosp1.setDeptcheckFlag("2");
                 patMedInhosp1.setWardcheckFlag(patMedInhosp.getWardcheckFlag());
                 patMedInhosp1.setDiagcheckFlag(patMedInhosp.getDiagcheckFlag());
                 patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "璇ユ偅鑰呮墍鍦ㄧ瀹ゆ湭閰嶇疆绂婚櫌闀挎湡浠诲姟;");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
             } else {
                 for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) {
                     writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 1, config);
@@ -1832,7 +1290,7 @@
             log.error("銆愮瀹や换鍔°�戞偅鑰厈}澶勭悊寮傚父锛歿}", patMedInhosp1.getInhospid(), e.getMessage());
             patMedInhosp1.setDeptcheckFlag("2");
             patMedInhosp1.setLongTaskReason("绉戝浠诲姟澶勭悊寮傚父");
-            patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+            inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
         }
         return generatedCount;
     }
@@ -1863,12 +1321,12 @@
             }
 
             if (StringUtils.isNotEmpty(errorreason)) {
-                PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
+                PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
                 patMedInhosp1.setWardcheckFlag("2");
                 patMedInhosp1.setDeptcheckFlag(patMedInhosp.getDeptcheckFlag());
                 patMedInhosp1.setDiagcheckFlag(patMedInhosp.getDiagcheckFlag());
                 patMedInhosp1.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorreason : errorreason);
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
             } else {
                 for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) {
                     writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 2, config);
@@ -1880,7 +1338,7 @@
             log.error("銆愮梾鍖轰换鍔°�戞偅鑰厈}澶勭悊寮傚父锛歿}", patMedInhosp1.getInhospid(), e.getMessage());
             patMedInhosp1.setWardcheckFlag("2");
             patMedInhosp1.setLongTaskReason("鐥呭尯浠诲姟澶勭悊寮傚父");
-            patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+            inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
         }
         return generatedCount;
     }
@@ -1903,10 +1361,10 @@
             if (active.equals("nhfy")) {
                 serviceTaskdiag.setIcd10name(patMedInhosp1.getLeavediagname());
                 if (StringUtils.isEmpty(patMedInhosp1.getLeavediagname())) {
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
+                    PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
                     patMedInhosp1.setDiagcheckFlag("2");
                     patMedInhosp1.setLongTaskReason("璇ユ偅鑰呬富璇婃柇鍚嶇О涓虹┖;");
-                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                    inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                     return 0;
                 }
             } else {
@@ -1916,10 +1374,10 @@
             List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagListByIcdName(serviceTaskdiag);
 
             if (CollectionUtils.isEmpty(serviceTaskdiags)) {
-                PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
+                PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
                 patMedInhosp.setDiagcheckFlag("2");
                 patMedInhosp.setLongTaskReason("璇ユ偅鑰呮墍鎮g柧鐥呮湭閰嶇疆闀挎湡浠诲姟;");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp);
             } else {
                 int flag = 0;
                 for (ServiceTaskdiag serviceTaskdiag1 : serviceTaskdiags) {
@@ -1935,10 +1393,10 @@
                 }
                 if (flag == 0) {
                     log.error("璇ョ瀹ゆ垨鐥呭尯瀵逛簬鎮h�呮墍鎮g柧鐥呮湭閰嶇疆闀挎湡浠诲姟,鎮h�咃細{}", patMedInhosp1.getInhospid());
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
+                    PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
                     patMedInhosp.setDiagcheckFlag("2");
                     patMedInhosp.setLongTaskReason("璇ョ瀹ゆ垨鐥呭尯瀵逛簬鎮h�呮墍鎮g柧鐥呮湭閰嶇疆闀挎湡浠诲姟;");
-                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
+                    inhospVisitFacade.updatePatMedInhosp(patMedInhosp);
                 }
             }
         } catch (Exception e) {
@@ -1946,10 +1404,192 @@
             log.error("銆愮柧鐥呬换鍔°�戞偅鑰厈}澶勭悊寮傚父锛歿}", patMedInhosp1.getInhospid(), e.getMessage());
             patMedInhosp1.setDiagcheckFlag("2");
             patMedInhosp1.setLongTaskReason("鐤剧梾浠诲姟澶勭悊寮傚父");
-            patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+            inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
         }
         return generatedCount;
     }
 
+    @Override
+    public void dealIcd10Subtask(PatMedInhosp pmks, String config) {
+        pmks.setDiagcheckFlag("0");
+        pmks.setInhospstate("1");
+        pmks.setFuflag("1");
+        List<PatMedInhosp> patMedInhosps = inhospVisitFacade.selectPatMedInhospList(pmks);
+        log.info("dealIcd10Subtask 寰呭鐞嗗嚭闄㈢柧鐥呮偅鑰呮暟锛歿}", CollectionUtils.isEmpty(patMedInhosps) ? 0 : patMedInhosps.size());
+        if (CollectionUtils.isNotEmpty(patMedInhosps)) {
+            int matchedTaskCount = 0;
+            for (PatMedInhosp patMedInhosp : patMedInhosps) {
+                // 鑾峰彇鎮h�呭熀鏈俊鎭紝妗f涓嶅瓨鍦ㄦ椂鐩存帴鏍囪澶辫触锛岄伩鍏嶅悗缁┖鎸囬拡
+                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp.getPatid());
+                if (Objects.isNull(patArchive)) {
+                    PatMedInhosp updateObj = new PatMedInhosp();
+                    updateObj.setInhospid(patMedInhosp.getInhospid());
+                    updateObj.setDiagcheckFlag("2");
+                    updateObj.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
+                    inhospVisitFacade.updatePatMedInhosp(updateObj);
+                    continue;
+                }
+                matchedTaskCount += addIcd10SubTaskForPatient(patMedInhosp, patArchive, config);
+            }
+            log.info("dealIcd10Subtask 澶勭悊瀹屾垚锛屽緟澶勭悊锛歿}锛屽尮閰嶇柧鐥呴暱鏈熶换鍔℃鏁帮細{}", patMedInhosps.size(), matchedTaskCount);
+        }
+    }
 
+    /**
+     * 浜哄伐闅忚锛氬垹闄ゆ偅鑰呭嚭闄㈣褰曞搴旂殑鏈畬鎴愰殢璁夸换鍔★紝骞舵寜鎸囧畾浠诲姟閲嶆柊鐢熸垚銆�
+     * 鍒犻櫎鏃т换鍔″彛寰勶細sendstate in (1,2,3,7)锛�
+     * 閲嶅浠诲姟鏍¢獙鍙e緞锛歴endstate in (1,2,3,5,7)锛屽凡鏈夌浉鍚� taskid 鏈畬鎴愪换鍔$殑鎮h�呰烦杩囥��
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public Map<String, Object> addManualVisit(ManualVisitDTO manualVisitDTO) {
+        if (manualVisitDTO == null) {
+            throw new BaseException("鍏ュ弬涓嶈兘涓虹┖");
+        }
+        if (CollectionUtils.isEmpty(manualVisitDTO.getPatids())) {
+            throw new BaseException("鎮h�卲atid闆嗗悎涓嶈兘涓虹┖");
+        }
+        if (manualVisitDTO.getTaskid() == null) {
+            throw new BaseException("浜哄伐闅忚浠诲姟taskid涓嶈兘涓虹┖");
+        }
+
+        ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(manualVisitDTO.getTaskid());
+        if (Objects.isNull(serviceTask)) {
+            throw new BaseException("浜哄伐闅忚浠诲姟涓嶅瓨鍦紝taskid锛�" + manualVisitDTO.getTaskid());
+        }
+
+        // 鍗囧簭澶勭悊锛岄厤鍚堟偅鑰呮。妗堣閿侊紝閬垮厤鎵归噺璇锋眰浜ゅ弶鍔犻攣浜х敓姝婚攣
+        List<Long> patids = manualVisitDTO.getPatids().stream()
+                .filter(Objects::nonNull)
+                .distinct()
+                .sorted()
+                .collect(Collectors.toList());
+        if (patids.isEmpty()) {
+            throw new BaseException("鎮h�卲atid闆嗗悎涓嶈兘涓虹┖");
+        }
+
+        String config = iSysConfigService.selectConfigByKey("visit.early.day");
+        List<Long> unfinishedSendstates = Arrays.asList(1L, 2L, 3L, 7L);
+        // 涓庡墠绔緟闅忚鍙e緞淇濇寔涓�鑷达紝鍙戦�佸け璐�(5)涔熻涓哄凡鏈夋湭瀹屾垚浠诲姟
+        List<Long> activeSendstates = Arrays.asList(1L, 2L, 3L, 5L, 7L);
+        int deletedCount = 0;
+        int generatedCount = 0;
+        List<Long> noDischargeRecordPatids = new ArrayList<>();
+        List<Long> noArchivePatids = new ArrayList<>();
+        List<Long> generateFailedPatids = new ArrayList<>();
+        List<Long> duplicatePatids = new ArrayList<>();
+        List<String> duplicatePatientNames = new ArrayList<>();
+
+        for (Long patid : patids) {
+            // 鏌ヨ鎮h�呭叏閮ㄥ嚭闄㈣褰曪紝SQL 鎸夊嚭闄㈡椂闂村�掑簭锛岀涓�鏉′綔涓烘湰娆$敓鎴愪换鍔$殑鍑洪櫌璁板綍
+            PatMedInhosp query = new PatMedInhosp();
+            query.setPatid(patid);
+            query.setCry(1);
+            if (StringUtils.isNotEmpty(serviceTask.getOrgid())) {
+                query.setOrgid(serviceTask.getOrgid());
+            }
+            List<PatMedInhosp> inhospList = inhospVisitFacade.selectPatMedInhospList(query);
+            if (CollectionUtils.isEmpty(inhospList)) {
+                noDischargeRecordPatids.add(patid);
+                continue;
+            }
+
+            PatMedInhosp latestInhosp = inhospList.get(0);
+            if (Objects.isNull(latestInhosp.getEndtime())) {
+                noDischargeRecordPatids.add(patid);
+                continue;
+            }
+
+            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
+            if (Objects.isNull(patArchive)) {
+                noArchivePatids.add(patid);
+                continue;
+            }
+
+            // 閿佸畾鎮h�呮。妗堣锛屼覆琛屽寲鍚屼竴鎮h�呯殑骞跺彂鍒涘缓璇锋眰
+            Long lockedPatid = patArchiveMapper.lockPatArchiveByPatid(patid);
+            if (Objects.isNull(lockedPatid)) {
+                noArchivePatids.add(patid);
+                continue;
+            }
+
+            // 鍚屼竴鎮h�呭湪鍚屼竴 taskid 涓嬪凡鏈夋湭瀹屾垚闅忚浠诲姟鏃讹紝璺宠繃璇ユ偅鑰咃紝閬垮厤閲嶅鍒涘缓
+            int existingSubtaskCount = serviceSubtaskMapper.countUnfinishedServiceSubtaskByPatidAndTaskid(
+                    patid, serviceTask.getTaskid(), activeSendstates);
+            if (existingSubtaskCount > 0) {
+                duplicatePatids.add(patid);
+                String patientName = StringUtils.isNotEmpty(patArchive.getName())
+                        ? patArchive.getName() : String.valueOf(patid);
+                duplicatePatientNames.add(patientName + "(" + patid + ")");
+                log.info("addManualVisit 鎮h�呭凡鏈夌浉鍚屾湇鍔★紝璺宠繃鐢熸垚锛宲atid锛歿}锛宼askid锛歿}锛屽凡鏈変换鍔℃暟锛歿}",
+                        patid, serviceTask.getTaskid(), existingSubtaskCount);
+                continue;
+            }
+
+            // 鍏堟瀯寤烘柊浠诲姟锛屾瀯寤哄け璐ユ椂涓嶅垹闄ゅ師浠诲姟锛岄伩鍏嶆偅鑰呬涪澶卞緟闅忚浠诲姟
+            ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, latestInhosp, patArchive, config, 1);
+            if (Objects.isNull(serviceSubtask) || Objects.isNull(serviceSubtask.getTaskid())) {
+                generateFailedPatids.add(patid);
+                continue;
+            }
+
+            List<Long> inhospids = inhospList.stream()
+                    .map(PatMedInhosp::getInhospid)
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(inhospids)) {
+                deletedCount += serviceSubtaskMapper.deleteUnfinishedServiceSubtaskByInhospids(
+                        patid, inhospids, unfinishedSendstates);
+            }
+
+            serviceSubtask.setId(null);
+            serviceSubtask.setUpid(null);
+            serviceSubtask.setVisitDeptCode(StringUtils.isNotEmpty(latestInhosp.getLeaveldeptcode())
+                    ? latestInhosp.getLeaveldeptcode() : latestInhosp.getLeavehospitaldistrictcode());
+            serviceSubtask.setVisitDeptName(StringUtils.isNotEmpty(latestInhosp.getLeaveldeptname())
+                    ? latestInhosp.getLeaveldeptname() : latestInhosp.getLeavehospitaldistrictname());
+            // 涓庡父瑙勭敓鎴愰�昏緫淇濇寔涓�鑷达細鎵嬫満鍙蜂负绌烘椂鐢熸垚浠诲姟浣嗕笉鎵ц
+            if (StringUtils.isEmpty(serviceSubtask.getPhone())) {
+                serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark())
+                        ? serviceSubtask.getRemark() + ",鎵嬫満鍙蜂负绌�" : "鎵嬫満鍙蜂负绌�");
+                serviceSubtask.setSendstate(4L);
+                serviceSubtask.setResult("error");
+            }
+
+            int inserted = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
+            if (inserted != 1) {
+                throw new BaseException("鐢熸垚闅忚浠诲姟澶辫触锛宲atid锛�" + patid + "锛宼askid锛�" + serviceTask.getTaskid());
+            }
+            addServiceSubtaskPreachform(serviceSubtask, null);
+            generatedCount++;
+            log.info("addManualVisit 鐢熸垚闅忚浠诲姟鎴愬姛锛宲atid锛歿}锛宼askid锛歿}锛宻ubtaskId锛歿}",
+                    patid, serviceTask.getTaskid(), serviceSubtask.getId());
+        }
+
+        String tipMessage = null;
+        if (CollectionUtils.isNotEmpty(duplicatePatids)) {
+            String taskName = StringUtils.isNotEmpty(serviceTask.getTaskName())
+                    ? serviceTask.getTaskName() : String.valueOf(serviceTask.getTaskid());
+            tipMessage = "鎮h��" + String.join("銆�", duplicatePatientNames)
+                    + "宸叉湁鐩稿悓鏈嶅姟銆�" + taskName + "銆戯紝宸茶烦杩�";
+            if (generatedCount > 0) {
+                tipMessage += "锛涘叾浣欐偅鑰呭凡澶勭悊";
+            }
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("deletedCount", deletedCount);
+        result.put("generatedCount", generatedCount);
+        result.put("noDischargeRecordPatids", noDischargeRecordPatids);
+        result.put("noArchivePatids", noArchivePatids);
+        result.put("generateFailedPatids", generateFailedPatids);
+        result.put("duplicatePatids", duplicatePatids);
+        result.put("duplicatePatientNames", duplicatePatientNames);
+        result.put("hasDuplicate", CollectionUtils.isNotEmpty(duplicatePatids));
+        result.put("tipMessage", tipMessage);
+        log.info("addManualVisit 澶勭悊瀹屾垚锛宲atid鏁帮細{}锛宼askid锛歿}锛屽垹闄ゆ湭瀹屾垚浠诲姟鏁帮細{}锛岀敓鎴愪换鍔℃暟锛歿}锛岄噸澶嶈烦杩囨暟锛歿}",
+                patids.size(), serviceTask.getTaskid(), deletedCount, generatedCount, duplicatePatids.size());
+        return result;
+    }
 }

--
Gitblit v1.9.3