修改因子表结构,将问题id存在因子表中
This commit is contained in:
parent
0a27a4ca98
commit
1dbb86c123
|
@ -2,9 +2,12 @@ package org.dromara.scale.domain;
|
|||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import io.github.linpeilie.annotations.AutoMapping;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.scale.domain.vo.SysScaleFactorVo;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.math.BigDecimal;
|
||||
|
@ -18,6 +21,7 @@ import java.math.BigDecimal;
|
|||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("sys_scale_factor")
|
||||
@AutoMapper(target = SysScaleFactorVo.class, reverseConvertGenerate = false)
|
||||
public class SysScaleFactor extends BaseEntity {
|
||||
|
||||
@Serial
|
||||
|
@ -39,6 +43,12 @@ public class SysScaleFactor extends BaseEntity {
|
|||
*/
|
||||
private Long scaleId;
|
||||
|
||||
/**
|
||||
* 问题ids
|
||||
*/
|
||||
@AutoMapping(target = "questionIds", expression = "java(cn.hutool.core.util.StrUtil.split(source.getQuestionIds(), \",\"))")
|
||||
private String questionIds;
|
||||
|
||||
/**
|
||||
* 计算类型
|
||||
*/
|
||||
|
|
|
@ -42,15 +42,4 @@ public class SysScaleQuestion extends BaseEntity {
|
|||
*/
|
||||
private String questionContent;
|
||||
|
||||
/**
|
||||
* 所属因子维度
|
||||
*/
|
||||
private Long factorId;
|
||||
|
||||
/**
|
||||
* 因子名称
|
||||
*/
|
||||
private String factorName;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -16,6 +16,5 @@ public class SubmitAnswerBo {
|
|||
|
||||
private Long scaleId;
|
||||
|
||||
|
||||
private List<SysEvaluationAnswerBo> answerList;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package org.dromara.scale.domain.bo;
|
||||
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import io.github.linpeilie.annotations.AutoMapping;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
@ -54,7 +55,8 @@ public class SysScaleFactorBo extends BaseEntity {
|
|||
@NotNull(message = "权重不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private BigDecimal weight;
|
||||
|
||||
private List<Long> questionIds;
|
||||
@AutoMapping(target = "questionIds", expression = "java(java.lang.String.join(\",\", source.getQuestionIds()))")
|
||||
private List<String> questionIds;
|
||||
|
||||
private List<SysScaleFactorRange> factorRangeList;
|
||||
|
||||
|
|
|
@ -55,18 +55,6 @@ public class SysScaleQuestionBo extends BaseEntity {
|
|||
@NotBlank(message = "问题内容不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private String questionContent;
|
||||
|
||||
/**
|
||||
* 所属因子维度
|
||||
*/
|
||||
// @NotNull(message = "所属因子维度不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long factorId;
|
||||
|
||||
/**
|
||||
* 因子名称
|
||||
*/
|
||||
// @NotBlank(message = "因子名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String factorName;
|
||||
|
||||
/**
|
||||
* 问题答案列表
|
||||
*/
|
||||
|
|
|
@ -2,9 +2,7 @@ package org.dromara.scale.domain.vo;
|
|||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.scale.domain.SysScaleFactor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
@ -20,7 +18,6 @@ import java.util.List;
|
|||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = SysScaleFactor.class)
|
||||
public class SysScaleFactorVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
|
@ -63,7 +60,7 @@ public class SysScaleFactorVo implements Serializable {
|
|||
/**
|
||||
* 问题id列表
|
||||
*/
|
||||
private List<Long> questionIds;
|
||||
private List<String> questionIds;
|
||||
|
||||
|
||||
private List<SysScaleFactorRangeVo> factorRangeList;
|
||||
|
|
|
@ -49,18 +49,6 @@ public class SysScaleQuestionVo implements Serializable {
|
|||
@ExcelProperty(value = "问题内容")
|
||||
private String questionContent;
|
||||
|
||||
/**
|
||||
* 所属因子维度
|
||||
*/
|
||||
@ExcelProperty(value = "所属因子维度")
|
||||
private Long factorId;
|
||||
|
||||
/**
|
||||
* 因子名称
|
||||
*/
|
||||
@ExcelProperty(value = "因子名称")
|
||||
private String factorName;
|
||||
|
||||
/**
|
||||
* 问题答案列表
|
||||
*/
|
||||
|
|
|
@ -7,6 +7,7 @@ import org.dromara.scale.domain.vo.SysScaleFactorVo;
|
|||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 测评因子Service接口
|
||||
|
@ -47,4 +48,6 @@ public interface ISysScaleFactorService {
|
|||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
List<SysScaleFactorVo> getScaleEvalItemList(Long scaleId);
|
||||
|
||||
Map<Long, List<String>> getQuestionMapByFactor(Long scaleId);
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ import org.dromara.scale.domain.vo.SysScaleQuestionVo;
|
|||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 量问题内容Service接口
|
||||
|
@ -47,5 +46,4 @@ public interface ISysScaleQuestionService {
|
|||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
Map<Long, List<SysScaleQuestionVo>> getScaleQuestionMap(Long scaleId);
|
||||
}
|
||||
|
|
|
@ -14,12 +14,12 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|||
import org.dromara.scale.domain.SysScale;
|
||||
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.*;
|
||||
import org.dromara.scale.mapper.SysScaleFactorMapper;
|
||||
import org.dromara.scale.mapper.SysScaleFactorRangeMapper;
|
||||
import org.dromara.scale.mapper.SysScaleMapper;
|
||||
import org.dromara.scale.service.ISysScaleFactorService;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
|
@ -42,7 +42,6 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
|
|||
|
||||
private final SysScaleFactorMapper baseMapper;
|
||||
private final SysScaleMapper scaleMapper;
|
||||
private final SysScaleQuestionMapper scaleQuestionMapper;
|
||||
private final SysScaleFactorRangeMapper scaleFactorRangeMapper;
|
||||
|
||||
/**
|
||||
|
@ -51,14 +50,6 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
|
|||
@Override
|
||||
public SysScaleFactorVo queryById(Long factorId) {
|
||||
SysScaleFactorVo sysScaleFactorVo = baseMapper.selectVoById(factorId);
|
||||
List<SysScaleQuestionVo> list = scaleQuestionMapper.selectVoList(Wrappers.<SysScaleQuestion>lambdaQuery().eq(SysScaleQuestion::getFactorId, factorId));
|
||||
if (CollUtil.isNotEmpty(list)) {
|
||||
List<Long> questionIds = list.stream().map(SysScaleQuestionVo::getQuestionId).collect(Collectors.toList());
|
||||
sysScaleFactorVo.setQuestionIds(questionIds);
|
||||
} else {
|
||||
sysScaleFactorVo.setQuestionIds(Collections.emptyList());
|
||||
}
|
||||
|
||||
List<SysScaleFactorRangeVo> rangeList = scaleFactorRangeMapper.selectVoList(Wrappers.<SysScaleFactorRange>lambdaQuery().eq(SysScaleFactorRange::getFactorId, factorId));
|
||||
if (CollUtil.isNotEmpty(rangeList)) {
|
||||
sysScaleFactorVo.setFactorRangeList(rangeList);
|
||||
|
@ -114,19 +105,18 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
|
|||
public Boolean insertByBo(SysScaleFactorBo bo) {
|
||||
SysScaleFactor add = MapstructUtils.convert(bo, SysScaleFactor.class);
|
||||
validEntityBeforeSave(add);
|
||||
// if (CollUtil.isNotEmpty(bo.getQuestionIds())) {
|
||||
// String questionIds = bo.getQuestionIds().stream().map(Object::toString)
|
||||
// .collect(Collectors.joining(StringUtils.SEPARATOR));
|
||||
//
|
||||
// }
|
||||
if (CollUtil.isNotEmpty(bo.getFactorRangeList())) {
|
||||
insertFactorRange(bo);
|
||||
}
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setFactorId(add.getFactorId());
|
||||
}
|
||||
|
||||
if (CollUtil.isNotEmpty(bo.getQuestionIds())) {
|
||||
updateQuestionFactor(bo);
|
||||
}
|
||||
|
||||
if (CollUtil.isNotEmpty(bo.getFactorRangeList())) {
|
||||
insertFactorRange(bo);
|
||||
}
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
|
@ -140,17 +130,17 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
|
|||
scaleFactorRangeMapper.insertBatch(list, 100);
|
||||
}
|
||||
|
||||
private void updateQuestionFactor(SysScaleFactorBo bo) {
|
||||
List<SysScaleQuestion> list = new ArrayList<>(bo.getQuestionIds().size());
|
||||
for (Long questionId : bo.getQuestionIds()) {
|
||||
SysScaleQuestion question = new SysScaleQuestion();
|
||||
question.setQuestionId(questionId);
|
||||
question.setFactorId(bo.getFactorId());
|
||||
question.setFactorName(bo.getFactorName());
|
||||
list.add(question);
|
||||
}
|
||||
scaleQuestionMapper.updateBatchById(list, 100);
|
||||
}
|
||||
// private void updateQuestionFactor(SysScaleFactorBo bo) {
|
||||
// List<SysScaleQuestion> list = new ArrayList<>(bo.getQuestionIds().size());
|
||||
// for (Long questionId : bo.getQuestionIds()) {
|
||||
// SysScaleQuestion question = new SysScaleQuestion();
|
||||
// question.setQuestionId(questionId);
|
||||
// question.setFactorId(bo.getFactorId());
|
||||
// question.setFactorName(bo.getFactorName());
|
||||
// list.add(question);
|
||||
// }
|
||||
// scaleQuestionMapper.updateBatchById(list, 100);
|
||||
// }
|
||||
|
||||
/**
|
||||
* 修改测评因子
|
||||
|
@ -165,9 +155,9 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
|
|||
SysScaleFactor update = MapstructUtils.convert(bo, SysScaleFactor.class);
|
||||
validEntityBeforeSave(update);
|
||||
|
||||
if (CollUtil.isNotEmpty(bo.getQuestionIds())) {
|
||||
updateQuestionFactor(bo);
|
||||
}
|
||||
// if (CollUtil.isNotEmpty(bo.getQuestionIds())) {
|
||||
// updateQuestionFactor(bo);
|
||||
// }
|
||||
|
||||
if (CollUtil.isNotEmpty(bo.getFactorRangeList())) {
|
||||
scaleFactorRangeMapper.delete(Wrappers.lambdaQuery(SysScaleFactorRange.class).eq(SysScaleFactorRange::getFactorId, bo.getFactorId()));
|
||||
|
@ -196,7 +186,6 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
|
|||
}
|
||||
|
||||
|
||||
|
||||
@Cacheable(cacheNames = CacheNames.SYS_SCALE_FACTOR, key = "#scaleId")
|
||||
@Override
|
||||
public List<SysScaleFactorVo> getScaleEvalItemList(Long scaleId) {
|
||||
|
@ -211,4 +200,16 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
|
|||
}
|
||||
return scaleFactorVos;
|
||||
}
|
||||
@Cacheable(cacheNames = CacheNames.MAP_SCALE_QUESTION, key = "#scaleId")
|
||||
public Map<Long, List<String>> getQuestionMapByFactor(Long scaleId) {
|
||||
List<SysScaleFactorVo> factorVos = baseMapper.selectVoList(new LambdaQueryWrapper<SysScaleFactor>()
|
||||
.eq(SysScaleFactor::getScaleId, scaleId));
|
||||
Map<Long, List<String>> map = new HashMap<>(factorVos.size());
|
||||
for (SysScaleFactorVo factor : factorVos) {
|
||||
Long factorId = factor.getFactorId();
|
||||
List<String> questionIds = factor.getQuestionIds();
|
||||
map.put(factorId, questionIds);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@ 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;
|
||||
|
@ -27,7 +26,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 量问题内容Service业务层处理
|
||||
|
@ -152,11 +150,4 @@ 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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -210,7 +210,7 @@ public class WebServiceImpl implements IWebService {
|
|||
|
||||
private List<SysEvaluationConclusionVo> calculateEvaluationResult(Long scaleId, List<SysEvaluationAnswerBo> answerList) {
|
||||
Long recordId = answerList.get(0).getRecordId();
|
||||
Map<Long, List<SysScaleQuestionVo>> questionMapByFactor = scaleQuestionService.getScaleQuestionMap(scaleId);
|
||||
Map<Long, List<String>> questionMapByFactor = scaleFactorService.getQuestionMapByFactor(scaleId);
|
||||
Map<Long, List<SysScaleAnswerVo>> answerMapByQuestion = scaleAnswerService.getScaleAnswerMap(scaleId);
|
||||
|
||||
List<SysScaleFactorVo> scaleFactorList = scaleFactorService.getScaleEvalItemList(scaleId);
|
||||
|
@ -226,11 +226,11 @@ public class WebServiceImpl implements IWebService {
|
|||
evalConclusion.setScore(BigDecimal.ZERO);
|
||||
list.add(evalConclusion);
|
||||
|
||||
List<SysScaleQuestionVo> questionNum = questionMapByFactor.get(factorId);
|
||||
List<Long> questionIds = new ArrayList<>();
|
||||
List<String> questionNum = questionMapByFactor.get(factorId);
|
||||
List<String> questionIds = new ArrayList<>();
|
||||
questionNum.forEach(q -> {
|
||||
Long questionId = q.getQuestionId();
|
||||
questionIds.add(questionId);
|
||||
questionIds.add(q);
|
||||
Long questionId = Long.parseLong(q);
|
||||
List<SysScaleAnswerVo> answerNum = answerMapByQuestion.get(questionId);
|
||||
if (!ArrayUtil.isEmpty(answerNum)) {
|
||||
//找出分数最大的选项
|
||||
|
|
Loading…
Reference in New Issue