From 141eef1ac1e9111fb33f96a95b59ba69422f8688 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 14 九月 2026 17:02:17 +0800
Subject: [PATCH] 1.优化问卷详情的查询速度

---
 smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java |  147 ++++++++++++++++++++++++------------------------
 1 files changed, 73 insertions(+), 74 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 4ac0673..1e72519 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
@@ -4,12 +4,10 @@
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.Gson;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DtoConversionUtils;
-import com.ruoyi.common.utils.http.HttpUtils;
 import com.smartor.domain.entity.ServiceSubtaskEntity;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -18,7 +16,6 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.smartor.service.IServiceTaskService;
 import org.springframework.transaction.annotation.Transactional;
@@ -34,49 +31,34 @@
 public class ServiceTaskServiceImpl implements IServiceTaskService {
     @Autowired
     private ServiceTaskMapper serviceTaskMapper;
-
     @Autowired
     private ServiceSubtaskMapper serviceSubtaskMapper;
-
     @Autowired
     private ServiceTaskdeptMapper serviceTaskdeptMapper;
-
     @Autowired
     private PatArchiveImportMapper patArchiveImportMapper;
-
-
     @Autowired
     private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
-
     @Autowired
     private HeLibraryMapper heLibraryMapper;
-
     @Autowired
     private SvyTaskTemplateScriptMapper svyTaskTemplateScriptMapper;
     @Autowired
     private IvrTaskTemplateScriptMapper ivrTaskTemplateScriptMapper;
-
     @Autowired
     private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper;
-
     @Autowired
     private PatArchiveMapper patArchiveMapper;
-
     @Autowired
     private PatMedInhospMapper patMedInhospMapper;
-
     @Autowired
     private PatMedOuthospMapper patMedOuthospMapper;
-
-
     @Autowired
     private SvyLibTemplateTargetoptionMapper svyLibTemplateTargetoptionMapper;
     @Autowired
     private IvrTaskTemplateTargetoptionMapper ivrTaskTemplateTargetOptionMapper;
-
     @Autowired
     private SvyTaskTemplateTargetoptionMapper svyTaskTemplateTargetoptionMapper;
-
     @Autowired
     private RedisCache redisCache;
 
@@ -173,7 +155,7 @@
         ServiceSubtaskEntity serviceSubtaskVO = DtoConversionUtils.sourceToTarget(serviceSubtask, ServiceSubtaskEntity.class);
         List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
         for (ServiceSubtask ss : serviceSubtaskList) {
-            log.error("sfSend闇�瑕佺Щ闄ょ殑subId涓猴細{}", ss.getId().toString());
+            log.info("sfSend闇�瑕佺Щ闄ょ殑subId涓猴細{}", ss.getId().toString());
             redisCache.removeElementFromList("cache-exist", ss.getId().toString());
             redisCache.removeElementFromList("cache-0", ss.getId().toString());
             redisCache.removeElementFromList("cache-1", ss.getId().toString());
@@ -230,21 +212,18 @@
     }
 
     @Override
-    public Map<String, Object> getScriptInfoByCondition(Long taskid, Long patid, Boolean isFinish, String patfrom) {
+    public Map<String, Object> getScriptInfoByCondition(Long taskid, Long patid, Boolean isFinish, String patfrom, Long subId) {
         Map<String, Object> map = new HashMap<>();
         ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
-        serviceSubtaskVO.setPatid(patid);
-        serviceSubtaskVO.setTaskid(taskid);
-        serviceSubtaskVO.setSendstate(3L);
+        if (subId != null) {
+            serviceSubtaskVO.setSubId(subId);
+        } else {
+            serviceSubtaskVO.setPatid(patid);
+            serviceSubtaskVO.setTaskid(taskid);
+            serviceSubtaskVO.setSendstate(3L);
+        }
         List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
-//        //鏌ヨ鎮h�呮槸鍚﹂噸瑕嗗仛棰�
-//        if (CollectionUtils.isEmpty(selectServiceSubtaskList)) {
-//            Long submit = selectServiceSubtaskList.get(0).getSubmit();
-//            if (submit == 1L) {
-//                map.put("submit", "1");
-//                return map;
-//            }
-//        }
+
         //閫氳繃浠诲姟ID鑾峰彇妯℃澘ID
         ServiceTask serviceTask = selectServiceTaskByTaskid(taskid);
         if (serviceTask == null) {
@@ -253,12 +232,12 @@
         List info = new ArrayList();
         if (serviceTask.getType().equals("1")) {
             //闅忚
-            log.error("鏂囨湰闅忚闂");
+            log.info("鏂囨湰闅忚闂");
             info = sfInfo(serviceTask, patid, patfrom);
         } else if (serviceTask.getType().equals("2")) {
             //闂嵎
-            log.error("鏂囨湰闂嵎闂");
-            info = wjInfo(serviceTask, patid, isFinish, patfrom);
+            log.info("鏂囨湰闂嵎闂");
+            info = wjInfo(serviceTask, patid, isFinish, patfrom, subId);
         } else {
             //瀹f暀
             info = xjInfo(Long.valueOf(serviceTask.getLibtemplateid()), taskid, patid, isFinish);
@@ -286,17 +265,21 @@
             List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
             if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
                 ServiceSubtaskPreachform ssp = serviceSubtaskPreachforms.get(0);
-                ssp.setSendstate("3");
-                serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(ssp);
+                //浜哄伐鏃�-3宸查鍙栫姸鎬�(service_subtask_preachform.sendstate = 3)
+                if(StringUtils.isNotEmpty(ssp.getPreachform()) && !ssp.getPreachform().equals("1")){
+                    ssp.setSendstate("3");
+                    serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(ssp);
+                }
             }
         }
-
-        if (StringUtils.isNotEmpty(serviceTask.getKcb())) map.put("kcb", serviceTask.getKcb());
-        map.put("script", info);
-        if (StringUtils.isNotEmpty(serviceTask.getJsy())) map.put("jsy", serviceTask.getJsy());
-        map.put("type", serviceTask.getType());
-        map.put("taskName", serviceTask.getTaskName());
-        map.put("submit", "0");
+        if (serviceTask != null) {
+            if (StringUtils.isNotEmpty(serviceTask.getKcb())) map.put("kcb", serviceTask.getKcb());
+            map.put("script", info);
+            if (StringUtils.isNotEmpty(serviceTask.getJsy())) map.put("jsy", serviceTask.getJsy());
+            map.put("type", serviceTask.getType());
+            map.put("taskName", serviceTask.getTaskName());
+            map.put("submit", "0");
+        }
         return map;
     }
 
@@ -373,7 +356,7 @@
                     }
                 }
                 //鏇挎崲鎮h�呬釜浜轰俊鎭暟鎹�
-                log.error("闂id锛歿},   闂鍐呭锛歿}", svyTaskTemplateScriptVO.getId(), svyTaskTemplateScriptVO.getScriptContent());
+                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() : ""));
@@ -438,7 +421,6 @@
             if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getScriptContent())) {
                 for (Map<String, String> map : mapList) {
                     for (String key : map.keySet()) {
-
                         ivrTaskTemplateScriptVO.setScriptContent(ivrTaskTemplateScriptVO.getScriptContent().replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : ""));
                     }
                 }
@@ -466,13 +448,18 @@
      * @param patid
      * @return
      */
-    private List wjInfo(ServiceTask serviceTask, Long patid, Boolean isFinish, String patfrom) {
+    private List wjInfo(ServiceTask serviceTask, Long patid, Boolean isFinish, String patfrom, Long subId) {
         //鐢ㄦ埛鐐瑰嚮浜嗗閾撅紝灏辩畻浠栭鍙栦簡
         //杩欐牱鍋氫細鏈変竴涓棶棰橈紝濡傛灉鍥哄畾浠诲姟锛屼細鍑虹幇涓�涓换鍔¢噷锛屾湁澶氫釜璇ユ偅鑰�
         ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
-        serviceSubtaskVO.setTaskid(serviceTask.getTaskid());
-        serviceSubtaskVO.setPatid(patid);
+        if (subId != null) {
+            serviceSubtaskVO.setSubId(subId);
+        } else {
+            serviceSubtaskVO.setTaskid(serviceTask.getTaskid());
+            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();
@@ -481,21 +468,25 @@
                 serviceSubtask.setTaskid(serviceTask.getTaskid());
                 serviceSubtaskMapper.updateServiceSubtaskByPatId(serviceSubtask);
             }
-        }
-        //閫氳繃妯℃澘ID鑾峰彇闂淇℃伅
-        SvyTaskTemplateScript svyTaskTemplateScript = new SvyTaskTemplateScript();
-        svyTaskTemplateScript.setTemplateID(Long.valueOf(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("璇疯仈绯荤鐞嗗憳锛屾鏌ラ棶棰樻ā鏉夸俊鎭�!");
-            }
-        }
-        List<SvyTaskTemplateScriptVO> svyTaskTemplateScriptVOS = DtoConversionUtils.sourceToTarget(svyTaskTemplateScripts, SvyTaskTemplateScriptVO.class);
 
+            //閫氳繃妯℃澘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);
+        }
         //鑾峰彇鎮h�呬俊鎭�
         PatArchive patArchive = null;
         if (patfrom.equals("0")) patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
@@ -505,7 +496,7 @@
         }
 
 
-        //閫氳繃鎮h�呬俊鎭拰浠诲姟淇℃伅涓殑textParam瀵归棶棰樹腑鐨勫彉閲忚繘琛屽~鍏�
+        //閫氳繃鎮h�呬俊鎭拰浠诲姟淇℃伅涓殑 textParam 瀵归棶棰樹腑鐨勫彉閲忚繘琛屽~鍏�
         ObjectMapper objectMapper = new ObjectMapper();
         Map<String, Map<String, String>> ivrTaskMap = null;
         try {
@@ -513,28 +504,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.error("闂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());

--
Gitblit v1.9.3