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/ServiceTaskServiceImpl.java | 90 ++++++++++++++++++-----------
smartor/src/main/java/com/smartor/service/impl/ServiceTaskScheduleServiceImpl.java | 73 ++++++++++++++++++++++-
smartor/src/main/java/com/smartor/common/ScheduleSubtaskBuilder.java | 11 +++
3 files changed, 134 insertions(+), 40 deletions(-)
diff --git a/smartor/src/main/java/com/smartor/common/ScheduleSubtaskBuilder.java b/smartor/src/main/java/com/smartor/common/ScheduleSubtaskBuilder.java
index e281e01..e082012 100644
--- a/smartor/src/main/java/com/smartor/common/ScheduleSubtaskBuilder.java
+++ b/smartor/src/main/java/com/smartor/common/ScheduleSubtaskBuilder.java
@@ -74,7 +74,16 @@
// 妯℃澘锛歞etail 浼樺厛浜� task
if (detail.getTemplateid() != null) {
- subtask.setTemplateid(detail.getTemplateid());
+ // 鍏煎鍘嗗彶鏁版嵁锛氭槑缁� templateid 鍙兘鏄ā鏉垮簱ID锛屼笉鑳界洿鎺ヤ綔涓轰换鍔℃ā鏉縄D浣跨敤銆�
+ if ("2".equals(serviceTask.getType())
+ && String.valueOf(detail.getTemplateid()).equals(serviceTask.getLibtemplateid())
+ && serviceTask.getTemplateid() != null) {
+ log.warn("璁″垝鏄庣粏 templateid [{}] 鏄ā鏉垮簱ID锛屽凡鍥為��涓轰换鍔℃ā鏉縄D [{}], taskid={}, detailId={}",
+ detail.getTemplateid(), serviceTask.getTemplateid(), serviceTask.getTaskid(), detail.getId());
+ subtask.setTemplateid(serviceTask.getTemplateid());
+ } else {
+ subtask.setTemplateid(detail.getTemplateid());
+ }
subtask.setTemplatename(detail.getTemplatename());
}
if (detail.getLibtemplateid() != null) {
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 3084138..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;
@@ -57,6 +67,10 @@
}
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. 鏃ц鍒掑垹
@@ -100,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);
}
@@ -120,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
@@ -230,6 +290,7 @@
log.warn("[浠诲姟缁�-婊氬姩] scheduleId={} 鏄庣粏涓虹┖, 璺宠繃", scheduleId);
return false;
}
+ ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(schedule.getTaskid());
// 鎺ㄨ繘姝ラ暱锛堣疆闂撮殧锛�
int stepNum = schedule.getScheduleTimeNum() == null ? 0 : schedule.getScheduleTimeNum();
@@ -258,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);
@@ -282,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);
@@ -294,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) {
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
index 3fd1a08..3d4905b 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
@@ -442,34 +442,50 @@
serviceSubtaskVO.setPatid(patid);
}
List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
- List<SvyTaskTemplateScriptVO> svyTaskTemplateScriptVOS = null;
- if (CollectionUtils.isNotEmpty(serviceSubtaskList) && serviceSubtaskList.size() == 1) {
- if (serviceSubtaskList.get(0).getSendstate() == 3 && isFinish == true) {
- ServiceSubtask serviceSubtask = new ServiceSubtask();
- serviceSubtask.setSendstate(1L);
- serviceSubtask.setPatid(patid);
- serviceSubtask.setTaskid(serviceTask.getTaskid());
- serviceSubtaskMapper.updateServiceSubtaskByPatId(serviceSubtask);
- }
-
- //閫氳繃妯℃澘ID鑾峰彇闂淇℃伅
- SvyTaskTemplateScript svyTaskTemplateScript = new SvyTaskTemplateScript();
- svyTaskTemplateScript.setTemplateID(Long.valueOf(serviceTask.getTemplateid()));
- if (serviceSubtaskList.get(0).getTemplateid() != null)
- svyTaskTemplateScript.setTemplateID(serviceSubtaskList.get(0).getTemplateid());
- else if (serviceTask.getTemplateid() != null)
- svyTaskTemplateScript.setTemplateID(serviceTask.getTemplateid());
- svyTaskTemplateScript.setDelFlag("0");
- List<SvyTaskTemplateScript> svyTaskTemplateScripts = svyTaskTemplateScriptMapper.selectSvyTaskTemplateScriptList(svyTaskTemplateScript);
- if (CollectionUtils.isEmpty(svyTaskTemplateScripts) || svyTaskTemplateScripts.size() == 0) {
- insertSvyTaskTempScript(null, serviceTask);
- svyTaskTemplateScripts = svyTaskTemplateScriptMapper.selectSvyTaskTemplateScriptList(svyTaskTemplateScript);
- if (CollectionUtils.isEmpty(svyTaskTemplateScripts)) {
- throw new BaseException("璇疯仈绯荤鐞嗗憳锛屾鏌ラ棶棰樻ā鏉夸俊鎭�!");
- }
- }
- svyTaskTemplateScriptVOS = DtoConversionUtils.sourceToTarget(svyTaskTemplateScripts, SvyTaskTemplateScriptVO.class);
+ if (CollectionUtils.isEmpty(serviceSubtaskList)) {
+ throw new BaseException("鏈壘鍒版偅鑰呭瓙浠诲姟锛宼askid=" + serviceTask.getTaskid()
+ + ", patid=" + patid + ", subId=" + subId);
}
+ if (serviceSubtaskList.size() > 1) {
+ throw new BaseException("瀛樺湪澶氭潯鎮h�呭瓙浠诲姟锛岃浼犲叆瀛愪换鍔D鍚庡啀鏌ヨ锛宼askid=" + serviceTask.getTaskid()
+ + ", patid=" + patid);
+ }
+
+ ServiceSubtask serviceSubtask = serviceSubtaskList.get(0);
+ if (Long.valueOf(3L).equals(serviceSubtask.getSendstate()) && Boolean.TRUE.equals(isFinish)) {
+ ServiceSubtask updateSubtask = new ServiceSubtask();
+ updateSubtask.setSendstate(1L);
+ updateSubtask.setPatid(patid);
+ updateSubtask.setTaskid(serviceTask.getTaskid());
+ serviceSubtaskMapper.updateServiceSubtaskByPatId(updateSubtask);
+ }
+
+ // 瀛愪换鍔℃ā鏉夸紭鍏堬紱瀛愪换鍔℃湭璁剧疆鏃跺洖閫�鍒颁换鍔℃ā鏉裤��
+ Long templateId = serviceSubtask.getTemplateid() != null
+ ? serviceSubtask.getTemplateid() : serviceTask.getTemplateid();
+ if (templateId == null) {
+ throw new BaseException("浠诲姟鏈厤缃棶鍗锋ā鏉匡紝taskid=" + serviceTask.getTaskid());
+ }
+
+ // 鏌ヨ涓庡厹搴曞鍒跺繀椤讳娇鐢ㄥ悓涓�涓ā鏉縄D锛屽惁鍒欎細鍑虹幇鈥滃鍒跺埌A銆佷粛鏌鈥濈殑姝诲惊鐜��
+ SvyTaskTemplateScript svyTaskTemplateScript = new SvyTaskTemplateScript();
+ svyTaskTemplateScript.setTemplateID(templateId);
+ svyTaskTemplateScript.setDelFlag("0");
+ List<SvyTaskTemplateScript> svyTaskTemplateScripts =
+ svyTaskTemplateScriptMapper.selectSvyTaskTemplateScriptList(svyTaskTemplateScript);
+ if (CollectionUtils.isEmpty(svyTaskTemplateScripts)) {
+ log.warn("闂嵎浠诲姟妯℃澘闂涓虹┖锛屽紑濮嬩粠妯℃澘搴撳厹搴曞鍒�, taskid={}, patid={}, subId={}, queryTemplateId={}, taskTemplateId={}, libTemplateId={}",
+ serviceTask.getTaskid(), patid, subId, templateId,
+ serviceTask.getTemplateid(), serviceTask.getLibtemplateid());
+ insertSvyTaskTempScript(null, serviceTask, templateId);
+ svyTaskTemplateScripts = svyTaskTemplateScriptMapper.selectSvyTaskTemplateScriptList(svyTaskTemplateScript);
+ if (CollectionUtils.isEmpty(svyTaskTemplateScripts)) {
+ throw new BaseException("璇疯仈绯荤鐞嗗憳锛屾鏌ラ棶棰樻ā鏉夸俊鎭�! taskid=" + serviceTask.getTaskid()
+ + ", templateId=" + templateId + ", libTemplateId=" + serviceTask.getLibtemplateid());
+ }
+ }
+ List<SvyTaskTemplateScriptVO> svyTaskTemplateScriptVOS =
+ DtoConversionUtils.sourceToTarget(svyTaskTemplateScripts, SvyTaskTemplateScriptVO.class);
//鑾峰彇鎮h�呬俊鎭�
PatArchive patArchive = null;
if (patfrom.equals("0")) patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
@@ -529,7 +545,7 @@
svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
} else {
//濡傛灉閫夐」娌℃湁鏌ュ埌锛岄渶瑕佸幓鍩虹妯℃澘搴撳皢閫夐」鏌ヨ鍑烘潵锛屾斁鍒颁换鍔℃ā鏉块�夐」搴撲腑
- insertSvyTaskTempScript(svyTaskTemplateScriptVO, serviceTask);
+ insertSvyTaskTempScript(svyTaskTemplateScriptVO, serviceTask, templateId);
}
}
@@ -539,8 +555,13 @@
}
- private void insertSvyTaskTempScript(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, ServiceTask serviceTask) {
- log.info("-------鍩虹妯℃澘libtemplateid鐨勫�间负锛歿}", serviceTask.getLibtemplateid());
+ private void insertSvyTaskTempScript(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO,
+ ServiceTask serviceTask, Long targetTemplateId) {
+ log.info("-------鍩虹妯℃澘libtemplateid鐨勫�间负锛歿}锛岀洰鏍噒emplateID涓猴細{}", serviceTask.getLibtemplateid(), targetTemplateId);
+ if (targetTemplateId == null) {
+ log.warn("鐩爣妯℃澘ID涓虹┖锛屾棤娉曞鍒跺熀纭�妯℃澘闂, taskid={}", serviceTask.getTaskid());
+ return;
+ }
if (StringUtils.isEmpty(serviceTask.getLibtemplateid())) {
return;
}
@@ -551,7 +572,8 @@
log.info("-------鍩虹妯℃澘svyLibTemplateScripts闂鍊间负锛歿}", svyLibTemplateScripts.size());
for (SvyLibTemplateScript sll : svyLibTemplateScripts) {
if (ObjectUtils.isNotEmpty(svyTaskTemplateScriptVO)) {
- if (sll.getScriptContent().trim().equals(svyTaskTemplateScriptVO.getScriptContent().trim())) {
+ if (StringUtils.equals(StringUtils.trim(sll.getScriptContent()),
+ StringUtils.trim(svyTaskTemplateScriptVO.getScriptContent()))) {
SvyLibTemplateTargetoption sltto = new SvyLibTemplateTargetoption();
sltto.setScriptid(sll.getId());
List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(sltto);
@@ -559,7 +581,7 @@
//灏嗘煡鍑烘潵鐨勯�夐」锛屾斁鍒皊vyTaskTemplateTargetoption涓�
List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptionList = DtoConversionUtils.sourceToTarget(svyLibTemplateTargetoptions, SvyTaskTemplateTargetoption.class);
for (int i = 0; i < svyTaskTemplateTargetoptionList.size(); i++) {
- svyTaskTemplateTargetoptionList.get(i).setTemplateID(svyTaskTemplateScriptVO.getTemplateID());
+ svyTaskTemplateTargetoptionList.get(i).setTemplateID(targetTemplateId);
svyTaskTemplateTargetoptionList.get(i).setScriptid(svyTaskTemplateScriptVO.getId());
svyTaskTemplateTargetoptionMapper.insertSvyTaskTemplateTargetoption(svyTaskTemplateTargetoptionList.get(i));
log.info("-------鏂板瀹屼箣鍚庣殑閫夐」ID鍊间负锛歿}", svyTaskTemplateTargetoptionList.get(i).getId());
@@ -571,7 +593,7 @@
SvyTaskTemplateScript stts = DtoConversionUtils.sourceToTarget(sll, SvyTaskTemplateScript.class);
stts.setId(null);
stts.setTaskid(serviceTask.getTaskid());
- stts.setTemplateID(serviceTask.getTemplateid());
+ stts.setTemplateID(targetTemplateId);
svyTaskTemplateScriptMapper.insertSvyTaskTemplateScript(stts);
//鏂板闂閫夐」
@@ -580,7 +602,7 @@
List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(sltto);
List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptionList = DtoConversionUtils.sourceToTarget(svyLibTemplateTargetoptions, SvyTaskTemplateTargetoption.class);
for (int i = 0; i < svyTaskTemplateTargetoptionList.size(); i++) {
- svyTaskTemplateTargetoptionList.get(i).setTemplateID(serviceTask.getTemplateid());
+ svyTaskTemplateTargetoptionList.get(i).setTemplateID(targetTemplateId);
svyTaskTemplateTargetoptionList.get(i).setScriptid(stts.getId());
svyTaskTemplateTargetoptionMapper.insertSvyTaskTemplateTargetoption(svyTaskTemplateTargetoptionList.get(i));
}
--
Gitblit v1.9.3