From 1a38082352708692a339a8b43db79bc349be07f1 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期四, 10 九月 2026 17:04:33 +0800
Subject: [PATCH] 【景宁】批量新增患者满意度调整
---
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