修改因子表结构,将问题id存在因子表中

This commit is contained in:
cjw 2024-04-15 16:43:40 +08:00
parent 0a27a4ca98
commit 1dbb86c123
12 changed files with 59 additions and 93 deletions

View File

@ -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;
/**
* 计算类型
*/

View File

@ -42,15 +42,4 @@ public class SysScaleQuestion extends BaseEntity {
*/
private String questionContent;
/**
* 所属因子维度
*/
private Long factorId;
/**
* 因子名称
*/
private String factorName;
}

View File

@ -16,6 +16,5 @@ public class SubmitAnswerBo {
private Long scaleId;
private List<SysEvaluationAnswerBo> answerList;
}

View File

@ -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;

View File

@ -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;
/**
* 问题答案列表
*/

View File

@ -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;

View File

@ -49,18 +49,6 @@ public class SysScaleQuestionVo implements Serializable {
@ExcelProperty(value = "问题内容")
private String questionContent;
/**
* 所属因子维度
*/
@ExcelProperty(value = "所属因子维度")
private Long factorId;
/**
* 因子名称
*/
@ExcelProperty(value = "因子名称")
private String factorName;
/**
* 问题答案列表
*/

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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));
}
}

View File

@ -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)) {
//找出分数最大的选项