From 138f31f7ed04842abca552dc8eaa912b3191e059 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 28 九月 2026 10:56:49 +0800
Subject: [PATCH] 处理患者再入院状态代码提交

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java |  136 ++++++++++++++++++++++++++++----------------
 1 files changed, 86 insertions(+), 50 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 458452d..41cb800 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -97,6 +97,66 @@
     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();
+    }
+
+    /**
      * 鏌ヨ浠诲姟闂嵎闂閫夐」
      *
      * @param id 浠诲姟闂嵎闂閫夐」涓婚敭
@@ -237,7 +297,7 @@
                 subtaskCache.put(subtaskCacheKey, initialSubtaskList.get(0));
             }
 
-            String score = "0";
+            double scoreTotal = 0D;
             Long nextScriptno = null;
             aa:
             for (String key : targetKeys) {
@@ -271,11 +331,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 +346,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 +365,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 +379,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 +419,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 鏌ヨ锛�
@@ -416,7 +460,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 +507,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 +554,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 +573,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瀹屾垚
@@ -594,7 +634,7 @@
         }
 
         if (CollectionUtils.isNotEmpty(serviceSubTaskMYDAnswerReq.getSvyTaskTemplateScriptVOS())) {
-            String score = "0";
+            double scoreTotal = 0D;
             List<SvyTaskTemplateScriptVO> svyTaskTemplateScriptVOS = serviceSubTaskMYDAnswerReq.getSvyTaskTemplateScriptVOS();
             Long nextScriptno = null;
 
@@ -628,11 +668,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")));
@@ -694,7 +730,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();
@@ -998,7 +1034,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 +1045,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();
@@ -1146,14 +1182,14 @@
 
 
         //濡備綍杩欓渶瑕佹湇鍔¤ˉ鍋跨殑鏈嶅姟ID涓嶄负绌虹殑璇濓紝鍒欒繘琛岀珛鍗冲彂閫�
-        log.error("------svyTaskTemplateScriptVO.getSendTaskids()鐨勫�间负锛歿},selectServiceSubtaskList鐨勫�间负锛歿}", svyTaskTemplateScriptVO.getSendTaskids(), selectServiceSubtaskList.size());
+        log.info("------svyTaskTemplateScriptVO.getSendTaskids()鐨勫�间负锛歿},selectServiceSubtaskList鐨勫�间负锛歿}", svyTaskTemplateScriptVO.getSendTaskids(), selectServiceSubtaskList.size());
         if (CollectionUtils.isNotEmpty(svyTaskTemplateScriptVO.getSendTaskids()) && CollectionUtils.isNotEmpty(selectServiceSubtaskList)) {
             sendTaskIds(svyTaskTemplateScriptVO.getSendTaskids(), selectServiceSubtaskList.get(0));
         }
 
         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 +1334,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 +1355,7 @@
                     nextScriptNo = "" + getVoiceNextScriptNo(ivrTaskTemplateScriptVO.getTemplateID(), ivrTaskTemplateScriptVO.getScriptContent());
                 }
                 if (ivrTaskTemplateScriptVO.getScore() != null) {
-                    score = String.valueOf(ivrTaskTemplateScriptVO.getScore());
+                    score = normalizeScore(String.valueOf(ivrTaskTemplateScriptVO.getScore()));
                 }
             }
         }
@@ -1447,7 +1483,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