From c24d16a37523a49080392610357872ce580cbc38 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 26 十月 2026 14:03:33 +0800
Subject: [PATCH] 代码提交

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java |  247 ++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 181 insertions(+), 66 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 6540161..19130e6 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -11,9 +11,7 @@
 import com.ruoyi.common.utils.RSAPublicKeyExample;
 import com.ruoyi.common.utils.StringUtils;
 import com.smartor.domain.*;
-import com.smartor.domain.DTO.ServiceSubtaskDetailDTO;
-import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
 import com.smartor.mapper.*;
 import com.smartor.service.*;
 import lombok.extern.slf4j.Slf4j;
@@ -29,6 +27,42 @@
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import com.ruoyi.template.domain.HeLibrary;
+import com.ruoyi.template.domain.IvrLibaScriptAssort;
+import com.ruoyi.inhospvisit.domain.PatMedInhosp;
+import com.ruoyi.outpatientvisit.domain.PatMedOuthosp;
+import com.ruoyi.outpatientvisit.domain.PatMedOuthospQueryReq;
+import com.ruoyi.inhospvisit.api.InhospVisitFacade;
+import com.ruoyi.outpatientvisit.api.OuthospDataFacade;
+import com.ruoyi.template.domain.IvrTaskTemplate;
+import com.ruoyi.template.domain.IvrTaskTemplateScriptVO;
+import com.ruoyi.template.domain.IvrTaskTemplateTargetoption;
+import com.ruoyi.template.service.IIvrTaskTemplateService;
+import com.ruoyi.template.domain.IvrLibaTemplateScript;
+import com.ruoyi.template.mapper.IvrLibaScriptAssortMapper;
+import com.ruoyi.template.service.IIvrLibaTemplateScriptService;
+import com.ruoyi.template.domain.SvyLibScriptCategory;
+import com.ruoyi.template.domain.SvyLibTemplateScript;
+import com.ruoyi.template.domain.SvyTaskTemplate;
+import com.ruoyi.template.domain.SvyTaskTemplateScriptVO;
+import com.ruoyi.template.domain.SvyTaskTemplateTargetoption;
+import com.ruoyi.template.mapper.SvyLibScriptCategoryMapper;
+import com.ruoyi.template.service.ISvyTaskTemplateService;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.DTO.ServiceSubtaskDetailDTO;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
+import com.ruoyi.task.domain.ServiceSubtaskDetailVO;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.TaskSendTimeVO;
+import com.ruoyi.task.mapper.ServiceSubtaskDetailMapper;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
+import com.ruoyi.task.service.IServiceSubtaskDetailTraceService;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.service.IServiceTaskService;
 /**
  * 浠诲姟闂嵎闂閫夐」Service涓氬姟灞傚鐞�
  *
@@ -40,6 +74,18 @@
 public class ServiceSubtaskAnswerServiceImpl implements IServiceSubtaskAnswerService {
     @Autowired
     private ServiceSubtaskAnswerMapper serviceSubtaskAnswerMapper;
+
+    /**
+     * 璺ㄦā鍧楄闂竴寰嬬粡妯″潡闂ㄩ潰锛堢姝㈢洿杩炲凡鎼蛋鐨� Mapper锛夈��
+     */
+    @Autowired
+    private OuthospDataFacade outhospDataFacade;
+
+    /**
+     * 璺ㄦā鍧楄闂竴寰嬬粡妯″潡闂ㄩ潰锛堢姝㈢洿杩炲凡鎼蛋鐨� Mapper锛夈��
+     */
+    @Autowired
+    private InhospVisitFacade inhospVisitFacade;
 
     @Autowired
     private ServiceSubtaskMapper serviceSubtaskMapper;
@@ -66,11 +112,7 @@
     private PatArchiveMapper patArchiveMapper;
 
 
-    @Autowired
-    private PatMedInhospMapper patMedInhospMapper;
 
-    @Autowired
-    private PatMedOuthospMapper patMedOuthospMapper;
 
     @Autowired
     private IServiceSubtaskDetailTraceService traceService;
@@ -81,8 +123,6 @@
     @Autowired
     private ISvyLibTemplateScriptService svyLibTemplateScriptService;
 
-    @Autowired
-    private ISvyTaskTemplateTargetoptionService svyTaskTemplateTargetoptionService;
 
     @Autowired
     private IIvrTaskTemplateService ivrTaskTemplateService;
@@ -95,6 +135,66 @@
 
     @Value("${dealDeptCode}")
     private String dealDeptCode;
+
+    /**
+     * 瀹夊叏瑙f瀽鍒嗘暟锛歯ull銆佺┖涓层�佺┖鐧戒覆浠ュ強闈炴硶鏍煎紡涓�寰嬫寜 0 澶勭悊锛岄伩鍏� Double.parseDouble 鎶� NumberFormatException
+     *
+     * @param scoreValue 鍒嗘暟瀛楃涓�
+     * @return 瑙f瀽鍚庣殑鍒嗘暟锛屾棤娉曡В鏋愭椂杩斿洖 0
+     */
+    private double parseScore(String scoreValue) {
+        if (StringUtils.isEmpty(scoreValue)) {
+            return 0D;
+        }
+        try {
+            return Double.parseDouble(scoreValue.trim());
+        } catch (NumberFormatException e) {
+            log.warn("鍒嗘暟鏍煎紡闈炴硶锛屾寜 0 澶勭悊锛屽師濮嬪�硷細{}", scoreValue);
+            return 0D;
+        }
+    }
+
+    /**
+     * 灏嗙疮鍔犲悗鐨勫垎鍊兼牸寮忓寲涓鸿惤搴撳瓧绗︿覆锛屽幓鎺夊浣欑殑灏忔暟浣嶏紙濡� 5.0 -> 5锛�
+     *
+     * @param scoreValue 鍒嗗��
+     * @return 鍒嗘暟瀛楃涓�
+     */
+    private String formatScore(double scoreValue) {
+        if (Double.isNaN(scoreValue) || Double.isInfinite(scoreValue)) {
+            log.warn("鍒嗘暟璁$畻缁撴灉闈炴硶锛屾寜 0 澶勭悊锛屽師濮嬪�硷細{}", scoreValue);
+            return "0";
+        }
+        return BigDecimal.valueOf(scoreValue).stripTrailingZeros().toPlainString();
+    }
+
+    /**
+     * 瀹夊叏瑙f瀽寮傚父鏍囪锛歯ull銆佺┖涓层�侀潪娉曟牸寮忎竴寰嬫寜 0锛堟甯革級澶勭悊
+     *
+     * @param isabnormalFlag 寮傚父鏍囪瀛楃涓�
+     * @return 寮傚父鏍囪鍊�
+     */
+    private Integer parseIsabnormal(String isabnormalFlag) {
+        if (StringUtils.isEmpty(isabnormalFlag)) {
+            return 0;
+        }
+        try {
+            return Integer.valueOf(isabnormalFlag.trim());
+        } catch (NumberFormatException e) {
+            log.warn("寮傚父鏍囪鏍煎紡闈炴硶锛屾寜 0 澶勭悊锛屽師濮嬪�硷細{}", isabnormalFlag);
+            return 0;
+        }
+    }
+
+    /**
+     * 褰掍竴鍖栧垎鏁板瓧绗︿覆锛岄伩鍏嶆妸 null 鎴栫┖涓诧紙鍓嶇鏈紶/鏈綔绛旓級鏀惧埌 map 涓紶閫掔粰绱姞閫昏緫
+     *
+     * @param scoreValue 鍘熷鍒嗗��
+     * @return 闈炵┖鍒嗗�硷紝榛樿 "0"
+     */
+    private String normalizeScore(String scoreValue) {
+        return StringUtils.isEmpty(scoreValue) ? "0" : scoreValue.trim();
+    }
 
     /**
      * 鏌ヨ浠诲姟闂嵎闂閫夐」
@@ -176,6 +276,8 @@
     public Integer saveQuestionAnswer(ServiceSubTaskAnswerReq serviceSubTaskAnswerReq, Long flag) {
         String threadName = Thread.currentThread().getName();
         log.info("[{}] 寮�濮嬪紓姝ュ鐞嗕繚瀛橀棶鍗风瓟妗�", threadName);
+        // 骞傜瓑鍗犱綅閿細澶辫触鏃惰閲婃斁锛屽厑璁告偅鑰呴噸璇�
+        String idemKey = null;
         try {
             //鍙傛暟瑙e瘑
             Long tid = null;
@@ -199,6 +301,17 @@
             //鏍规嵁 PID銆乀ID銆丼UBID 鏋勫缓闇�瑕佸鐞嗙殑 cache key
             String scriptCacheKeyPrefix = pid + "-" + tid + "-" + subid;
             Set<String> targetKeys = new HashSet<>();
+
+            // ---------------- 骞傜瓑锛氬悓涓�浠介棶鍗� 60 绉掑唴鍙鐞嗕竴娆� ----------------
+            // 鏈柟娉曟槸 @Async 寮傛鎵ц锛屾偅鑰呯閲嶅鐐瑰嚮/缃戠粶閲嶈瘯浼氳瀹冨苟鍙戣窇澶氭锛�
+            // 姣忔閮戒細 upsert 涓�閬嶆槑缁嗭紱骞跺彂鏃跺郊姝ょ湅涓嶅埌瀵规柟杩樻病鎻愪氦鐨勮 -> 鎻掑叆閲嶅鍓湰
+            // 锛坣hfy 2026-09-08 灏辨槸杩欐牱鍫嗗嚭 2~6 浠斤紝骞朵笖鎶� del_flag 涓�璧峰啓鍧忥級銆�
+            idemKey = "subtaskAnswer:submit:" + scriptCacheKeyPrefix + ":"
+                    + (serviceSubTaskAnswerReq == null || serviceSubTaskAnswerReq.getType() == null ? "all" : serviceSubTaskAnswerReq.getType());
+            if (!redisCache.setCacheObjectIfAbsent(idemKey, "1", 60, TimeUnit.SECONDS)) {
+                log.warn("[{}] 妫�娴嬪埌閲嶅鎻愪氦锛屾湰娆″拷鐣ワ細{}", threadName, idemKey);
+                return 0;
+            }
 
             if (serviceSubTaskAnswerReq != null && serviceSubTaskAnswerReq.getType() != null) {
                 if (serviceSubTaskAnswerReq.getType() == 2) {
@@ -237,7 +350,7 @@
                 subtaskCache.put(subtaskCacheKey, initialSubtaskList.get(0));
             }
 
-            String score = "0";
+            double scoreTotal = 0D;
             Long nextScriptno = null;
             aa:
             for (String key : targetKeys) {
@@ -271,11 +384,7 @@
                                     if (map == null) continue aa;
                                     if (!Objects.isNull(map.get("nextScriptNo")))
                                         nextScriptno = Long.valueOf(map.get("nextScriptNo"));
-                                    if (score == null || score.isEmpty()) {
-                                        score = map.get("score");
-                                    } else {
-                                        score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
-                                    }
+                                    scoreTotal += parseScore(map.get("score"));
                                 }
                             }
 
@@ -290,11 +399,7 @@
                                 log.error("nextScriptNo鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                                 if (!Objects.isNull(map.get("nextScriptNo")))
                                     nextScriptno = Long.valueOf(map.get("nextScriptNo"));
-                                if (score == null) {
-                                    score = map.get("score");
-                                } else {
-                                    score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
-                                }
+                                scoreTotal += parseScore(map.get("score"));
                             }
                         }
                     }
@@ -313,11 +418,7 @@
                                     Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, subid);
                                     if (!Objects.isNull(map.get("nextScriptNo")))
                                         nextScriptno = Long.valueOf(map.get("nextScriptNo"));
-                                    if (score == null || score.isEmpty()) {
-                                        score = map.get("score");
-                                    } else {
-                                        score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
-                                    }
+                                    scoreTotal += parseScore(map.get("score"));
                                 }
                             }
 
@@ -331,11 +432,7 @@
                                 log.error("----nextScriptNo2鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                                 if (!Objects.isNull(map.get("nextScriptNo")))
                                     nextScriptno = Long.valueOf(map.get("nextScriptNo"));
-                                if (score == null) {
-                                    score = map.get("score");
-                                } else {
-                                    score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
-                                }
+                                scoreTotal += parseScore(map.get("score"));
                             }
                         }
                     }
@@ -375,7 +472,7 @@
                 serviceSubtask.setFinishtime(new Date());
                 serviceSubtask.setUpdateTime(new Date());
                 log.error("灏嗚key鍜寁alue浠巖edis涓�,serviceSubtask鐨勫�间负--------锛歿}", serviceSubtask);
-                if (score != null && !score.isEmpty()) serviceSubtask.setScore(score);
+                serviceSubtask.setScore(formatScore(scoreTotal));
                 serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask);
 
                 //灏嗗綋鍓嶅彂閫佺姸鎬佹敼鎴� 9 瀹屾垚锛堢紦瀛� preachform 鏌ヨ锛�
@@ -407,6 +504,14 @@
             return 1;
         } catch (Exception e) {
             log.error("[{}] 寮傛澶勭悊淇濆瓨闂嵎绛旀鍙戠敓寮傚父 : {},璇锋眰鐨勫璞′负锛歿}", Thread.currentThread().getName(), e.getMessage(), e, serviceSubTaskAnswerReq);
+            // 澶勭悊澶辫触鏃堕噴鏀惧箓绛夐敭锛屽厑璁告偅鑰呴噸鏂版彁浜�
+            if (idemKey != null) {
+                try {
+                    redisCache.deleteObject(idemKey);
+                } catch (Exception ignore) {
+                    log.warn("[{}] 閲婃斁骞傜瓑閿け璐ワ細{}", Thread.currentThread().getName(), idemKey);
+                }
+            }
             throw new RuntimeException("淇濆瓨闂嵎绛旀澶辫触", e);
         }
     }
@@ -416,7 +521,7 @@
         Long tid = Long.valueOf(serviceSubTaskCacheReq.getParam1());
         Long pid = Long.valueOf(serviceSubTaskCacheReq.getParam2());
         Long subid = Long.valueOf(serviceSubTaskCacheReq.getParam6());
-        String score = "0";
+        double scoreTotal = 0D;
         if (ObjectUtils.isNotEmpty(serviceSubTaskCacheReq)) {
             Long nextScriptno = null;
             String isabnormalFlag = "0";
@@ -463,18 +568,16 @@
 
                     if (shouldProcess) {
                         Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, subid, preServiceSubtaskList, preServiceTask, preDetailIdMap, preTraceIdMap);
-                        log.error("nextScriptNo 鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                         if (map == null) continue;
+                        log.info("nextScriptNo 鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
 
                         if (!Objects.isNull(map.get("nextScriptNo")))
                             nextScriptno = Long.valueOf(map.get("nextScriptNo"));
 
-                        if (score == null) {
-                            score = map.get("score");
-                        } else {
-                            score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
+                        scoreTotal += parseScore(map.get("score"));
+                        if (StringUtils.isNotEmpty(map.get("isabnormal"))) {
+                            isabnormalFlag = map.get("isabnormal");
                         }
-                        isabnormalFlag = map.get("isabnormal");
                     }
                 }
             } else if (serviceSubTaskCacheReq.getType() == 1) {
@@ -512,12 +615,10 @@
                         log.error("----nextScriptNo2 鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                         if (!Objects.isNull(map.get("nextScriptNo")))
                             nextScriptno = Long.valueOf(map.get("nextScriptNo"));
-                        if (score == null) {
-                            score = map.get("score");
-                        } else {
-                            score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
+                        scoreTotal += parseScore(map.get("score"));
+                        if (StringUtils.isNotEmpty(map.get("isabnormal"))) {
+                            isabnormalFlag = map.get("isabnormal");
                         }
-                        isabnormalFlag = map.get("isabnormal");
                     }
                 }
             }
@@ -533,12 +634,12 @@
             serviceSubtask.setTaskid(tid);
             serviceSubtask.setPatid(pid);
             serviceSubtask.setSubmit(1L);
-            serviceSubtask.setIsabnormal(Integer.valueOf(isabnormalFlag));
+            serviceSubtask.setIsabnormal(parseIsabnormal(isabnormalFlag));
             serviceSubtask.setSendstate(6L);
             serviceSubtask.setExcep(isabnormalFlag);
             serviceSubtask.setFinishtime(new Date());
             serviceSubtask.setUpdateTime(new Date());
-            if (score != null && !score.isEmpty()) serviceSubtask.setScore(score);
+            serviceSubtask.setScore(formatScore(scoreTotal));
             serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask);
 
             //灏嗗綋鍓嶅彂閫佺姸鎬佹敼鎴�9瀹屾垚
@@ -573,13 +674,13 @@
             //浣忛櫌
             PatMedInhosp patMedInhosp = new PatMedInhosp();
             patMedInhosp.setSerialnum(serviceSubTaskMYDAnswerReq.getSerialnum());
-            patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+            patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
             if (CollectionUtils.isNotEmpty(patMedInhospList)) patid = patMedInhospList.get(0).getPatid();
         } else if (serviceSubTaskMYDAnswerReq.getMzzy().equals("2")) {
             //闂ㄨ瘖
             PatMedOuthospQueryReq patMedOuthosp = new PatMedOuthospQueryReq();
             patMedOuthosp.setSerialnum(serviceSubTaskMYDAnswerReq.getSerialnum());
-            patMedOuthosps = patMedOuthospMapper.callSpQueryOuthosp(patMedOuthosp);
+            patMedOuthosps = outhospDataFacade.callSpQueryOuthosp(patMedOuthosp);
             if (CollectionUtils.isNotEmpty(patMedOuthosps)) patid = patMedOuthosps.get(0).getPatid();
         } else if (serviceSubTaskMYDAnswerReq.getMzzy().equals("3")) {
             //鎸囧畾涓�涓儴闂紝鐢ㄦ潵澶勭悊鎶曡瘔寤鸿
@@ -594,7 +695,7 @@
         }
 
         if (CollectionUtils.isNotEmpty(serviceSubTaskMYDAnswerReq.getSvyTaskTemplateScriptVOS())) {
-            String score = "0";
+            double scoreTotal = 0D;
             List<SvyTaskTemplateScriptVO> svyTaskTemplateScriptVOS = serviceSubTaskMYDAnswerReq.getSvyTaskTemplateScriptVOS();
             Long nextScriptno = null;
 
@@ -628,11 +729,7 @@
                     log.error("nextScriptNo 鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                     if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo"));
 
-                    if (score == null || score.isEmpty()) {
-                        score = map.get("score");
-                    } else {
-                        score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
-                    }
+                    scoreTotal += parseScore(map.get("score"));
 
                     if (!Objects.isNull(map.get("id"))) {
                         idList.add(Long.valueOf(map.get("id")));
@@ -652,8 +749,8 @@
                 serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid()));
                 if (CollectionUtils.isNotEmpty(patMedInhospList)) {
                     serviceSubtask.setHospType("2");
-                    serviceSubtask.setDeptname(patMedInhospList.get(0).getDeptname());
-                    serviceSubtask.setDeptcode(patMedInhospList.get(0).getDeptcode());
+                    serviceSubtask.setLeaveldeptname(patMedInhospList.get(0).getDeptname());
+                    serviceSubtask.setLeaveldeptcode(patMedInhospList.get(0).getDeptcode());
                     serviceSubtask.setLeavehospitaldistrictcode(patMedInhospList.get(0).getLeavehospitaldistrictcode());
                     serviceSubtask.setLeavehospitaldistrictname(patMedInhospList.get(0).getLeavehospitaldistrictname());
                     serviceSubtask.setDrname(patMedInhospList.get(0).getDrname());
@@ -661,15 +758,17 @@
                     serviceSubtask.setNurseName(patMedInhospList.get(0).getNurseName());
                     serviceSubtask.setNurseId(patMedInhospList.get(0).getNurseId());
                     serviceSubtask.setInhospid(patMedInhospList.get(0).getInhospid());
+                    serviceSubtask.setCampusid(patMedInhospList.get(0).getCampusid());
                     serviceSubtask.setServiceType("6");
                 } else if (CollectionUtils.isNotEmpty(patMedOuthosps)) {
                     serviceSubtask.setHospType("1");
                     serviceSubtask.setAdmindate(patMedOuthosps.get(0).getAdmitdate());
                     serviceSubtask.setHospno(patMedOuthosps.get(0).getOuthospno());
-                    serviceSubtask.setDeptname(patMedOuthosps.get(0).getDeptname());
-                    serviceSubtask.setDeptcode(patMedOuthosps.get(0).getDeptcode());
+                    serviceSubtask.setLeaveldeptname(patMedOuthosps.get(0).getDeptname());
+                    serviceSubtask.setLeaveldeptcode(patMedOuthosps.get(0).getDeptcode());
                     serviceSubtask.setDrname(patMedOuthosps.get(0).getDrname());
                     serviceSubtask.setDrcode(patMedOuthosps.get(0).getDrcode());
+                    serviceSubtask.setCampusid(patMedOuthosps.get(0).getCampusid());
                     serviceSubtask.setServiceType("14");
                 }
                 if (!Objects.isNull(patArchive)) {
@@ -680,10 +779,15 @@
                     serviceSubtask.setSfzh(patArchive.getIdcardno());
                     serviceSubtask.setAddr(patArchive.getPlaceOfResidence());
                     serviceSubtask.setOrgid(patArchive.getOrgid());
+                    // 闄㈠尯鍏滃簳锛氫綇闄�/闂ㄦ�ヨ瘖璁板綍鐨勯櫌鍖哄湪鏈簱甯镐负绌猴紝鐢ㄦ偅鑰呮。妗堢殑闄㈠尯琛ヤ笂锛�
+                    // 鍚﹀垯缁熻鎺ュ彛锛園AddOrgId 鎸夌櫥褰曠敤鎴烽櫌鍖鸿繃婊� service_subtask.campusid锛変細鎶婅繖浜涘瓙浠诲姟鏁存壒涓㈡帀
+                    if (StringUtils.isEmpty(serviceSubtask.getCampusid())) {
+                        serviceSubtask.setCampusid(patArchive.getCampusid());
+                    }
                 }
                 if (StringUtils.isNotEmpty(dealDept)) {
                     //鎶曡瘔寤鸿鐨勫鐞嗛儴闂�
-                    serviceSubtask.setDeptcode(dealDept);
+                    serviceSubtask.setLeaveldeptcode(dealDept);
                     serviceSubtask.setServiceType("15");
                 }
                 serviceSubtask.setSubmit(1L);
@@ -694,7 +798,7 @@
                 serviceSubtask.setUpdateTime(new Date());
                 serviceSubtask.setCreateTime(new Date());
                 serviceSubtask.setVisitTime(new Date());
-                if (score != null && !score.isEmpty()) serviceSubtask.setScore(score);
+                serviceSubtask.setScore(formatScore(scoreTotal));
                 serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                 //灏嗗綋鍓嶅彂閫佺姸鎬佹敼鎴�9瀹屾垚
                 ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
@@ -942,6 +1046,11 @@
 
     /**
      * 鎵归噺鏌ヨ宸插瓨鍦ㄧ殑鏄庣粏璁板綍ID锛屾寜scriptid鍒嗙粍锛堥伩鍏嶅惊鐜腑閫愭潯鏌ヨ锛�
+     * <p>
+     * 鈿狅笍 2026-10-21锛�<b>涓嶅啀杩囨护 del_flag</b>锛屽悓涓� scriptid 鍙� id 鏈�澶э紙鏈�鏂帮級鐨勯偅涓�琛屻��
+     * 鍘熸潵鍙 del_flag=0锛屾槑缁嗚閫昏緫鍒犻櫎鍚庡氨鏌ヤ笉鍒� 鈫� 涓嬩竴娆′繚瀛樺繀鐒� INSERT 鏂板壇鏈紝
+     * 鍚屼竴鎮h�呭悓涓�棰樹細鍫嗗嚭 2~6 鏉¢噸澶嶆槑缁嗭紙nhfy 2026-09-08锛夈��
+     * 鍛戒腑琚垹鍓湰鏃剁敱璋冪敤鏂瑰啀璋� {@code reviveServiceSubtaskDetail} 缃洖 '0'銆�
      */
     private Map<Long, Long> getExistingDetailIdMap(Long subid) {
         if (subid == null) return Collections.emptyMap();
@@ -951,7 +1060,9 @@
         if (CollectionUtils.isEmpty(details)) return Collections.emptyMap();
         Map<Long, Long> map = new HashMap<>();
         for (ServiceSubtaskDetail d : details) {
-            if ((d.getDelFlag() == null || "0".equals(d.getDelFlag())) && d.getScriptid() != null && !map.containsKey(d.getScriptid())) {
+            if (d.getScriptid() == null || d.getId() == null) continue;
+            Long existId = map.get(d.getScriptid());
+            if (existId == null || d.getId() > existId) {
                 map.put(d.getScriptid(), d.getId());
             }
         }
@@ -998,7 +1109,7 @@
                 nextScriptNo = getNextScriptNo(svyTaskTemplateScriptVO.getTemplateID(), svyTaskTemplateScriptVO.getScriptContent());
             }
             if (svyTaskTemplateScriptVO.getScore() != null) {
-                score = String.valueOf(svyTaskTemplateScriptVO.getScore());
+                score = normalizeScore(String.valueOf(svyTaskTemplateScriptVO.getScore()));
             }
             serviceSubtaskDetailVO.setAsrtext(StringUtils.isEmpty(svyTaskTemplateScriptVO.getScriptResult()) ? "" : svyTaskTemplateScriptVO.getScriptResult().replaceAll("^\"|\"$", ""));
             serviceSubtaskDetailVO.setMatchedtext(StringUtils.isEmpty(svyTaskTemplateScriptVO.getScriptResult()) ? "" : svyTaskTemplateScriptVO.getScriptResult().replaceAll("^\"|\"$", ""));
@@ -1009,7 +1120,7 @@
             if (StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getScriptResult())) {
                 serviceSubtaskDetailVO.setAsrtext(svyTaskTemplateScriptVO.getScriptResult());
                 if (svyTaskTemplateScriptVO.getScore() != null) {
-                    score = String.valueOf(svyTaskTemplateScriptVO.getScore());
+                    score = normalizeScore(String.valueOf(svyTaskTemplateScriptVO.getScore()));
                 }
             }
             nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno();
@@ -1048,6 +1159,8 @@
             serviceSubtaskDetail.setId(existDetailId);
             serviceSubtaskDetail.setUpdateTime(new Date());
             serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail);
+            //鍛戒腑鍘嗗彶琚�昏緫鍒犻櫎鐨勫壇鏈椂缃洖 del_flag='0'锛堝惁鍒欑瓟妗堝啓杩涘幓浜嗗嵈鏌ヤ笉鍒帮紝涓斾笅娆″張浼氭柊澧炲壇鏈級
+            serviceSubtaskDetailMapper.reviveServiceSubtaskDetail(existDetailId);
         } else {
             serviceSubtaskDetailMapper.insertServiceSubtaskDetail(serviceSubtaskDetail);
         }
@@ -1153,7 +1266,7 @@
 
         Map<String, String> map = new HashMap<>();
         map.put("nextScriptNo", nextScriptNo);
-        map.put("score", score);
+        map.put("score", normalizeScore(score));
         map.put("id", "" + serviceSubtaskDetail.getId());
         map.put("isabnormal", isabnormalFlag.toString());
         return map;
@@ -1298,7 +1411,7 @@
             }
 
             if (ivrTaskTemplateScriptVO.getScore() != null) {
-                score = String.valueOf(ivrTaskTemplateScriptVO.getScore());
+                score = normalizeScore(String.valueOf(ivrTaskTemplateScriptVO.getScore()));
             }
             if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getQuestionResult())) {
                 serviceSubtaskDetailVO.setAsrtext(ivrTaskTemplateScriptVO.getQuestionResult().replaceAll("^\"|\"$", ""));
@@ -1319,7 +1432,7 @@
                     nextScriptNo = "" + getVoiceNextScriptNo(ivrTaskTemplateScriptVO.getTemplateID(), ivrTaskTemplateScriptVO.getScriptContent());
                 }
                 if (ivrTaskTemplateScriptVO.getScore() != null) {
-                    score = String.valueOf(ivrTaskTemplateScriptVO.getScore());
+                    score = normalizeScore(String.valueOf(ivrTaskTemplateScriptVO.getScore()));
                 }
             }
         }
@@ -1347,6 +1460,8 @@
             serviceSubtaskDetail.setId(existServiceSubtaskDetail.getId());
             serviceSubtaskDetail.setUpdateTime(new Date());
             serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail);
+            //鍛戒腑鍘嗗彶琚�昏緫鍒犻櫎鐨勫壇鏈椂缃洖 del_flag='0'锛岄伩鍏嶉噸澶嶅壇鏈�
+            serviceSubtaskDetailMapper.reviveServiceSubtaskDetail(existServiceSubtaskDetail.getId());
         } else {
             serviceSubtaskDetailMapper.insertServiceSubtaskDetail(serviceSubtaskDetail);
         }
@@ -1447,7 +1562,7 @@
 
         Map<String, String> map = new HashMap<>();
         map.put("nextScriptNo", nextScriptNo);
-        map.put("score", score);
+        map.put("score", normalizeScore(score));
         map.put("isabnormal", isabnormalFlag);
         return map;
     }

--
Gitblit v1.9.3