From 85ce52a4573ea2bdfc82876aa92365d0359e8483 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期四, 29 十月 2026 16:07:18 +0800
Subject: [PATCH] 【丽水】丽水中模板读取报错

---
 smartor/src/main/java/com/smartor/service/impl/ServiceTaskScheduleServiceImpl.java |   85 ++++++++++++++++++++++++++++++++++++++----
 1 files changed, 77 insertions(+), 8 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskScheduleServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskScheduleServiceImpl.java
index 4f0a035..4d7c030 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskScheduleServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskScheduleServiceImpl.java
@@ -6,13 +6,17 @@
 import com.ruoyi.common.utils.spring.SpringUtils;
 import com.smartor.domain.ServiceSubtask;
 import com.smartor.domain.ServiceSubtaskPreachform;
+import com.smartor.domain.ServiceTask;
 import com.smartor.domain.ServiceTaskSchedule;
 import com.smartor.domain.ServiceTaskScheduleDetail;
 import com.smartor.domain.ServiceTaskScheduleVO;
+import com.smartor.domain.SvyTaskTemplateScript;
 import com.smartor.mapper.ServiceSubtaskMapper;
 import com.smartor.mapper.ServiceSubtaskPreachformMapper;
+import com.smartor.mapper.ServiceTaskMapper;
 import com.smartor.mapper.ServiceTaskScheduleDetailMapper;
 import com.smartor.mapper.ServiceTaskScheduleMapper;
+import com.smartor.mapper.SvyTaskTemplateScriptMapper;
 import com.smartor.service.IServiceTaskScheduleService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -46,6 +50,12 @@
     @Autowired
     private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
 
+    @Autowired
+    private ServiceTaskMapper serviceTaskMapper;
+
+    @Autowired
+    private SvyTaskTemplateScriptMapper svyTaskTemplateScriptMapper;
+
     /** 鍗曟鎵弿鐨勬渶澶ц鍒掓暟锛岄伩鍏嶉暱浜嬪姟銆� */
     private static final int ROLL_BATCH_LIMIT = 200;
 
@@ -58,10 +68,14 @@
         if (CollectionUtils.isEmpty(vo.getDetailList())) {
             throw new BaseException("浠诲姟璁″垝鏄庣粏涓嶈兘涓虹┖锛堣嚦灏戜竴鏉� detail锛�");
         }
+        ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(vo.getTaskid());
+        if (serviceTask == null) {
+            throw new BaseException("浠诲姟涓嶅瓨鍦ㄦ垨宸插垹闄わ紝taskid=" + vo.getTaskid());
+        }
 
-        // 1. 鏃ц鍒掕蒋鍒�
-        serviceTaskScheduleMapper.deleteByTaskid(vo.getTaskid());
-        serviceTaskScheduleDetailMapper.deleteByTaskid(vo.getTaskid());
+        // 1. 鏃ц鍒掑垹
+        serviceTaskScheduleMapper.hardDeleteByTaskid(vo.getTaskid());
+        serviceTaskScheduleDetailMapper.hardDeleteByTaskid(vo.getTaskid());
 
         // 2. 涓昏鍒掕惤搴�
         Date now = DateUtils.getNowDate();
@@ -78,6 +92,12 @@
         schedule.setNextExecuteTime(vo.getNextExecuteTime());
         schedule.setScheduleBenchmark(vo.getScheduleBenchmark() == null ? 0 : vo.getScheduleBenchmark());
         schedule.setScheduleBenchmarkCustomTime(vo.getScheduleBenchmarkCustomTime());
+
+        schedule.setDeptCodes(vo.getDeptCodes());
+        schedule.setWardCodes(vo.getWardCodes());
+        schedule.setIcd10Codes(vo.getIcd10Codes());
+        schedule.setOplevelCodes(vo.getOplevelCodes());
+
         schedule.setRemark(vo.getRemark());
         schedule.setDelFlag("0");
         schedule.setCreateBy(vo.getCreateBy());
@@ -94,6 +114,10 @@
         for (ServiceTaskScheduleDetail detail : detailList) {
             detail.setTaskid(vo.getTaskid());
             detail.setScheduleid(schedule.getId());
+            Long resolvedTemplateId = resolveTaskTemplateId(serviceTask, detail);
+            if (resolvedTemplateId != null) {
+                detail.setTemplateid(resolvedTemplateId);
+            }
             if (detail.getSeq() == null) {
                 detail.setSeq(seq);
             }
@@ -114,6 +138,48 @@
         log.info("[浠诲姟缁刔 taskid={} 璁″垝淇濆瓨瀹屾垚, scheduleId={}, detail 鏉℃暟={}",
                 vo.getTaskid(), schedule.getId(), detailList.size());
         return schedule;
+    }
+
+    /**
+     * 璁″垝鏄庣粏鐨� templateid 搴斾繚瀛樹换鍔℃ā鏉縄D锛坰vy_task_template.id锛夛紝
+     * libtemplateid 鎵嶄繚瀛樻ā鏉垮簱ID锛坰vy_lib_template_script.svyid锛夈��
+     * 鍏煎鍓嶇浠嶄紶妯℃澘搴揑D鐨勬儏鍐碉細鑻ユ槑缁嗘ā鏉垮湪浠诲姟妯℃澘闂琛ㄤ腑涓嶅瓨鍦紝
+     * 涓旇ID灏辨槸浠诲姟鐨勬ā鏉垮簱ID锛屽垯鍥為��鍒颁换鍔¤嚜宸辩殑妯℃澘ID銆�
+     */
+    private Long resolveTaskTemplateId(ServiceTask serviceTask, ServiceTaskScheduleDetail detail) {
+        Long detailTemplateId = detail.getTemplateid();
+        if (detailTemplateId == null || serviceTask == null) {
+            return detailTemplateId;
+        }
+        if (hasTaskTemplateScripts(detailTemplateId)) {
+            return detailTemplateId;
+        }
+        // 鍙湁闂嵎浠诲姟鎵嶄緷璧� svy_task_template_script锛屽叾瀹冧换鍔$被鍨嬩繚鎸佸師閫昏緫
+        if (!"2".equals(serviceTask.getType())) {
+            return detailTemplateId;
+        }
+
+        Long taskTemplateId = serviceTask.getTemplateid();
+        boolean detailUsesLibTemplate = detailTemplateId.equals(detail.getLibtemplateid())
+                || String.valueOf(detailTemplateId).equals(serviceTask.getLibtemplateid());
+        if (detailUsesLibTemplate && hasTaskTemplateScripts(taskTemplateId)) {
+            log.warn("璁″垝鏄庣粏妯℃澘ID [{}] 鏄ā鏉垮簱ID锛屽凡鏄犲皠涓轰换鍔℃ā鏉縄D [{}], taskid={}",
+                    detailTemplateId, taskTemplateId, serviceTask.getTaskid());
+            return taskTemplateId;
+        }
+        log.warn("璁″垝鏄庣粏妯℃澘ID [{}] 鍦ㄤ换鍔℃ā鏉块棶棰樿〃涓笉瀛樺湪, taskid={}, taskTemplateId={}, taskLibTemplateId={}",
+                detailTemplateId, serviceTask.getTaskid(), taskTemplateId, serviceTask.getLibtemplateid());
+        return detailTemplateId;
+    }
+
+    private boolean hasTaskTemplateScripts(Long templateId) {
+        if (templateId == null) {
+            return false;
+        }
+        SvyTaskTemplateScript query = new SvyTaskTemplateScript();
+        query.setTemplateID(templateId);
+        query.setDelFlag("0");
+        return CollectionUtils.isNotEmpty(svyTaskTemplateScriptMapper.selectSvyTaskTemplateScriptList(query));
     }
 
     @Override
@@ -224,6 +290,7 @@
             log.warn("[浠诲姟缁�-婊氬姩] scheduleId={} 鏄庣粏涓虹┖, 璺宠繃", scheduleId);
             return false;
         }
+        ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(schedule.getTaskid());
 
         // 鎺ㄨ繘姝ラ暱锛堣疆闂撮殧锛�
         int stepNum = schedule.getScheduleTimeNum() == null ? 0 : schedule.getScheduleTimeNum();
@@ -252,7 +319,7 @@
                         scheduleId, src.getScheduleSeq(), src.getId());
                 continue;
             }
-            ServiceSubtask copy = cloneForNextLoop(src, detail, nextLoop, stepNum, stepUnit, now);
+            ServiceSubtask copy = cloneForNextLoop(src, serviceTask, detail, nextLoop, stepNum, stepUnit, now);
             serviceSubtaskMapper.insertServiceSubtask(copy);
             // 澶嶅埗 preachform
             copyPreachform(src.getId(), copy);
@@ -276,7 +343,8 @@
     /**
      * 鍏嬮殕 subtask 鍒颁笅涓�杞細娓呬富閿�佹竻鍥炵瀛楁銆佹帹杩� visit_time銆佽缃� loop_count銆�
      */
-    private ServiceSubtask cloneForNextLoop(ServiceSubtask src, ServiceTaskScheduleDetail detail,
+    private ServiceSubtask cloneForNextLoop(ServiceSubtask src, ServiceTask serviceTask,
+                                            ServiceTaskScheduleDetail detail,
                                             long nextLoop, int stepNum, int stepUnit, Date now) {
         ServiceSubtask copy = JSON.parseObject(JSON.toJSONString(src), ServiceSubtask.class);
         copy.setId(null);
@@ -288,9 +356,10 @@
         copy.setSendstate(2L);
         copy.setLoopCount(nextLoop);
         copy.setScheduleDetailId(detail.getId());
-        // 妯℃澘锛歞etail 浼樺厛
-        if (detail.getTemplateid() != null) {
-            copy.setTemplateid(detail.getTemplateid());
+        // 妯℃澘锛歞etail 浼樺厛锛屽苟鎶婂巻鍙叉暟鎹噷鐨勬ā鏉垮簱ID鏄犲皠涓轰换鍔℃ā鏉縄D
+        Long resolvedTemplateId = resolveTaskTemplateId(serviceTask, detail);
+        if (resolvedTemplateId != null) {
+            copy.setTemplateid(resolvedTemplateId);
             copy.setTemplatename(detail.getTemplatename());
         }
         if (detail.getLibtemplateid() != null) {

--
Gitblit v1.9.3