| | |
| | | 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.*; |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * 患者满意度Service业务层处理 |
| | |
| | | patSatisfaction.setCreateTime(DateUtils.getNowDate()); |
| | | patSatisfaction.setUpdateTime(DateUtils.getNowDate()); |
| | | return patSatisfactionMapper.insertPatSatisfaction(patSatisfaction); |
| | | } |
| | | |
| | | /** |
| | | * 新增患者满意度 |
| | | * |
| | | * @param patSatisfactions 患者满意度 |
| | | * @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; |
| | | } |
| | | |
| | | /** |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | */ |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | 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; |
| | | } |
| | | |
| | | /** |