From 357100150bd0ba266d78d8d0f3b02c37b22435d8 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期一, 02 十一月 2026 10:17:19 +0800
Subject: [PATCH] 【丽水】1、指标查询与随访统计条件不同问题 2、微信发送重复问题

---
 smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java |  120 +++++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 70 insertions(+), 50 deletions(-)

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 44f8c04..3d4905b 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
@@ -255,20 +255,6 @@
             }
         }
 
-        if (CollectionUtils.isNotEmpty(selectServiceSubtaskList)) {
-            //灏嗗綋鍓嶆柟寮忕殑鍙戦�佺姸鎬佹敼鎴愬凡棰嗗彇
-            ServiceSubtask serviceSubtask = selectServiceSubtaskList.get(0);
-            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
-            serviceSubtaskPreachform.setPreachform(serviceSubtask.getCurrentPreachform());
-            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
-            serviceSubtaskPreachform.setTaskid(serviceTask.getTaskid());
-            List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
-            if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
-                ServiceSubtaskPreachform ssp = serviceSubtaskPreachforms.get(0);
-                ssp.setSendstate("3");
-                serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(ssp);
-            }
-        }
         if (serviceTask != null) {
             if (StringUtils.isNotEmpty(serviceTask.getKcb())) map.put("kcb", serviceTask.getKcb());
             map.put("script", info);
@@ -456,30 +442,50 @@
             serviceSubtaskVO.setPatid(patid);
         }
         List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
-        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);
-            }
+        if (CollectionUtils.isEmpty(serviceSubtaskList)) {
+            throw new BaseException("鏈壘鍒版偅鑰呭瓙浠诲姟锛宼askid=" + serviceTask.getTaskid()
+                    + ", patid=" + patid + ", subId=" + subId);
         }
-        //閫氳繃妯℃澘ID鑾峰彇闂淇℃伅
+        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(Long.valueOf(serviceTask.getTemplateid()));
-        if (serviceTask.getTemplateid() != null) svyTaskTemplateScript.setTemplateID(serviceTask.getTemplateid());
+        svyTaskTemplateScript.setTemplateID(templateId);
         svyTaskTemplateScript.setDelFlag("0");
-        List<SvyTaskTemplateScript> svyTaskTemplateScripts = svyTaskTemplateScriptMapper.selectSvyTaskTemplateScriptList(svyTaskTemplateScript);
-        if (CollectionUtils.isEmpty(svyTaskTemplateScripts) || svyTaskTemplateScripts.size() == 0) {
-            insertSvyTaskTempScript(null, serviceTask);
+        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("璇疯仈绯荤鐞嗗憳锛屾鏌ラ棶棰樻ā鏉夸俊鎭�!");
+                throw new BaseException("璇疯仈绯荤鐞嗗憳锛屾鏌ラ棶棰樻ā鏉夸俊鎭�! taskid=" + serviceTask.getTaskid()
+                        + ", templateId=" + templateId + ", libTemplateId=" + serviceTask.getLibtemplateid());
             }
         }
-        List<SvyTaskTemplateScriptVO> svyTaskTemplateScriptVOS = DtoConversionUtils.sourceToTarget(svyTaskTemplateScripts, SvyTaskTemplateScriptVO.class);
-
+        List<SvyTaskTemplateScriptVO> svyTaskTemplateScriptVOS =
+                DtoConversionUtils.sourceToTarget(svyTaskTemplateScripts, SvyTaskTemplateScriptVO.class);
         //鑾峰彇鎮h�呬俊鎭�
         PatArchive patArchive = null;
         if (patfrom.equals("0")) patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
@@ -489,7 +495,7 @@
         }
 
 
-        //閫氳繃鎮h�呬俊鎭拰浠诲姟淇℃伅涓殑textParam瀵归棶棰樹腑鐨勫彉閲忚繘琛屽~鍏�
+        //閫氳繃鎮h�呬俊鎭拰浠诲姟淇℃伅涓殑 textParam 瀵归棶棰樹腑鐨勫彉閲忚繘琛屽~鍏�
         ObjectMapper objectMapper = new ObjectMapper();
         Map<String, Map<String, String>> ivrTaskMap = null;
         try {
@@ -497,28 +503,36 @@
         } catch (JsonProcessingException e) {
             e.printStackTrace();
         }
-        List<Map<String, String>> mapList = new ArrayList<>();
 
+        // 浼樺寲 1: 棰勫厛鍚堝苟鎵�鏈夋浛鎹㈣鍒欎负涓�涓� Map锛岄伩鍏嶅娆¢亶鍘�
+        Map<String, String> replaceMap = new HashMap<>();
         if (ivrTaskMap != null) {
             for (Map<String, String> map : ivrTaskMap.values()) {
-                mapList.add(map);
+                replaceMap.putAll(map);
             }
         }
+
         //灏嗘ā鏉块棶棰樿瘽鏈噷鐨勯�氶厤绗︽浛鎹�
         for (SvyTaskTemplateScriptVO svyTaskTemplateScriptVO : svyTaskTemplateScriptVOS) {
             if (StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getScriptContent())) {
-                for (Map<String, String> map : mapList) {
-                    for (String key : map.keySet()) {
-                        svyTaskTemplateScriptVO.setScriptContent(svyTaskTemplateScriptVO.getScriptContent().replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : ""));
-                    }
+                // 浼樺寲 2: 浣跨敤姝e垯 PatternMatcher 鎵归噺鏇挎崲锛屾彁鍗囨�ц兘
+                String scriptContent = svyTaskTemplateScriptVO.getScriptContent();
+
+                // 鎵归噺鏇挎崲 IVR 浠诲姟鍙傛暟
+                for (Map.Entry<String, String> entry : replaceMap.entrySet()) {
+                    String value = StringUtils.isNotEmpty(entry.getValue()) ? entry.getValue() : "";
+                    scriptContent = scriptContent.replace(entry.getKey(), value);
                 }
+
                 //鏇挎崲鎮h�呬釜浜轰俊鎭暟鎹�
-                log.info("闂id锛歿},   闂鍐呭锛歿}", svyTaskTemplateScriptVO.getId(), svyTaskTemplateScriptVO.getScriptContent());
-                if (StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getScriptContent()) && ObjectUtils.isNotEmpty(patArchive)) {
-                    svyTaskTemplateScriptVO.setScriptContent(svyTaskTemplateScriptVO.getScriptContent().replace("${name}", StringUtils.isNotEmpty(patArchive.getName()) ? patArchive.getName() : ""));
-                    svyTaskTemplateScriptVO.setScriptContent(svyTaskTemplateScriptVO.getScriptContent().replace("${dzz}", StringUtils.isNotEmpty(patArchive.getPlaceOfResidence()) ? patArchive.getPlaceOfResidence() : ""));
-                    svyTaskTemplateScriptVO.setScriptContent(svyTaskTemplateScriptVO.getScriptContent().replace("${dhh}", StringUtils.isNotEmpty(patArchive.getTelcode()) ? patArchive.getTelcode() : ""));
+                log.info("闂 id锛歿},   闂鍐呭锛歿}", svyTaskTemplateScriptVO.getId(), scriptContent);
+                if (ObjectUtils.isNotEmpty(patArchive)) {
+                    // 浼樺寲 3: 鍑忓皯涓嶅繀瑕佺殑闈炵┖鍒ゆ柇锛坧atArchive 宸茬粡鍒よ繃锛�
+                    scriptContent = scriptContent.replace("${name}", StringUtils.defaultString(patArchive.getName()));
+                    scriptContent = scriptContent.replace("${dzz}", StringUtils.defaultString(patArchive.getPlaceOfResidence()));
+                    scriptContent = scriptContent.replace("${dhh}", StringUtils.defaultString(patArchive.getTelcode()));
                 }
+                svyTaskTemplateScriptVO.setScriptContent(scriptContent);
                 //鑾峰彇闂閫夐」
                 SvyTaskTemplateTargetoption svyTaskTemplateTargetoption = new SvyTaskTemplateTargetoption();
                 svyTaskTemplateTargetoption.setScriptid(svyTaskTemplateScriptVO.getId());
@@ -531,7 +545,7 @@
                     svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
                 } else {
                     //濡傛灉閫夐」娌℃湁鏌ュ埌锛岄渶瑕佸幓鍩虹妯℃澘搴撳皢閫夐」鏌ヨ鍑烘潵锛屾斁鍒颁换鍔℃ā鏉块�夐」搴撲腑
-                    insertSvyTaskTempScript(svyTaskTemplateScriptVO, serviceTask);
+                    insertSvyTaskTempScript(svyTaskTemplateScriptVO, serviceTask, templateId);
 
                 }
             }
@@ -541,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;
         }
@@ -553,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);
@@ -561,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());
@@ -573,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);
 
                 //鏂板闂閫夐」
@@ -582,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