From 10343cb5deaecc2bf3023317a4c142ba84ec3b72 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期一, 09 十一月 2026 15:30:55 +0800
Subject: [PATCH] feat: 统一档案随访周期 followupPeriod

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java |   38 +++++++++++++++++++++++++++++++++-----
 1 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
index 19130e6..80225ac 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -63,6 +63,8 @@
 import com.ruoyi.task.service.IServiceSubtaskDetailTraceService;
 import com.ruoyi.task.domain.ServiceSubtaskPreachform;
 import com.ruoyi.task.service.IServiceTaskService;
+import com.ruoyi.task.mapper.ServiceSubtaskPreachformMapper;
+import com.ruoyi.patarchive.mapper.PatArchiveMapper;
 /**
  * 浠诲姟闂嵎闂閫夐」Service涓氬姟灞傚鐞�
  *
@@ -516,8 +518,29 @@
         }
     }
 
+    /**
+     * 鍚屼竴浠介棶鍗风殑淇濆瓨閿侊細鎸夈�屼换鍔�+鎮h��+瀛愪换鍔°�嶅姞閿侊紝
+     * 鍓嶇閲嶅鐐瑰嚮 / 骞跺彂璇锋眰杩涙潵鏃朵覆琛屾墽琛岋紝閬垮厤鍚屼竴浠介棶鍗疯鍐欎袱閬嶃��
+     * 娉ㄦ剰锛氬彧鏄覆琛屽寲锛屼笉闃绘鍐嶆淇濆瓨鈥斺�旈棶鍗蜂粛鐒跺厑璁镐慨鏀瑰悗鍐嶄繚瀛橈紙璧版洿鏂伴�昏緫锛夈��
+     */
+    private static final java.util.concurrent.ConcurrentHashMap<String, Object> SAVE_LOCKS =
+            new java.util.concurrent.ConcurrentHashMap<>();
+
     @Override
     public Integer saveQuestionDetail(ServiceSubTaskCacheReq serviceSubTaskCacheReq, Long flag) {
+        String lockKey = serviceSubTaskCacheReq.getParam1() + "_"
+                + serviceSubTaskCacheReq.getParam2() + "_"
+                + serviceSubTaskCacheReq.getParam6();
+        Object lock = SAVE_LOCKS.computeIfAbsent(lockKey, k -> new Object());
+        if (SAVE_LOCKS.size() > 20000) {
+            SAVE_LOCKS.clear();
+        }
+        synchronized (lock) {
+            return doSaveQuestionDetail(serviceSubTaskCacheReq, flag);
+        }
+    }
+
+    private Integer doSaveQuestionDetail(ServiceSubTaskCacheReq serviceSubTaskCacheReq, Long flag) {
         Long tid = Long.valueOf(serviceSubTaskCacheReq.getParam1());
         Long pid = Long.valueOf(serviceSubTaskCacheReq.getParam2());
         Long subid = Long.valueOf(serviceSubTaskCacheReq.getParam6());
@@ -920,7 +943,8 @@
         Map<String, Object> map = new HashMap<>();
         if (serviceSubTaskQueryReq.getSubId() != null) {
             ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(serviceSubTaskQueryReq.getSubId());
-            if (serviceSubtask.getSendstate() == 4L) {
+            // 浠诲姟鍙兘宸茶鍒犻櫎/鏌ヤ笉鍒帮紝sendstate 涔熷彲鑳戒负绌猴紝杩欓噷蹇呴』鍒ょ┖锛屽惁鍒欐媶绠变細 NPE
+            if (serviceSubtask != null && Long.valueOf(4L).equals(serviceSubtask.getSendstate())) {
                 log.info("鎮h�呭瓙浠诲姟ID涓猴細{}锛岀姸鎬佷负锛歿}", serviceSubTaskQueryReq.getSubId(), serviceSubtask.getSendstate());
                 throw new BaseException("璇ヤ换鍔′笉鎵ц");
             }
@@ -933,7 +957,7 @@
         //鑾峰彇涓婃鐨勯棶绛旂粨鏋�
         ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(serviceSubTaskQueryReq.getSubId());
         map.put("upScriptResult", null);
-        map.put("templateName", serviceSubtask.getTemplatename());
+        map.put("templateName", serviceSubtask == null ? null : serviceSubtask.getTemplatename());
         map.put("upTaskName", null);
         if (ObjectUtils.isNotEmpty(serviceSubtask) && serviceSubtask.getUpid() != null) {
             Map<String, Object> scriptInfoByCondition2 = serviceTaskService.getScriptInfoByCondition(serviceSubTaskQueryReq.getTaskid(), serviceSubTaskQueryReq.getPatid(), serviceSubTaskQueryReq.getIsFinish(), serviceSubTaskQueryReq.getPatfrom(), serviceSubTaskQueryReq.getSubId());
@@ -951,7 +975,7 @@
     private Map<String, Object> getMap(Map<String, Object> scriptInfoByCondition, Long subid, Long patid) {
         Map<String, Object> map = new HashMap<>();
         if (ObjectUtils.isNotEmpty(scriptInfoByCondition) && ObjectUtils.isNotEmpty(scriptInfoByCondition.get("script"))) {
-            if (scriptInfoByCondition.get("type").equals("1")) {
+            if ("1".equals(scriptInfoByCondition.get("type"))) {
                 List<IvrTaskTemplateScriptVO> ivrTaskTemplateScriptVOS = (List<IvrTaskTemplateScriptVO>) scriptInfoByCondition.get("script");
                 // 鎵归噺鏌ヨ鎵�鏈夋槑缁嗭紝閬垮厤寰幆涓�愭潯鏌ユ暟鎹簱锛圢+1闂浼樺寲锛�
                 Map<Long, ServiceSubtaskDetail> detailMap = getScriptResultMap(subid, patid);
@@ -964,7 +988,7 @@
                 }
                 map.put("scriptResult", ivrTaskTemplateScriptVOS);
                 map.put("taskName", scriptInfoByCondition.get("taskName"));
-            } else if (scriptInfoByCondition.get("type").equals("2")) {
+            } else if ("2".equals(scriptInfoByCondition.get("type"))) {
                 List<SvyTaskTemplateScriptVO> svyTaskTemplateScriptVOList = (List) scriptInfoByCondition.get("script");
                 // 鎵归噺鏌ヨ鎵�鏈夋槑缁嗭紝閬垮厤寰幆涓�愭潯鏌ユ暟鎹簱锛圢+1闂浼樺寲锛�
                 Map<Long, ServiceSubtaskDetail> detailMap = getScriptResultMap(subid, patid);
@@ -980,7 +1004,7 @@
                 }
                 map.put("scriptResult", svyTaskTemplateScriptVOList);
                 map.put("taskName", scriptInfoByCondition.get("taskName"));
-            } else if (scriptInfoByCondition.get("type").equals("3")) {
+            } else if ("3".equals(scriptInfoByCondition.get("type"))) {
                 //瀹f暀涓嶉渶瑕佹煡鐪�
                 List<HeLibrary> heLibraryList = (List) scriptInfoByCondition.get("script");
                 map.put("scriptResult", heLibraryList);
@@ -1220,6 +1244,8 @@
             //闈炴弧鎰忓害鎰忚寮傚父鑷姩濉叆绌�
             subtaskDetailTrace.setMatchedtext(stt != null ? stt.getOptioncontent() : svyTaskTemplateScriptVO.getIsMydException());
             subtaskDetailTrace.setAsrtext(stt != null ? stt.getOptioncontent() : svyTaskTemplateScriptVO.getIsMydException());
+            //琛ュ厖鎻忚堪锛堥�変簡"鍏朵粬/鏈夌棁鐘�"鏃跺~鐨勬枃瀛楋級涓�骞跺甫鍒� trace 琛�
+            subtaskDetailTrace.setAnswerps(serviceSubtaskDetail.getAnswerps());
             subtaskDetailTrace.setIsMydException(svyTaskTemplateScriptVO.getIsMydException());
 
             subtaskDetailTrace.setRecordpath(null);
@@ -1513,6 +1539,8 @@
             subtaskDetailTrace.setType(ivrLibaScriptAssort != null ? ivrLibaScriptAssort.getType() : null);
             subtaskDetailTrace.setScriptid(ivrTaskTemplateScriptVO.getId() == null ? ivrTaskTemplateScriptVO.getScriptID() : ivrTaskTemplateScriptVO.getId());
             subtaskDetailTrace.setAsrtext(ivrTaskTemplateScriptVO.getIvrtext());
+            //琛ュ厖鎻忚堪涓�骞跺甫鍒� trace 琛�
+            subtaskDetailTrace.setAnswerps(serviceSubtaskDetail.getAnswerps());
             subtaskDetailTrace.setRecordpath(null);
             subtaskDetailTrace.setPatid(selectServiceSubtaskList.get(0).getPatid());
             JSONObject patdescJson2 = new JSONObject();

--
Gitblit v1.9.3