|
@@ -1,21 +1,32 @@
|
|
|
package com.qmth.distributed.print.business.service.impl;
|
|
|
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
+import com.qmth.distributed.print.business.bean.dto.excel.GradePaperDimensionAbilityDto;
|
|
|
+import com.qmth.distributed.print.business.bean.dto.excel.GradePaperDimensionKnowledgeDto;
|
|
|
import com.qmth.distributed.print.business.bean.dto.open.PaperDimension;
|
|
|
import com.qmth.distributed.print.business.bean.params.GradePaperDimensionParam;
|
|
|
+import com.qmth.distributed.print.business.bean.result.analyze.GradePaperDimensionResult;
|
|
|
import com.qmth.distributed.print.business.entity.GradePaperDimension;
|
|
|
+import com.qmth.distributed.print.business.enums.DimensionEnum;
|
|
|
import com.qmth.distributed.print.business.mapper.GradePaperDimensionMapper;
|
|
|
+import com.qmth.distributed.print.business.service.GradeBatchPaperService;
|
|
|
import com.qmth.distributed.print.business.service.GradePaperDimensionService;
|
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
import com.qmth.teachcloud.common.entity.SysUser;
|
|
|
import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
+import com.qmth.teachcloud.common.util.ExcelUtil;
|
|
|
+import com.qmth.teachcloud.common.util.ServletUtil;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.util.LinkedMultiValueMap;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
-import java.util.List;
|
|
|
-import java.util.Objects;
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -27,51 +38,131 @@ import java.util.Objects;
|
|
|
*/
|
|
|
@Service
|
|
|
public class GradePaperDimensionServiceImpl extends ServiceImpl<GradePaperDimensionMapper, GradePaperDimension> implements GradePaperDimensionService {
|
|
|
+ @Resource
|
|
|
+ private GradeBatchPaperService gradeBatchPaperService;
|
|
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public Long editGradePaperDimension(GradePaperDimensionParam gradePaperDimensionParam, SysUser requestUser) {
|
|
|
- Long id = gradePaperDimensionParam.getId();
|
|
|
- Long schoolId = requestUser.getSchoolId();
|
|
|
- // 基础信息
|
|
|
- String paperNumber = gradePaperDimensionParam.getPaperNumber();
|
|
|
- String paperType = gradePaperDimensionParam.getPaperType();
|
|
|
- String paperName = gradePaperDimensionParam.getPaperName();
|
|
|
-
|
|
|
- // TODO: 2022/5/23 根据试卷编号和试卷类型校验该试卷是分析试卷
|
|
|
-
|
|
|
- // 维度信息
|
|
|
- String codePrimary = gradePaperDimensionParam.getCodePrimary();
|
|
|
- String namePrimary = gradePaperDimensionParam.getNamePrimary();
|
|
|
- this.checkCodePrimaryParams(id, paperNumber, paperType, codePrimary, namePrimary, schoolId);
|
|
|
-
|
|
|
- // 二级维度
|
|
|
-
|
|
|
-
|
|
|
- return null;
|
|
|
+ public List<GradePaperDimensionResult> findGradePaperDimensionList(String paperNumber, String paperType, SysUser requestUser) {
|
|
|
+ return this.baseMapper.findGradePaperDimensionList(paperNumber,paperType, requestUser.getSchoolId());
|
|
|
}
|
|
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public void editGradePaperDimensionBatch(List<GradePaperDimensionParam> gradePaperDimensionParamList, SysUser requestUser) {
|
|
|
-
|
|
|
+ public void saveGradePaperDimensionBatch(List<GradePaperDimensionParam> gradePaperDimensionParamList, SysUser requestUser) {
|
|
|
+ List<String> paperNumberList = gradePaperDimensionParamList.stream().map(GradePaperDimensionParam::getPaperNumber).distinct().collect(Collectors.toList());
|
|
|
+ if (paperNumberList.size() != 1) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("一次只能提交同一个试卷编号下的试卷维度数据");
|
|
|
+ }
|
|
|
+ List<String> paperTypeList = gradePaperDimensionParamList.stream().map(GradePaperDimensionParam::getPaperType).distinct().collect(Collectors.toList());
|
|
|
+ if (paperTypeList.size() != 1) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("一次只能提交同一个试卷类型下的试卷维度数据");
|
|
|
+ }
|
|
|
+ String paperNumber = paperNumberList.get(0);
|
|
|
+ String paperType = paperTypeList.get(0);
|
|
|
+ gradeBatchPaperService.checkOperateAuth(requestUser.getSchoolId(), paperNumber, paperType);
|
|
|
+ List<GradePaperDimension> gradePaperDimensionList = this.checkAndBuildGradePaperDimensionList(gradePaperDimensionParamList, requestUser);
|
|
|
+ this.saveBatch(gradePaperDimensionList);
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public void deleteGradePaperDimension(List<Long> gradePaperDimensionIdList) {
|
|
|
+ public void importGradePaperKnowledgeDimension(MultipartFile file, String paperNumber, String paperType, SysUser requestUser) throws IOException, NoSuchFieldException {
|
|
|
+ if (Objects.isNull(file)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("找不到附件");
|
|
|
+ }
|
|
|
|
|
|
+ List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(GradePaperDimensionKnowledgeDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
|
|
|
+ if (finalExcelErrorList.size() > 0) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(finalExcelErrorList));
|
|
|
+ }
|
|
|
+ return finalExcelList;
|
|
|
+ });
|
|
|
+ List<GradePaperDimensionParam> gradePaperDimensionParamList = new ArrayList<>();
|
|
|
+
|
|
|
+ if (Objects.nonNull(finalList) && finalList.size() > 0) {
|
|
|
+ for (int i = 0; i < finalList.size(); i++) {
|
|
|
+ LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
|
|
|
+ List<Object> importList = map.get(i);
|
|
|
+
|
|
|
+ for (int y = 0; y < Objects.requireNonNull(importList).size(); y++) {
|
|
|
+ if (importList.get(y) instanceof GradePaperDimensionKnowledgeDto) {
|
|
|
+ GradePaperDimensionKnowledgeDto gradePaperDimensionKnowledgeDto = (GradePaperDimensionKnowledgeDto) importList.get(y);
|
|
|
+
|
|
|
+ GradePaperDimensionParam gradePaperDimensionParam = new GradePaperDimensionParam();
|
|
|
+ gradePaperDimensionParam.setPaperNumber(paperNumber);
|
|
|
+ gradePaperDimensionParam.setPaperType(paperType);
|
|
|
+ gradePaperDimensionParam.setDimensionType(DimensionEnum.KNOWLEDGE);
|
|
|
+ gradePaperDimensionParam.setCodePrimary(gradePaperDimensionKnowledgeDto.getCodePrimary());
|
|
|
+ gradePaperDimensionParam.setNamePrimary(gradePaperDimensionKnowledgeDto.getNamePrimary());
|
|
|
+ gradePaperDimensionParam.setCodeSecond(gradePaperDimensionKnowledgeDto.getCodeSecond());
|
|
|
+ gradePaperDimensionParam.setNameSecond(gradePaperDimensionKnowledgeDto.getNameSecond());
|
|
|
+ gradePaperDimensionParamList.add(gradePaperDimensionParam);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.saveGradePaperDimensionBatch(gradePaperDimensionParamList, requestUser);
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public void importGradePaperDimension(MultipartFile file, String paperNumber, String paperType, SysUser requestUser) {
|
|
|
+ public void importGradePaperAbilityDimension(MultipartFile file, String paperNumber, String paperType, SysUser requestUser) throws IOException, NoSuchFieldException {
|
|
|
+ if (Objects.isNull(file)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("找不到附件");
|
|
|
+ }
|
|
|
|
|
|
+ List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(GradePaperDimensionAbilityDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
|
|
|
+ if (finalExcelErrorList.size() > 0) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(finalExcelErrorList));
|
|
|
+ }
|
|
|
+ return finalExcelList;
|
|
|
+ });
|
|
|
+ List<GradePaperDimensionParam> gradePaperDimensionParamList = new ArrayList<>();
|
|
|
+
|
|
|
+ if (Objects.nonNull(finalList) && finalList.size() > 0) {
|
|
|
+ for (int i = 0; i < finalList.size(); i++) {
|
|
|
+ LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
|
|
|
+ List<Object> importList = map.get(i);
|
|
|
+
|
|
|
+ for (int y = 0; y < Objects.requireNonNull(importList).size(); y++) {
|
|
|
+ if (importList.get(y) instanceof GradePaperDimensionKnowledgeDto) {
|
|
|
+ GradePaperDimensionAbilityDto gradePaperDimensionAbilityDto = (GradePaperDimensionAbilityDto) importList.get(y);
|
|
|
+
|
|
|
+ GradePaperDimensionParam gradePaperDimensionParam = new GradePaperDimensionParam();
|
|
|
+ gradePaperDimensionParam.setPaperNumber(paperNumber);
|
|
|
+ gradePaperDimensionParam.setPaperType(paperType);
|
|
|
+ gradePaperDimensionParam.setDimensionType(DimensionEnum.KNOWLEDGE);
|
|
|
+ gradePaperDimensionParam.setCodePrimary(gradePaperDimensionAbilityDto.getCodePrimary());
|
|
|
+ gradePaperDimensionParam.setNamePrimary(gradePaperDimensionAbilityDto.getNamePrimary());
|
|
|
+ gradePaperDimensionParam.setInterpretation(gradePaperDimensionAbilityDto.getInterpret());
|
|
|
+ gradePaperDimensionParamList.add(gradePaperDimensionParam);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.saveGradePaperDimensionBatch(gradePaperDimensionParamList, requestUser);
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public void exportGradePaperDimensionTemplate(String paperNumber, String paperType, SysUser requestUser) {
|
|
|
-
|
|
|
+ public void exportGradePaperDimensionTemplate(String courseCode, String courseName, DimensionEnum dimensionType) throws Exception {
|
|
|
+ switch (dimensionType) {
|
|
|
+ case KNOWLEDGE:
|
|
|
+ List<GradePaperDimensionKnowledgeDto> kDatasource = new ArrayList<>();
|
|
|
+ GradePaperDimensionKnowledgeDto kCell = new GradePaperDimensionKnowledgeDto();
|
|
|
+ kCell.setCourseCode(courseCode);
|
|
|
+ kCell.setCourseName(courseName);
|
|
|
+ kDatasource.add(kCell);
|
|
|
+ ExcelUtil.excelExport(courseName + "-知识维度导入模板", GradePaperDimensionKnowledgeDto.class, kDatasource, ServletUtil.getResponse());
|
|
|
+ break;
|
|
|
+ case ABILITY:
|
|
|
+ List<GradePaperDimensionAbilityDto> aDatasource = new ArrayList<>();
|
|
|
+ GradePaperDimensionAbilityDto aCell = new GradePaperDimensionAbilityDto();
|
|
|
+ aCell.setCourseCode(courseCode);
|
|
|
+ aCell.setCourseName(courseName);
|
|
|
+ aDatasource.add(aCell);
|
|
|
+ ExcelUtil.excelExport(courseName + "-能力维度导入模板", GradePaperDimensionAbilityDto.class, aDatasource, ServletUtil.getResponse());
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -80,40 +171,74 @@ public class GradePaperDimensionServiceImpl extends ServiceImpl<GradePaperDimens
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 检验一级维度参数
|
|
|
+ * 检查并构建维度新增参数集合
|
|
|
+ * <p>
|
|
|
+ * 1.一级维度编号必须为大写A-Z
|
|
|
+ * 2.一级维度编号和名称在数据集中必须对应一致
|
|
|
+ * 3.二级维度编号必须首字符和一级维度编号一致,后续字符为正整数
|
|
|
+ * 4.二级维度编号在数据集中唯一
|
|
|
+ * </p>
|
|
|
*
|
|
|
- * @param id 主键
|
|
|
- * @param paperNumber 试卷编号
|
|
|
- * @param paperType 试卷类型
|
|
|
- * @param codePrimary 一级维度编号
|
|
|
- * @param namePrimary 一级维度名称
|
|
|
- * @param schoolId 学校id
|
|
|
+ * @param gradePaperDimensionParamList 分析试卷维度集合
|
|
|
+ * @param requestUser 用户
|
|
|
+ * @return 结果
|
|
|
*/
|
|
|
- private void checkCodePrimaryParams(Long id, String paperNumber, String paperType, String codePrimary, String namePrimary, Long schoolId) {
|
|
|
- if (SystemConstant.isOneNull(paperNumber, paperType, codePrimary, namePrimary)) {
|
|
|
- throw ExceptionResultEnum.PARAMS_ERROR.exception();
|
|
|
- }
|
|
|
+ private List<GradePaperDimension> checkAndBuildGradePaperDimensionList(List<GradePaperDimensionParam> gradePaperDimensionParamList, SysUser requestUser) {
|
|
|
+ Map<String, String> checkPrimaryCodeNameMap = new HashMap<>();
|
|
|
+ List<GradePaperDimension> gradePaperDimensionList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (GradePaperDimensionParam gradePaperDimensionParam : gradePaperDimensionParamList) {
|
|
|
+ String paperNumber = gradePaperDimensionParam.getPaperNumber();
|
|
|
+ String paperType = gradePaperDimensionParam.getPaperType();
|
|
|
+ String paperName = gradePaperDimensionParam.getPaperName();
|
|
|
+ DimensionEnum dimensionType = gradePaperDimensionParam.getDimensionType();
|
|
|
+ String codePrimary = gradePaperDimensionParam.getCodePrimary();
|
|
|
+ String namePrimary = gradePaperDimensionParam.getNamePrimary();
|
|
|
+ String codeSecond = gradePaperDimensionParam.getCodeSecond();
|
|
|
+ String nameSecond = gradePaperDimensionParam.getNameSecond();
|
|
|
+ String interpretation = gradePaperDimensionParam.getInterpretation();
|
|
|
+
|
|
|
+ if (SystemConstant.isOneNull(paperNumber, paperType, dimensionType, codePrimary, namePrimary)) {
|
|
|
+ throw ExceptionResultEnum.PARAMS_ERROR.exception();
|
|
|
+ }
|
|
|
|
|
|
- if (!codePrimary.matches(SystemConstant.REGULAR_EXPRESSION_OF_CODE_PRIMARY_DIMENSION)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("一级维度编号必须为大写A-Z");
|
|
|
- }
|
|
|
- List<GradePaperDimension> gradePaperDimensionList = this.list(new QueryWrapper<GradePaperDimension>().lambda()
|
|
|
- .eq(GradePaperDimension::getPaperNumber, paperNumber)
|
|
|
- .eq(GradePaperDimension::getPaperType, paperType)
|
|
|
- .eq(GradePaperDimension::getCodePrimary, codePrimary)
|
|
|
- .eq(GradePaperDimension::getSchoolId, schoolId));
|
|
|
-
|
|
|
- if (gradePaperDimensionList.size() > 1) {
|
|
|
- if (!namePrimary.equals(gradePaperDimensionList.get(0).getNamePrimary())) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("一级维度编码和名称不一致");
|
|
|
+ // 一级维度编号必须为大写A-Z
|
|
|
+ if (!codePrimary.matches(SystemConstant.REGULAR_EXPRESSION_OF_CODE_PRIMARY_DIMENSION)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("一级维度编号必须为大写A-Z");
|
|
|
}
|
|
|
- } else {
|
|
|
- GradePaperDimension gradePaperDimension = gradePaperDimensionList.get(0);
|
|
|
- if (!namePrimary.equals(gradePaperDimension.getNamePrimary())) {
|
|
|
- if (!Objects.equals(gradePaperDimension.getId(), id)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("一级维度编码和名称不一致");
|
|
|
+ // 一级维度编号和名称在数据集中必须对应一致
|
|
|
+ if (checkPrimaryCodeNameMap.containsKey(codePrimary) && !checkPrimaryCodeNameMap.get(codePrimary).equals(namePrimary)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("一级维度编号和名称不对应");
|
|
|
+ }
|
|
|
+ checkPrimaryCodeNameMap.put(codePrimary, namePrimary);
|
|
|
+ //
|
|
|
+ if (SystemConstant.strNotNull(codeSecond)) {
|
|
|
+ if (!codeSecond.matches(SystemConstant.REGULAR_EXPRESSION_OF_CODE_SECOND_DIMENSION)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("二级维度编号格式不正确");
|
|
|
+ }
|
|
|
+ if (!codePrimary.equals(codeSecond.substring(0, 1))) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("二级维度编号和一级维度编号不对应");
|
|
|
}
|
|
|
+
|
|
|
+ }
|
|
|
+ GradePaperDimension gradePaperDimension = new GradePaperDimension();
|
|
|
+ gradePaperDimension.setSchoolId(requestUser.getSchoolId());
|
|
|
+ gradePaperDimension.setPaperNumber(paperNumber);
|
|
|
+ gradePaperDimension.setPaperType(paperType);
|
|
|
+ gradePaperDimension.setPaperName(paperName);
|
|
|
+ gradePaperDimension.setDimensionType(dimensionType);
|
|
|
+ gradePaperDimension.setCodePrimary(codePrimary);
|
|
|
+ gradePaperDimension.setNamePrimary(namePrimary);
|
|
|
+ if (SystemConstant.strNotNull(codeSecond)) {
|
|
|
+ gradePaperDimension.setCodeSecond(codeSecond);
|
|
|
+ gradePaperDimension.setNameSecond(nameSecond);
|
|
|
+ }
|
|
|
+ if (SystemConstant.strNotNull(interpretation)) {
|
|
|
+ gradePaperDimension.setInterpretation(interpretation);
|
|
|
}
|
|
|
+ gradePaperDimension.insertInfo(requestUser.getId());
|
|
|
+ gradePaperDimensionList.add(gradePaperDimension);
|
|
|
}
|
|
|
+ return gradePaperDimensionList;
|
|
|
}
|
|
|
}
|