优化测评端接口目录,统一入口;添加缓存删除;

This commit is contained in:
cjw 2024-04-15 10:06:43 +08:00
parent 391063bad7
commit 0aef5e4362
15 changed files with 412 additions and 403 deletions

View File

@ -13,10 +13,7 @@ import org.dromara.scale.domain.bo.SysEvaluationAnswerBo;
import org.dromara.scale.domain.bo.SysEvaluationRecordBo;
import org.dromara.scale.domain.vo.QuestionAnswerVo;
import org.dromara.scale.domain.vo.SysScalePublishVo;
import org.dromara.scale.service.ISysEvaluationConclusionService;
import org.dromara.scale.service.ISysEvaluationRecordService;
import org.dromara.scale.service.ISysScaleAnswerService;
import org.dromara.scale.service.ISysScalePublishService;
import org.dromara.scale.service.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -36,13 +33,7 @@ import java.util.Map;
@RequestMapping("/web/scale")
public class WebController extends BaseController {
private final ISysScalePublishService scalePublishService;
private final ISysEvaluationRecordService evaluationRecordService;
private final ISysScaleAnswerService scaleAnswerService;
private final ISysEvaluationConclusionService evaluationConclusionService;
private final IWebService webService;
/**
@ -50,7 +41,7 @@ public class WebController extends BaseController {
*/
@GetMapping("/publish")
public R<SysScalePublishVo> queryPublish() {
return R.ok(scalePublishService.queryPublishScale());
return R.ok(webService.queryPublishScale());
}
/**
@ -59,7 +50,7 @@ public class WebController extends BaseController {
@GetMapping("/answer/{id}")
public R<List<QuestionAnswerVo>> queryAnswer(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(scaleAnswerService.queryQuestionAnswerListByScaleId(id));
return R.ok(webService.queryQuestionAnswerListByScaleId(id));
}
/**
@ -69,7 +60,7 @@ public class WebController extends BaseController {
@RepeatSubmit()
@PostMapping("/record")
public R<Long> addRecord(@Validated(AddGroup.class) @RequestBody SysEvaluationRecordBo bo) {
return R.ok(evaluationRecordService.insertByBo(bo));
return R.ok(webService.newRecord(bo));
}
/**
@ -82,6 +73,6 @@ public class WebController extends BaseController {
if (ArrayUtil.isEmpty(answerList)) {
R.fail("请先填写,再提交");
}
return R.ok(evaluationConclusionService.submitAnswer(answerList));
return R.ok(webService.submitAnswer(answerList));
}
}

View File

@ -65,7 +65,7 @@ public class SysScaleBo extends BaseEntity {
/**
* 状态0停用 1正常
*/
@NotBlank(message = "状态0停用 1正常不能为空", groups = {AddGroup.class, EditGroup.class})
@NotNull(message = "状态0停用 1正常不能为空", groups = {AddGroup.class, EditGroup.class})
private Integer status;
/**

View File

@ -2,12 +2,10 @@ package org.dromara.scale.service;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.scale.domain.bo.SysEvaluationAnswerBo;
import org.dromara.scale.domain.bo.SysEvaluationConclusionBo;
import org.dromara.scale.domain.vo.SysEvaluationConclusionVo;
import java.util.List;
import java.util.Map;
/**
* 量测结果Service接口
@ -32,5 +30,4 @@ public interface ISysEvaluationConclusionService {
*/
List<SysEvaluationConclusionVo> queryList(SysEvaluationConclusionBo bo);
Map<String,Object> submitAnswer(List<SysEvaluationAnswerBo> answerList);
}

View File

@ -30,10 +30,6 @@ public interface ISysEvaluationRecordService {
*/
List<SysEvaluationRecordVo> queryList(SysEvaluationRecordBo bo);
/**
* 新增量测记录
*/
Long insertByBo(SysEvaluationRecordBo bo);
}

View File

@ -6,8 +6,8 @@ import org.dromara.scale.domain.bo.SysScaleAnswerBo;
import org.dromara.scale.domain.vo.QuestionAnswerVo;
import org.dromara.scale.domain.vo.SysScaleAnswerVo;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 选项信息Service接口
@ -32,21 +32,10 @@ public interface ISysScaleAnswerService {
*/
List<SysScaleAnswerVo> queryList(SysScaleAnswerBo bo);
/**
* 新增选项信息
*/
Boolean insertByBo(SysScaleAnswerBo bo);
/**
* 修改选项信息
*/
Boolean updateByBo(SysScaleAnswerBo bo);
/**
* 校验并批量删除选项信息信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<QuestionAnswerVo> queryQuestionAnswerListByScaleId(Long scaleId);
Map<Long, List<SysScaleAnswerVo>> getScaleAnswerMap(Long scaleId);
}

View File

@ -46,5 +46,5 @@ public interface ISysScaleFactorService {
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
int updateSelectQuestion(SysScaleFactorBo bo);
List<SysScaleFactorVo> getScaleEvalItemList(Long scaleId);
}

View File

@ -1,13 +1,13 @@
package org.dromara.scale.service;
import org.dromara.scale.domain.SysScaleQuestion;
import org.dromara.scale.domain.vo.SysScaleQuestionVo;
import org.dromara.scale.domain.bo.SysScaleQuestionBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.scale.domain.bo.SysScaleQuestionBo;
import org.dromara.scale.domain.vo.SysScaleQuestionVo;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 量问题内容Service接口
@ -46,4 +46,6 @@ public interface ISysScaleQuestionService {
* 校验并批量删除量问题内容信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
Map<Long, List<SysScaleQuestionVo>> getScaleQuestionMap(Long scaleId);
}

View File

@ -0,0 +1,20 @@
package org.dromara.scale.service;
import org.dromara.scale.domain.bo.SysEvaluationAnswerBo;
import org.dromara.scale.domain.bo.SysEvaluationRecordBo;
import org.dromara.scale.domain.vo.QuestionAnswerVo;
import org.dromara.scale.domain.vo.SysScalePublishVo;
import java.util.List;
import java.util.Map;
public interface IWebService {
SysScalePublishVo queryPublishScale();
List<QuestionAnswerVo> queryQuestionAnswerListByScaleId(Long scaleId);
Long newRecord(SysEvaluationRecordBo bo);
Map<String,Object> submitAnswer(List<SysEvaluationAnswerBo> answerList);
}

View File

@ -1,33 +1,20 @@
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.constant.CacheNames;
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.constant.ScaleDimensionEnum;
import org.dromara.scale.constant.ScoreRuleTypeEnum;
import org.dromara.scale.constant.SituationEnum;
import org.dromara.scale.constant.StatusEnum;
import org.dromara.scale.domain.*;
import org.dromara.scale.domain.bo.SysEvaluationAnswerBo;
import org.dromara.scale.domain.SysEvaluationConclusion;
import org.dromara.scale.domain.bo.SysEvaluationConclusionBo;
import org.dromara.scale.domain.vo.*;
import org.dromara.scale.domain.vo.SysEvaluationConclusionVo;
import org.dromara.scale.mapper.*;
import org.dromara.scale.service.ISysEvaluationConclusionService;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
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;
import java.util.List;
/**
* 量测结果Service业务层处理
@ -39,7 +26,7 @@ import java.util.stream.Collectors;
@Service
public class SysEvaluationConclusionServiceImpl implements ISysEvaluationConclusionService {
private static final MathContext mathContext = new MathContext(2);
private final MathContext mathContext = new MathContext(2);
private final SysEvaluationConclusionMapper baseMapper;
@ -103,248 +90,4 @@ public class SysEvaluationConclusionServiceImpl implements ISysEvaluationConclus
private void validEntityBeforeSave(SysEvaluationConclusion entity) {
//TODO 做一些数据校验,如唯一约束
}
@Override
public Map<String, Object> submitAnswer(List<SysEvaluationAnswerBo> answerList) {
boolean allowQueryResult = true;
Long recordId = answerList.get(0).getRecordId();
SysScalePublishVo scalePublishVo = recordMapper.selectPublishByUseRecord(recordId);
//查询考核结果
if (scalePublishVo.getAllowQueryResult() == 0) {
allowQueryResult = false;
}
List<SysEvaluationAnswer> answerAdd = MapstructUtils.convert(answerList, SysEvaluationAnswer.class);
evaluationAnswerMapper.insertBatch(answerAdd);
List<SysEvaluationConclusionVo> list = calculateEvaluationResult(answerList);
List<SysEvaluationConclusion> conclusionAdd = MapstructUtils.convert(list, SysEvaluationConclusion.class);
baseMapper.insertBatch(conclusionAdd);
Integer riskLevel = -1;
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<String, Object>() {{
//put("evalRecordId",evalRecord.getId());
//put("scaleName",scaleInfo.getName());
put("totalScore", totalScore.doubleValue());
put("list", list.stream().filter(item -> item.getStatus().equals(StatusEnum.IN_USE.getValue())).collect(
Collectors.toList()));
}};
}
private List<SysEvaluationConclusionVo> calculateEvaluationResult(List<SysEvaluationAnswerBo> answerList) {
Long recordId = answerList.get(0).getRecordId();
SysEvaluationRecordVo recordVo = recordMapper.selectVoById(recordId);
Long scaleId = recordVo.getScaleId();
Map<Long, List<SysScaleQuestionVo>> questionMapByFactor = getScaleQuestionMap(scaleId);
Map<Long, List<SysScaleAnswerVo>> answerMapByQuestion = getScaleAnswerMap(scaleId);
List<SysScaleFactorVo> scaleFactorList = getScaleEvalItemList(scaleId);
List<SysEvaluationConclusionVo> list = new ArrayList<>(scaleFactorList.size());
for (SysScaleFactorVo scaleFactor : scaleFactorList) {
Long factorId = scaleFactor.getFactorId();
AtomicReference<BigDecimal> totalSocre = new AtomicReference<>(BigDecimal.ZERO);
SysEvaluationConclusionVo evalConclusion = new SysEvaluationConclusionVo();
evalConclusion.setFactorId(factorId);
evalConclusion.setRecordId(recordId);
evalConclusion.setStatus(StatusEnum.DISABLED.getValue());
evalConclusion.setScore(BigDecimal.ZERO);
list.add(evalConclusion);
List<SysScaleQuestionVo> questionNum = questionMapByFactor.get(factorId);
List<Long> questionIds = new ArrayList<>();
questionNum.forEach(q -> {
Long questionId = q.getQuestionId();
questionIds.add(questionId);
List<SysScaleAnswerVo> 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<SysScaleFactorRangeVo> 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(SituationEnum.getNameByCode(range.getSituation()));
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(SituationEnum.getNameByCode(range.getSituation()));
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(SituationEnum.getNameByCode(range.getSituation()));
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;
}
@Cacheable(cacheNames = CacheNames.MAP_SCALE_QUESTION, key = "#scaleId")
public Map<Long, List<SysScaleQuestionVo>> getScaleQuestionMap(Long scaleId) {
List<SysScaleQuestionVo> scaleQuestionVos = scaleQuestionMapper.selectVoList(
new LambdaQueryWrapper<SysScaleQuestion>().eq(SysScaleQuestion::getScaleId, scaleId));
return scaleQuestionVos.stream().collect(Collectors.groupingBy(SysScaleQuestionVo::getFactorId));
}
@Cacheable(cacheNames = CacheNames.MAP_SCALE_ANSWER, key = "#scaleId")
public Map<Long, List<SysScaleAnswerVo>> getScaleAnswerMap(Long scaleId) {
List<SysScaleAnswerVo> scaleAnswerVos = scaleAnswerMapper.selectVoList(
new LambdaQueryWrapper<SysScaleAnswer>().eq(SysScaleAnswer::getScaleId, scaleId));
return scaleAnswerVos.stream().collect(Collectors.groupingBy(SysScaleAnswerVo::getQuestionId));
}
@Cacheable(cacheNames = CacheNames.SYS_SCALE_FACTOR, key = "#scaleId")
public List<SysScaleFactorVo> getScaleEvalItemList(Long scaleId) {
List<SysScaleFactorVo> scaleFactorVos = scaleFactorMapper.selectVoList(
new LambdaQueryWrapper<SysScaleFactor>().eq(SysScaleFactor::getScaleId, scaleId));
List<SysScaleFactorRangeVo> scaleFactorRangeVos = scaleFactorRangeMapper.selectVoList(
new LambdaQueryWrapper<SysScaleFactorRange>().eq(SysScaleFactorRange::getScaleId, scaleId));
if (!ArrayUtil.isEmpty(scaleFactorVos) && !ArrayUtil.isEmpty(scaleFactorRangeVos)) {
Map<Long, List<SysScaleFactorRangeVo>> 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<SysEvaluationConclusionVo> 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(StatusEnum.IN_USE.getValue()));
break;
case MULTIPE_SINGL:
//择低录取
if (scaleInfo.getSelectDirection() == 1) {
evalConclusions.stream().min(Comparator.comparing(SysEvaluationConclusionVo::getScore)).get().setStatus(StatusEnum.IN_USE.getValue());
} else {
//高分录取
evalConclusions.stream().max(Comparator.comparing(SysEvaluationConclusionVo::getScore)).get().setStatus(StatusEnum.IN_USE.getValue());
}
break;
case MULTIPE_MULTIPE:
evalConclusions.forEach(item -> item.setStatus(1));
break;
default:
break;
}
}
}

View File

@ -4,8 +4,6 @@ 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.domain.model.LoginUser;
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.SysEvaluationRecord;
@ -15,11 +13,8 @@ import org.dromara.scale.mapper.SysEvaluationRecordMapper;
import org.dromara.scale.service.ISysEvaluationRecordService;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import static org.dromara.common.satoken.utils.LoginHelper.getLoginUser;
/**
* 量测记录Service业务层处理
*
@ -68,33 +63,4 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
return lqw;
}
/**
* 新增量测记录
*/
@Override
public Long insertByBo(SysEvaluationRecordBo bo) {
LoginUser loginUser = getLoginUser();
SysEvaluationRecord add = MapstructUtils.convert(bo, SysEvaluationRecord.class);
add.setUserId(loginUser.getUserId());
add.setCreateTime(new Date());
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setRecordId(add.getRecordId());
}
return add.getRecordId();
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SysEvaluationRecord entity){
//TODO 做一些数据校验,如唯一约束
}
}

View File

@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -21,7 +20,10 @@ import org.dromara.scale.service.ISysScaleAnswerService;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -74,47 +76,6 @@ public class SysScaleAnswerServiceImpl implements ISysScaleAnswerService {
return lqw;
}
/**
* 新增选项信息
*/
@Override
public Boolean insertByBo(SysScaleAnswerBo bo) {
SysScaleAnswer add = MapstructUtils.convert(bo, SysScaleAnswer.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setAnswerId(add.getAnswerId());
}
return flag;
}
/**
* 修改选项信息
*/
@Override
public Boolean updateByBo(SysScaleAnswerBo bo) {
SysScaleAnswer update = MapstructUtils.convert(bo, SysScaleAnswer.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SysScaleAnswer entity) {
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除选项信息
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Cacheable(cacheNames = CacheNames.SYS_QUESTION_ANSWER, key = "#scaleId")
@Override
public List<QuestionAnswerVo> queryQuestionAnswerListByScaleId(Long scaleId) {
@ -143,4 +104,11 @@ public class SysScaleAnswerServiceImpl implements ISysScaleAnswerService {
}
return questionAnswerVos;
}
@Cacheable(cacheNames = CacheNames.MAP_SCALE_ANSWER, key = "#scaleId")
@Override
public Map<Long, List<SysScaleAnswerVo>> getScaleAnswerMap(Long scaleId) {
List<SysScaleAnswerVo> scaleAnswerVos = baseMapper.selectVoList(
new LambdaQueryWrapper<SysScaleAnswer>().eq(SysScaleAnswer::getScaleId, scaleId));
return scaleAnswerVos.stream().collect(Collectors.groupingBy(SysScaleAnswerVo::getQuestionId));
}
}

View File

@ -1,10 +1,12 @@
package org.dromara.scale.service.impl;
import cn.hutool.core.collection.CollUtil;
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.constant.CacheNames;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -19,6 +21,9 @@ import org.dromara.scale.domain.vo.SysScaleFactorVo;
import org.dromara.scale.domain.vo.SysScaleQuestionVo;
import org.dromara.scale.mapper.*;
import org.dromara.scale.service.ISysScaleFactorService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -37,9 +42,8 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
private final SysScaleFactorMapper baseMapper;
private final SysScaleMapper scaleMapper;
private final SysScaleFormulaMapper scaleFormulaMapper;
private final SysScaleQuestionMapper scaleQuestionMapper;
private final SysScaleFactorRangeMapper sysScaleFactorRangeMapper;
private final SysScaleFactorRangeMapper scaleFactorRangeMapper;
/**
* 查询测评因子
@ -55,7 +59,7 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
sysScaleFactorVo.setQuestionIds(Collections.emptyList());
}
List<SysScaleFactorRangeVo> rangeList = sysScaleFactorRangeMapper.selectVoList(Wrappers.<SysScaleFactorRange>lambdaQuery().eq(SysScaleFactorRange::getFactorId, factorId));
List<SysScaleFactorRangeVo> rangeList = scaleFactorRangeMapper.selectVoList(Wrappers.<SysScaleFactorRange>lambdaQuery().eq(SysScaleFactorRange::getFactorId, factorId));
if (CollUtil.isNotEmpty(rangeList)) {
sysScaleFactorVo.setFactorRangeList(rangeList);
} else {
@ -101,6 +105,10 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
/**
* 新增测评因子
*/
@Caching(evict = {
@CacheEvict(cacheNames = CacheNames.MAP_SCALE_QUESTION, key = "#bo.scaleId"),
@CacheEvict(cacheNames = CacheNames.SYS_SCALE_FACTOR, key = "#bo.scaleId")
})
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean insertByBo(SysScaleFactorBo bo) {
@ -129,7 +137,7 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
range.setScaleId(bo.getScaleId());
list.add(range);
}
sysScaleFactorRangeMapper.insertBatch(list, 100);
scaleFactorRangeMapper.insertBatch(list, 100);
}
private void updateQuestionFactor(SysScaleFactorBo bo) {
@ -147,6 +155,10 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
/**
* 修改测评因子
*/
@Caching(evict = {
@CacheEvict(cacheNames = CacheNames.MAP_SCALE_QUESTION, key = "#bo.scaleId"),
@CacheEvict(cacheNames = CacheNames.SYS_SCALE_FACTOR, key = "#bo.scaleId")
})
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean updateByBo(SysScaleFactorBo bo) {
@ -158,7 +170,7 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
}
if (CollUtil.isNotEmpty(bo.getFactorRangeList())) {
sysScaleFactorRangeMapper.delete(Wrappers.lambdaQuery(SysScaleFactorRange.class).eq(SysScaleFactorRange::getFactorId, bo.getFactorId()));
scaleFactorRangeMapper.delete(Wrappers.lambdaQuery(SysScaleFactorRange.class).eq(SysScaleFactorRange::getFactorId, bo.getFactorId()));
insertFactorRange(bo);
}
@ -183,14 +195,20 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
return baseMapper.deleteBatchIds(ids) > 0;
}
@Cacheable(cacheNames = CacheNames.SYS_SCALE_FACTOR, key = "#scaleId")
@Override
public int updateSelectQuestion(SysScaleFactorBo bo) {
Long factorId = bo.getFactorId();
List<Long> questionIds = bo.getQuestionIds();
int i = scaleQuestionMapper.cleanFactorIdByFactorId(factorId);
if (questionIds != null && questionIds.size() > 0) {
i = scaleQuestionMapper.updateFactorIdByIds(factorId, questionIds);
public List<SysScaleFactorVo> getScaleEvalItemList(Long scaleId) {
List<SysScaleFactorVo> scaleFactorVos = baseMapper.selectVoList(
new LambdaQueryWrapper<SysScaleFactor>().eq(SysScaleFactor::getScaleId, scaleId));
List<SysScaleFactorRangeVo> scaleFactorRangeVos = scaleFactorRangeMapper.selectVoList(
new LambdaQueryWrapper<SysScaleFactorRange>().eq(SysScaleFactorRange::getScaleId, scaleId));
if (!ArrayUtil.isEmpty(scaleFactorVos) && !ArrayUtil.isEmpty(scaleFactorRangeVos)) {
Map<Long, List<SysScaleFactorRangeVo>> map = scaleFactorRangeVos.stream()
.collect(Collectors.groupingBy(SysScaleFactorRangeVo::getFactorId));
scaleFactorVos.forEach(item -> item.setFactorRangeList(map.get(item.getFactorId())));
}
return i;
return scaleFactorVos;
}
}

View File

@ -44,11 +44,11 @@ import static org.dromara.common.satoken.utils.LoginHelper.getLoginUser;
public class SysScalePublishServiceImpl implements ISysScalePublishService {
private final SysScalePublishMapper baseMapper;
private final SysScaleMapper sysScaleMapper;
private final SysScaleMapper scaleMapper;
private final SysEvaluationRecordMapper recordMapper;
private final SysOssMapper sysOssMapper;
/**
@ -179,15 +179,16 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
Long batchNo = sysScalePublishVo.getBatchNo();
String scaleIds = sysScalePublishVo.getScaleIds();
List<SysScaleVo> publishScaleVos = sysScaleMapper.findSysScaleByIds(StrUtil.join(StrUtil.COMMA, scaleIds));
List<SysEvaluationRecordVo> recordVos = recordMapper.selectSclaeRecordListByUserAndBatch(userId, batchNo);
for (SysScaleVo publishScaleVo : publishScaleVos) {
SysOss sysOss = sysOssMapper.selectById(publishScaleVo.getCover());
publishScaleVo.setCoverUrl(sysOss.getUrl());
}
List<SysEvaluationRecordVo> recordVos = recordMapper.selectSclaeRecordListByUserAndBatch(userId, batchNo);
for (SysEvaluationRecordVo recordVo : recordVos) {
publishScaleVos.stream().filter(p -> p.getScaleId().equals(recordVo.getScaleId()))
.findFirst().ifPresent(m -> m.setUsed(true));
//已做过量表
for (SysEvaluationRecordVo recordVo : recordVos) {
if( publishScaleVo.getScaleId().equals(recordVo.getScaleId())){
publishScaleVo.setUsed(true);
}
}
}
sysScalePublishVo.setScaleList(publishScaleVos);
return sysScalePublishVo;

View File

@ -19,6 +19,7 @@ import org.dromara.scale.mapper.SysScaleAnswerMapper;
import org.dromara.scale.mapper.SysScaleQuestionMapper;
import org.dromara.scale.service.ISysScaleQuestionService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -26,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 量问题内容Service业务层处理
@ -87,7 +89,11 @@ public class SysScaleQuestionServiceImpl implements ISysScaleQuestionService {
/**
* 新增量问题内容
*/
@CacheEvict(cacheNames = CacheNames.SYS_QUESTION_ANSWER, key = "#bo.scaleId")
@Caching(evict = {
@CacheEvict(cacheNames = CacheNames.SYS_QUESTION_ANSWER, key = "#bo.scaleId"),
@CacheEvict(cacheNames = CacheNames.MAP_SCALE_QUESTION, key = "#bo.scaleId"),
@CacheEvict(cacheNames = CacheNames.MAP_SCALE_ANSWER, key = "#bo.scaleId")
})
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean insertByBo(SysScaleQuestionBo bo) {
@ -115,13 +121,14 @@ public class SysScaleQuestionServiceImpl implements ISysScaleQuestionService {
*/
@Caching(evict = {
@CacheEvict(cacheNames = CacheNames.SYS_QUESTION_ANSWER, key = "#bo.scaleId"),
@CacheEvict(cacheNames = CacheNames.SYS_QUESTION_ANSWER, key = "#bo.scaleId")})
@CacheEvict(cacheNames = CacheNames.MAP_SCALE_QUESTION, key = "#bo.scaleId"),
@CacheEvict(cacheNames = CacheNames.MAP_SCALE_ANSWER, key = "#bo.scaleId")
})
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean updateByBo(SysScaleQuestionBo bo) {
SysScaleQuestion update = MapstructUtils.convert(bo, SysScaleQuestion.class);
validEntityBeforeSave(update);
scaleAnswerMapper.deleteScaleAnswerByQuestionId(update.getQuestionId());
batchInsertAnswer(bo, update);
return baseMapper.updateById(update) > 0;
@ -144,4 +151,12 @@ public class SysScaleQuestionServiceImpl implements ISysScaleQuestionService {
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Cacheable(cacheNames = CacheNames.MAP_SCALE_QUESTION, key = "#scaleId")
@Override
public Map<Long, List<SysScaleQuestionVo>> getScaleQuestionMap(Long scaleId) {
List<SysScaleQuestionVo> scaleQuestionVos = baseMapper.selectVoList(
new LambdaQueryWrapper<SysScaleQuestion>().eq(SysScaleQuestion::getScaleId, scaleId));
return scaleQuestionVos.stream().collect(Collectors.groupingBy(SysScaleQuestionVo::getFactorId));
}
}

View File

@ -0,0 +1,303 @@
package org.dromara.scale.service.impl;
import cn.hutool.core.util.ArrayUtil;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.scale.constant.ScaleDimensionEnum;
import org.dromara.scale.constant.ScoreRuleTypeEnum;
import org.dromara.scale.constant.SituationEnum;
import org.dromara.scale.constant.StatusEnum;
import org.dromara.scale.domain.SysEvaluationAnswer;
import org.dromara.scale.domain.SysEvaluationConclusion;
import org.dromara.scale.domain.SysEvaluationRecord;
import org.dromara.scale.domain.SysScale;
import org.dromara.scale.domain.bo.SysEvaluationAnswerBo;
import org.dromara.scale.domain.bo.SysEvaluationRecordBo;
import org.dromara.scale.domain.vo.*;
import org.dromara.scale.mapper.SysEvaluationAnswerMapper;
import org.dromara.scale.mapper.SysEvaluationConclusionMapper;
import org.dromara.scale.mapper.SysEvaluationRecordMapper;
import org.dromara.scale.mapper.SysScaleMapper;
import org.dromara.scale.service.*;
import org.springframework.stereotype.Service;
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;
import static org.dromara.common.satoken.utils.LoginHelper.getLoginUser;
/**
* <p>测评网页端服务<p>
*
* @author cjw
* @version V1.0.0
* @date 2024/4/15 9:18
*/
@RequiredArgsConstructor
@Service
public class WebServiceImpl implements IWebService {
private final ISysScalePublishService scalePublishService;
private final ISysScaleFactorService scaleFactorService;
private final ISysScaleQuestionService scaleQuestionService;
private final ISysScaleAnswerService scaleAnswerService;
private final SysScaleMapper scaleMapper;
private final SysEvaluationRecordMapper recordMapper;
private final SysEvaluationConclusionMapper evaluationConclusionMapper;
private final SysEvaluationAnswerMapper evaluationAnswerMapper;
private final MathContext mathContext = new MathContext(2);
@Override
public SysScalePublishVo queryPublishScale() {
return scalePublishService.queryPublishScale();
}
@Override
public List<QuestionAnswerVo> queryQuestionAnswerListByScaleId(Long scaleId) {
return scaleAnswerService.queryQuestionAnswerListByScaleId(scaleId);
}
@Override
public Long newRecord(SysEvaluationRecordBo bo) {
LoginUser loginUser = getLoginUser();
SysEvaluationRecord add = MapstructUtils.convert(bo, SysEvaluationRecord.class);
add.setUserId(loginUser.getUserId());
add.setCreateTime(new Date());
//validEntityBeforeSave(add);
boolean flag = recordMapper.insert(add) > 0;
if (flag) {
bo.setRecordId(add.getRecordId());
}
return add.getRecordId();
}
@Override
public Map<String, Object> submitAnswer(List<SysEvaluationAnswerBo> answerList) {
boolean allowQueryResult = true;
Long recordId = answerList.get(0).getRecordId();
SysScalePublishVo scalePublishVo = recordMapper.selectPublishByUseRecord(recordId);
//查询考核结果
if (scalePublishVo.getAllowQueryResult() == 0) {
allowQueryResult = false;
}
List<SysEvaluationAnswer> answerAdd = MapstructUtils.convert(answerList, SysEvaluationAnswer.class);
evaluationAnswerMapper.insertBatch(answerAdd);
List<SysEvaluationConclusionVo> list = calculateEvaluationResult(answerList);
List<SysEvaluationConclusion> conclusionAdd = MapstructUtils.convert(list, SysEvaluationConclusion.class);
evaluationConclusionMapper.insertBatch(conclusionAdd);
Integer riskLevel = -1;
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()
.map(SysEvaluationConclusionVo::getScore)
// 使用reduce()聚合函数,得到金额总和
.reduce(BigDecimal.ZERO, BigDecimal::add);
return new HashMap<String, Object>() {{
//put("evalRecordId",evalRecord.getId());
//put("scaleName",scaleInfo.getName());
put("totalScore", totalScore.doubleValue());
put("list", list.stream().filter(item -> item.getStatus().equals(StatusEnum.IN_USE.getValue())).collect(
Collectors.toList()));
}};
}
private List<SysEvaluationConclusionVo> calculateEvaluationResult(List<SysEvaluationAnswerBo> answerList) {
Long recordId = answerList.get(0).getRecordId();
SysEvaluationRecordVo recordVo = recordMapper.selectVoById(recordId);
Long scaleId = recordVo.getScaleId();
Map<Long, List<SysScaleQuestionVo>> questionMapByFactor = scaleQuestionService.getScaleQuestionMap(scaleId);
Map<Long, List<SysScaleAnswerVo>> answerMapByQuestion = scaleAnswerService.getScaleAnswerMap(scaleId);
List<SysScaleFactorVo> scaleFactorList = scaleFactorService.getScaleEvalItemList(scaleId);
List<SysEvaluationConclusionVo> list = new ArrayList<>(scaleFactorList.size());
for (SysScaleFactorVo scaleFactor : scaleFactorList) {
Long factorId = scaleFactor.getFactorId();
AtomicReference<BigDecimal> totalSocre = new AtomicReference<>(BigDecimal.ZERO);
SysEvaluationConclusionVo evalConclusion = new SysEvaluationConclusionVo();
evalConclusion.setFactorId(factorId);
evalConclusion.setRecordId(recordId);
evalConclusion.setStatus(StatusEnum.DISABLED.getValue());
evalConclusion.setScore(BigDecimal.ZERO);
list.add(evalConclusion);
List<SysScaleQuestionVo> questionNum = questionMapByFactor.get(factorId);
List<Long> questionIds = new ArrayList<>();
questionNum.forEach(q -> {
Long questionId = q.getQuestionId();
questionIds.add(questionId);
List<SysScaleAnswerVo> 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<SysScaleFactorRangeVo> 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(SituationEnum.getNameByCode(range.getSituation()));
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(SituationEnum.getNameByCode(range.getSituation()));
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(SituationEnum.getNameByCode(range.getSituation()));
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;
}
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<SysEvaluationConclusionVo> 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(StatusEnum.IN_USE.getValue()));
break;
case MULTIPE_SINGL:
//择低录取
if (scaleInfo.getSelectDirection() == 1) {
evalConclusions.stream().min(Comparator.comparing(SysEvaluationConclusionVo::getScore)).get().setStatus(StatusEnum.IN_USE.getValue());
} else {
//高分录取
evalConclusions.stream().max(Comparator.comparing(SysEvaluationConclusionVo::getScore)).get().setStatus(StatusEnum.IN_USE.getValue());
}
break;
case MULTIPE_MULTIPE:
evalConclusions.forEach(item -> item.setStatus(1));
break;
default:
break;
}
}
}