From 2013ea208bc8fa12fb6f8d22497f2a8b5f69855f Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期五, 11 九月 2026 11:18:30 +0800
Subject: [PATCH] 1.省立同德的满意度功能处理 2.省立同德、南华采集时间缩短 3.给保存问卷接口,加一下防止重复提前的注解@RepeatSubmit 4.省立同德新增“报备科室责任人”字段 5.登陆接口加“用户类型”字段,不影响当前登陆逻辑

---
 smartor/src/main/java/com/smartor/service/impl/PatSatisfactionServiceImpl.java |  124 ++++++++++++++++++++++++++++++++++-------
 1 files changed, 102 insertions(+), 22 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/service/impl/PatSatisfactionServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatSatisfactionServiceImpl.java
index f1802b9..fd6b774 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatSatisfactionServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatSatisfactionServiceImpl.java
@@ -5,7 +5,11 @@
 import java.util.*;
 import java.util.stream.Collectors;
 
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.entity.SysUserDept;
+import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.utils.Arith;
+import com.ruoyi.common.utils.ArrayListUtils;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DtoConversionUtils;
 import com.smartor.domain.*;
@@ -19,6 +23,8 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.smartor.service.IPatSatisfactionService;
+
+import static com.ruoyi.common.utils.SecurityUtils.getLoginUser;
 
 /**
  * 鎮h�呮弧鎰忓害Service涓氬姟灞傚鐞�
@@ -98,6 +104,50 @@
         patSatisfaction.setCreateTime(DateUtils.getNowDate());
         patSatisfaction.setUpdateTime(DateUtils.getNowDate());
         return patSatisfactionMapper.insertPatSatisfaction(patSatisfaction);
+    }
+
+    /**
+     * 鏂板鎮h�呮弧鎰忓害
+     *
+     * @param patSatisfactions 鎮h�呮弧鎰忓害
+     * @return 缁撴灉
+     */
+    @Override
+    public int batchInsert(List<PatSatisfaction> patSatisfactions) {
+        if(CollectionUtils.isEmpty(patSatisfactions)){
+            return 0;
+        }
+        List<Long> ids = patSatisfactions.stream().map(PatSatisfaction::getId).
+                distinct().collect(Collectors.toList());
+        List<PatSatisfaction> patSatisfactionsOld = new ArrayList<>();
+        PatSatisfaction patSatisfactionVo = new PatSatisfaction();
+        patSatisfactionVo.setIds(ids);
+        patSatisfactionsOld = patSatisfactionMapper.selectPatSatisfactionList(patSatisfactionVo);
+        Map<String, List<PatSatisfaction>> maps = ArrayListUtils.splitListsById(patSatisfactions,
+                patSatisfactionsOld, PatSatisfaction::getId);
+        //鍙湪patSatisfactions鐨勬暟鎹紝鎵ц鏂板鎿嶄綔
+        List<PatSatisfaction> addItems = maps.get("onlyIn1");
+        //鍙湪patSatisfactionsOld鐨勬暟鎹紝鎵ц鍒犻櫎鎿嶄綔
+//        List<PatSatisfaction> delItems = maps.get("onlyIn2");
+        //閲嶅彔鐨勬暟鎹紝鎵ц鏇存柊鎿嶄綔
+        List<PatSatisfaction> editItems = maps.get("common");
+        Integer count = 0;
+        LoginUser loginUser = getLoginUser();
+        SysUser user = loginUser.getUser();
+        for (PatSatisfaction patSatisfaction0 : editItems) {
+            patSatisfaction0.setUpdateBy(user.getNickName());
+            patSatisfaction0.setUpdateTime(DateUtils.getNowDate());
+            count = count + patSatisfactionMapper.updatePatSatisfaction(patSatisfaction0);
+        }
+
+        for (PatSatisfaction patSatisfaction1 : addItems) {
+            patSatisfaction1.setCreateBy(user.getNickName());
+            patSatisfaction1.setOrgid(user.getOrgid());
+            patSatisfaction1.setCreateTime(DateUtils.getNowDate());
+            patSatisfaction1.setUpdateTime(DateUtils.getNowDate());
+            count = count + patSatisfactionMapper.insertPatSatisfaction(patSatisfaction1);
+        }
+        return count;
     }
 
     /**
@@ -220,9 +270,9 @@
                 patSatisfactionDetailEntity.setScriptContent(ivrLibaTemplateScript.getScriptContent());
                 patSatisfactionDetailEntity.setAnswerPerson(CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size());
                 patSatisfactionDetailEntity.setNoAnswerPerson(CollectionUtils.isNotEmpty(fillCount) && CollectionUtils.isNotEmpty(subids) ? (subids.size() - fillCount.size()) : CollectionUtils.isNotEmpty(subids) ? subids.size() : 0);
-                patSatisfactionDetailEntity.setAverageScore(averageScore(fillCount));
-                patSatisfactionDetailEntity.setMaxScore(maxScore(ivrLibaTemplateTargetoptions));
-                patSatisfactionDetailEntity.setMinScore(minScore(ivrLibaTemplateTargetoptions));
+                patSatisfactionDetailEntity.setAverageScore(String.valueOf(averageScore(fillCount)));
+                patSatisfactionDetailEntity.setMaxScore(String.valueOf(maxScore(ivrLibaTemplateTargetoptions)));
+                patSatisfactionDetailEntity.setMinScore(String.valueOf(minScore(ivrLibaTemplateTargetoptions)));
                 patSatisfactionDetailEntity.setAnswerRate(CollectionUtils.isEmpty(subids) ? 0 : CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size() * 1.0 / subids.size());
                 patSatisfactionDetailEntity.setMatchedtextStats(matchedtextStats);
                 patSatisfactionDetailEntities.add(patSatisfactionDetailEntity);
@@ -292,13 +342,23 @@
                 patSatisfactionDetailEntity.setScriptContent(svyLibTemplateScript.getScriptContent());
                 patSatisfactionDetailEntity.setAnswerPerson(CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size());
                 patSatisfactionDetailEntity.setNoAnswerPerson(CollectionUtils.isNotEmpty(fillCount) && CollectionUtils.isNotEmpty(subids) ? (subids.size() - fillCount.size()) : CollectionUtils.isNotEmpty(subids) ? subids.size() : 0);
-                patSatisfactionDetailEntity.setAverageScore(averageScore(fillCount));
+                patSatisfactionDetailEntity.setAverageScore(String.valueOf(averageScore(fillCount)));
 
-                OptionalDouble maxOpt = svyLibTemplateTargetoptions.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).max();
-                patSatisfactionDetailEntity.setMaxScore(maxOpt.isPresent() ? new BigDecimal(maxOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0);
+                Double maxScore = svyLibTemplateTargetoptions.stream()
+                        .map(dto -> dto.getScore())
+                        .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
+                        .mapToDouble(Double::parseDouble)
+                        .max()
+                        .orElse(0.0);
+                patSatisfactionDetailEntity.setMaxScore(String.valueOf(maxScore));
 
-                OptionalDouble minOpt = svyLibTemplateTargetoptions.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).min();
-                patSatisfactionDetailEntity.setMinScore(minOpt.isPresent() ? new BigDecimal(minOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0);
+                Double minScore = svyLibTemplateTargetoptions.stream()
+                        .map(dto -> dto.getScore())
+                        .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
+                        .mapToDouble(Double::parseDouble)
+                        .min()
+                        .orElse(0.0);
+                patSatisfactionDetailEntity.setMinScore(String.valueOf(minScore));
 
                 patSatisfactionDetailEntity.setAnswerRate(CollectionUtils.isEmpty(subids) ? 0 : CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size() * 1.0 / subids.size());
                 patSatisfactionDetailEntity.setMatchedtextStats(matchedtextStats);
@@ -397,9 +457,9 @@
                     patSatisfactionDetailEntity.setScriptContent(ivrLibaTemplateScript.getScriptContent());
                     patSatisfactionDetailEntity.setAnswerPerson(CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size());
                     patSatisfactionDetailEntity.setNoAnswerPerson(CollectionUtils.isNotEmpty(fillCount) && CollectionUtils.isNotEmpty(subids) ? (subids.size() - fillCount.size()) : CollectionUtils.isNotEmpty(subids) ? subids.size() : 0);
-                    patSatisfactionDetailEntity.setAverageScore(averageScore(fillCount));
-                    patSatisfactionDetailEntity.setMaxScore(maxScore(ivrLibaTemplateTargetoptions));
-                    patSatisfactionDetailEntity.setMinScore(minScore(ivrLibaTemplateTargetoptions));
+                    patSatisfactionDetailEntity.setAverageScore(String.valueOf(averageScore(fillCount)));
+                    patSatisfactionDetailEntity.setMaxScore(String.valueOf(maxScore(ivrLibaTemplateTargetoptions)));
+                    patSatisfactionDetailEntity.setMinScore(String.valueOf(minScore(ivrLibaTemplateTargetoptions)));
                     patSatisfactionDetailEntity.setAnswerRate(CollectionUtils.isEmpty(subids) ? 0 : CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size() * 1.0 / subids.size());
                     patSatisfactionDetailEntity.setMatchedtextStats(matchedtextStats);
                     patSatisfactionDetailEntities.add(patSatisfactionDetailEntity);
@@ -467,13 +527,23 @@
                     patSatisfactionDetailEntity.setScriptContent(svyLibTemplateScript.getScriptContent());
                     patSatisfactionDetailEntity.setAnswerPerson(CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size());
                     patSatisfactionDetailEntity.setNoAnswerPerson(CollectionUtils.isNotEmpty(fillCount) && CollectionUtils.isNotEmpty(subids) ? (subids.size() - fillCount.size()) : CollectionUtils.isNotEmpty(subids) ? subids.size() : 0);
-                    patSatisfactionDetailEntity.setAverageScore(averageScore(fillCount));
-
-                    OptionalDouble maxOpt = svyLibTemplateTargetoptions.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).max();
-                    patSatisfactionDetailEntity.setMaxScore(maxOpt.isPresent() ? new BigDecimal(maxOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0);
-
-                    OptionalDouble minOpt = svyLibTemplateTargetoptions.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).min();
-                    patSatisfactionDetailEntity.setMinScore(minOpt.isPresent() ? new BigDecimal(minOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0);
+                    patSatisfactionDetailEntity.setAverageScore(String.valueOf(averageScore(fillCount)));
+                    
+                    Double maxScore = svyLibTemplateTargetoptions.stream()
+                            .map(dto -> dto.getScore())
+                            .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
+                            .mapToDouble(Double::parseDouble)
+                            .max()
+                            .orElse(0.0);
+                    patSatisfactionDetailEntity.setMaxScore(String.valueOf(maxScore));
+                    
+                    Double minScore = svyLibTemplateTargetoptions.stream()
+                            .map(dto -> dto.getScore())
+                            .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
+                            .mapToDouble(Double::parseDouble)
+                            .min()
+                            .orElse(0.0);
+                    patSatisfactionDetailEntity.setMinScore(String.valueOf(minScore));
 
                     patSatisfactionDetailEntity.setAnswerRate(CollectionUtils.isEmpty(subids) ? 0 : CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size() * 1.0 / subids.size());
                     patSatisfactionDetailEntity.setMatchedtextStats(matchedtextStats);
@@ -766,8 +836,13 @@
      */
     private Double maxScore(List<IvrLibaTemplateTargetoption> options) {
         if (CollectionUtils.isEmpty(options)) return 0.0;
-        OptionalDouble maxOpt = options.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).max();
-        return maxOpt.isPresent() ? new BigDecimal(maxOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0;
+        Double maxScore = options.stream()
+                .map(IvrLibaTemplateTargetoption::getScore)
+                .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
+                .mapToDouble(Double::parseDouble)
+                .max()
+                .orElse(0.0);
+        return maxScore;
     }
 
     /**
@@ -778,8 +853,13 @@
      */
     private Double minScore(List<IvrLibaTemplateTargetoption> options) {
         if (CollectionUtils.isEmpty(options)) return 0.0;
-        OptionalDouble minOpt = options.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).min();
-        return minOpt.isPresent() ? new BigDecimal(minOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0;
+        Double minScore = options.stream()
+                .map(IvrLibaTemplateTargetoption::getScore)
+                .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
+                .mapToDouble(Double::parseDouble)
+                .min()
+                .orElse(0.0);
+        return minScore;
     }
 
     /**

--
Gitblit v1.9.3