From 3d047130b059efd46f56be37465a751ab16ee8cb Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 11 十一月 2026 14:06:56 +0800
Subject: [PATCH] Merge branch 'smartor_ls_merge' into 20261111-妇幼档案随访

---
 ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java                     |   19 ++
 .gitignore                                                                             |   47 +++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java       |    4 
 ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/domain/row/VisitInhospRow.java   |    9 +
 ruoyi-task/src/main/java/com/ruoyi/task/api/contract/VisitTaskCreateApiImpl.java       |    4 
 ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java    |   96 ++++++++++-
 ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java                      |    8 
 ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml                     |   66 ++++++++
 ruoyi-common/src/main/java/com/ruoyi/common/core/service/dto/VisitSubtaskDraft.java    |   21 ++
 ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml                        |   39 +++-
 smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java            |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java       |   45 ++++-
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java      |   40 ++++
 ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java        |   25 +++
 ruoyi-inhospvisit/src/main/resources/mapper/inhospvisit/VisitInhospMapper.xml          |    4 
 ruoyi-task/src/main/java/com/ruoyi/task/api/contract/OperationSubtaskWriter.java       |    4 
 ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java                  |   11 +
 ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/support/VisitSubtaskFactory.java |    8 +
 18 files changed, 404 insertions(+), 51 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bdbc2a9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,47 @@
+# ==================== 鏋勫缓浜х墿 ====================
+target/
+out/
+*.class
+
+# ==================== IDE / 缂栬緫鍣� ====================
+.idea/
+*.iml
+*.ipr
+*.iws
+.vscode/
+.settings/
+.project
+.classpath
+
+# ==================== 涓存椂鐩綍 ====================
+tmp/
+.tmp/
+_backups/
+recovered/
+__pycache__/
+*.pyc
+
+# ==================== 澶囦唤涓庝复鏃舵枃浠� ====================
+*.bak
+*.bak[0-9]
+*.bak-*
+*.bak[0-9]-*
+*.orig
+*.rej
+*~
+
+# ==================== 涓�娆℃�ф帓鏌ヨ剼鏈� / 鎺㈤拡 / 鏃ュ織锛堜笉鍏ュ簱锛� ====================
+# sql/ 涓嬬殑涓�娆℃�т慨澶嶃�佹帓鏌ャ�佸紑鍏抽厤缃剼鏈粎鏈湴鐣欏瓨锛屼笉鍏ュ簱锛�
+# 浠呬繚鐣欏寘鍐呭熀绾胯剼鏈笌鏂板簱鍒濆鍖栬剼鏈��
+/sql/*.sql
+!/sql/quartz.sql
+!/sql/ry_20220822.sql
+!/sql/pat_specific_archive_generate_config_lishui_mch_20261104.sql
+sql/_probe/
+*.log
+_dbcheck.txt
+package-lock.json
+
+# ==================== 鏈湴涓存椂閰嶇疆 ====================
+ruoyi-admin/src/main/resources/tempfile_*.yml
+ruoyi-admin/src/main/resources/logback-backup.xml
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
index dfa1ef9..3ea1069 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -63,6 +63,12 @@
     @Value("${spring.profiles.active}")
     private String active;
 
+    /**
+     * 绠$悊鍛樼敤鎴稩D鍒楄〃锛堥厤缃」 isAdmin锛夈�傜鐞嗗憳涓嶅彈銆岀敤鎴�-閮ㄩ棬鍏崇郴琛ㄣ�嶉檺鍒讹紝鐩存帴鐪嬫湰鏈烘瀯鍏ㄩ儴绉戝/鐥呭尯銆�
+     */
+    @Value("${isAdmin:1}")
+    private List<Long> isAdmin;
+
 //    @Value("${wx_appid}")
 //    private String wxAppid;
 //
@@ -240,23 +246,43 @@
         ajax.put("user", user);
         ajax.put("roles", roles);
         ajax.put("permissions", permissions);
-        List<SysDept> sysDeptKSs = null;
-        List<SysDept> sysDeptBQs = null;
+        // 绉戝/鐥呭尯涓嬫媺鐨勬暟鎹簮锛�
+        //   路 绠$悊鍛橈紙璐﹀彿 admin锛屾垨鍛戒腑閰嶇疆 isAdmin 鐨勭敤鎴稩D锛夛細鐩存帴鏌� sys_dept 鍙栨湰鏈烘瀯鍏ㄩ儴绉戝/鐥呭尯锛�
+        //     涓嶅啀鍏宠仈 sys_user_dept锛屼篃涓嶆寜闄㈠尯杩囨护鈥斺�旂鐞嗗憳澶╃劧鎷ユ湁鍏ㄩ儴绉戝鏉冮檺锛�
+        //   路 鏅�氱敤鎴凤細浠嶇劧鎸夈�岀敤鎴�-閮ㄩ棬鍏崇郴琛ㄣ�嶅彧杩斿洖鑷繁鍚嶄笅鐨勭瀹�/鐥呭尯锛堜繚鎸佸師閫昏緫锛夈��
         SysUserDept sysUserDept = new SysUserDept();
-        sysUserDept.setUserId(user.getUserId());
-        sysUserDept.setDeptType("1");
         sysUserDept.setOrgid(user.getOrgid());
-        sysUserDept.setCampusid(user.getCampusid());
-        sysDeptKSs = sysDeptService.selectLeafSysDeptListBySysUserDept(sysUserDept);
+        if (!isAdminUser(user)) {
+            sysUserDept.setUserId(user.getUserId());
+            sysUserDept.setCampusid(user.getCampusid());
+        }
+        sysUserDept.setDeptType("1");
+        List<SysDept> sysDeptKSs = sysDeptService.selectLeafSysDeptListBySysUserDept(sysUserDept);
         ajax.put("belongDepts", sysDeptKSs);
         sysUserDept.setDeptType("2");
-        sysDeptBQs = sysDeptService.selectLeafSysDeptListBySysUserDept(sysUserDept);
+        List<SysDept> sysDeptBQs = sysDeptService.selectLeafSysDeptListBySysUserDept(sysUserDept);
         ajax.put("belongWards", sysDeptBQs);
 
         return ajax;
     }
 
     /**
+     * 鏄惁绠$悊鍛橈細璐﹀彿鍚嶄负 admin锛屾垨鐢ㄦ埛ID鍛戒腑閰嶇疆椤� isAdmin銆�
+     * <p>
+     * 绠$悊鍛樺彇绉戝/鐥呭尯鏃朵笉璧� sys_user_dept锛圚IS 閲囬泦鏄庣‘鎺掗櫎 admin锛岃琛ㄩ噷绠$悊鍛樻病鏈夋暟鎹級锛�
+     * 鍚﹀垯浼氬嚭鐜般�岀櫥褰曟垚鍔熶絾绉戝/鐥呭尯涓嬫媺涓虹┖銆嶃��
+     */
+    private boolean isAdminUser(SysUser user) {
+        if (user == null) {
+            return false;
+        }
+        if ("admin".equalsIgnoreCase(user.getUserName())) {
+            return true;
+        }
+        return user.getUserId() != null && isAdmin != null && isAdmin.contains(user.getUserId());
+    }
+
+    /**
      * 鑾峰彇璺敱淇℃伅
      *
      * @return 璺敱淇℃伅
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/dto/VisitSubtaskDraft.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/dto/VisitSubtaskDraft.java
index 42b9ee3..652fd54 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/dto/VisitSubtaskDraft.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/dto/VisitSubtaskDraft.java
@@ -112,6 +112,19 @@
     /** 璇婃柇鍚嶇О */
     private String diagname;
 
+    /**
+     * 閲嶈鎬ф爣璁扮紪鐮侊紙2026-11 鏂板锛夛細鏉ユ簮 {@code pat_med_inhosp.importance_flag_code}锛�
+     * 钀藉簱鍒� {@code service_subtask.importance_flag_code}銆�
+     * <p>
+     * 鍒ゆ柇銆屾棩闂淬�嶅氨鐪嬭繖涓瓧娈碉紙{@code ImportFlagEnum} 鐨� {@code FH0165.01} 鏃ラ棿鎵嬫湳 /
+     * {@code FH0165.02} 鏃ラ棿璇婄枟锛涚幇鍦哄簱瀛樼殑鏄腑鏂囨弿杩般�屾棩闂存墜鏈�嶃�屾棩闂磋瘖鐤椼�嶏紝鍙兘澶氬�硷級銆�
+     * <p>
+     * 鈿狅笍 涓� {@code deptcode}/{@code leaveldeptcode} 閭f壒涓嶅悓锛�<b>涓嶅仛缁村害鏀瑰啓</b>
+     * 锛堝叆闄㈠鏁� type=4/5 涔熺収鏍峰甫鍘熷�硷級锛屽畠鎻忚堪鐨勬槸銆岃繖娆′綇闄㈢殑閲嶈鎬�/鏃ラ棿灞炴�с�嶏紝涓庣瀹ゆ棤鍏炽��
+     * 闂ㄨ瘖閾捐矾锛坽@link OuthospSubtaskDraft}锛夋病鏈夎繖涓潵婧愶紝鎭掍负 {@code null}銆�
+     */
+    private String importanceFlagCode;
+
     // ==================== 妯℃澘锛堝師 serviceTask锛� ====================
     /** 闂嵎妯℃澘ID */
     private Long templateid;
@@ -517,6 +530,14 @@
         this.diagname = diagname;
     }
 
+    public String getImportanceFlagCode() {
+        return importanceFlagCode;
+    }
+
+    public void setImportanceFlagCode(String importanceFlagCode) {
+        this.importanceFlagCode = importanceFlagCode;
+    }
+
     public Long getTemplateid() {
         return templateid;
     }
diff --git a/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/domain/row/VisitInhospRow.java b/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/domain/row/VisitInhospRow.java
index dad720e..fb4b77a 100644
--- a/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/domain/row/VisitInhospRow.java
+++ b/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/domain/row/VisitInhospRow.java
@@ -545,7 +545,14 @@
     private String outWayName;
     /** 杩囨护锛氬氨璇婃潵婧怚D */
     private String encounterSourceId;
-    /** 杩囨护锛氶噸瑕佺▼搴︿唬鐮� */
+    /**
+     * 閲嶈鎬ф爣璁帮紙2026-11 璧�<b>涓嶅啀鍙槸杩囨护鏉′欢</b>锛歿@code selectForScan} / {@code selectByInhospid}
+     * 宸茬粡鎶� {@code b.importance_flag_code} 鏌ュ嚭鏉ワ紝寤哄瓙浠诲姟鏃跺師鏍峰甫缁� {@code service_subtask}锛夈��
+     * <p>
+     * 鍙栧�硷細鐜板満搴撳瓨涓枃鎻忚堪锛堛�屾棩闂存墜鏈�嶃�屾棩闂磋瘖鐤椼�嶃�屾棤銆嶃�岀壒绾︿汉鍛樸�嶃�岀浼戜汉鍛樸�嶏紝鍙兘閫楀彿澶氬�硷級锛�
+     * 涔熸湁搴撴寜 {@code ImportFlagEnum} 瀛� {@code FH0165.01} / {@code FH0165.02} 绛夌紪鐮併��
+     * 鍒ゆ柇銆屾棩闂淬�嶅氨鍒ゆ柇瀹� 鈥斺�� 鏈被鍙礋璐f惉杩愶紝涓嶅仛鍊煎煙褰掍竴銆�
+     */
     private String importanceFlagCode;
     /** 杩囨护锛氭�ヨ瘖鍒嗙骇浠g爜 */
     private String emergencyLevelCode;
diff --git a/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/support/VisitSubtaskFactory.java b/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/support/VisitSubtaskFactory.java
index a130624..e1f5e22 100644
--- a/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/support/VisitSubtaskFactory.java
+++ b/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/support/VisitSubtaskFactory.java
@@ -146,6 +146,12 @@
         d.setDeptname(inhosp.getDeptname());
         d.setHospitaldistrictcode(inhosp.getHospitaldistrictcode());
         d.setHospitaldistrictname(inhosp.getHospitaldistrictname());
+        // ---- 2026-11 鏂板锛氶噸瑕佹�ф爣璁帮紙鍚�屾棩闂淬�嶏級鍘熸牱甯﹁蛋 ----
+        //   鑳屾櫙锛氬垽鏂棩闂村氨鐪� pat_med_inhosp.importance_flag_code锛堢幇鍦哄簱瀛樹腑鏂囨弿杩�
+        //         銆屾棩闂存墜鏈�嶃�屾棩闂磋瘖鐤椼�嶏紝涔熸湁搴撴寜 ImportFlagEnum 瀛� FH0165.01/02锛夈��
+        //   瀛愪换鍔¤惤涓�浠斤紝闅忚鍒楄〃灏辫兘鐩存帴鎸夈�屾棩闂淬�嶇瓫锛屼笉鐢ㄦ瘡琛屽洖鏌ヤ綇闄㈢櫥璁拌〃銆�
+        //   鍙e緞锛氬師鏍锋嫹璐濄�佷笉鍋氬�煎煙褰掍竴锛涗笉闅� type 4/5 鏀瑰啓锛堜笌绉戝/鐥呭尯缁村害鏃犲叧锛夈��
+        d.setImportanceFlagCode(inhosp.getImportanceFlagCode());
         // ---- 鍘� L1128-1134锛歵ype 4/5 鏀圭敤鍏ラ櫌缁村害 ----
         if (type != null && (type == 4 || type == 5)) {
             d.setLeaveldeptcode(inhosp.getDeptcode());
@@ -308,6 +314,8 @@
         d.setHospitaldistrictname(inhosp.getHospitaldistrictname());
         d.setLeavehospitaldistrictcode(inhosp.getLeavehospitaldistrictcode());
         d.setLeavehospitaldistrictname(inhosp.getLeavehospitaldistrictname());
+        // 2026-11锛氶噸瑕佹�ф爣璁帮紙鍚�屾棩闂淬�嶏級鍘熸牱甯﹁蛋锛堝彛寰勫悓 boxedServiceSubtask锛�
+        d.setImportanceFlagCode(inhosp.getImportanceFlagCode());
         // ---- 鍘� L1242-1251 ----
         d.setTemplateid(serviceTask.getTemplateid());
         d.setTemplatename(serviceTask.getTemplatename());
diff --git a/ruoyi-inhospvisit/src/main/resources/mapper/inhospvisit/VisitInhospMapper.xml b/ruoyi-inhospvisit/src/main/resources/mapper/inhospvisit/VisitInhospMapper.xml
index 501942c..d68321d 100644
--- a/ruoyi-inhospvisit/src/main/resources/mapper/inhospvisit/VisitInhospMapper.xml
+++ b/ruoyi-inhospvisit/src/main/resources/mapper/inhospvisit/VisitInhospMapper.xml
@@ -74,6 +74,8 @@
         <result property="longTaskReason" column="long_task_reason"/>
         <result property="remark" column="remark"/>
         <result property="medicalCode" column="medical_code"/>
+        <!-- 2026-11锛氶噸瑕佹�ф爣璁扮紪鐮侊紙鏃ラ棿鎵嬫湳/鏃ラ棿璇婄枟/鏃犫�︼級锛屽缓瀛愪换鍔℃椂鍘熸牱甯︾粰 service_subtask -->
+        <result property="importanceFlagCode" column="importance_flag_code"/>
     </resultMap>
 
     <!--
@@ -125,6 +127,7 @@
         b.fuflag,
         b.fudate,
         b.remark,
+        b.importance_flag_code,
         b.medical_code
         FROM
         pat_med_inhosp b
@@ -337,6 +340,7 @@
                leaveldeptname,
                leavehospitaldistrictcode,
                leavehospitaldistrictname,
+               importance_flag_code,
                campusid
         from pat_med_inhosp
         where inhospid = #{inhospid}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
index 213b376..60a6159 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -334,6 +334,10 @@
 
     public List<SysDept> selectLeafSysDeptListBySysUserDept(SysUserDept sysUserDept){
         List<SysDept> list =  deptMapper.selectSysDeptListBySysUserDept(sysUserDept);
+        // userId 涓虹┖ = 绠$悊鍛樺彇鏈満鏋勫叏閲忕瀹�/鐥呭尯锛氳銆屽叏閮ㄣ�嶏紝涓嶈兘鍐嶆寜鍙跺瓙鑺傜偣杩囨护鎺夌埗绾ч儴闂�
+        if (sysUserDept != null && sysUserDept.getUserId() == null) {
+            return list == null ? new ArrayList<>() : list;
+        }
         if(CollectionUtils.isNotEmpty(list)){
             list = TreeUtils.getLeafDepts(list);
         }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 29b434b..f8a826b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -146,7 +146,10 @@
             deptIds.add(sysDept.getDeptId());
         }
         SysUserDept sysUserDept = new SysUserDept();
-        sysUserDept.setUserId(sysUser.getUserId());
+        // 绠$悊鍛橈細涓嶆寜鐢ㄦ埛杩囨护锛坰ys_user_dept 閲屾病鏈� admin 鐨勬暟鎹級锛岀洿鎺ュ彇鏈満鏋勫叏閮ㄧ瀹�/鐥呭尯
+        if (!isAdminUser(sysUser)) {
+            sysUserDept.setUserId(sysUser.getUserId());
+        }
         sysUserDept.setDeptType(sysUser.getSearchscope());
         sysUserDept.setOrgid(sysUser.getOrgid());
         List<SysUserDept> sysUserDeptKSs = null;
@@ -201,7 +204,7 @@
         if (sysUser.getUserType().equals("鎮h��") && StringUtils.isNotEmpty(split[3]) && !split[3].equals("null") && !sysUser.getUserType().equals(split[3].trim()))
             throw new BaseException("褰撳墠鐢ㄦ埛绫诲瀷涓庣櫥褰曠敤鎴风被鍨嬩笉涓�鑷�");
 
-        boolean isAdmin = StringUtils.isNotEmpty(split[0]) && "admin".equals(split[0]);
+        boolean isAdmin = isAdminUser(sysUser);
         IUserExtInfoService userExtInfoService = SpringUtils.getBean(IUserExtInfoService.class);
         Executor executor = SpringUtils.getBean("threadPoolTaskExecutor");
 
@@ -220,7 +223,7 @@
         // 绛夊緟鏈烘瀯淇℃伅
         Map<String, String> userOrgInfo = new HashMap<>();
         try {
-            userOrgInfo = orgInfoFuture.get(5, TimeUnit.SECONDS);
+            userOrgInfo = orgInfoFuture.get(50, TimeUnit.SECONDS);
         } catch (Exception e) {
             log.warn("鑾峰彇鐢ㄦ埛鏈烘瀯淇℃伅瓒呮椂鎴栧紓甯�", e);
         }
@@ -258,8 +261,8 @@
                     CompletableFuture<List<SysDept>> ksFuture = CompletableFuture.supplyAsync(() -> selectLeafSysDeptForAdmin(deptKS), executor);
                     CompletableFuture<List<SysDept>> bqFuture = CompletableFuture.supplyAsync(() -> selectLeafSysDeptForAdmin(deptBQ), executor);
                     try {
-                        sysUserDeptKSs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(ksFuture.get(5, TimeUnit.SECONDS), SysUserDept.class));
-                        sysUserDeptBQs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(bqFuture.get(5, TimeUnit.SECONDS), SysUserDept.class));
+                        sysUserDeptKSs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(ksFuture.get(50, TimeUnit.SECONDS), SysUserDept.class));
+                        sysUserDeptBQs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(bqFuture.get(50, TimeUnit.SECONDS), SysUserDept.class));
                     } catch (Exception e) {
                         log.warn("鑾峰彇admin绉戝/鐥呭尯淇℃伅瓒呮椂鎴栧紓甯�", e);
                     }
@@ -358,6 +361,23 @@
             log.warn("鑾峰彇婊℃剰搴﹀垎绫诲け璐ワ紝宸查檷绾т负绌虹粨鏋滐紙涓嶅奖鍝嶇櫥褰曪級銆俹rgid={}", orgid, e);
             return Collections.emptyMap();
         }
+    }
+
+    /**
+     * 鏄惁绠$悊鍛橈細璐﹀彿鍚嶄负 admin锛屾垨鐢ㄦ埛ID鍛戒腑閰嶇疆椤� isAdmin銆�
+     * <p>
+     * 绠$悊鍛樺彇绉戝/鐥呭尯鏃朵笉鎸� sys_user_dept 杩囨护鈥斺�擧IS 閲囬泦鍐欒琛ㄦ椂鏄庣‘鎺掗櫎浜� admin
+     * 锛圕ollectHISMapper 鐨� yhyksxx/yhybfxx 閮芥湁 {@code ud.user_id != 'admin'}锛夛紝
+     * 璧板叧鑱旀煡璇細寰楀埌绌哄垪琛紝琛ㄧ幇涓恒�岀櫥褰曟垚鍔熶絾鍒涘缓浠诲姟鏃堕�変笉鍒扮瀹ょ梾鍖恒�嶃��
+     */
+    private boolean isAdminUser(SysUser sysUser) {
+        if (sysUser == null) {
+            return false;
+        }
+        if ("admin".equalsIgnoreCase(sysUser.getUserName())) {
+            return true;
+        }
+        return sysUser.getUserId() != null && isAdmin != null && isAdmin.contains(sysUser.getUserId());
     }
 
     /**
@@ -1022,8 +1042,11 @@
 
     public List<SysUserDept> selectLeafSysDeptList(SysUserDept sysUserDept){
         List<SysDept> list =  sysDeptMapper.selectSysDeptListBySysUserDept(sysUserDept);
-        if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)){
-            list = TreeUtils.getLeafDepts(list);
+        // userId 涓虹┖ = 绠$悊鍛樺彇鏈満鏋勫叏閲忥細瑕併�屾墍鏈夌瀹ょ梾鍖恒�嶏紝涓嶈兘鍐嶆寜鍙跺瓙鑺傜偣杩囨护
+        if (sysUserDept == null || sysUserDept.getUserId() != null) {
+            if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)){
+                list = TreeUtils.getLeafDepts(list);
+            }
         }
         List<SysUserDept> list1 = DtoConversionUtils.sourceToTarget(list, SysUserDept.class);
         return list1;
@@ -1031,11 +1054,9 @@
 
     public List<SysDept> selectLeafSysDeptForAdmin(SysDept sysDept){
         SysUserDept sysUserDept = DtoConversionUtils.sourceToTarget(sysDept, SysUserDept.class);
-        List<SysDept> list =  sysDeptMapper.selectSysDeptListBySysUserDept(sysUserDept);
-        if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)){
-            list = TreeUtils.getLeafDepts(list);
-        }
-        return list;
+        // 绠$悊鍛樺垎鏀細sysUserDept 涓嶅甫 userId锛宮apper 浼氱洿鎺ユ煡 sys_dept锛堜笉鍏宠仈 sys_user_dept锛夛紝
+        // 杩斿洖鏈満鏋勫叏閮ㄧ瀹�/鐥呭尯锛涜繖閲屼笉鍐嶅仛鍙跺瓙杩囨护锛屽惁鍒欍�屾墍鏈夌瀹ょ梾鍖恒�嶄細琚爫鎺夌埗绾ч儴闂ㄣ��
+        return sysDeptMapper.selectSysDeptListBySysUserDept(sysUserDept);
     }
 
     /**
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
index 225eac3..cf4e077 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -283,17 +283,36 @@
         where dept_id = #{deptId}
     </delete>
 
+    <!--
+        鏌ヨ绉戝/鐥呭尯锛�
+          路 userId 鏈夊�硷紙鏅�氱敤鎴� / 鐢ㄦ埛缂栬緫椤碉細鏌ユ煇涓敤鎴峰悕涓嬬殑閮ㄩ棬锛夆啋 鍏宠仈 sys_user_dept锛�
+          路 userId 涓虹┖锛堢鐞嗗憳锛氱湅鏈満鏋勫叏閮ㄧ瀹�/鐥呭尯锛夆啋 鍙煡 sys_dept锛屼笉鍏宠仈鍏崇郴琛ㄣ��
+        涓轰粈涔堣鍒嗘敮锛欻IS 閲囬泦鍐� sys_user_dept 鏃舵槑纭帓闄や簡 admin锛圕ollectHISMapper 鐨�
+        yhyksxx/yhybfxx 閮芥湁 ud.user_id != 'admin'锛夛紝绠$悊鍛樺湪鍏崇郴琛ㄩ噷娌℃湁鏁版嵁锛岃蛋 inner join
+        浼氬緱鍒扮┖鍒楄〃锛岃〃鐜板氨鏄�岀櫥褰曟垚鍔熶絾鍒涘缓浠诲姟鏃堕�変笉鍒扮瀹ょ梾鍖恒�嶃��
+        鍙﹀涓嶅仛闄㈠尯杩囨护锛堢鐞嗗憳璺ㄩ櫌鍖猴級锛岄櫌鍖洪殧绂诲彧瀵规櫘閫氱敤鎴风敓鏁堛��
+    -->
     <select id="selectSysDeptListBySysUserDept" parameterType="com.ruoyi.common.core.domain.entity.SysUserDept"
             resultMap="SysDeptResult">
-        <include refid="selectDeptVo"/>
-        inner join sys_user_dept ud
-        on d.dept_code = ud.dept_code
-        where 1=1
-        and d.del_flag = 0
-        and ud.del_flag = 0
-        <if test="orgid != null">and d.orgid = #{orgid} and ud.orgid = #{orgid}</if>
-        <if test="campusid != null">and d.campusid = #{campusid}</if>
-        <if test="userId != null">and ud.user_id = #{userId}</if>
-        <if test="deptType != null and deptType != ''">and d.dept_type = #{deptType}</if>
+        <choose>
+            <when test="userId != null">
+                <include refid="selectDeptVo"/>
+                inner join sys_user_dept ud
+                on d.dept_code = ud.dept_code
+                where 1=1
+                and d.del_flag = 0
+                and ud.del_flag = 0
+                <if test="orgid != null">and d.orgid = #{orgid} and ud.orgid = #{orgid}</if>
+                <if test="campusid != null">and d.campusid = #{campusid}</if>
+                <if test="deptType != null and deptType != ''">and d.dept_type = #{deptType}</if>
+                and ud.user_id = #{userId}
+            </when>
+            <otherwise>
+                <include refid="selectDeptVo"/>
+                where d.del_flag = 0
+                <if test="orgid != null">and d.orgid = #{orgid}</if>
+                <if test="deptType != null and deptType != ''">and d.dept_type = #{deptType}</if>
+            </otherwise>
+        </choose>
     </select>
 </mapper>
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/OperationSubtaskWriter.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/OperationSubtaskWriter.java
index bb0f11a..a302570 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/OperationSubtaskWriter.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/OperationSubtaskWriter.java
@@ -485,6 +485,8 @@
         serviceSubtask.setLeaveldeptname(patMedInhosp1.getLeaveldeptname());
         serviceSubtask.setLeavehospitaldistrictcode(patMedInhosp1.getLeavehospitaldistrictcode());
         serviceSubtask.setLeavehospitaldistrictname(patMedInhosp1.getLeavehospitaldistrictname());
+        // 2026-11锛氶噸瑕佹�ф爣璁帮紙鍚�屾棩闂淬�嶏級闅忎换鍔¤蛋锛屼究浜庡瓙浠诲姟鍒楄〃鐩存帴鎸夋棩闂寸瓫閫�
+        serviceSubtask.setImportanceFlagCode(patMedInhosp1.getImportanceFlagCode());
 
         serviceSubtask.setTemplateid(serviceTask.getTemplateid());
         serviceSubtask.setTemplatename(serviceTask.getTemplatename());
@@ -620,6 +622,8 @@
         serviceSubtask.setLeaveicd10code(patMedInhosp1.getLeaveicd10code());
         serviceSubtask.setLeavediagname(patMedInhosp1.getLeavediagname());
         serviceSubtask.setDiagname(patMedInhosp1.getDiagname());
+        // 2026-11锛氶噸瑕佹�ф爣璁帮紙鍚�屾棩闂淬�嶏級闅忎换鍔¤蛋锛堝彛寰勫悓涓婏級
+        serviceSubtask.setImportanceFlagCode(patMedInhosp1.getImportanceFlagCode());
         serviceSubtask.setTemplateid(serviceTask.getTemplateid());
         serviceSubtask.setTemplatename(serviceTask.getTemplatename());
         serviceSubtask.setPatid(patArchive.getId());
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/VisitTaskCreateApiImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/VisitTaskCreateApiImpl.java
index 07bebac..470867b 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/VisitTaskCreateApiImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/VisitTaskCreateApiImpl.java
@@ -285,6 +285,10 @@
         e.setLeaveicd10code(d.getLeaveicd10code());
         e.setLeavediagname(d.getLeavediagname());
         e.setDiagname(d.getDiagname());
+        // 2026-11锛氶噸瑕佹�ф爣璁扮紪鐮侊紙鏃ラ棿鎵嬫湳/鏃ラ棿璇婄枟/鏃犫�︼級锛屾潵鑷� pat_med_inhosp.importance_flag_code銆�
+        // 鍙湁銆屽嚭鍏ラ櫌闅忚銆嶉摼璺細濉�硷紙VisitSubtaskFactory锛夛紱闂ㄨ瘖/鎵嬫湳绛夎崏绋块噷涓� null 鈫�
+        // insert 鐨勬潯浠跺垪鐩存帴璺宠繃锛屼笌鏀归�犲墠杩欎簺鍒椾笉鍐欑殑鏁堟灉涓�鑷淬��
+        e.setImportanceFlagCode(d.getImportanceFlagCode());
         e.setTemplateid(d.getTemplateid());
         e.setTemplatename(d.getTemplatename());
         e.setLibtemplateid(d.getLibtemplateid());
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java
index 5847cf4..9cf60da 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java
@@ -708,6 +708,25 @@
     private String diagType;
 
     /**
+     * 閲嶈鎬ф爣璁扮紪鐮侊紙2026-11 鏂板锛�<b>寤轰换鍔℃椂浠� {@code pat_med_inhosp.importance_flag_code} 鍚屾</b>锛夈��
+     * <p>
+     * 涓轰粈涔堝悓姝ワ細鍒ゆ柇銆屾棩闂淬�嶅氨鐪嬭繖涓瓧娈碉紝鑰� service_subtask 涓婂彧鏈� {@code inhospid}锛�
+     * 涓嶈惤涓�浠界殑璇濇寜銆屾棩闂淬�嶇瓫瀛愪换鍔℃瘡琛岄兘瑕佸洖鏌ヤ綇闄㈢櫥璁拌〃锛圝OIN / 瀛愭煡璇級锛屽垪琛ㄤ笌缁熻閮藉彉鎱€��
+     * <p>
+     * 鍙栧�兼槸<b>鍘熸牱鎷疯礉</b>锛屼笉鍦ㄦ湰琛ㄥ仛褰掍竴锛�
+     * <ul>
+     *   <li>鏋氫妇缂栫爜鍙e緞锛坽@code ImportFlagEnum}锛夛細{@code FH0165.01} 鏃ラ棿鎵嬫湳銆亄@code FH0165.02} 鏃ラ棿璇婄枟銆�
+     *       {@code FH0165.03} 鏃犮�亄@code FH0165.98} 鐗圭害浜哄憳銆亄@code FH0165.99} 绂讳紤浜哄憳锛�</li>
+     *   <li>鐜板満涔熸湁瀛�<b>涓枃鎻忚堪</b>鐨勫簱锛堛�屾棩闂存墜鏈�嶃�屾棩闂磋瘖鐤椼�嶁�︼級锛岃繕瀛樺湪閫楀彿澶氬�硷紙濡� {@code 鏃�,鏃ラ棿鎵嬫湳}锛夈��</li>
+     * </ul>
+     * 鎵�浠ユ煡璇晶鎻愪緵銆岀簿纭�笺�嶅拰銆岄泦鍚� IN銆嶄袱绉嶆潯浠讹紝瑙� {@code serviceSubtaskWhere}銆�
+     * <p>
+     * 鈿狅笍 杩欐槸<b>寤轰换鍔¢偅涓�鍒荤殑蹇収</b>锛氫箣鍚庝綇闄㈣褰曟敼浜嗘爣璁帮紝涓嶄細鑷姩鍥炲啓宸叉湁瀛愪换鍔°��
+     */
+    @ApiModelProperty(value = "閲嶈鎬ф爣璁扮紪鐮侊紙鏃ラ棿鎵嬫湳/鏃ラ棿璇婄枟/鏃�/鐗圭害浜哄憳/绂讳紤浜哄憳锛屾垨 FH0165.xx锛�")
+    private String importanceFlagCode;
+
+    /**
      * 寮�濮嬪嚭闄㈡棩鏈�
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java
index f11c202..0e0cf34 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java
@@ -243,6 +243,17 @@
     private String deptname;
 
     /**
+     * 閲嶈鎬ф爣璁扮紪鐮侊紙2026-11 鏂板锛夛細寤轰换鍔℃椂浠� {@code pat_med_inhosp.importance_flag_code} 鍚屾锛�
+     * 鍒楄〃鎺ュ彛鍘熸牱杩斿洖銆�
+     * <p>
+     * 鍒ゆ柇銆屾棩闂淬�嶇湅杩欓噷锛歿@code ImportFlagEnum} 鐨� {@code FH0165.01}锛堟棩闂存墜鏈級/
+     * {@code FH0165.02}锛堟棩闂磋瘖鐤楋級锛涚幇鍦哄簱瀛樼殑鏄腑鏂囨弿杩般�屾棩闂存墜鏈�嶃�屾棩闂磋瘖鐤椼�嶏紝
+     * 杩樺彲鑳藉嚭鐜� {@code 鏃�,鏃ラ棿鎵嬫湳} 杩欑被澶氬�� 鈥斺�� 鎵�浠ュ墠绔埆鐢ㄧ瓑鍊煎垽鏂紝鎸夈�屽寘鍚�嶅尮閰嶃��
+     */
+    @ApiModelProperty(value = "閲嶈鎬ф爣璁扮紪鐮侊紙鏃ラ棿鎵嬫湳/鏃ラ棿璇婄枟/鏃�/鐗圭害浜哄憳/绂讳紤浜哄憳锛�")
+    private String importanceFlagCode;
+
+    /**
      * 鏅氫笂寮�濮嬪彂閫佹椂闂撮檺鍒�
      */
     @Excel(name = " 鏅氫笂寮�濮嬪彂閫佹椂闂撮檺鍒� ")
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java
index b2a7d01..01da61f 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java
@@ -70,9 +70,9 @@
     private List<String> leavehospitaldistrictcodes;
 
     /**
-     * 鍑洪櫌鐥呭尯缂栧彿
+     * 鍑洪櫌閮ㄩ棬缂栧彿闆嗗悎锛堢偣浣嶇紪鍙凤級
      */
-    @ApiModelProperty(value = "鍑洪櫌閮ㄩ棬缂栧彿闆嗗悎")
+    @ApiModelProperty(value = "鍑洪櫌閮ㄩ棬缂栧彿闆嗗悎锛堢偣浣嶇紪鍙凤級")
     private List<String> leaveldeptcodes;
 
     /**
@@ -468,8 +468,8 @@
     /**
      * 閫傜敤鏉′欢绫诲瀷锛�1銆佹寜绉戝銆�2銆佹寜鐥呭尯銆�3銆佹寜鐤剧梾璇婃柇銆�4銆佹寜鎵嬫湳绫诲瀷銆�5銆佹寜浠诲姟缁�
      */
-    @ApiModelProperty("閫傜敤鏉′欢绫诲瀷锛�1銆佹寜绉戝銆�2銆佹寜鐥呭尯銆�3銆佹寜鐤剧梾璇婃柇銆�4銆佹寜鎵嬫湳绫诲瀷銆�5銆佹寜浠诲姟缁�  6.鎸夎嵂鍝佺紪鐮�")
-    @Excel(name = "閫傜敤鏉′欢绫诲瀷锛�1銆佹寜绉戝銆�2銆佹寜鐥呭尯銆�3銆佹寜鐤剧梾璇婃柇銆�4銆佹寜鎵嬫湳绫诲瀷銆�5銆佹寜浠诲姟缁� 6.鎸夎嵂鍝佺紪鐮�" )
+    @ApiModelProperty("閫傜敤鏉′欢绫诲瀷锛�1銆佹寜绉戝銆�2銆佹寜鐥呭尯銆�3銆佹寜鐤剧梾璇婃柇銆�4銆佹寜鎵嬫湳绫诲瀷銆�5銆佹寜浠诲姟缁�  6.鎸夎嵂鍝佺紪鐮�  7.鎸夌偣浣嶏紙鍚屽痉闇�姹傦級")
+    @Excel(name = "閫傜敤鏉′欢绫诲瀷锛�1銆佹寜绉戝銆�2銆佹寜鐥呭尯銆�3銆佹寜鐤剧梾璇婃柇銆�4銆佹寜鎵嬫湳绫诲瀷銆�5銆佹寜浠诲姟缁� 6.鎸夎嵂鍝佺紪鐮�   7.鎸夌偣浣嶏紙鍚屽痉闇�姹傦級" )
     private String appltype;
 
     @ApiModelProperty(value = "闅忚閮ㄩ棬缂栫爜")
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java
index a71dadc..ad6ad32 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java
@@ -732,6 +732,31 @@
     private String managementDoctor;
 
     /**
+     * 閲嶈鎬ф爣璁扮紪鐮侊紙2026-11 鏂板锛�<b>鏌ヨ鏉′欢</b>锛夛細绮剧‘鍖归厤銆�
+     * <p>
+     * 瀵瑰簲 {@code service_subtask.importance_flag_code}锛氬缓浠诲姟鏃朵粠
+     * {@code pat_med_inhosp.importance_flag_code} 鍘熸牱鍚屾銆�
+     * 鏋氫妇瑙� {@code com.ruoyi.common.enums.ImportFlagEnum}
+     * 锛坽@code FH0165.01} 鏃ラ棿鎵嬫湳銆亄@code FH0165.02} 鏃ラ棿璇婄枟鈥︼級锛�
+     * 鐜板満搴撲篃鍙兘瀛樹腑鏂囨弿杩般��
+     */
+    @ApiModelProperty(value = "閲嶈鎬ф爣璁扮紪鐮侊紙绮剧‘鍖归厤锛屽 FH0165.01 / 鏃ラ棿鎵嬫湳锛�")
+    private String importanceFlagCode;
+
+    /**
+     * 閲嶈鎬ф爣璁扮紪鐮侀泦鍚堬紙鏌ヨ鏉′欢锛夛細{@code IN} 鍖归厤锛岀敤浜庛�屾棩闂淬�嶈繖绫�
+     * 銆岃鍚屾椂鍛戒腑澶氫釜鍙栧�笺�嶇殑鍦烘櫙銆�
+     * <p>
+     * 渚嬶細鍙湅鏃ラ棿 鈫� {@code ["鏃ラ棿鎵嬫湳","鏃ラ棿璇婄枟"]}锛堜腑鏂囨弿杩板彛寰勶級鎴�
+     * {@code ["FH0165.01","FH0165.02"]}锛堟灇涓剧紪鐮佸彛寰勶級銆�
+     * <p>
+     * 鈿狅笍 绛夊��/IN 閮藉尮閰嶄笉鍒伴�楀彿澶氬�硷紙濡� {@code 鏃�,鏃ラ棿鎵嬫湳}锛夛紱杩欑被鏁版嵁鏋佸皯锛�
+     * 闇�瑕佹椂璇风敤 {@code find_in_set} 鍗曠嫭鍐� SQL锛屽埆鎶婅涔夊杩涜繖涓瓧娈点��
+     */
+    @ApiModelProperty(value = "閲嶈鎬ф爣璁扮紪鐮侀泦鍚堬紙IN 鍖归厤锛岀敤浜庝竴娆$瓫澶氫釜鏍囪锛�")
+    private List<String> importanceFlagCodes;
+
+    /**
      * 寮�濮嬪嚭闄㈡棩鏈�
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
index 3ed3fd6..15440e7 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
@@ -1608,6 +1608,61 @@
     }
 
     /**
+     * 鍙栭�楀彿涓查噷鐨勭涓�涓�硷紙浠诲姟涓婄瀹�/鐥呭尯鏄閫夛紝鑰� {@code service_subtask} 涓婇兘鏄崟鍊煎垪锛夈��
+     */
+    private String firstValue(String value) {
+        if (StringUtils.isEmpty(value)) {
+            return null;
+        }
+        for (String item : value.split(",")) {
+            if (StringUtils.isNotEmpty(item.trim())) {
+                return item.trim();
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 浠诲姟閰嶇疆锛坽@link ServiceTaskVO}锛夆啋 瀛愪换鍔★紙{@link ServiceSubtask}锛夌殑瀛楁鎼繍銆�
+     * <p>
+     * <b>涓轰粈涔堜笉鑳界洿鎺� {@code DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class)}锛�</b>
+     * 瀹冩槸绾悓鍚嶆嫹璐濓紝鑰屼袱杈瑰悓鍚嶇殑 {@code deptcode / deptname} <b>璇箟涓嶅悓</b>锛�
+     * <ul>
+     *   <li>{@code ServiceTaskVO.deptcode / deptname} = 浠诲姟鐨勩�岄�傜敤绉戝銆嶏紝
+     *       鍑洪櫌闅忚锛坰erviceType=2锛�/ 鍑洪櫌瀹f暀锛�4锛�/ 闂ㄨ瘖闅忚锛�3锛夌瓑鍦烘櫙涓嬪氨鏄�<b>绂婚櫌绉戝</b>锛�</li>
+     *   <li>{@code ServiceSubtask.deptcode / deptname} = <b>鍦ㄩ櫌绉戝</b>
+     *       锛�2026-11 鐢卞師 sendlimitpbegin/pend 澶嶇敤鑰屾潵锛岃 {@code ServiceSubtask} 瀛楁娉ㄩ噴锛夈��</li>
+     * </ul>
+     * 浜庢槸绾悓鍚嶆嫹璐濅細鎶娿�岀闄㈢瀹ゃ�嶅啓杩涖�屽湪闄㈢瀹ゃ�嶅垪锛屽悗鏋滄湁涓や釜锛�
+     * <ol>
+     *   <li>鎸夊湪闄㈢淮搴︾瓫锛坽@code deptcodes} 鈫� {@code service_subtask.deptcode}锛変細璇懡涓繖浜涘瓙浠诲姟锛�</li>
+     *   <li>鎸夌闄㈢淮搴︾瓫锛坽@code leaveldeptcodes} 鈫� {@code service_subtask.leaveldeptcode}锛夋椂锛�
+     *       鎮h�呰嚜宸辨病甯︾瀹ょ殑閭d簺锛堝墠绔墜鍔ㄥ嬀閫夋偅鑰呭緢甯歌锛変細鍥犱负 {@code leaveldeptcode} 涓虹┖鑰屾煡涓嶅埌銆�</li>
+     * </ol>
+     * 鍥犳杩欓噷鎸夐」鐩棦瀹氬彛寰勶紙{@code doc/service_subtask_瀛楁鏀瑰悕_鏀瑰姩娓呭崟.md} 搂8锛氳繖鍑犳潯
+     * 銆岄暱鏈熶换鍔� / 浠诲姟缁� / 鎵嬪姩寤轰换鍔°�嶈矾寰�<b>涓嶅~鍦ㄩ櫌缁村害</b>锛夌粺涓�澶勭悊锛�
+     * <b>鍦ㄩ櫌缁村害 4 鍒楁竻绌�</b>锛堝湪闄㈢瀹�/鍦ㄩ櫌鐥呭尯鍙湁 HIS 閾捐矾鑳戒粠 {@code pat_med_inhosp} 鎷垮埌锛夛紝
+     * <b>绉戝 / 鐥呭尯涓�寰嬭惤绂婚櫌缁村害</b>锛坽@code leaveldeptcode/name}銆亄@code leavehospitaldistrictcode/name}锛夈��
+     *
+     * @param serviceTaskVO 寤轰换鍔″叆鍙�
+     * @return 宸叉寜绂婚櫌缁村害褰掍綅鐨勫瓙浠诲姟瀵硅薄锛堝湪闄㈢淮搴︿负绌猴級
+     */
+    private ServiceSubtask toSubtaskFromTaskVO(ServiceTaskVO serviceTaskVO) {
+        ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class);
+        // 鈶� 鍦ㄩ櫌缁村害蹇呴』娓呯┖锛氫换鍔¢厤缃殑绉戝涓嶆槸鎮h�呮湰浜虹殑鍦ㄩ櫌绉戝
+        serviceSubtask.setDeptcode(null);
+        serviceSubtask.setDeptname(null);
+        serviceSubtask.setHospitaldistrictcode(null);
+        serviceSubtask.setHospitaldistrictname(null);
+        // 鈶� 绉戝 / 鐥呭尯 鈫� 绂婚櫌缁村害锛堝閫変覆鍙栫涓�涓紝瀛愪换鍔℃槸鍗曞�煎垪锛�
+        serviceSubtask.setLeaveldeptcode(firstValue(serviceTaskVO.getDeptcode()));
+        serviceSubtask.setLeaveldeptname(firstValue(serviceTaskVO.getDeptname()));
+        serviceSubtask.setLeavehospitaldistrictcode(firstValue(serviceTaskVO.getLeavehospitaldistrictcode()));
+        serviceSubtask.setLeavehospitaldistrictname(firstValue(serviceTaskVO.getLeavehospitaldistrictname()));
+        return serviceSubtask;
+    }
+
+    /**
      * 鍗曚竴浠诲姟
      *
      * @return 缁撴灉
@@ -1834,7 +1889,8 @@
 //            }
 
             //灏嗕换鍔′俊鎭斁鍒版湇鍔¤〃涓�
-            ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class);
+            // 绉戝/鐥呭尯鎸夈�岀闄㈢淮搴︺�嶅綊浣嶏紙鍑洪櫌闅忚鐨勭瀹ょ梾鍖哄氨鏄闄㈢瀹�/鐥呭尯锛夛紝瑙� toSubtaskFromTaskVO
+            ServiceSubtask serviceSubtask = toSubtaskFromTaskVO(serviceTaskVO);
             serviceSubtask.setTaskid(serviceTask.getTaskid().longValue());
             serviceSubtask.setTemplatename(ObjectUtils.isNotEmpty(tempid) ? tempName : serviceTask.getTemplatename());
             serviceSubtask.setTemplateid(ObjectUtils.isNotEmpty(tempid) ? tempid : serviceTask.getTemplateid());
@@ -1855,15 +1911,18 @@
                     serviceSubtask.setInhospid(patTaskRelevance.getHospid());
                     //鏂板缓瀹屾垚灏辨槸寰呭彂閫佺姸鎬�
                     serviceSubtask.setSendstate(2L);
-                    String subtaskDeptCode = patTaskRelevance.getDeptcode();
-                    if (StringUtils.isEmpty(subtaskDeptCode) && StringUtils.isNotEmpty(serviceTaskVO.getDeptcode())) {
-                        // service_subtask.leaveldeptcode 涓哄崟鍊煎瓧娈碉紝涓嶈兘鍐欏叆浠诲姟鐨勫绉戝鎷兼帴涓诧紝鍙栫涓�涓瀹ゅ厹搴�
-                        subtaskDeptCode = serviceTaskVO.getDeptcode().split(",")[0].trim();
-                    }
-                    serviceSubtask.setLeaveldeptcode(subtaskDeptCode);
-                    serviceSubtask.setLeaveldeptname(StringUtils.isNotEmpty(patTaskRelevance.getDeptName()) ? patTaskRelevance.getDeptName() : serviceTaskVO.getDeptname());
-                    serviceSubtask.setLeavehospitaldistrictcode(patTaskRelevance.getLeavehospitaldistrictcode());
-                    serviceSubtask.setLeavehospitaldistrictname(patTaskRelevance.getLeavehospitaldistrictname());
+                    // 绂婚櫌缁村害锛堝嚭闄㈤殢璁� = 鍑洪櫌绉戝 / 鍑洪櫌鐥呭尯锛夛細
+                    // 鎮h�呰嚜甯︾殑鍑洪櫌绉戝/鐥呭尯浼樺厛锛屾偅鑰呬晶娌″甫锛堝墠绔墜鍔ㄥ嬀閫夊緢甯歌锛夋椂鍥為��鍒颁换鍔¢厤缃紝
+                    // 涓嶈兘鏃犳潯浠惰鐩� 鈥斺�� 鍚﹀垯浼氭妸 toSubtaskFromTaskVO 鎸変换鍔¢厤缃厹濂界殑绂婚櫌缁村害鎶规垚 null锛�
+                    // 缁撴灉銆屼换鍔¢厤浜嗙瀹ょ梾鍖恒�佺敓鎴愬嚭鏉ョ殑瀛愪换鍔$闄㈢瀹�/鐥呭尯鍗存槸绌恒�嶃��
+                    serviceSubtask.setLeaveldeptcode(firstNonBlank(patTaskRelevance.getDeptcode(),
+                            firstValue(serviceTaskVO.getDeptcode())));
+                    serviceSubtask.setLeaveldeptname(firstNonBlank(patTaskRelevance.getDeptName(),
+                            firstValue(serviceTaskVO.getDeptname())));
+                    serviceSubtask.setLeavehospitaldistrictcode(firstNonBlank(patTaskRelevance.getLeavehospitaldistrictcode(),
+                            firstValue(serviceTaskVO.getLeavehospitaldistrictcode())));
+                    serviceSubtask.setLeavehospitaldistrictname(firstNonBlank(patTaskRelevance.getLeavehospitaldistrictname(),
+                            firstValue(serviceTaskVO.getLeavehospitaldistrictname())));
                     serviceSubtask.setType(serviceTaskVO.getType());
                     serviceSubtask.setHospType(patTaskRelevance.getHospType());
                     serviceSubtask.setOpenid(patTaskRelevance.getOpenid());
@@ -2221,7 +2280,8 @@
             }
             if (CollectionUtils.isNotEmpty(serviceTaskVO.getPatTaskRelevances())) {
                 for (PatTaskRelevance patTaskRelevance : serviceTaskVO.getPatTaskRelevances()) {
-                    ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class);
+                    // 绉戝/鐥呭尯鎸夈�岀闄㈢淮搴︺�嶅綊浣嶏紙鍑洪櫌闅忚鐨勭瀹ょ梾鍖哄氨鏄闄㈢瀹�/鐥呭尯锛夛紝瑙� toSubtaskFromTaskVO
+                    ServiceSubtask serviceSubtask = toSubtaskFromTaskVO(serviceTaskVO);
                     serviceSubtask.setLibtemplateid(ObjectUtils.isEmpty(serviceTaskVO.getLibtemplateid()) ? null : Long.valueOf(serviceTaskVO.getLibtemplateid()));
                     serviceSubtask.setLibtemplatename(serviceTaskVO.getLibtemplatename());
                     serviceSubtask.setTemplateid(serviceTask.getTemplateid());
@@ -2233,10 +2293,16 @@
                     serviceSubtask.setAddr(patTaskRelevance.getAddr());
                     serviceSubtask.setPatid(patTaskRelevance.getPatid());
                     serviceSubtask.setOpenid(patTaskRelevance.getOpenid());
-                    serviceSubtask.setLeaveldeptcode(patTaskRelevance.getDeptcode());
-                    serviceSubtask.setLeavehospitaldistrictname(patTaskRelevance.getLeavehospitaldistrictname());
-                    serviceSubtask.setLeavehospitaldistrictcode(patTaskRelevance.getLeavehospitaldistrictcode());
-                    serviceSubtask.setLeaveldeptname(patTaskRelevance.getDeptName());
+                    // 绂婚櫌缁村害锛氭偅鑰呰嚜甯︾殑鍑洪櫌绉戝/鐥呭尯浼樺厛锛屾病甯︽椂鍥為��鍒颁换鍔¢厤缃紙鍚﹀垯浼氭妸
+                    // toSubtaskFromTaskVO 鎸変换鍔¢厤缃厹濂界殑鍊兼姽鎴� null锛屽嚭闄㈤殢璁垮氨鎴愩�岀闄㈢瀹�/鐥呭尯涓虹┖銆嶏級
+                    serviceSubtask.setLeaveldeptcode(firstNonBlank(patTaskRelevance.getDeptcode(),
+                            firstValue(serviceTaskVO.getDeptcode())));
+                    serviceSubtask.setLeaveldeptname(firstNonBlank(patTaskRelevance.getDeptName(),
+                            firstValue(serviceTaskVO.getDeptname())));
+                    serviceSubtask.setLeavehospitaldistrictcode(firstNonBlank(patTaskRelevance.getLeavehospitaldistrictcode(),
+                            firstValue(serviceTaskVO.getLeavehospitaldistrictcode())));
+                    serviceSubtask.setLeavehospitaldistrictname(firstNonBlank(patTaskRelevance.getLeavehospitaldistrictname(),
+                            firstValue(serviceTaskVO.getLeavehospitaldistrictname())));
                     serviceSubtask.setType(serviceTaskVO.getType());
                     serviceSubtask.setCreateTime(DateUtils.getNowDate());
                     serviceSubtask.setDrname(patTaskRelevance.getDrname());
diff --git a/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
index f7c7bfb..3d91a94 100644
--- a/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
@@ -109,6 +109,8 @@
         <result property="isManuallyCalled" column="is_manually_called"/>
         <result property="campusid" column="campusid"/>
         <result property="diagType" column="diag_type"/>
+        <!-- 2026-11锛氶噸瑕佹�ф爣璁扮紪鐮侊紙鏃ラ棿鎵嬫湳/鏃ラ棿璇婄枟/鏃犫�︼級锛屽缓浠诲姟鏃跺彇鑷� pat_med_inhosp -->
+        <result property="importanceFlagCode" column="importance_flag_code"/>
     </resultMap>
 
     <resultMap type="com.ruoyi.task.domain.ServiceSubtaskCount" id="ServiceSubtaskResult2">
@@ -244,6 +246,7 @@
                hospitaldistrictname,
                deptcode,
                deptname,
+               importance_flag_code,
                stop_state,
                leavehospitaldistrictcode,
                leavehospitaldistrictname,
@@ -384,16 +387,34 @@
     <sql id="filterLeaveDimAnd">
         /* f-v3 */
         <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
-            AND leavehospitaldistrictcode IN
+            AND (
+            leavehospitaldistrictcode IN
             <foreach collection="leavehospitaldistrictcodes" item="lvWardCodeItem" open="(" separator="," close=")">
                 #{lvWardCodeItem}
             </foreach>
+            <!-- 寤剁画鎶ょ悊浠诲姟锛坰ervice_type='99'锛夊彲浠ュ湪鎮h�呰繕娌″嚭闄㈡椂鐢熸垚锛�
+                 杩欑被璁板綍鍙湁銆屽湪闄㈢淮搴︺�嶏紙hospitaldistrictcode / deptcode锛夛紝鍑洪櫌缁村害鏄� NULL銆�
+                 NULL 涓嶅尮閰嶄换浣� IN锛屼换鍔′細銆屾彁绀虹敓鎴愭垚鍔熴�佸垪琛ㄩ噷鍗存煡涓嶅埌銆嶏紝
+                 鎵�浠ュ嚭闄㈢淮搴︿负绌烘椂鐢ㄥ悓涓�濂楃紪鐮佷綋绯荤殑鍦ㄩ櫌缁村害鍏滃簳銆� -->
+            OR (service_type = '99' AND (leavehospitaldistrictcode IS NULL OR leavehospitaldistrictcode = '')
+                AND hospitaldistrictcode IN
+                <foreach collection="leavehospitaldistrictcodes" item="lvWardCodeItem" open="(" separator="," close=")">
+                    #{lvWardCodeItem}
+                </foreach>)
+            )
         </if>
         <if test="leaveldeptcodes != null and leaveldeptcodes.size() > 0">
-            AND leaveldeptcode IN
+            AND (
+            leaveldeptcode IN
             <foreach collection="leaveldeptcodes" item="lvDeptCodeItem" open="(" separator="," close=")">
                 #{lvDeptCodeItem}
             </foreach>
+            OR (service_type = '99' AND (leaveldeptcode IS NULL OR leaveldeptcode = '')
+                AND deptcode IN
+                <foreach collection="leaveldeptcodes" item="lvDeptCodeItem" open="(" separator="," close=")">
+                    #{lvDeptCodeItem}
+                </foreach>)
+            )
         </if>
     </sql>
 
@@ -434,20 +455,38 @@
                   or (leaveldeptcodes != null and leaveldeptcodes.size() > 0)">
             AND (
             <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
+                (
                 leavehospitaldistrictcode IN
                 <foreach collection="leavehospitaldistrictcodes" item="lvWardCodeItem" open="(" separator="," close=")">
                     #{lvWardCodeItem}
                 </foreach>
+                <!-- 寤剁画鎶ょ悊浠诲姟锛坰ervice_type='99'锛夊彲浠ュ湪鎮h�呰繕娌″嚭闄㈡椂鐢熸垚锛�
+                     杩欑被璁板綍鍙湁銆屽湪闄㈢淮搴︺�嶏紙hospitaldistrictcode / deptcode锛夛紝鍑洪櫌缁村害鏄� NULL銆�
+                     NULL 涓嶅尮閰嶄换浣� IN锛屼换鍔′細銆屾彁绀虹敓鎴愭垚鍔熴�佸垪琛ㄩ噷鍗存煡涓嶅埌銆嶏紝
+                     鎵�浠ュ嚭闄㈢淮搴︿负绌烘椂鐢ㄥ悓涓�濂楃紪鐮佷綋绯荤殑鍦ㄩ櫌缁村害鍏滃簳銆� -->
+                OR (service_type = '99' AND (leavehospitaldistrictcode IS NULL OR leavehospitaldistrictcode = '')
+                    AND hospitaldistrictcode IN
+                    <foreach collection="leavehospitaldistrictcodes" item="lvWardCodeItem" open="(" separator="," close=")">
+                        #{lvWardCodeItem}
+                    </foreach>)
+                )
             </if>
             <if test="(leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0)
                       and (leaveldeptcodes != null and leaveldeptcodes.size() > 0)">
                 OR
             </if>
             <if test="leaveldeptcodes != null and leaveldeptcodes.size() > 0">
+                (
                 leaveldeptcode IN
                 <foreach collection="leaveldeptcodes" item="lvDeptCodeItem" open="(" separator="," close=")">
                     #{lvDeptCodeItem}
                 </foreach>
+                OR (service_type = '99' AND (leaveldeptcode IS NULL OR leaveldeptcode = '')
+                    AND deptcode IN
+                    <foreach collection="leaveldeptcodes" item="lvDeptCodeItem" open="(" separator="," close=")">
+                        #{lvDeptCodeItem}
+                    </foreach>)
+                )
             </if>
             )
         </if>
@@ -684,6 +723,26 @@
         <if test="operatorNo != null  and operatorNo != ''">and operator_no = #{operatorNo}</if>
         <if test="wechat != null  and wechat != ''">and wechat = #{wechat}</if>
         <if test="hospType != null  and hospType != ''">and hosp_type = #{hospType}</if>
+        <!--
+          2026-11锛氶噸瑕佹�ф爣璁扮瓫閫夛紙瀵瑰簲 service_subtask.importance_flag_code锛屽缓浠诲姟鏃跺彇鑷�
+          pat_med_inhosp.importance_flag_code锛夈�備袱绉嶅啓娉曪細
+            鈶� 绮剧‘鍗曞��  importanceFlagCode = 'FH0165.01'锛堟垨鎻忚堪鍙e緞 '鏃ラ棿鎵嬫湳'锛�
+            鈶� 绮剧‘澶氬��  importanceFlagCodes = ['FH0165.01','FH0165.02']
+          璇ュ垪閲囬泦鏃跺氨琚嫾鎴�**鎻忚堪涓�**锛圛mportFlagEnum 鐨� desc锛夛紝澶氬�肩敤鑻辨枃閫楀彿鎷兼帴锛�
+          濡� '鏃�,鏃ラ棿鎵嬫湳'锛堣 ServiceSLTDHealthcareRecordServiceImpl#hospitalizedApply锛夆�斺��
+          绛夊��/IN 鍙懡涓崟鍊艰锛涘鍊艰锛堢幇鍦轰粎 7 鏉★紝閮藉湪鍑洪櫌璁板綍涓婏級瑕佺瓫鍏ㄩ渶鑷鍐�
+          find_in_set銆備袱绉嶅彛寰勫苟瀛橈紙鏈夊簱瀛樻灇涓剧紪鐮併�佹湁搴撳瓨涓枃鎻忚堪锛夛紝浼犱粈涔堟寜浠�涔堢簿纭瘮锛�
+          涓嶅仛鍊煎煙褰掍竴銆�
+        -->
+        <if test="importanceFlagCode != null  and importanceFlagCode != ''">
+            and importance_flag_code = #{importanceFlagCode}
+        </if>
+        <if test="importanceFlagCodes != null and importanceFlagCodes.size() > 0">
+            AND importance_flag_code IN
+            <foreach collection="importanceFlagCodes" item="impFlagItem" open="(" separator="," close=")">
+                #{impFlagItem}
+            </foreach>
+        </if>
         <if test="libtemplateid != null ">and libtemplateid = #{libtemplateid}</if>
         <if test="libtemplatename != null ">and libtemplatename = #{libtemplatename}</if>
         <if test="openid != null ">and openid = #{openid}</if>
@@ -1172,6 +1231,8 @@
             <if test="hospitaldistrictname != null  and hospitaldistrictname != ''">hospitaldistrictname,</if>
             <if test="deptcode != null  and deptcode != ''">deptcode,</if>
             <if test="deptname != null  and deptname != ''">deptname,</if>
+            <!-- 2026-11锛氶噸瑕佹�ф爣璁扮紪鐮侊紙鏃ラ棿鎵嬫湳/鏃ラ棿璇婄枟鈥︼級锛屽缓浠诲姟鏃朵粠 pat_med_inhosp 鍚屾 -->
+            <if test="importanceFlagCode != null  and importanceFlagCode != ''">importance_flag_code,</if>
             <if test="labelstatus != null">labelstatus,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
@@ -1281,6 +1342,7 @@
             <if test="hospitaldistrictname != null  and hospitaldistrictname != ''">#{hospitaldistrictname},</if>
             <if test="deptcode != null  and deptcode != ''">#{deptcode},</if>
             <if test="deptname != null  and deptname != ''">#{deptname},</if>
+            <if test="importanceFlagCode != null  and importanceFlagCode != ''">#{importanceFlagCode},</if>
             <if test="labelstatus != null">#{labelstatus},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
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 eeb85f1..6830191 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -828,6 +828,9 @@
         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());
@@ -933,6 +936,8 @@
         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());

--
Gitblit v1.9.3