diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/constant/ScaleDimensionEnum.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/constant/ScaleDimensionEnum.java new file mode 100644 index 0000000..d08b1cd --- /dev/null +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/constant/ScaleDimensionEnum.java @@ -0,0 +1,51 @@ +package org.dromara.scale.constant; + +import java.util.Objects; + +/** + * 应用模块名称

+ * + * @description: Copyright: Copyright (C) 2019 XXX, Inc. All rights reserved.

+ * Company: 江苏恒沁科技有限公司

+ * @author: mhq + * @date: 2019/12/03 10:55 + * @version: 1.0 + */ +public enum ScaleDimensionEnum { + /** + * 单项单维 + */ + SING_SING(0, "单项单维"), + MULTIPE_SINGL(1, "多项单维型"), + MULTIPE_MULTIPE(2, "多项多维型"), + ; + + private Integer status; + private String name; + + private ScaleDimensionEnum(Integer status, String name) { + this.status = status; + this.name = name; + } + + public Integer getValue() { + return this.status; + } + public String getName() { + return this.name; + } + public static ScaleDimensionEnum getByCode(Integer value) { + if (Objects.isNull(value)) { + return null; + } + ScaleDimensionEnum[] ruleFlagEnum = ScaleDimensionEnum.values(); + for (int i = 0; i < ruleFlagEnum.length; i++){ + if(ruleFlagEnum[i].getValue().equals(value)){ + return ruleFlagEnum[i]; + } + } + return null; + } + + +} diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/constant/ScoreRuleTypeEnum.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/constant/ScoreRuleTypeEnum.java new file mode 100644 index 0000000..857d2dc --- /dev/null +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/constant/ScoreRuleTypeEnum.java @@ -0,0 +1,52 @@ +package org.dromara.scale.constant; + +import java.util.Objects; + +/** + * 应用模块名称

+ * + * @description: Copyright: Copyright (C) 2019 XXX, Inc. All rights reserved.

+ * Company: 江苏恒沁科技有限公司

+ * @author: mhq + * @date: 2019/12/03 10:55 + * @version: 1.0 + */ +public enum ScoreRuleTypeEnum { + + /** + * 求和型 + */ + SUM_TYPE(0, "求和型"), + AVG_TYPE(1, "均值型"), + SUM_INT_TYPE(2, "求和取整型"), + ; + + private Integer status; + private String name; + + private ScoreRuleTypeEnum(Integer status, String name) { + this.status = status; + this.name = name; + } + + public Integer getValue() { + return this.status; + } + public String getName() { + return this.name; + } + public static ScoreRuleTypeEnum getByCode(Integer value) { + if (Objects.isNull(value)) { + return null; + } + ScoreRuleTypeEnum[] ruleFlagEnum = ScoreRuleTypeEnum.values(); + for (int i = 0; i < ruleFlagEnum.length; i++){ + if(ruleFlagEnum[i].getValue().equals(value)){ + return ruleFlagEnum[i]; + } + } + return null; + } + + +} diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/web/WebController.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/web/WebController.java index 612f94c..b3f2874 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/web/WebController.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/web/WebController.java @@ -1,5 +1,6 @@ package org.dromara.scale.controller.web; +import cn.hutool.core.util.ArrayUtil; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; @@ -79,7 +80,9 @@ public class WebController extends BaseController { @RepeatSubmit() @PostMapping("/record/answer") public R> add(@Validated(AddGroup.class) @RequestBody List answerList) { - //todo + if (ArrayUtil.isEmpty(answerList)) { + R.fail("请先填写,再提交"); + } return R.ok(evaluationConclusionService.submitAnswer(answerList)); } } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/SysScaleFactorRange.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/SysScaleFactorRange.java index 548a155..563209b 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/SysScaleFactorRange.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/SysScaleFactorRange.java @@ -34,7 +34,12 @@ public class SysScaleFactorRange extends BaseEntity { private String rangeName; /** - * 因子所属量表id + * 分段所属量表id + */ + private Long scaleId; + + /** + * 分段所属因子id */ private Long factorId; diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysEvaluationConclusionVo.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysEvaluationConclusionVo.java index 59567ff..016030b 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysEvaluationConclusionVo.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysEvaluationConclusionVo.java @@ -68,5 +68,20 @@ public class SysEvaluationConclusionVo implements Serializable { @ExcelProperty(value = "0:未命中,1:命中,若命中则,测评人符合该测评项,未命中则测评人不符合测评项") private Integer status; + /** + * 问题描述 + */ + private String evalDesc; + + /** + * 问题建议 + */ + private String evalPropose; + + /** + * 风险等级 + */ + private Long situation; + } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleFactorRangeVo.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleFactorRangeVo.java index a997454..9604926 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleFactorRangeVo.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleFactorRangeVo.java @@ -1,18 +1,14 @@ package org.dromara.scale.domain.vo; -import java.math.BigDecimal; -import org.dromara.scale.domain.SysScaleFactorRange; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.scale.domain.SysScaleFactorRange; import java.io.Serial; import java.io.Serializable; -import java.util.Date; - +import java.math.BigDecimal; /** @@ -42,9 +38,15 @@ public class SysScaleFactorRangeVo implements Serializable { private String rangeName; /** - * 因子所属量表id + * 分段所属量表id */ - @ExcelProperty(value = "因子所属量表id") + @ExcelProperty(value = "分段所属量表id") + private Long scaleId; + + /** + * 分段所属因子id + */ + @ExcelProperty(value = "分段所属因子id") private Long factorId; /** diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleFactorVo.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleFactorVo.java index 2577d2f..5216395 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleFactorVo.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleFactorVo.java @@ -5,8 +5,6 @@ import com.alibaba.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.scale.domain.SysScaleFactor; -import org.dromara.scale.domain.SysScaleFactorRange; - import java.io.Serial; import java.io.Serializable; @@ -67,5 +65,6 @@ public class SysScaleFactorVo implements Serializable { */ private List questionIds; - private List factorRangeList; + + private List factorRangeList; } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleQuestionVo.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleQuestionVo.java index 4770656..29c6281 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleQuestionVo.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/vo/SysScaleQuestionVo.java @@ -1,17 +1,13 @@ package org.dromara.scale.domain.vo; -import org.dromara.scale.domain.SysScaleAnswer; -import org.dromara.scale.domain.SysScaleQuestion; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.scale.domain.SysScaleQuestion; import java.io.Serial; import java.io.Serializable; -import java.util.Date; import java.util.List; @@ -74,5 +70,5 @@ public class SysScaleQuestionVo implements Serializable { /** * 问题答案列表 */ - private List scaleAnswerList; + private List scaleAnswerList; } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysEvaluationRecordMapper.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysEvaluationRecordMapper.java index 52433c6..b3f147a 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysEvaluationRecordMapper.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysEvaluationRecordMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.scale.domain.SysEvaluationRecord; import org.dromara.scale.domain.vo.SysEvaluationRecordVo; +import org.dromara.scale.domain.vo.SysScalePublishVo; import java.util.List; @@ -19,4 +20,6 @@ public interface SysEvaluationRecordMapper extends BaseMapperPlus selectSclaeRecordListByUserAndBatch(@Param("userId") Long userId, @Param("batchNo") Long batchNo); + SysScalePublishVo selectPublishByUseRecord(Long recordId); + } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationConclusionServiceImpl.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationConclusionServiceImpl.java index 6a7e911..3a427b9 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationConclusionServiceImpl.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationConclusionServiceImpl.java @@ -1,22 +1,29 @@ package org.dromara.scale.service.impl; +import cn.hutool.core.util.ArrayUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; +import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.scale.domain.SysEvaluationConclusion; +import org.dromara.scale.constant.ScaleDimensionEnum; +import org.dromara.scale.constant.ScoreRuleTypeEnum; +import org.dromara.scale.domain.*; import org.dromara.scale.domain.bo.SysEvaluationAnswerBo; import org.dromara.scale.domain.bo.SysEvaluationConclusionBo; -import org.dromara.scale.domain.vo.SysEvaluationConclusionVo; -import org.dromara.scale.mapper.SysEvaluationAnswerMapper; -import org.dromara.scale.mapper.SysEvaluationConclusionMapper; +import org.dromara.scale.domain.vo.*; +import org.dromara.scale.mapper.*; import org.dromara.scale.service.ISysEvaluationConclusionService; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Map; +import java.math.BigDecimal; +import java.math.MathContext; +import java.math.RoundingMode; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; /** * 量测结果Service业务层处理 @@ -28,9 +35,24 @@ import java.util.Map; @Service public class SysEvaluationConclusionServiceImpl implements ISysEvaluationConclusionService { + private static final MathContext mathContext = new MathContext(2); + private final SysEvaluationConclusionMapper baseMapper; - private final SysEvaluationAnswerMapper answerMapper; + private final SysScaleMapper scaleMapper; + + private final SysEvaluationAnswerMapper evaluationAnswerMapper; + + private final SysEvaluationRecordMapper recordMapper; + + private final SysScaleQuestionMapper scaleQuestionMapper; + + private final SysScaleAnswerMapper scaleAnswerMapper; + + private final SysScaleFactorMapper scaleFactorMapper; + + private final SysScaleFactorRangeMapper scaleFactorRangeMapper; + /** * 查询量测结果 @@ -80,14 +102,241 @@ public class SysEvaluationConclusionServiceImpl implements ISysEvaluationConclus @Override public Map submitAnswer(List answerList) { + boolean allowQueryResult = true; + Long recordId = answerList.get(0).getRecordId(); + SysScalePublishVo scalePublishVo = recordMapper.selectPublishByUseRecord(recordId); + //查询考核结果 + if (scalePublishVo.getAllowQueryResult() == 0) { + allowQueryResult = false; + } + List answerAdd = MapstructUtils.convert(answerList, SysEvaluationAnswer.class); + evaluationAnswerMapper.insertBatch(answerAdd); - //answerMapper.insertBatch(); - return null; + List list = calculateEvaluationResult(answerList); + List conclusionAdd = MapstructUtils.convert(list, SysEvaluationConclusion.class); + baseMapper.insertBatch(conclusionAdd); + + Long riskLevel = -1L; + String riskName = ""; + //选择风险等级最高 + for(SysEvaluationConclusionVo ec: list){ + if(ec.getSituation() > riskLevel){ + riskLevel = ec.getSituation(); + //riskName = ec.getSituationName(); + } + } + //判断风险等级是否为"高风险、重大风险",若是,则形成预警记录 +// if(riskName.equals("高风险") || riskName.equals("重大风险")){ +// WarnRecordEval wre = new WarnRecordEval(); +// wre.setId(idWorker.nextId()); +// wre.setErId(evalRecord.getId()); +// wre.setRiskLevel(riskName); +// wre.setUserId(evalRecord.getEvalUid()); +// wre.setScaleId(evalRecord.getScaleId()); +// wre.setTenantNo(sysUser.getTenantNo()); +// warnRecordDAO.evalWarn(wre); +// } + //不允许查看考核结果 + if(!allowQueryResult){ + return null; + } + + BigDecimal totalScore = list.stream() + // 将Opportunity对象的金额属性取出 + .map(SysEvaluationConclusionVo::getScore) + // 使用reduce()聚合函数,得到金额总和 + .reduce(BigDecimal.ZERO, BigDecimal::add); + return new HashMap(){{ + //put("evalRecordId",evalRecord.getId()); + //put("scaleName",scaleInfo.getName()); + put("totalScore",totalScore.doubleValue()); + put("list", list.stream().filter(item -> item.getStatus().equals(1)).collect( + Collectors.toList())); + }}; } - private List calculateEvaluationResult() { - boolean allowQueryResult = true; + private List calculateEvaluationResult(List answerList) { + Long recordId = answerList.get(0).getRecordId(); + SysEvaluationRecordVo recordVo = recordMapper.selectVoById(recordId); + Long scaleId = recordVo.getScaleId(); - return null; + List sysScaleQuestionVos = scaleQuestionMapper.selectVoList( + new LambdaQueryWrapper().eq(SysScaleQuestion::getScaleId, scaleId)); + Map> questionMapByFactor = sysScaleQuestionVos.stream() + .collect(Collectors.groupingBy(SysScaleQuestionVo::getFactorId)); + + List scaleAnswerVos = scaleAnswerMapper.selectVoList( + new LambdaQueryWrapper().eq(SysScaleAnswer::getScaleId, scaleId)); + Map> answerMapByQuestion = scaleAnswerVos.stream() + .collect(Collectors.groupingBy(SysScaleAnswerVo::getQuestionId)); + + List scaleFactorList = getScaleEvalItemList(scaleId); + List list = new ArrayList<>(scaleFactorList.size()); + for (SysScaleFactorVo scaleFactor : scaleFactorList) { + Long factorId = scaleFactor.getFactorId(); + AtomicReference totalSocre = new AtomicReference<>(BigDecimal.ZERO); + + SysEvaluationConclusionVo evalConclusion = new SysEvaluationConclusionVo(); + evalConclusion.setFactorId(factorId); + evalConclusion.setRecordId(recordId); + //未命中 + evalConclusion.setStatus(0); + list.add(evalConclusion); + + List questionNum = questionMapByFactor.get(factorId); + List questionIds = new ArrayList<>(); + questionNum.forEach(q -> { + Long questionId = q.getQuestionId(); + questionIds.add(questionId); + List answerNum = answerMapByQuestion.get(questionId); + if (!ArrayUtil.isEmpty(answerNum)) { + //找出分数最大的选项 + BigDecimal s = answerNum.stream() + .max(Comparator.comparing(SysScaleAnswerVo::getScore)).get().getScore(); + totalSocre.updateAndGet(v -> v.add(s)); + SysEvaluationAnswerBo evaluationAnswer = answerList.stream() + .filter(answer -> questionId.equals(answer.getQuestionId())).findFirst().orElse(null); + if (evaluationAnswer != null) { + answerNum.stream().filter(o -> o.getAnswerId().equals(evaluationAnswer.getAnswerId())).findFirst() + .ifPresent( + m -> evalConclusion.setScore(m.getScore().add(evalConclusion.getScore()))); + } + } + }); + scaleFactor.setQuestionIds(questionIds); + //计算得分率 + + if (totalSocre.get().compareTo(BigDecimal.ZERO) > 0) { + evalConclusion.setScoreRate(evalConclusion.getScore() + .multiply(new BigDecimal(100)).divide(totalSocre.get()).setScale(2, RoundingMode.HALF_UP)); + } + //计算量表加强后得分 + calcScoreByRuleType(evalConclusion, scaleFactor); + //根据将强后的分数划分到对应的范围上 + //根据将强后的分数划分到对应的范围上 + List factorRangeList = scaleFactor.getFactorRangeList(); + if (factorRangeList.size() == 1) { + evalConclusion.setEvalDesc(factorRangeList.get(0).getEvalDesc()); + evalConclusion.setEvalPropose(factorRangeList.get(0).getEvalPropose()); + evalConclusion.setFactorRangeId(factorRangeList.get(0).getRangeId()); + } else { + for (SysScaleFactorRangeVo range : factorRangeList) { + if (Objects.nonNull(range.getMinValue()) && Objects.nonNull(range.getMaxValue())) { + if (evalConclusion.getScore().compareTo(range.getMinValue()) >= 0 + && evalConclusion.getScore().compareTo(range.getMaxValue()) <= 0) { + evalConclusion.setEvalDesc(range.getEvalDesc()); + evalConclusion.setEvalPropose(range.getEvalPropose()); + evalConclusion.setFactorRangeId(range.getRangeId()); + evalConclusion.setSituation(range.getSituation()); + //evalConclusion.setSituationName(range.getSituationName()); + break; + } + } else { + //最大值不是空,最小值是空 + if (Objects.nonNull(range.getMaxValue()) && Objects.isNull(range.getMinValue())) { + if (evalConclusion.getScore().compareTo(range.getMaxValue()) <= 0) { + evalConclusion.setEvalDesc(range.getEvalDesc()); + evalConclusion.setEvalPropose(range.getEvalPropose()); + evalConclusion.setFactorRangeId(range.getRangeId()); + evalConclusion.setSituation(range.getSituation()); + //evalConclusion.setSituationName(range.getSituationName()); + break; + } + } else if (Objects.nonNull(range.getMinValue()) && Objects.isNull(range.getMaxValue())) { + //最大值为空,最小值不为空 + if (evalConclusion.getScore().compareTo(range.getMinValue()) >= 0) { + evalConclusion.setEvalDesc(range.getEvalDesc()); + evalConclusion.setEvalPropose(range.getEvalPropose()); + evalConclusion.setFactorRangeId(range.getRangeId()); + evalConclusion.setSituation(range.getSituation()); + //evalConclusion.setSituationName(range.getSituationName()); + break; + } + } //else { +// logger.error("量表scaleId = {},配置项={} 配置的范围超过1条,但是存在配置范围最大最小值都为null", +// evalSubmitAnswerDto.getScaleId(), scaleEvalItem.getId()); +// throw new EdfRuntimeException("量表配置项有问题,请联系管理员检查!"); +// } + } + } + } + } + //处理维度问题及status + //量表 + SysScale scaleInfo = scaleMapper.selectById(scaleId); + scaleDimension(list, scaleInfo); + //保存结果 + return list; + } + + List getScaleEvalItemList(Long scaleId) { + List scaleFactorVos = scaleFactorMapper.selectVoList( + new LambdaQueryWrapper().eq(SysScaleFactor::getScaleId, scaleId)); + List scaleFactorRangeVos = scaleFactorRangeMapper.selectVoList( + new LambdaQueryWrapper().eq(SysScaleFactorRange::getScaleId, scaleId)); + if (!ArrayUtil.isEmpty(scaleFactorVos) && !ArrayUtil.isEmpty(scaleFactorRangeVos)) { + Map> map = scaleFactorRangeVos.stream() + .collect(Collectors.groupingBy(SysScaleFactorRangeVo::getFactorId)); + scaleFactorVos.forEach(item -> + item.setFactorRangeList(map.get(item.getFactorId()))); + } + return scaleFactorVos; + } + + private void calcScoreByRuleType(SysEvaluationConclusionVo evalConclusion, SysScaleFactorVo scaleFactor) { + ScoreRuleTypeEnum scoleRuleTypeEnum = ScoreRuleTypeEnum.getByCode(scaleFactor.getRuleType()); + if (Objects.isNull(scoleRuleTypeEnum)) { + return; + } + switch (scoleRuleTypeEnum) { + case SUM_TYPE: + evalConclusion.setScore(evalConclusion.getScore().multiply(scaleFactor.getWeight(), mathContext)); + break; + case AVG_TYPE: + BigDecimal sum = evalConclusion.getScore().multiply(scaleFactor.getWeight(), mathContext); + int size = scaleFactor.getQuestionIds().size(); + //均值四舍五入2位小数 + BigDecimal avgScore = sum.divide(new BigDecimal(size), 2, RoundingMode.HALF_UP); + evalConclusion.setScore(avgScore); + break; + case SUM_INT_TYPE: + BigDecimal sum2 = evalConclusion.getScore().multiply(scaleFactor.getWeight(), mathContext); + evalConclusion.setScore(sum2); + break; + default: + break; + } + } + + private void scaleDimension(List evalConclusions, SysScale scaleInfo) { + ScaleDimensionEnum scaleDimensionEnum = ScaleDimensionEnum.getByCode(scaleInfo.getDimensionType()); + if (Objects.isNull(scaleDimensionEnum)) { + //throw new EdfRuntimeException("暂不支持该维度"); + return; + } + switch (scaleDimensionEnum) { + case SING_SING: + if (evalConclusions.size() > 1) { + //log.error("{} - 量表维度配置有误,单项单维量表配置了多个维度",scaleInfo.getName()); + //throw new EdfRuntimeException(String.format("%s 量表配置有误!,请联系管理员!",scaleInfo.getName())); + break; + } + evalConclusions.forEach(item -> item.setStatus(1)); + break; + case MULTIPE_SINGL: + //择低录取 + if (scaleInfo.getSelectDirection() == 1) { + evalConclusions.stream().min(Comparator.comparing(SysEvaluationConclusionVo::getScore)).get().setStatus(1); + } else { + //高分录取 + evalConclusions.stream().max(Comparator.comparing(SysEvaluationConclusionVo::getScore)).get().setStatus(1); + } + break; + case MULTIPE_MULTIPE: + evalConclusions.forEach(item -> item.setStatus(1)); + break; + default: + break; + } } } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScaleFactorServiceImpl.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScaleFactorServiceImpl.java index 5727e47..9a0451d 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScaleFactorServiceImpl.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScaleFactorServiceImpl.java @@ -14,6 +14,7 @@ import org.dromara.scale.domain.SysScaleFactor; import org.dromara.scale.domain.SysScaleFactorRange; import org.dromara.scale.domain.SysScaleQuestion; import org.dromara.scale.domain.bo.SysScaleFactorBo; +import org.dromara.scale.domain.vo.SysScaleFactorRangeVo; import org.dromara.scale.domain.vo.SysScaleFactorVo; import org.dromara.scale.domain.vo.SysScaleQuestionVo; import org.dromara.scale.mapper.*; @@ -54,7 +55,7 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService { sysScaleFactorVo.setQuestionIds(Collections.emptyList()); } - List rangeList = sysScaleFactorRangeMapper.selectList(Wrappers.lambdaQuery().eq(SysScaleFactorRange::getFactorId, factorId)); + List rangeList = sysScaleFactorRangeMapper.selectVoList(Wrappers.lambdaQuery().eq(SysScaleFactorRange::getFactorId, factorId)); if (CollUtil.isNotEmpty(rangeList)) { sysScaleFactorVo.setFactorRangeList(rangeList); } else { @@ -125,6 +126,7 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService { List list = new ArrayList<>(bo.getFactorRangeList().size()); for (SysScaleFactorRange range : bo.getFactorRangeList()) { range.setFactorId(bo.getFactorId()); + range.setScaleId(bo.getScaleId()); list.add(range); } sysScaleFactorRangeMapper.insertBatch(list, 100); diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScaleQuestionServiceImpl.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScaleQuestionServiceImpl.java index add5c60..830ae44 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScaleQuestionServiceImpl.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScaleQuestionServiceImpl.java @@ -13,6 +13,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.scale.domain.SysScaleAnswer; import org.dromara.scale.domain.SysScaleQuestion; import org.dromara.scale.domain.bo.SysScaleQuestionBo; +import org.dromara.scale.domain.vo.SysScaleAnswerVo; import org.dromara.scale.domain.vo.SysScaleQuestionVo; import org.dromara.scale.mapper.SysScaleAnswerMapper; import org.dromara.scale.mapper.SysScaleQuestionMapper; @@ -46,7 +47,7 @@ public class SysScaleQuestionServiceImpl implements ISysScaleQuestionService { @Override public SysScaleQuestionVo queryById(Long questionId) { SysScaleQuestionVo sysScaleQuestionVo = baseMapper.selectVoById(questionId); - List sysScaleAnswers = scaleAnswerMapper.selectList(Wrappers.lambdaQuery(SysScaleAnswer.class).eq(SysScaleAnswer::getQuestionId, questionId)); + List sysScaleAnswers = scaleAnswerMapper.selectVoList(Wrappers.lambdaQuery(SysScaleAnswer.class).eq(SysScaleAnswer::getQuestionId, questionId)); if (CollUtil.isNotEmpty(sysScaleAnswers)) { sysScaleQuestionVo.setScaleAnswerList(sysScaleAnswers); } diff --git a/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysEvaluationRecordMapper.xml b/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysEvaluationRecordMapper.xml index 31ea4a3..a956da7 100644 --- a/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysEvaluationRecordMapper.xml +++ b/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysEvaluationRecordMapper.xml @@ -10,4 +10,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where user_id = #{userId} and batch_no = #{batchNo} + +