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

---
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java |  207 ++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 169 insertions(+), 38 deletions(-)

diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index c302ea0..2bb801d 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -25,7 +25,6 @@
 import com.ruoyi.quartz.enums.MzGatherSlotEnum;
 import com.ruoyi.quartz.enums.MzGatherStatusEnum;
 import com.ruoyi.quartz.service.ICollectHISService;
-import com.ruoyi.quartz.util.CreateDataTable;
 import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.mapper.SysConfigMapper;
 import com.ruoyi.system.service.ISysConfigService;
@@ -34,8 +33,7 @@
 import com.ruoyi.message.sms.provider.sltd.ws.MessageSend;
 import com.smartor.common.QwenLLMUtil;
 import com.smartor.domain.*;
-import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
 import com.smartor.mapper.*;
 import com.smartor.service.*;
 import lombok.extern.slf4j.Slf4j;
@@ -60,6 +58,24 @@
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import com.ruoyi.template.domain.HeLibrary;
+import com.ruoyi.inhospvisit.domain.PatMedInhosp;
+import com.ruoyi.template.api.TemplateFacade;
+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.ServiceSubtaskRecord;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskMapper;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
+import com.ruoyi.task.service.IServiceSubtaskDetailTraceService;
+import com.ruoyi.task.domain.ServiceOutPath;
+import com.ruoyi.task.service.IServiceOutPathService;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.service.IServiceSubtaskService;
+import com.ruoyi.task.domain.SendMagParam;
 /**
  * 瀹氭椂浠诲姟璋冨害娴嬭瘯
  *
@@ -71,6 +87,12 @@
     @Autowired
     private IServiceThirdDataService iServiceThirdDataService;
 
+    /**
+     * 妯℃澘鏁版嵁涓�寰嬬粡 ruoyi-template 鐨勯棬闈㈠彇鐢紙璺ㄦā鍧楁暟鎹闂師鍒欙級銆�
+     */
+    @Autowired
+    private TemplateFacade templateFacade;
+
     @Autowired
     private IServiceOutPathService iServiceOutPathService;
 
@@ -80,11 +102,15 @@
     @Autowired
     private IPatMedInhospService iPatMedInhospService;
 
+    /**
+     * 鎵嬫湳闅忚妯″潡鐨�<b>甯搁┗闂ㄩ潰</b>锛堝師娉ㄥ叆 {@code IPatMedOperationService}锛夈��
+     * <p>
+     * 鎵嬫湳闅忚缂栨帓宸叉暣浣撹縼鍏� {@code ruoyi-othervisit}锛屾湰绫诲彧鍋氳皟鐢ㄣ��
+     * 鈿狅笍 娉ㄥ叆闂ㄩ潰鑰屼笉鏄ā鍧楀唴閮ㄥ疄鐜帮細闂ㄩ潰姘歌繙瀛樺湪锛屾ā鍧楁湭鎵撹繘搴旂敤鎴�
+     * {@code othervisit.enabled=false} 鏃跺彧鏄檷绾у苟鎵� WARN锛屼笉浼氬惎鍔ㄥけ璐ャ��
+     */
     @Autowired
-    private IPatMedOuthospService iPatMedOuthospService;
-
-    @Autowired
-    private IPatMedOperationService iPatMedOperationService;
+    private com.ruoyi.othervisit.api.OtherVisitFacade otherVisitFacade;
 
     @Autowired
     private IServiceSubtaskService iServiceSubtaskService;
@@ -102,9 +128,6 @@
     private SysUserImportMapper sysUserImportMapper;
 
     @Autowired
-    private HeLibraryMapper heLibraryMapper;
-
-    @Autowired
     private ICollectHISService ichService;
 
     @Autowired
@@ -115,7 +138,6 @@
 
     @Autowired
     private ISysUserService userService;
-
 
     @Value("${localIP}")
     private String localIP;
@@ -154,12 +176,6 @@
     IPatMedOuthospService patMedOuthospService;
 
     @Autowired
-    ISvyTaskTemplateService svyTaskTemplateService;
-
-    @Autowired
-    IIvrTaskTemplateService iIvrTaskTemplateService;
-
-    @Autowired
     IXHGatherPatArchiveService ixhGatherPatArchiveService;
 
     @Autowired
@@ -168,9 +184,48 @@
     @Autowired
     ICollectHISService icollectHis;
 
+    /**
+     * 闂ㄨ瘖鍒嗚〃缁存姢宸叉暣浣撹縼鍏� {@code ruoyi-outpatientvisit}锛岃繖閲屽彧鎸佹湁瀹冪殑甯搁┗闂ㄩ潰銆�
+     * <p>
+     * 鈿狅笍 娉ㄥ叆闂ㄩ潰鑰屼笉鏄唴閮ㄥ疄鐜帮細闂ㄩ潰<b>姘歌繙瀛樺湪</b>锛屽嵆浣挎ā鍧楁病琚墦杩涘簲鐢ㄦ湰绫讳篃涓嶄細鍚姩澶辫触銆�
+     */
     @Autowired
-    CreateDataTable createDataTable;
+    private com.ruoyi.outpatientvisit.api.OuthospVisitFacade outhospVisitFacade;
 
+    /**
+     * 鍑哄叆闄㈤殢璁挎ā鍧楃殑<b>甯搁┗闂ㄩ潰</b>銆�
+     * <p>
+     * 鈿狅笍 2025 淇锛氭湰绫荤殑 <b>3 涓殢璁垮叆鍙e師鍏堜笉鍒ゅ紑鍏�</b> 鈥斺��
+     * 瀹冧滑璋冪敤 {@code IPatMedInhospService}锛坰martor 閲岀殑閬楃暀瀹炵幇锛岃
+     * {@code PatMedInhospServiceImpl}锛夛紝鑰岄偅涓疄鐜扮敤闂ㄩ潰<b>鍙槸涓轰簡鍙栨暟鎹�</b>
+     * 锛坽@code selectPatMedInhospList} / {@code updatePatMedInhosp}锛夛紝
+     * <b>浠庝笉璋冪敤闂ㄩ潰鐨勭紪鎺掓柟娉�</b>銆備簬鏄� {@code inhospvisit.enabled} /
+     * {@code publicity.enabled} / {@code othervisit.enabled} 瀵瑰畾鏃朵换鍔�<b>瀹屽叏澶辨晥</b>锛�
+     * 闂ㄩ潰鐨勭紪鎺掑畧鍗紙{@code InhospVisitFacade#dealOutHospInfo} 绛夛級铏界劧鏈夊疄鐜般��
+     * 鏈夋祴璇曪紝鍗村彧鏈� HTTP 鎵嬪姩瑙﹀彂閭d竴鏉¤矾璧板緱鍒般��
+     * <p>
+     * 鐜板湪鏀逛负涓庢墜鏈殢璁匡紙鎵嬫湳闅忚鏃╁凡璧� {@code otherVisitFacade}锛岃 {@link #dealOperationInfo()}锛�
+     * 瀹屽叏鍚屽舰锛氬畾鏃朵换鍔¤蛋闂ㄩ潰锛屽紑鍏冲湪闂ㄩ潰閲岀粺涓�鍒ゃ�傛ā鍧楀疄鐜板唴閮ㄤ細鍥炶皟
+     * {@code PublicityApi} / {@code OtherVisitApi}锛岄偅涓ゅ鍚勮嚜鍒よ嚜宸辩殑寮�鍏筹紝
+     * 鎵�浠ヤ竴娆″垏鎹㈣ 3 涓紑鍏冲悓鏃剁敓鏁堛��
+     * <p>
+     * 鈿狅笍 <b>涓嶈兘娉ㄥ叆 {@code InhospVisitApi} 鎺ュ彛</b>锛氬鍣ㄩ噷鏈変袱涓疄鐜�
+     * 锛堟湰闂ㄩ潰 + 鍐呴儴瀹炵幇 {@code DefaultInhospVisitApi}锛夛紝鎸夌被鍨嬫敞鍏ヤ細姝т箟锛�
+     * 鑰屼笖鍙湁闂ㄩ潰鎵嶅垽寮�鍏炽�俀uartz 渚濊禆鏈ā鍧椼�佷笉瀛樺湪鍙嶅悜渚濊禆锛屾墍浠ョ洿鎺ユ敞鍏ラ棬闈㈡槸瀹夊叏鐨勩��
+     */
+    @Autowired
+    private com.ruoyi.inhospvisit.api.InhospVisitFacade inhospVisitFacade;
+
+    /**
+     * 瀹f暀妯″潡鐨�<b>甯搁┗闂ㄩ潰</b>锛岀敤浜庡垽 {@code sys_config: publicity.enabled}銆�
+     * <p>
+     * 鈿狅笍 2025 淇锛氭湰绫诲師鏈彧鍦�**鐢熸垚**瀹f暀鏃跺彈寮�鍏崇锛堣蛋 inhospvisit 闂ㄩ潰鍥炶皟 PublicityApi锛夛紝
+     * 浣�**鍙戦��**瀹f暀锛坽@link #sfHandlle} 鐨� {@code type == 3} 鍒嗘敮锛変粠鏉ヤ笉璇诲鏁欏紑鍏� 鈥斺��
+     * 鎵�浠ュ叧鎺� {@code publicity.enabled} 鍚庯紝宸茬敓鎴愮殑瀹f暀瀛愪换鍔$収鏍烽�氳繃
+     * 鐭俊/鍏紬鍙�/鐢佃瘽鍙戝嚭鍘汇��
+     */
+    @Autowired
+    private com.ruoyi.publicity.api.PublicityFacade publicityFacade;
 
     @Value("${appid}")
     private String appid;
@@ -195,8 +250,12 @@
     @Autowired
     private SysConfigMapper sysConfigMapper;
 
-    @Autowired
-    private IServiceTaskScheduleService serviceTaskScheduleService;
+    // 鈿狅笍 2025 绉婚櫎锛氬師 `IServiceTaskScheduleService serviceTaskScheduleService` 瀛楁銆�
+    //    瀹冨湪鏈被閲�**鍙�**琚� rollTaskGroupCycle() 鐢ㄦ潵璋� rollCycleTasks()锛堟瀛楁妫�鏌ワ細
+    //    鏀瑰墠鍏ㄦ枃浠朵粎 1 澶勪娇鐢級銆傝璋冪敤宸插垏鍒� inhospVisitFacade.rollTaskGroupCycle()锛�
+    //    鎵�浠ュ瓧娈佃繛甯﹀け鏁堝苟鍒犻櫎 鈥斺�� 鐣欑潃瀹冧細璁╀汉璇互涓� smartor 鐨� rollCycleTasks 杩樻湁浜虹敤銆�
+    //    smartor 渚х殑 ServiceTaskScheduleServiceImpl.rollCycleTasks() 鏈韩**淇濈暀涓嶅垹**
+    //    锛堝畠鍙兘浠嶈鐜扮綉鍏跺畠鍏ュ彛/鎺ュ彛璋冪敤锛屽垹闄ゅ睘鍙︿竴浠朵簨锛夈��
 
     public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) {
         System.out.println(StringUtils.format("鎵ц澶氬弬鏂规硶锛� 瀛楃涓茬被鍨媨}锛屽竷灏旂被鍨媨}锛岄暱鏁村瀷{}锛屾诞鐐瑰瀷{}锛屾暣褰}", s, b, l, d, i));
@@ -352,7 +411,6 @@
         }
     }
 
-
     /**
      * 瀹氭椂澶勭悊澶栭摼鐨勬暟鎹�
      */
@@ -379,7 +437,6 @@
         String formattedNow = now.format(formatter);
         dealHisData(formattedNow);
     }
-
 
     /**
      * HIS鏁版嵁閲囬泦
@@ -1072,7 +1129,6 @@
         }
     }
 
-
     public void dealHisDataSLTD() {
         log.info("銆恉ealHisData銆戝紑濮嬫墽琛孒IS鏁版嵁閲囬泦浠诲姟");
 
@@ -1130,27 +1186,50 @@
 
     /**
      * 澶勭悊鎮h�呬俊鎭紝杩涘叆瀛愪换鍔¤〃
+     * <p>
+     * 鈿狅笍 2025 淇锛堝紑鍏冲け鏁堬級锛氭湰鏂规硶鍘熻蛋 {@code iPatMedInhospService.dealOutHospInfo(config)}锛�
+     * 閭f槸 smartor 閲岀殑閬楃暀瀹炵幇锛�**涓嶅垽浠讳綍妯″潡寮�鍏�** 鈥斺�� 浜庢槸锛�
+     * <ul>
+     *   <li>鍏� {@code inhospvisit.enabled} 鐓ф牱鐢熸垚鍑洪櫌/闀挎湡闅忚锛�</li>
+     *   <li>鍏� {@code publicity.enabled} 鐓ф牱鍙戝叆闄㈠鏁欎笌鑽搧瀹f暀锛�</li>
+     *   <li>鍏� {@code othervisit.enabled} 鐓ф牱鐢熸垚鎵嬫湳闅忚銆�</li>
+     * </ul>
+     * 鐜版敼璧版ā鍧楅棬闈細闂ㄩ潰鍒� {@code inhospvisit.enabled}锛屾ā鍧楀疄鐜板唴閮ㄥ啀鍥炶皟
+     * {@code PublicityApi} / {@code OtherVisitApi}锛屼笁澶勫悇鑷垽鑷繁鐨勫紑鍏炽��
      */
     public void dealOutHospInfo() {
         String config = configService.selectConfigByKey("visit.early.day");
         if (port.equals("8095")) {
-            //鍑洪櫌琛�
-            iPatMedInhospService.dealOutHospInfo(config);
+            //鍑洪櫌琛紙鍚叆闄㈠鏁� / 鑽搧瀹f暀 / 鎵嬫湳闅忚 鈥斺�� 鍧囩敱妯″潡瀹炵幇鍥炶皟瀵瑰簲妯″潡闂ㄩ潰锛�
+            inhospVisitFacade.dealOutHospInfo(config);
             //闂ㄨ瘖琛�(鏂板崕鐨勬殏鏃朵笉鍋氶棬璇婇殢璁�)
             if (!active.equals("xh")) {
-                iPatMedOuthospService.dealOutpatientInfo();
+                // 銆愰棬鎬ヨ瘖妯″潡鍖栧垏鎹€�戦棬闈㈠唴閮ㄥ垽 sys_config: outpatientvisit.enabled锛堣繍琛屾椂鐑锛夛紝
+                // 鍏抽棴鏃惰繑鍥� 0 骞舵墦 WARN銆�
+                //
+                // 鈿狅笍 2025 淇锛氳繖閲屽師鍏堟槸 iPatMedOuthospService.dealOutpatientInfo()锛�
+                // 瀹冪粡 IPatMedOuthospService 鈫� PatMedOuthospServiceDelegatingImpl
+                // 鈫� OuthospDataFacade.dealOutpatientInfo()锛岃��**閭f潯璺笂娌℃湁寮�鍏冲畧鍗�** 鈥斺��
+                // OuthospVisitFacade.dealOutpatientInfo() 鎵嶆槸甯﹀畧鍗殑鍏ュ彛锛屽嵈鍏ㄤ粨闆惰皟鐢ㄨ�呫��
+                // 缁撴灉鏄� outpatientvisit.enabled=false 瀵瑰畾鏃朵换鍔�**瀹屽叏澶辨晥**銆�
+                // 鐜板湪涓庝笅闈� dealOperationInfo() 璧� otherVisitFacade 鐨勫舰鐘朵竴鑷淬��
+                outhospVisitFacade.dealOutpatientInfo();
             }
         }
     }
 
     /**
      * 澶勭悊鎮h�呬俊鎭紝杩涘叆瀛愪换鍔¤〃(浠诲姟缁�)
+     * <p>
+     * 鈿狅笍 2025 淇锛堝紑鍏冲け鏁堬級锛氬師璧� smartor 閬楃暀瀹炵幇锛屼笉鍒ゅ紑鍏筹紙鍚� {@link #dealOutHospInfo()}锛夈��
+     * 鐜拌蛋妯″潡闂ㄩ潰銆傛敞鎰忔ā鍧椾晶鐨� {@code dealOutHospInfoBySchedule} 鍐呴儴浠嶄細杞彂鍥� smartor
+     * 锛坽@code OtherVisitApiBridge}锛岃璇ョ被娉ㄩ噴锛夛紝浣�<b>寮�鍏冲湪闂ㄩ潰杩欎竴灞傚垽</b>锛屾墍浠ュ叧闂椂涓嶄細璧板埌閭i噷銆�
      */
     public void dealOutHospInfoBySchedule() {
         String config = configService.selectConfigByKey("visit.early.day");
         if (port.equals("8095")) {
             //鍑洪櫌琛�
-            iPatMedInhospService.dealOutHospInfoBySchedule(config);
+            inhospVisitFacade.dealOutHospInfoBySchedule(config);
             //闂ㄨ瘖琛�(鏂板崕鐨勬殏鏃朵笉鍋氶棬璇婇殢璁�)
 //            if (!active.equals("xh")) {
 //                //iPatMedOuthospService.dealOutpatientInfo();
@@ -1158,12 +1237,13 @@
         }
     }
 
-
     /**
      * 澶勭悊鎵嬫湳淇℃伅锛岃繘鍏ュ瓙浠诲姟琛�
      */
     public void dealOperationInfo() {
-        if (port.equals("8095")) iPatMedOperationService.dealOperationInfo();
+        // 銆愭墜鏈ā鍧楀寲鍒囨崲銆戝嚭鍙f敼涓鸿皟鐢� ruoyi-othervisit 鐨勫父椹婚棬闈€��
+        // 闂ㄩ潰鍐呴儴鍒� sys_config: othervisit.enabled锛堣繍琛屾椂鐑锛夛紝鍏抽棴鏃惰繑鍥� 0 骞舵墦 WARN銆�
+        if (port.equals("8095")) otherVisitFacade.dealOperationInfo();
 
     }
 
@@ -1177,7 +1257,10 @@
      */
     public void createOuthospQuarterTable() {
         log.info("銆恈reateOuthospQuarterTable銆戝紑濮嬫墽琛岄棬璇婂垎琛ㄤ换鍔�");
-        createDataTable.createOuthospQuarterTable();
+        // 銆愰棬璇婃ā鍧楀寲銆慍reateDataTable 宸叉暣浣撹縼鍏� ruoyi-outpatientvisit
+        // 锛堝疄鐜颁负 OuthospPartitionMaintainer锛岀粡 OuthospVisitFacade 鏆撮湶锛夈��
+        // 杩欓噷鍙仛璋冪敤锛涘缓琛ㄩ�昏緫涓�琛屾湭鍔ㄣ��
+        outhospVisitFacade.createOuthospQuarterTable();
     }
 
     /**
@@ -1190,7 +1273,6 @@
             List<ServicePatientTemp> servicePatientTemps = iServicePatientTempService.selectServicePatientTempList(new ServicePatientTemp());
         }
     }
-
 
     /**
      * 闀挎湡浠诲姟鍙戦��
@@ -1289,7 +1371,6 @@
         if (StringUtils.isNotEmpty(failDay)) iServiceSubtaskService.setFailSubTaskDefalutVal(Long.valueOf(failDay));
     }
 
-
     /**
      * 鍒ゆ柇鏃ユ湡鏄惁鏄粖澶�
      *
@@ -1341,6 +1422,22 @@
         }
 
         String descByCode = ServiceFromEnum.getDescByCode(Integer.valueOf(sendPreachform));
+
+        // 鈿狅笍 2025 淇锛堝鏁欏紑鍏冲け鏁堬級锛歵ype == 3 鏄�**瀹f暀/閫氱煡**锛堢函鍙戦�併�佹棤浣滅瓟 鈥斺��
+        // 瑙� setSuccessPreachForm 閲屻�屽鏁欐垨閫氱煡鈥︾洿鎺ユ敼鎴� 9銆嶃�佷互鍙婃湰鏂规硶鍚庨潰
+        // 銆屽鏁欐垨閫氱煡锛屽彂閫佹垚鍔熷垯鐩存帴鏀规垚 6L銆嶇殑鍒ゅ畾锛夛紝鏁存潯娲惧彂鐨勬墍鏈夐�氶亾
+        // 锛堢數璇�/鐭俊/鍏紬鍙�/浜哄伐锛夊彂鐨勯兘鏄鏁欏唴瀹广�傚叧鎺� publicity.enabled 鏃跺簲**涓�涓�氶亾閮戒笉鍙�**銆�
+        //
+        // 鈿狅笍 鍒绘剰**涓嶆帹杩� subtask 鐘舵�併�佷篃涓嶈澶辫触**锛堜笌 RedisMqReceiver 鍚屽彛寰勶級锛�
+        // 鍏抽棴鏄�"鏆傛椂涓嶅彂"锛屼笉鏄�"杩欎釜鎮h�呬笉闇�瑕佸鏁�"銆傛爣鎴愬け璐�/涓嶉渶瑕佷細璁╄繖鏉″鏁�
+        // 鍦ㄥ紑鍏虫仮澶嶅悗姘歌繙涓㈠け銆備繚鎸� sendstate 涓嶅姩锛屽紑鍏虫墦寮�鍚庝笅涓�娆� longTaskSend/compensateTask
+        // 浼氱収甯告妸瀹冩崬鍑烘潵鍙戝嚭銆�
+        if ("3".equals(serviceSubtask.getType()) && !publicityFacade.isEnabled()) {
+            log.warn("銆愬鏁欍�戞ā鍧楁湭鍚敤锛堝弬鏁伴厤缃� publicity.enabled=false锛夛紝璺宠繃瀹f暀鍙戦�併�俿ubtaskId={}, patid={}",
+                    serviceSubtask.getId(), serviceSubtask.getPatid());
+            return;
+        }
+
         if (descByCode.equals("鐢佃瘽")) {
             List<String> list = new ArrayList<>();
             ServiceTask ivrTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
@@ -1450,7 +1547,13 @@
                             sendMagParam.setContent(smsContemt.replace("${wjurl}", sendMagParam.getUrl()));
                         }
                     } else {
-                        HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
+                        // 鈿狅笍 杩欓噷**鍒绘剰涓�**涓� TemplateModuleDisabledException 鍋氶檷绾э細
+                        // 妯℃澘妯″潡鍏抽棴锛坰ys_config: template.enabled=false锛夋椂锛屽鏁欏唴瀹圭‘瀹炲彇涓嶅埌锛�
+                        // 鐭俊涔熷氨纭疄鍙戜笉鍑哄幓銆傚灞� try-catch 浼氬瀹炶涓�"鐭俊鍙戦�佸け璐�"锛�
+                        // 骞堕�氳繃 setSuccessPreachForm(..., "5") 鎸夋棦鏈夋満鍒跺崌绾у埌涓嬩竴涓�氶亾锛堝叕浼楀彿/浜哄伐锛夈��
+                        // 鑻ュ湪杩欓噷纭鎴�"鍙戦�佹垚鍔�"锛岀瓑浜庣敤涓�鏉″亣璁板綍鎺╃洊"娌″彂鍑哄幓"锛�
+                        // 浜嬪悗浠庝换鍔¤褰曚笂瀹屽叏鐪嬩笉鍑洪棶棰� 鈥斺�� 閭f槸鏇村潖鐨勯檷绾с��
+                        HeLibrary heLibrary = templateFacade.findHeLibraryById(serviceSubtask.getLibtemplateid());
                         if (heLibrary.getHetype().equals("1")) {
                             sendMagParam.setPhone(serviceSubtask.getPhone());
                             url = StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/xj?p=" + format : localIP + "/xj?p=" + format;
@@ -1643,7 +1746,6 @@
         SysDept sysDept = CollectionUtils.isNotEmpty(sysDepts) ? sysDepts.get(0) : new SysDept();
         return ObjectUtils.isNotEmpty(sysDept) ? sysDept.getCampusid() : "2";
     }
-
 
     private Date getNextVisitTime(Long subid, Long taskid, Date visitTime) {
         ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
@@ -1970,7 +2072,9 @@
         }
         try {
             String config = configService.selectConfigByKey("visit.early.day");
-            iPatMedInhospService.dealOutHospInfoBySchedule(config);
+            // 鈿狅笍 2025 淇锛堝紑鍏冲け鏁堬級锛氬師璧� smartor 閬楃暀瀹炵幇锛屼笉鍒ゅ紑鍏筹紙鍚� dealOutHospInfo锛夈��
+            // 鐜拌蛋妯″潡闂ㄩ潰锛屼笌 RyTask#dealOutHospInfo 涓�鑷淬��
+            inhospVisitFacade.dealOutHospInfoBySchedule(config);
             log.info("銆恉ealTaskGroupOutHosp銆戜换鍔$粍棣栬疆绾冲叆鎵弿瀹屾垚");
         } catch (Exception e) {
             log.error("銆恉ealTaskGroupOutHosp銆戜换鍔$粍鎵弿寮傚父", e);
@@ -1988,7 +2092,18 @@
     public void rollTaskGroupCycle() {
         log.info("銆恟ollTaskGroupCycle銆戝紑濮嬫壂鎻忓惊鐜换鍔$粍");
         try {
-            int rolled = serviceTaskScheduleService.rollCycleTasks();
+            // 鈿狅笍 2025 淇锛堝紑鍏冲け鏁堬級锛氬師璧� smartor 鐨� ServiceTaskScheduleServiceImpl.rollCycleTasks()锛�
+            // 涓嶅垽寮�鍏� 鈥斺�� 鍏虫帀 inhospvisit.enabled 鐓ф牱銆屾帹杩涜疆娆� + 鏂板缓 subtask銆嶃��
+            //
+            // 鐜拌蛋妯″潡闂ㄩ潰锛屽畬鎴愭ā鍧楀寲鏂规閲岀 10 姝ヤ竴鐩存病鍋氱殑閭d竴姝ュ垏鎹細
+            //   InhospVisitFacade#rollTaskGroupCycle锛堝垽寮�鍏筹級
+            //     鈫� DefaultInhospVisitApi#rollTaskGroupCycle
+            //     鈫� TaskGroupCycleRoller#rollCycleTasks锛堥�愯鎼嚜鍘� L170-190锛�
+            //     鈫� ScheduleRollPortBridge锛坰martor 渚х鍙e疄鐜帮紝116 瀛楁娣辨嫹璐濈瓑鐣欏湪瀹炵幇渚э級
+            // 璇ョ被鐨勬敞閲婃槑纭啓浜嗐�岀 10 姝ュ垏杩囨潵涔嬪墠涓嶈兘琚寕鍒颁换浣曡皟搴︿笂锛屽惁鍒欏弻璺戙�嶁�斺��
+            // 鏈灏辨槸閭d釜鍒囨崲鐐癸紝鍒囧畬鑰佺殑 rollCycleTasks 鍗抽��褰癸紙鍏ㄤ粨鍙湁鏈柟娉曡皟瀹冿級銆�
+            int rolled = inhospVisitFacade.rollTaskGroupCycle();
+            // 闂ㄩ潰鍐呴儴鐨� TaskGroupCycleRoller 宸叉墦銆屾湰娆℃帹杩� N 涓鍒掋�嶏紝杩欓噷鍙ˉ涓�鍙ユ�昏
             log.info("銆恟ollTaskGroupCycle銆戞湰娆℃帹杩� {} 涓鍒�", rolled);
         } catch (Exception e) {
             log.error("銆恟ollTaskGroupCycle銆戞粴鍔ㄨ皟搴﹀紓甯�", e);
@@ -2027,10 +2142,26 @@
     }
 
     /**
-     * 澶勭悊瓒呮椂闅忚浠诲姟
-     * @return
+     * 澶勭悊瓒呮椂闅忚浠诲姟锛堥殢璁胯秴鏃� 鈫� 鐢熸垚"鍐嶆闅忚"锛�
+     * <p>
+     * 鈿狅笍 2025 淇锛堝紑鍏冲け鏁堬級锛氭湰鏂规硶鍘熶笉鍒や换浣曟ā鍧楀紑鍏� 鈥斺��
+     * 鍏虫帀 {@code inhospvisit.enabled} 鐓ф牱寤�"鍐嶆闅忚"瀛愪换鍔°��
+     * <p>
+     * <b>涓轰粈涔堣繖閲屾槸"鍏ュ彛鍒ゅ紑鍏�"鑰屼笉鏄儚 {@link #dealOutHospInfo()} 閭f牱鍒囧埌闂ㄩ潰</b>锛�
+     * 妯″潡渚у彧鎻愪緵浜� {@code InhospVisitApi#buildAgainVisitDraft}锛堢粍瑁呰崏绋匡級锛�
+     * <b>娌℃湁</b>瀹屾暣鐨�"鎵弿瓒呮椂 鈫� 钀藉簱 鈫� 鍥炲啓鍘熶换鍔$姸鎬�"鍏ュ彛锛�
+     * 鑰屾湰鏂规硶鑷繁缁勮骞� insert锛堣涓嬫柟 {@code insertServiceSubtask}锛夈��
+     * 閫犱竴涓ā鍧楀叆鍙e睘浜庢柊澧炶兘鍔涖�佽秴鍑�"鍙В鍐冲紑鍏�"鐨勮寖鍥达紝鎵�浠ュ彇鏈�灏忔敼鍔細鍏ュ彛瀹堝崼銆�
+     * <p>
+     * 鈿狅笍 鍏ㄤ粨鍙湁 {@code ServiceSubtaskController#dealSubtaskDeadline} 涓�涓皟鐢ㄨ�呫��
      */
     public void dealSubtaskDeadline(String orgid, Integer deadlineDay){
+        // 鈿狅笍 寮�鍏冲畧鍗細鍏堝垽鍐嶅共娲伙紝涓� dealOutHospInfo / rollTaskGroupCycle 鍚屽彛寰勩��
+        // 鍏抽棴鏃剁洿鎺ヨ繑鍥烇紝涓嶆壂鎻忋�佷笉寤�"鍐嶆闅忚"瀛愪换鍔°��
+        if (!inhospVisitFacade.isEnabled()) {
+            log.warn("銆恉ealSubtaskDeadline銆戞ā鍧楁湭鍚敤锛堝弬鏁伴厤缃� inhospvisit.enabled=false锛夛紝璺宠繃瓒呮椂闅忚澶勭悊銆俹rgid={}", orgid);
+            return;
+        }
         //鑾峰彇浠诲姟淇℃伅
         ServiceTask st = new ServiceTask();
         st.setDelFlag("0");

--
Gitblit v1.9.3