陈昶聿
13 小时以前 0d10bc99eec75672b049339399e4f762fbd9746e
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;
/**
 * 患者满意度Service业务层处理
@@ -98,6 +104,50 @@
        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;
    }
    /**
@@ -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;
    }
    /**