From f0a09ee996ab2605869844d6a3d812709e2bf0fa Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期五, 16 十月 2026 16:07:25 +0800
Subject: [PATCH] 任务模块、电话模块

---
 smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java |  850 ++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 552 insertions(+), 298 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 d7ddca4..e299c66 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -1,16 +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.IConfigService;
+import com.ruoyi.common.core.service.dto.PatMedReq;
+import com.ruoyi.common.core.service.dto.PatMedRes;
 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.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.inhospvisit.domain.PatMedInhospDTO;
 import com.smartor.mapper.*;
 import com.smartor.service.IPatMedInhospService;
 import lombok.extern.slf4j.Slf4j;
@@ -26,6 +30,31 @@
 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.ServiceTaskmedical;
+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.ServiceTaskmedicalMapper;
+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;
 /**
  * 鎮h�呬綇闄㈣褰昐ervice涓氬姟灞傚鐞�
  *
@@ -36,7 +65,13 @@
 @Service
 public class PatMedInhospServiceImpl implements IPatMedInhospService {
     @Autowired
-    private PatMedInhospMapper patMedInhospMapper;
+    private InhospVisitFacade inhospVisitFacade;
+
+    /**
+     * 鎵嬫湳鏁版嵁涓�寰嬬粡 ruoyi-othervisit 鐨勯棬闈㈠彇鐢紙璺ㄦā鍧楁暟鎹闂師鍒欙級銆�
+     */
+    @Autowired
+    private OtherVisitFacade otherVisitFacade;
     @Autowired
     private ServiceTaskdeptMapper serviceTaskdeptMapper;
     @Autowired
@@ -54,9 +89,7 @@
     @Autowired
     private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
     @Autowired
-    private PatMedOperationMapper patMedOperationMapper;
-    @Autowired
-    private PatMedOperationItemMapper patMedOperationItemMapper;
+    private ServiceTaskmedicalMapper serviceTaskmedicalMapper;
     @Autowired
     private ServiceTaskRuleMapper serviceTaskRuleMapper;
 
@@ -64,6 +97,13 @@
     private String active;
     @Autowired
     private IConfigService iSysConfigService;
+    @Autowired
+    private ServiceTaskScheduleMapper serviceTaskScheduleMapper;
+
+    @Autowired
+    private ScheduleSubtaskBuilder scheduleSubtaskBuilder;
+    @Autowired
+    private ServiceTaskScheduleDetailMapper serviceTaskScheduleDetailMapper;
 
 
     /**
@@ -74,12 +114,12 @@
      */
     @Override
     public PatMedInhosp selectPatMedInhospByInhospid(Long inhospid) {
-        return patMedInhospMapper.selectPatMedInhospByInhospid(inhospid);
+        return inhospVisitFacade.selectPatMedInhospByInhospid(inhospid);
     }
 
     @Override
     public List<PatMedInhosp> selectPatMedInhosp(PatMedInhosp patMedInhosp) {
-        return patMedInhospMapper.selectPatMedInhosp(patMedInhosp);
+        return inhospVisitFacade.selectPatMedInhosp(patMedInhosp);
     }
 
     /**
@@ -90,35 +130,110 @@
      */
     @Override
     public List<PatMedInhosp> selectPatMedInhospList(PatMedInhosp patMedInhosp) {
-        if (patMedInhosp.getCry() == 0) {
+        //鍏ラ櫌搴婁綅鎺掑簭鍙湪銆屽湪闄€�嶆煡璇紙cry=0锛変笅鐢熸晥锛屽叾瀹冩煡璇竴寰嬪拷鐣ワ紝淇濊瘉鍘熸湁鎺掑簭涓嶅彉
+        patMedInhosp.setBedSort(normalizeBedSort(patMedInhosp.getCry(), patMedInhosp.getBedSort()));
+        if (patMedInhosp.getCry() != null && patMedInhosp.getCry() == 0) {
             patMedInhosp.setDeptcodeList(patMedInhosp.getLeaveldeptcodes());
             patMedInhosp.setHospitaldistrictcodeList(patMedInhosp.getLeavehospitaldistrictcodes());
             patMedInhosp.setLeaveldeptcodes(null);
             patMedInhosp.setLeavehospitaldistrictcodes(null);
             patMedInhosp.setInhospstate("0");
-        } else if (patMedInhosp.getCry() == 1) {
+        } else if (patMedInhosp.getCry() != null && patMedInhosp.getCry() == 1) {
             patMedInhosp.setInhospstate("1");
+        } else if (patMedInhosp.getCry() != null && patMedInhosp.getCry() == 2) {
+            patMedInhosp.setInhospstate("2");
+        } else if (patMedInhosp.getCry() != null && patMedInhosp.getCry() == 3) {
+            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;
     }
 
-    @Override
-    public Map<String, Integer> queryPersonCount(PatServiceCount patServiceCount) {
-        if (patServiceCount.getInterval() == 1) {
-            //鍛�
-        } else if (patServiceCount.getInterval() == 2) {
-            //鏈�
-        } else if (patServiceCount.getInterval() == 3) {
-            //骞�
+    /**
+     * 鎵归噺濉厖鎮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()));
+            }
+        }
+    }
+
+    /**
+     * 褰掍竴鍖栧叆闄㈠簥浣嶆帓搴忓弬鏁�
+     * <p>
+     * asc / 1 -> asc锛堝簥浣嶆搴忥級锛宒esc / 2 -> desc锛堝簥浣嶅�掑簭锛夛紝鍏朵綑锛堝惈涓嶄紶锛�-> null锛堜笉鎺掑簭锛夈��
+     * 鍙銆屽湪闄€�嶆偅鑰呮煡璇紙cry=0锛夌敓鏁堬紝鍑洪櫌/杞绛夋煡璇㈠拷鐣ヨ鍙傛暟銆�
+     *
+     * @param cry     鍑哄叆闄㈡爣璇嗭細0鍏ラ櫌 1鍑洪櫌 2杞 3棰勫叆闄�
+     * @param bedSort 鍓嶇浼犲叆鐨勫簥浣嶆帓搴忓��
+     * @return 褰掍竴鍖栧悗鐨勬帓搴忓�硷紙asc / desc / null锛�
+     */
+    private String normalizeBedSort(Integer cry, String bedSort) {
+        if (cry == null || cry != 0 || StringUtils.isEmpty(bedSort)) return null;
+        String value = bedSort.trim().toLowerCase();
+        if ("asc".equals(value) || "1".equals(value)) return "asc";
+        if ("desc".equals(value) || "2".equals(value)) return "desc";
         return null;
+    }
+
+    @Override
+    public List<PatMedInhospDTO> selectPatMedInhospByApplication(PatMedInhosp patMedInhosp) {
+        List<PatMedInhosp> patMedInhosps = selectPatMedInhospList(patMedInhosp);
+        if (!org.springframework.util.CollectionUtils.isEmpty(patMedInhosps)) {
+            return null;
+        }
+        List<PatMedInhospDTO> patMedInhospDTOList = DtoConversionUtils.sourceToTarget(patMedInhosps, PatMedInhospDTO.class);
+        for (PatMedInhospDTO pmd : patMedInhospDTOList) {
+            ServiceSubtaskEntity serviceSubtask = new ServiceSubtaskEntity();
+            serviceSubtask.setServiceType("4");
+            serviceSubtask.setInhospid(pmd.getInhospid());
+            List<ServiceSubtask> serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtask);
+            if (CollectionUtils.isNotEmpty(serviceSubtasks)) pmd.setFinishFlag("1");
+        }
+
+        return patMedInhospDTOList;
     }
 
     /**
@@ -128,7 +243,7 @@
      * @return
      */
     public List<PatMedInhosp> selectPatMedInhospListByCondition(PatMedInhospVO patMedInhospVO) {
-        return patMedInhospMapper.selectPatMedInhospListByCondition(patMedInhospVO);
+        return inhospVisitFacade.selectPatMedInhospListByCondition(patMedInhospVO);
     }
 
 
@@ -161,7 +276,7 @@
     public PatMedRes selectPatMedInhospListCount(PatMedReq patMedReq) {
         PatMedRes patMedRes = null;
         // 鑾峰彇褰撳墠鐧婚檰浜虹殑閮ㄩ棬鏉冮檺
-        patMedRes = patMedInhospMapper.selectPatMedInhospCount(patMedReq);
+        patMedRes = inhospVisitFacade.selectPatMedInhospCount(patMedReq);
         return patMedRes;
     }
 
@@ -175,7 +290,7 @@
     public int insertPatMedInhosp(PatMedInhosp patMedInhosp) {
         patMedInhosp.setCreateTime(DateUtils.getNowDate());
         patMedInhosp.setUpdateTime(DateUtils.getNowDate());
-        return patMedInhospMapper.insertPatMedInhosp(patMedInhosp);
+        return inhospVisitFacade.insertPatMedInhosp(patMedInhosp);
     }
 
     /**
@@ -187,7 +302,7 @@
     @Override
     public int updatePatMedInhosp(PatMedInhosp patMedInhosp) {
         patMedInhosp.setUpdateTime(DateUtils.getNowDate());
-        return patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
+        return inhospVisitFacade.updatePatMedInhosp(patMedInhosp);
     }
 
     /**
@@ -198,7 +313,7 @@
      */
     @Override
     public int deletePatMedInhospByInhospids(Long[] inhospids) {
-        return patMedInhospMapper.deletePatMedInhospByInhospids(inhospids);
+        return inhospVisitFacade.deletePatMedInhospByInhospids(inhospids);
     }
 
     /**
@@ -209,7 +324,7 @@
      */
     @Override
     public int deletePatMedInhospByInhospid(Long inhospid) {
-        return patMedInhospMapper.deletePatMedInhospByInhospid(inhospid);
+        return inhospVisitFacade.deletePatMedInhospByInhospid(inhospid);
     }
 
     /**
@@ -220,28 +335,29 @@
      */
     @Override
     public int deletePatMedInhospByInhospno(String inhospno) {
-        return patMedInhospMapper.deletePatMedInhospByInhospno(inhospno);
+        return inhospVisitFacade.deletePatMedInhospByInhospno(inhospno);
     }
 
     @Override
     public int dealOutHospInfo(String config) {
+        PatMedInhosp pmks = new PatMedInhosp();
+        pmks.setDeptcheckFlag("0");
+        pmks.setInhospstate("1");
+        pmks.setFuflag("1");
+        List<PatMedInhosp> patMedInhosps = inhospVisitFacade.selectPatMedInhospList(pmks);
+
         //1.鍏ラ櫌瀹f暀
         String helibrarySwitch = iSysConfigService.selectConfigByKey("in.helibrary.switch");
         if (StringUtils.isNotEmpty(helibrarySwitch) && "2".equals(helibrarySwitch)) {
-            PatMedInhosp inhosp = new PatMedInhosp();
-            inhosp.setInDeptcheckFlag("0");
-            inhosp.setInhospstate("0");
-            inhosp.setFuflag("1");
-            List<PatMedInhosp> inPatMedInhosps = patMedInhospMapper.selectPatMedInhospList(inhosp);
 
             //1.1 绉戝
-            for (PatMedInhosp patMedInhosp1 : inPatMedInhosps) {
+            for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
                 //鑾峰彇鎮h�呬俊鎭�
                 PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
                 if (Objects.isNull(patArchive)) {
                     patMedInhosp1.setInDeptcheckFlag("2");
                     patMedInhosp1.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
-                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                    inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                     continue;
                 }
                 try {
@@ -255,10 +371,10 @@
                     List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
                     //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
                     if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) {
-                        PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
+                        PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
                         patMedInhosp1.setInDeptcheckFlag("2");
                         patMedInhosp1.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + "璇ユ偅鑰呮墍鍦ㄧ瀹ゆ湭閰嶇疆鍏ラ櫌闀挎湡瀹f暀浠诲姟;" : "璇ユ偅鑰呮墍鍦ㄧ瀹ゆ湭閰嶇疆鍏ラ櫌闀挎湡瀹f暀浠诲姟;");
-                        patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                        inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                     } else {
                         for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) {
                             writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 4, config);
@@ -268,23 +384,24 @@
                 } catch (Exception e) {
                     log.error("浜哄憳鍏ラ櫌绉戝澶勭悊鍑哄紓甯镐簡锛歿}", e.getMessage());
                     patMedInhosp1.setInDeptcheckFlag("2");
-                    patMedInhosp1.setLongTaskReason("浜哄憳鍏ラ櫌绉戝澶勭悊鍑哄紓甯镐簡锛�" + e.getMessage());
-                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                    patMedInhosp1.setLongTaskReason("浜哄憳鍏ラ櫌绉戝澶勭悊鍑哄紓甯镐簡");
+                    inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 }
             }
 
 
             //1.2 鐥呭尯
-            inhosp.setInDeptcheckFlag(null);
-            inhosp.setInWardcheckFlag("0");
-            List<PatMedInhosp> inPatMedInhospsWard = patMedInhospMapper.selectPatMedInhospList(inhosp);
+            pmks.setInDeptcheckFlag(null);
+            pmks.setInWardcheckFlag("0");
+            pmks.setDeptcheckFlag(null);
+            List<PatMedInhosp> inPatMedInhospsWard = inhospVisitFacade.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);
+                    inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                     continue;
                 }
                 //鏍规嵁鎮h�呮墍鍦ㄧ梾鍖猴紝鑾峰彇璇ョ梾鍖虹殑鍏ラ櫌闀挎湡瀹f暀浠诲姟锛堜細鍑虹幇涓�涓棶棰橈紝绉戝鍜岀梾鍖哄彂鐨勫悓涓�涓ā鏉匡級
@@ -297,10 +414,10 @@
                 List<ServiceTaskdept> serviceTaskWardList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskWard);
                 //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
                 if (CollectionUtils.isEmpty(serviceTaskWardList) || serviceTaskWardList.size() == 0) {
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
+                    PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
                     patMedInhosp1.setInDeptcheckFlag("2");
                     patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "璇ユ偅鑰呮墍鍦ㄧ梾鍖烘湭閰嶇疆鍏ラ櫌闀挎湡瀹f暀浠诲姟;");
-                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                    inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 } else {
                     for (ServiceTaskdept serviceTaskdept1 : serviceTaskWardList) {
                         writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 5, config);
@@ -309,11 +426,45 @@
             }
         }
 
-        //2.鍑洪櫌闅忚 - 鍩轰簬瑙勫垯鐨勪换鍔$敓鎴�
-        addSubTaskByRule(config);
-        //鏍规嵁鎮h�呮墍鍦ㄧ梾鍖猴紝鑾峰彇璇ョ梾鍖虹殑闀挎湡浠诲姟,鏂板崕鍖婚櫌鍙互鍏堜笉鐢ㄦ牴鎹梾鍖哄拰鐤剧梾鏉ュ仛
+        //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")) {
-            //todo 鎵嬫湳涓昏〃-鎵嬫湳璇︽儏琛�-鍑洪櫌璁板綍琛�-绉戝鍏崇郴锛� 闇�瑕侀檺鍒剁瀹わ紵
             addOperationSubTask(config);
         }
 
@@ -322,7 +473,7 @@
         PatMedInhosp patMedInhosp = new PatMedInhosp();
         patMedInhosp.setDeptcheckFlag("0");
         patMedInhosp.setInhospstate("0");
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+        List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
         if (CollectionUtils.isNotEmpty(patMedInhospList) && patMedInhospList.size() > 0) {
             dealInHospInfo(patMedInhospList);
         }
@@ -330,139 +481,154 @@
     }
 
     /**
-     * 澶氱淮搴﹂殢璁�
+     * 浠诲姟缁勯殢璁�
      *
      * @param config
      * @return
      */
-    public int dealOutHospInfoByDimension(String config) {
-        // 涓�娆℃�ф煡鍑烘墍鏈夐渶瑕佸鐞嗙殑鍑洪櫌鎮h�咃紙涓変釜缁村害浠绘剰涓�涓湭瀹屾垚锛�
-        List<PatMedInhosp> patList = patMedInhospMapper.selectNeedProcessList();
-        log.info("銆愮粺涓�鎵弿銆戝緟澶勭悊鎮h�呮暟锛歿}", patList.size());
+    public int dealOutHospInfoBySchedule(String config) {
 
-        for (PatMedInhosp patMedInhosp1 : patList) {
-            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
-            if (Objects.isNull(patArchive)) {
-                // 涓変釜缁村害閮芥爣璁颁负澶辫触
-                markAllFlagsAsError(patMedInhosp1, "鎮h�呭熀鏈俊鎭负绌�");
-                continue;
-            }
+        ServiceTask serviceTaskVo = new ServiceTask();
+        serviceTaskVo.setLongTask(1);
+        serviceTaskVo.setAppltype("5");
+        List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(serviceTaskVo);
 
-            // 鈹�鈹� 缁村害1锛氱瀹� 鈹�鈹�
-            if ("0".equals(patMedInhosp1.getDeptcheckFlag())) {
-                processTasksByDimension(patMedInhosp1, patArchive, config, 1);
-            }
+        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();
 
-            // 鈹�鈹� 缁村害2锛氱梾鍖� 鈹�鈹�锛堟柊鍗庡尰闄㈣烦杩囷級
-            if (!active.equals("xh") && "0".equals(patMedInhosp1.getWardcheckFlag())) {
-                processTasksByDimension(patMedInhosp1, patArchive, config, 2);
-            }
+                        List<String> icd10CodeList = new ArrayList<>();
+                        List<String> opLevelCodeList = new ArrayList<>();
+                        List<String> deptCodeList = new ArrayList<>();
+                        List<String> wardCodeList = new ArrayList<>();
 
-            // 鈹�鈹� 缁村害3锛氱柧鐥� 鈹�鈹�锛堟柊鍗庡尰闄㈣烦杩囷級
-            if (!active.equals("xh") && "0".equals(patMedInhosp1.getDiagcheckFlag())) {
-                processTasksByDimension(patMedInhosp1, patArchive, config, 3);
+                        /**
+                         * 闅忚绫诲瀷(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 = inhospVisitFacade.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");
+                                inhospVisitFacade.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 = otherVisitFacade.selectOperationItemListMaxLevel(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 = inhospVisitFacade.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");
+                                        inhospVisitFacade.updatePatMedInhosp(flagUpd);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
             }
         }
         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();
     }
 
 
@@ -480,9 +646,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())) {
@@ -527,7 +693,7 @@
      * @param check         鏄惁闇�瑕佹牎楠�
      * @param patMedInhosp1 鐥呬汉鍑哄叆闄俊鎭�
      * @param patArchive    鐥呬汉淇℃伅
-     * @param type          闅忚绫诲瀷(1-绉戝锛�2-鐥呭尯锛�3-鐤剧梾 4-鍏ラ櫌绉戝 5-鍏ラ櫌鐥呭尯)
+     * @param type          闅忚绫诲瀷(0-瀹f暀锛�1-绉戝锛�2-鐥呭尯锛�3-鐤剧梾 4-鍏ラ櫌绉戝 5-鍏ラ櫌鐥呭尯)
      * @param config        閰嶇疆淇℃伅 visit.early.day
      */
     //灏嗘偅鑰呮斁鍒皊ubtask涓�
@@ -541,31 +707,38 @@
         List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st);
         ServiceTask serviceTask = null;
         if (CollectionUtils.isEmpty(serviceTasks)) {
+            if (type == 0) {
+                log.info("璇ユ偅鑰呰嵂鍝佸鏁欓暱鏈熶换鍔′笉瀛樺湪,浠诲姟ID涓猴細{}", taskid);
+                patMedInhosp1.setMedcheckFlag("2");
+                patMedInhosp1.setLongTaskReason(longTaskReason + " & 璇ユ偅鑰呰嵂鍝佸鏁欓暱鏈熶换鍔′笉瀛樺湪,浠诲姟ID涓�:" + taskid);
+                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 {
@@ -640,7 +813,7 @@
                             //鍐嶅叆闄㈤�昏緫
                             //鏅畞 鍑洪櫌棣栨锛�7澶╋級闅忚涓�瀹氳鍋�
                             boolean firstVisit = false;
-                            if (orgId.equals("47255004333112711A1001") && serviceSubtask1.getVisitCount() != null && serviceSubtask1.getVisitCount() == 1) {
+                            if (orgId.equals("47255004333112711A1001")) {
                                 firstVisit = true;
                             }
                             if (!firstVisit) {
@@ -719,7 +892,7 @@
                 addServiceSubtaskPreachform(serviceSubtask, null);
             }
 
-            //灏哻heck_flag鏀规垚1锛堝凡澶勭悊锛�
+            //灏� check_flag 鏀规垚 1锛堝凡澶勭悊锛�
             if (i == 1) {
                 PatMedInhosp patMedInhosp2 = new PatMedInhosp();
                 patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
@@ -728,7 +901,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());
@@ -740,7 +913,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) {
             //鍑洪敊鍥炴粴浜嬪姟
@@ -750,8 +923,9 @@
             if (type == 1) patMedInhosp2.setDeptcheckFlag("2");
             if (type == 2) patMedInhosp2.setWardcheckFlag("2");
             if (type == 3) patMedInhosp2.setDiagcheckFlag("2");
+            if (type == 0) patMedInhosp2.setMedcheckFlag("2");
             patMedInhosp2.setRemark("鐢熸垚瀛愪换鍔℃姤閿欏洖婊� " + type);
-            patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
+            inhospVisitFacade.updatePatMedInhosp(patMedInhosp2);
             e.printStackTrace();
         }
     }
@@ -777,48 +951,48 @@
         if (CollectionUtils.isEmpty(serviceTasks)) {
             log.info("璇ユ墜鏈搴旀墜鏈瓑绾х殑闀挎湡浠诲姟涓嶅瓨鍦�,浠诲姟ID涓猴細{}", taskid);
             patMedOperationItem.setOpercheckFlag("2");
-            patMedOperationItem.setLongTaskReason(longTaskReason + " & 璇ユ墜鏈搴旀墜鏈瓑绾х殑闀挎湡浠诲姟涓嶅瓨鍦�,浠诲姟ID涓�:" + taskid);
-            patMedOperationItemMapper.insertPatMedOperationItem(patMedOperationItem);
+            patMedOperationItem.setLongTaskReason(" & 璇ユ墜鏈搴旀墜鏈瓑绾х殑闀挎湡浠诲姟涓嶅瓨鍦�,浠诲姟ID涓�:" + taskid +";");
+            otherVisitFacade.updateOperationItem(patMedOperationItem);
             return;
         } else {
             serviceTask = serviceTasks.get(0);
         }
-        if (Objects.isNull(patMedOperationItem.getOpid())) {
-            return;
-        }
         if (Objects.isNull(patMedOperationItem.getOplevelcode())) {
             return;
         }
-        PatMedOperation patMedOperationVo = new PatMedOperation();
-        PatMedOperation patMedOperation = new PatMedOperation();
-        patMedOperationVo.setOpid(patMedOperationItem.getOpid());
-        List<PatMedOperation> patMedOperationList = patMedOperationMapper.selectPatMedOperationList(patMedOperationVo);
-        if (CollectionUtils.isEmpty(patMedOperationList)) {
+        if (Objects.isNull(patMedOperationItem.getPatid())) {
             return;
-        }else {
-            patMedOperation = patMedOperationList.get(0);
         }
-        PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOperation.getPatid());
+        PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOperationItem.getPatid());
         if (Objects.isNull(patArchive)) {
             return;
         }
         PatMedInhosp patMedInhosp = new PatMedInhosp();
-        patMedInhosp.setPatid(patMedOperation.getPatid());
+        patMedInhosp.setPatid((patMedOperationItem.getPatid()));
         patMedInhosp.setInhospstate("1");
         patMedInhosp.setFuflag("1");
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+        //鎵嬫湳闅忚
+        if(!active.equals("hzszlyy")){
+            patMedInhosp.setSerialnum(patMedOperationItem.getSerialnum());
+        }
+        List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
 
         if (CollectionUtils.isEmpty(patMedInhospList)) {
             return;
         }
 
         //灏佽serviceSubtask
-        ServiceSubtask serviceSubtask = boxedServiceSubtaskForOp(serviceTask, patMedInhospList.get(0), patMedOperation, patMedOperationItem, patArchive, config);
-        if (ObjectUtils.isEmpty(serviceSubtask)) {
+        ServiceSubtask serviceSubtask = boxedServiceSubtaskForOp(serviceTask, patMedInhospList.get(0), patMedOperationItem, patArchive, config);
+        if (ObjectUtils.isEmpty(serviceSubtask) || Objects.isNull(serviceSubtask.getTaskid())) {
             return;
         }
-        serviceSubtask.setVisitDeptCode(patMedOperation.getReqdeptcode());
-        serviceSubtask.setVisitDeptName(patMedOperation.getReqdeptname());
+        if (StringUtils.isNotEmpty(patMedOperationItem.getLeaveldeptcode())) {
+            serviceSubtask.setVisitDeptCode(patMedOperationItem.getLeaveldeptcode());
+            serviceSubtask.setVisitDeptName(patMedOperationItem.getLeaveldeptname());
+        } else {
+            serviceSubtask.setVisitDeptCode(patMedOperationItem.getLeavehospitaldistrictcode());
+            serviceSubtask.setVisitDeptName(patMedOperationItem.getLeavehospitaldistrictname());
+        }
         //璁板綍insertServiceSubtask璇彞杩斿洖鐘舵��
         Integer i = 0;
         try {
@@ -876,25 +1050,28 @@
                 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());
                 PatMedOperationItem patMedOperationItem2 = new PatMedOperationItem();
                 patMedOperationItem2.setId(patMedOperationItem.getId());
                 patMedOperationItem2.setOpercheckFlag("2");
-                patMedOperationItem2.setRemark("鐢熸垚瀛愪换鍔″け璐� 4");
-                patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem2);
+                patMedOperationItem2.setLongTaskReason("鐢熸垚瀛愪换鍔″け璐� 4;");
+                patMedOperationItem2.setUpdateTime(new Date());
+                otherVisitFacade.updateOperationItem(patMedOperationItem2);
             }
         } catch (Exception e) {
             //鍑洪敊鍥炴粴浜嬪姟
 
-            log.info("鐢熸垚瀛愪换鍔℃姤閿欏洖婊歴serviceSubtask鐨則askid涓猴細{},patid涓猴細{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid());
+            log.error("鐢熸垚瀛愪换鍔℃姤閿欏洖婊歴serviceSubtask鐨則askid涓猴細{},patid涓猴細{},鎵嬫湳璇︽儏ID涓猴細{}",
+                    serviceSubtask.getTaskid(), serviceSubtask.getPatid(), patMedOperationItem.getId(), e);
             PatMedOperationItem patMedOperationItem2 = new PatMedOperationItem();
             patMedOperationItem2.setId(patMedOperationItem.getId());
             patMedOperationItem2.setOpercheckFlag("2");
-            patMedOperationItem2.setRemark("鐢熸垚瀛愪换鍔℃姤閿欏洖婊� 4");
-            patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem2);
+            patMedOperationItem2.setUpdateTime(new Date());
+            patMedOperationItem2.setLongTaskReason("鐢熸垚瀛愪换鍔℃姤閿欏洖婊� 4;");
+            otherVisitFacade.updateOperationItem(patMedOperationItem2);
             e.printStackTrace();
         }
     }
@@ -902,6 +1079,10 @@
     private Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) {
         //灏唒reachformDesc鐨刯son瀵硅薄锛屾斁鍒發ist闆嗗悎涓�
         ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+        if (Objects.isNull(serviceTask)) {
+            log.error("addServiceSubtaskPreachform taskid={} 鏌ヤ笉鍒颁换鍔★紝璺宠繃preachform瀛愯〃鐢熸垚", serviceSubtask.getTaskid());
+            return 0;
+        }
         String preachformDesc = serviceTask.getPreachformDesc();
 
         ObjectMapper objectMapper = new ObjectMapper();
@@ -912,6 +1093,11 @@
                 });
             } catch (JsonProcessingException e) {
                 log.error("preachform杞琇ist<ServiceSubtaskPreachform>鎶ラ敊浜嗭細{}", e.getMessage());
+            }
+            if (CollectionUtils.isEmpty(serviceSubtaskPreachformList)) {
+                log.error("preachformDesc瑙f瀽鍚庝负绌猴紝璺宠繃preachform瀛愯〃鐢熸垚锛宼askid涓猴細{}锛宲reachformDesc涓猴細{}",
+                        serviceSubtask.getTaskid(), preachformDesc);
+                return 0;
             }
             for (ServiceSubtaskPreachform serviceSubtaskPreachform : serviceSubtaskPreachformList) {
                 serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
@@ -936,13 +1122,16 @@
 
 
     //灏佽serviceSubtask
-    private ServiceSubtask boxedServiceSubtask(ServiceTask serviceTask, PatMedInhosp patMedInhosp1, PatArchive patArchive, String config, Integer type) {
+    @Override
+    public ServiceSubtask boxedServiceSubtask(ServiceTask serviceTask, PatMedInhosp patMedInhosp1, PatArchive patArchive, String config, Integer type) {
         //澧炲姞serviceTask鍒ょ┖
 //        if(Objects.isNull(serviceTask)){
 //            return null;
 //        }
         ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class);
         serviceSubtask.setTaskid(serviceTask.getTaskid());
+        serviceSubtask.setOrgid(serviceTask.getOrgid());
+        serviceSubtask.setCampusid(serviceTask.getCampusid());
         if (StringUtils.isNotEmpty(serviceTask.getLibtemplateid()))
             serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid()));
         serviceSubtask.setNurseId(patMedInhosp1.getNurseId());
@@ -974,6 +1163,7 @@
         serviceSubtask.setSex(patArchive.getSex());
         serviceSubtask.setAge(patArchive.getAge());
         serviceSubtask.setSendstate(2L);
+        serviceSubtask.setCampusid(patMedInhosp1.getCampusid());
         serviceSubtask.setManagementDoctor(patMedInhosp1.getManagementDoctor());
         serviceSubtask.setManagementDoctorCode(patMedInhosp1.getManagementDoctorCode());
         serviceSubtask.setStarttime(patMedInhosp1.getStarttime());
@@ -1001,7 +1191,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();
             }
@@ -1050,18 +1240,22 @@
     }
 
     //灏佽serviceSubtask
-    private ServiceSubtask boxedServiceSubtaskForOp(ServiceTask serviceTask, PatMedInhosp patMedInhosp1, PatMedOperation patMedOperation, PatMedOperationItem patMedOperationItem, PatArchive patArchive, String config) {
+    private ServiceSubtask boxedServiceSubtaskForOp(ServiceTask serviceTask, PatMedInhosp patMedInhosp1, PatMedOperationItem patMedOperationItem, PatArchive patArchive, String config) {
         ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class);
         serviceSubtask.setTaskid(serviceTask.getTaskid());
+        serviceSubtask.setOrgid(serviceTask.getOrgid());
+        serviceSubtask.setCampusid(serviceTask.getCampusid());
         if (StringUtils.isNotEmpty(serviceTask.getLibtemplateid()))
             serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid()));
-        serviceSubtask.setNurseId(patMedOperation.getNurseId());
-        serviceSubtask.setNurseName(patMedOperation.getNurseName());
-//        serviceSubtask.setInhospid(patMedInhosp.getInhospid());
-        serviceSubtask.setDrcode(patMedOperation.getDrcode());
-        serviceSubtask.setDrname(patMedOperation.getDrname());
-        serviceSubtask.setDeptcode(patMedOperation.getDeptcode());
-        serviceSubtask.setDeptname(patMedOperation.getDeptname());
+        serviceSubtask.setNurseId(patMedInhosp1.getNurseId());
+        serviceSubtask.setNurseName(patMedInhosp1.getNurseName());
+        serviceSubtask.setInhospid(patMedInhosp1.getInhospid());
+        serviceSubtask.setDrcode(patMedInhosp1.getDrcode());
+        serviceSubtask.setDrname(patMedInhosp1.getDrname());
+        serviceSubtask.setDeptcode(patMedInhosp1.getLeaveldeptcode());
+        serviceSubtask.setDeptname(patMedInhosp1.getLeaveldeptname());
+        serviceSubtask.setLeavehospitaldistrictcode(patMedInhosp1.getLeavehospitaldistrictcode());
+        serviceSubtask.setLeavehospitaldistrictname(patMedInhosp1.getLeavehospitaldistrictname());
 
         serviceSubtask.setTemplateid(serviceTask.getTemplateid());
         serviceSubtask.setTemplatename(serviceTask.getTemplatename());
@@ -1073,35 +1267,36 @@
         serviceSubtask.setSex(patArchive.getSex());
         serviceSubtask.setAge(patArchive.getAge());
         serviceSubtask.setSendstate(2L);
-        serviceSubtask.setManagementDoctor(patMedOperation.getDrname());
-        serviceSubtask.setManagementDoctorCode(patMedOperation.getDrcode());
-//        serviceSubtask.setStarttime(patMedInhosp.getStarttime());
-//        serviceSubtask.setEndtime(patMedInhosp.getEndtime());
+        serviceSubtask.setManagementDoctor(patMedInhosp1.getDrname());
+        serviceSubtask.setManagementDoctorCode(patMedInhosp1.getDrcode());
+
+        serviceSubtask.setStarttime(patMedInhosp1.getStarttime());
+        serviceSubtask.setEndtime(patMedInhosp1.getEndtime());
 
         serviceSubtask.setServiceType(serviceTask.getServiceType());
         serviceSubtask.setPreachform(serviceTask.getPreachform());
         serviceSubtask.setHospType("2");
         serviceSubtask.setCreateTime(new Date());
         serviceSubtask.setUpdateTime(new Date());
-        serviceSubtask.setCreateBy(patMedOperation.getNurseName());
-//        serviceSubtask.setLeavehospitaldistrictcode(patArchive.getLeavehospitaldistrictcode());
-//        serviceSubtask.setLeavehospitaldistrictname(patArchive.getLeavehospitaldistrictname());
+        serviceSubtask.setCreateBy(patMedInhosp1.getNurseName());
         serviceSubtask.setOperationItemId(patMedOperationItem.getId());
         serviceSubtask.setUpdateBy(serviceTask.getUpdateBy());
         serviceSubtask.setUpdateTime(new Date());
 
-        //todo
         //璁剧疆鍙戦�佹椂闂�
         if (serviceTask.getSendDay() == null) serviceTask.setSendDay(1L);
         Date newDate = null;
         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);
+            patMedOperationItem.setOpercheckFlag("2");
+            patMedOperationItem.setLongTaskReason("璇ユ偅鑰呮墜鏈嚭闄㈡椂闂翠负绌�,鎵嬫湳璇︽儏ID涓�:" + patMedOperationItem.getId() + ";");
+            otherVisitFacade.updateOperationItem(patMedOperationItem);
+//            patMedInhosp1.setDeptcheckFlag("2");
+//            patMedInhosp1.setRemark(patMedInhosp1.getRemark() + "& 璇ユ偅鑰呮墜鏈嚭闄㈡椂闂翠负绌�,鍑洪櫌璁板綍ID涓�:" + patMedInhosp1.getInhospid());
+//            inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
             //濡傛灉鍑洪櫌鏃堕棿涓虹┖锛屽垯杩斿洖涓�涓柊瀵硅薄
-            return new ServiceSubtask();
+            return null;
         }
         serviceSubtask.setLongSendTime(newDate);
         serviceSubtask.setVisitTime(newDate);
@@ -1158,7 +1353,7 @@
                         }
                         //鏅畞 鍑洪櫌棣栨锛�7澶╋級闅忚涓�瀹氳鍋�
                         boolean firstVisit = false;
-                        if (serviceSubtask1.getOrgid().equals("47255004333112711A1001") && serviceSubtask1.getVisitCount() != null && serviceSubtask1.getVisitCount() == 1) {
+                        if (serviceSubtask1.getOrgid().equals("47255004333112711A1001")) {
                             firstVisit = true;
                         }
                         if (!firstVisit) {
@@ -1185,11 +1380,15 @@
     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.selectPatMedOperationItemList(pmoi);
+        //姣忔鏌ヨ鍙煡鏈�澶х殑鎵嬫湳绛夌骇璁板綍
+        List<PatMedOperationItem> patMedOperationItems = otherVisitFacade.selectOperationItemListMaxLevel(pmoi);
         log.info("dealOutHospInfo闇�瑕佸鐞嗙殑鍑洪櫌鎵嬫湳鎮h�呬俊鎭細{}", CollectionUtils.isNotEmpty(patMedOperationItems) ? patMedOperationItems.size() : null);
 
         for (PatMedOperationItem opItem : patMedOperationItems) {
@@ -1199,30 +1398,51 @@
                     continue;
                 }
                 // 鏍规嵁鎮h�呯殑鐤剧梾锛岃幏鍙栬鐤剧梾鐨勯暱鏈熶换鍔�
-                ServiceTaskoper serviceTaskoper = new ServiceTaskoper();
-                serviceTaskoper.setLongtask(1L);
-                serviceTaskoper.setOrgid(opItem.getOrgid());
-                serviceTaskoper.setOplevelcode(opItem.getOplevelcode());
+                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> serviceTaskopers = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper);
+
+                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 patMedOperationItem = otherVisitFacade.selectOperationItemById(opItem.getId());
                     patMedOperationItem.setOpercheckFlag("2");
-                    patMedOperationItem.setLongTaskReason(patMedOperationItem.getLongTaskReason() + "鎵�鎮g殑鎵嬫湳鏈厤缃暱鏈熶换鍔�;");
-                    patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem);
+                    patMedOperationItem.setLongTaskReason("鎵�鎮g殑鎵嬫湳鏈厤缃暱鏈熶换鍔�;");
+                    patMedOperationItem.setUpdateTime(new Date());
+                    otherVisitFacade.updateOperationItem(patMedOperationItem);
                 } else {
-                    for (ServiceTaskoper serviceTaskoper1 : serviceTaskopers) {
-                        writeInSubTaskForOp(serviceTaskoper1.getTaskId(), true, opItem, config);
+                    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);
+                otherVisitFacade.updateOperationItem(opItem);
             }
         }
     }
@@ -1233,10 +1453,10 @@
         pmjb.setDiagcheckFlag("0");
         pmjb.setInhospstate("1");
         pmjb.setFuflag("1");
-        List<PatMedInhosp> patMedInhospJBs = patMedInhospMapper.selectPatMedInhospList(pmjb);
+        List<PatMedInhosp> patMedInhospJBs = inhospVisitFacade.selectPatMedInhospList(pmjb);
         log.info("dealOutHospInfo闇�瑕佸鐞嗙殑鍑洪櫌鐤剧梾鎮h�呬俊鎭細{}", CollectionUtils.isNotEmpty(patMedInhospJBs) ? patMedInhospJBs.size() : null);
         for (PatMedInhosp patMedInhosp1 : patMedInhospJBs) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
+            String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid());
             patMedInhosp1.setTagname(tagname);
         }
 
@@ -1246,7 +1466,7 @@
             if (Objects.isNull(patArchive)) {
                 pmiJB.setDiagcheckFlag("2");
                 pmiJB.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
-                patMedInhospMapper.updatePatMedInhosp(pmiJB);
+                inhospVisitFacade.updatePatMedInhosp(pmiJB);
                 continue;
             }
             try {
@@ -1257,7 +1477,7 @@
                 // 鏍规嵁鎮h�呯殑鐤剧梾锛岃幏鍙栬鐤剧梾鐨勯暱鏈熶换鍔�
                 ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
                 serviceTaskdiag.setLongtask(1L);
-                serviceTaskdiag.setServiceType("2");
+//                serviceTaskdiag.setServiceType("2");
                 if (active.equals("nhfy")) {
                     //鍗楀崕闄勪竴鐨刬cd10code鏈夐噸澶嶏紝鎵�浠ョ敤涓昏瘖鏂悕绉板幓鏌ヨ
                     serviceTaskdiag.setIcd10name(pmiJB.getLeavediagname());
@@ -1275,16 +1495,16 @@
 
                 //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
                 if (StringUtils.isNotEmpty(errorIcd)) {
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid());
+                    PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(pmiJB.getInhospid());
                     pmiJB.setDiagcheckFlag("2");
                     pmiJB.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorIcd : errorIcd);
-                    patMedInhospMapper.updatePatMedInhosp(pmiJB);
+                    inhospVisitFacade.updatePatMedInhosp(pmiJB);
                 } else if (CollectionUtils.isEmpty(serviceTaskdiags)) {
                     errorIcd = "璇ユ偅鑰呮墍鎮g柧鐥呮湭閰嶇疆闀挎湡浠诲姟;";
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid());
+                    PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(pmiJB.getInhospid());
                     pmiJB.setDiagcheckFlag("2");
                     pmiJB.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorIcd : errorIcd);
-                    patMedInhospMapper.updatePatMedInhosp(pmiJB);
+                    inhospVisitFacade.updatePatMedInhosp(pmiJB);
                 } else {
                     int flag = 0;
                     for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) {
@@ -1300,10 +1520,10 @@
                     if (flag == 0) {
                         log.error("璇ョ瀹ゆ垨鐥呭尯瀵逛簬鎮h�呮墍鎮g柧鐥呮湭閰嶇疆闀挎湡浠诲姟,鎮h�咃細{}", pmiJB.getInhospid());
                         errorIcd = "璇ョ瀹ゆ垨鐥呭尯瀵逛簬鎮h�呮墍鎮g柧鐥呮湭閰嶇疆闀挎湡浠诲姟;";
-                        PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid());
+                        PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(pmiJB.getInhospid());
                         pmiJB.setDiagcheckFlag("2");
                         pmiJB.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorIcd : errorIcd);
-                        patMedInhospMapper.updatePatMedInhosp(pmiJB);
+                        inhospVisitFacade.updatePatMedInhosp(pmiJB);
                     }
 
                 }
@@ -1313,7 +1533,7 @@
                 log.error("浜哄憳鐤剧梾澶勭悊鍑哄紓甯镐簡锛歿}", e.getMessage());
                 pmiJB.setDiagcheckFlag("2");
                 pmiJB.setLongTaskReason("浜哄憳鐤剧梾澶勭悊寮傚父");
-                patMedInhospMapper.updatePatMedInhosp(pmiJB);
+                inhospVisitFacade.updatePatMedInhosp(pmiJB);
             }
         }
     }
@@ -1324,10 +1544,10 @@
         pmbq.setWardcheckFlag("0");
         pmbq.setInhospstate("1");
         pmbq.setFuflag("1");
-        List<PatMedInhosp> patMedInhospBQs = patMedInhospMapper.selectPatMedInhospList(pmbq);
+        List<PatMedInhosp> patMedInhospBQs = inhospVisitFacade.selectPatMedInhospList(pmbq);
         log.info("dealOutHospInfo闇�瑕佸鐞嗙殑鍑洪櫌鐥呭尯鎮h�呬俊鎭細{}", CollectionUtils.isNotEmpty(patMedInhospBQs) ? patMedInhospBQs.size() : null);
         for (PatMedInhosp patMedInhosp1 : patMedInhospBQs) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
+            String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid());
             patMedInhosp1.setTagname(tagname);
         }
 
@@ -1336,7 +1556,7 @@
             if ("1".equals(pmiBQ1.getLeavehospitaldistrictcode()) && pmiBQ1.getDiagcheckFlag().equals("1")) {
                 pmiBQ1.setWardcheckFlag("2");
                 pmiBQ1.setLongTaskReason("鏍规嵁浜ゅ弶鐢熸垚闅忚浠诲姟瑙勫垯锛岀梾鍖轰换鍔″彲浠ヤ笉鐢ㄧ敓鎴�");
-                patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
+                inhospVisitFacade.updatePatMedInhosp(pmiBQ1);
                 continue;
             }
 
@@ -1345,7 +1565,7 @@
             if (Objects.isNull(patArchive)) {
                 pmiBQ1.setWardcheckFlag("2");
                 pmiBQ1.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
-                patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
+                inhospVisitFacade.updatePatMedInhosp(pmiBQ1);
                 continue;
             }
             try {
@@ -1367,10 +1587,10 @@
                 }
                 //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
                 if (StringUtils.isNotEmpty(errorreason)) {
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiBQ1.getInhospid());
+                    PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(pmiBQ1.getInhospid());
                     pmiBQ1.setWardcheckFlag("2");
                     pmiBQ1.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorreason : errorreason);
-                    patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
+                    inhospVisitFacade.updatePatMedInhosp(pmiBQ1);
                 } else {
                     for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) {
                         writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiBQ1, patArchive, 2, config);
@@ -1382,7 +1602,7 @@
                 log.error("浜哄憳鐥呭尯澶勭悊鍑哄紓甯镐簡锛歿}", e.getMessage());
                 pmiBQ1.setWardcheckFlag("2");
                 pmiBQ1.setLongTaskReason("浜哄憳鐥呭尯澶勭悊寮傚父");
-                patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
+                inhospVisitFacade.updatePatMedInhosp(pmiBQ1);
             }
         }
     }
@@ -1393,10 +1613,10 @@
         pmks.setDeptcheckFlag("0");
         pmks.setInhospstate("1");
         pmks.setFuflag("1");
-        List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks);
+        List<PatMedInhosp> patMedInhosps = inhospVisitFacade.selectPatMedInhospList(pmks);
         log.info("dealOutHospInfo闇�瑕佸鐞嗙殑鍑洪櫌閮ㄩ棬鎮h�呬俊鎭細{}", CollectionUtils.isNotEmpty(patMedInhosps) ? patMedInhosps.size() : null);
         for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
+            String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid());
             patMedInhosp1.setTagname(tagname);
         }
 
@@ -1405,7 +1625,7 @@
             if ("1".equals(patMedInhosp1.getLeavehospitaldistrictcode()) && patMedInhosp1.getDiagcheckFlag().equals("1")) {
                 patMedInhosp1.setDeptcheckFlag("2");
                 patMedInhosp1.setLongTaskReason("鏍规嵁浜ゅ弶鐢熸垚闅忚浠诲姟瑙勫垯锛岄儴闂ㄤ换鍔″彲浠ヤ笉鐢ㄧ敓鎴�");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 continue;
             }
             //鑾峰彇鎮h�呬俊鎭�
@@ -1413,7 +1633,7 @@
             if (Objects.isNull(patArchive)) {
                 patMedInhosp1.setDeptcheckFlag("2");
                 patMedInhosp1.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 continue;
             }
             try {
@@ -1427,10 +1647,10 @@
                 List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
                 //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
                 if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) {
-                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
+                    PatMedInhosp patMedInhosp = inhospVisitFacade.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
                     patMedInhosp1.setDeptcheckFlag("2");
                     patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "璇ユ偅鑰呮墍鍦ㄧ瀹ゆ湭閰嶇疆绂婚櫌闀挎湡浠诲姟;");
-                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                    inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 } else {
                     for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) {
                         writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 1, config);
@@ -1442,7 +1662,7 @@
                 log.error("浜哄憳绉戝澶勭悊鍑哄紓甯镐簡锛歿}", e.getMessage());
                 patMedInhosp1.setDeptcheckFlag("2");
                 patMedInhosp1.setLongTaskReason("浜哄憳绉戝澶勭悊寮傚父");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
             }
         }
     }
@@ -1478,7 +1698,7 @@
         if (StringUtils.isNotEmpty(remark)) {
             updateObj.setRemark(remark + " (type=" + type + ")");
         }
-        patMedInhospMapper.updatePatMedInhosp(updateObj);
+        inhospVisitFacade.updatePatMedInhosp(updateObj);
     }
 
     /**
@@ -1486,22 +1706,14 @@
      * 鏍规嵁鎮h�呯闄㈢瀹ゆ垨鐥呭尯鏌ヨservice_task_rule锛岃幏鍙杁eptRule銆亀radRule銆乨iagRule
      * 鏍规嵁瑙勫垯鍊煎喅瀹氳皟鐢ㄥ摢涓柟娉曠敓鎴愰殢璁夸换鍔�
      */
-    private void addSubTaskByRule(String config) {
-        // 鑾峰彇鎵�鏈夐渶瑕佸鐞嗙殑鍑洪櫌鎮h�咃紙绉戝缁村害鏈鐞嗭級
-        PatMedInhosp pmks = new PatMedInhosp();
-        pmks.setDeptcheckFlag("0");
-        pmks.setInhospstate("1");
-        pmks.setFuflag("1");
-        List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks);
-        log.info("銆愬熀浜庤鍒欍�戦渶瑕佸鐞嗙殑鍑洪櫌鎮h�呬俊鎭細{}", CollectionUtils.isNotEmpty(patMedInhosps) ? patMedInhosps.size() : null);
-
+    private void addSubTaskByRule(String config, List<PatMedInhosp> patMedInhosps) {
         for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
             // 鑾峰彇鎮h�呭熀鏈俊鎭�
             PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
             if (Objects.isNull(patArchive)) {
                 patMedInhosp1.setDeptcheckFlag("2");
                 patMedInhosp1.setLongTaskReason("鎮h�呭熀鏈俊鎭负绌�");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                 continue;
             }
 
@@ -1647,7 +1859,7 @@
                 log.error("銆愬熀浜庤鍒欍�戞偅鑰厈}澶勭悊寮傚父锛歿}", patMedInhosp1.getInhospid(), e.getMessage());
                 patMedInhosp1.setDeptcheckFlag("2");
                 patMedInhosp1.setLongTaskReason("鍩轰簬瑙勫垯澶勭悊寮傚父");
-                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
             }
         }
     }
@@ -1670,12 +1882,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);
@@ -1687,7 +1899,7 @@
             log.error("銆愮瀹や换鍔°�戞偅鑰厈}澶勭悊寮傚父锛歿}", patMedInhosp1.getInhospid(), e.getMessage());
             patMedInhosp1.setDeptcheckFlag("2");
             patMedInhosp1.setLongTaskReason("绉戝浠诲姟澶勭悊寮傚父");
-            patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+            inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
         }
         return generatedCount;
     }
@@ -1718,12 +1930,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);
@@ -1735,7 +1947,7 @@
             log.error("銆愮梾鍖轰换鍔°�戞偅鑰厈}澶勭悊寮傚父锛歿}", patMedInhosp1.getInhospid(), e.getMessage());
             patMedInhosp1.setWardcheckFlag("2");
             patMedInhosp1.setLongTaskReason("鐥呭尯浠诲姟澶勭悊寮傚父");
-            patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+            inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
         }
         return generatedCount;
     }
@@ -1754,14 +1966,14 @@
 
             ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
             serviceTaskdiag.setLongtask(1L);
-            serviceTaskdiag.setServiceType("2");
+//            serviceTaskdiag.setServiceType("2");
             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 {
@@ -1771,10 +1983,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) {
@@ -1790,10 +2002,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) {
@@ -1801,10 +2013,52 @@
             log.error("銆愮柧鐥呬换鍔°�戞偅鑰厈}澶勭悊寮傚父锛歿}", patMedInhosp1.getInhospid(), e.getMessage());
             patMedInhosp1.setDiagcheckFlag("2");
             patMedInhosp1.setLongTaskReason("鐤剧梾浠诲姟澶勭悊寮傚父");
-            patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+            inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
         }
         return generatedCount;
     }
 
+    // ==========================================================================
+    // 鍑哄叆闄㈤殢璁挎ā鍧楀寲锛堢涓�鎵癸級鈥斺�� 3 涓繃娓℃湡鍏ュ彛锛堢函杞彂锛岄浂涓氬姟閫昏緫锛�
+    //
+    // 鈿狅笍 杩� 3 涓柟娉曟槸鍒绘剰鏂板鐨勶紝涓嶆槸璇姞锛�
+    //    瑙� IPatMedInhospService 閲屽悓鍚嶇殑鎺ュ彛澹版槑娉ㄩ噴锛屼互鍙�
+    //    sql/_probe/verify_step16_service_restore.py 鐨� expected_added 鏂█銆�
+    // ==========================================================================
+
+    /**
+     * 銆愯繃娓℃湡鐢ㄣ�戞墜鏈殢璁挎壂鎻� 鈥斺�� 涓� {@link #addOperationSubTask(String)} 瀹屽叏绛変环銆�
+     * <p>
+     * 鈿狅笍 {@code addOperationSubTask} 鍘熷疄鐜拌繑鍥� {@code void}锛屾墍浠ヨ繖閲屾寜"澶勭悊浜� 1 杞�"杩斿洖 1锛�
+     * 浠呯敤浜庢棩蹇楋紱<b>璋冪敤鏂逛笉寰椾緷璧栬杩斿洖鍊肩殑涓氬姟鍚箟</b>銆�
+     */
+    @Override
+    public int runOperationVisit(String config) {
+        addOperationSubTask(config);
+        return 1;
+    }
+
+    /**
+     * 銆愯繃娓℃湡鐢ㄣ�戠瀹ょ淮搴︽湭澶勭悊鐨勫湪闄㈡偅鑰呫��
+     * <p>
+     * 鏉′欢涓庡師 {@code dealOutHospInfo} 绗竴娈垫煡璇㈤�愬瓧涓�鑷达細
+     * {@code deptcheckFlag="0"} + {@code inhospstate="1"} + {@code fuflag="1"}銆�
+     */
+    @Override
+    public List<PatMedInhosp> selectPendingDeptPatientsForVisit() {
+        PatMedInhosp pmks = new PatMedInhosp();
+        pmks.setDeptcheckFlag("0");
+        pmks.setInhospstate("1");
+        pmks.setFuflag("1");
+        return inhospVisitFacade.selectPatMedInhospList(pmks);
+    }
+
+    /**
+     * 銆愯繃娓℃湡鐢ㄣ�戞妸涓�鏉″凡缁勮濂界殑瀛愪换鍔¤惤搴擄紙鍘� {@code serviceSubtaskMapper.insertServiceSubtask}锛夈��
+     */
+    @Override
+    public boolean persistSubtask(ServiceSubtask serviceSubtask) {
+        return serviceSubtaskMapper.insertServiceSubtask(serviceSubtask) == 1;
+    }
 
 }

--
Gitblit v1.9.3