|
@@ -7,19 +7,17 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.qmth.distributed.print.business.bean.dto.CourseDimensionDto;
|
|
|
-import com.qmth.distributed.print.business.bean.dto.CourseDimensionOccupiedDto;
|
|
|
import com.qmth.distributed.print.business.bean.dto.report.CourseTargetWebDto;
|
|
|
import com.qmth.distributed.print.business.bean.dto.report.DimensionDto;
|
|
|
+import com.qmth.distributed.print.business.bean.params.ObeCourseTargetExpectValueParam;
|
|
|
import com.qmth.distributed.print.business.bean.params.ObeCourseTargetParam;
|
|
|
-import com.qmth.distributed.print.business.bean.result.CourseDimensionTree;
|
|
|
-import com.qmth.distributed.print.business.bean.result.CourseTargetResult;
|
|
|
+import com.qmth.distributed.print.business.bean.result.ObeCourseTargetResult;
|
|
|
import com.qmth.distributed.print.business.bean.result.report.PaperStructDimensionResult;
|
|
|
import com.qmth.distributed.print.business.entity.*;
|
|
|
import com.qmth.distributed.print.business.enums.CourseDimensionSourceEnum;
|
|
|
import com.qmth.distributed.print.business.enums.CourseSettingTypeEnum;
|
|
|
import com.qmth.distributed.print.business.mapper.ObeCourseTargetMapper;
|
|
|
import com.qmth.distributed.print.business.service.*;
|
|
|
-import com.qmth.teachcloud.common.base.BaseEntity;
|
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
import com.qmth.teachcloud.common.entity.SysUser;
|
|
|
import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
@@ -28,7 +26,10 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.util.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.Stream;
|
|
@@ -54,95 +55,16 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
|
|
|
@Resource
|
|
|
private ExamTaskPaperDataService examTaskPaperDataService;
|
|
|
|
|
|
- @Override
|
|
|
- public List<CourseTargetResult> findCourseTargetList(Long obeCourseOutlineId) {
|
|
|
- ObeCourseOutline courseOutline = obeCourseOutlineService.getById(obeCourseOutlineId);
|
|
|
- if (Objects.isNull(courseOutline)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("课程大纲不存在");
|
|
|
- }
|
|
|
- List<ObeCourseTarget> obeCourseTargetList = this.list(new QueryWrapper<ObeCourseTarget>().lambda().eq(ObeCourseTarget::getObeCourseOutlineId, courseOutline.getId()).orderByAsc(ObeCourseTarget::getId));
|
|
|
-
|
|
|
- List<ObeCourseDimension> obeCourseDimensionList = obeCourseDimensionService.list(
|
|
|
- new QueryWrapper<ObeCourseDimension>().lambda().eq(ObeCourseDimension::getObeCourseOutlineId, obeCourseOutlineId));
|
|
|
-
|
|
|
- Map<Long, ObeCourseDimension> courseDimensionMap = obeCourseDimensionList.stream()
|
|
|
- .collect(Collectors.toMap(ObeCourseDimension::getId, e -> e));
|
|
|
-
|
|
|
- return obeCourseTargetList.stream().flatMap(e -> {
|
|
|
- CourseTargetResult cell = new CourseTargetResult();
|
|
|
- cell.setId(e.getId());
|
|
|
- cell.setTargetName(e.getTargetName());
|
|
|
- cell.setDegreeRequirement(e.getDegreeRequirement());
|
|
|
- cell.setTotalWeight(e.getTotalWeight());
|
|
|
- String targetContent = e.getTargetContent();
|
|
|
- List<Long> dimensionIdList = JSON.parseArray(targetContent, Long.class);
|
|
|
- List<CourseDimensionDto> dimensionList = new ArrayList<>();
|
|
|
- if (SystemConstant.strNotNull(targetContent)) {
|
|
|
- dimensionIdList.forEach(d -> {
|
|
|
- CourseDimensionDto courseDimensionDto = new CourseDimensionDto();
|
|
|
- ObeCourseDimension obeCourseDimension = courseDimensionMap.get(d);
|
|
|
- courseDimensionDto.setId(d);
|
|
|
- courseDimensionDto.setCode(obeCourseDimension.getCode());
|
|
|
- courseDimensionDto.setName(obeCourseDimension.getName());
|
|
|
- dimensionList.add(courseDimensionDto);
|
|
|
- });
|
|
|
- }
|
|
|
- cell.setDimensionList(dimensionList);
|
|
|
- return Stream.of(cell);
|
|
|
- }).collect(Collectors.toList());
|
|
|
- }
|
|
|
+ @Resource
|
|
|
+ private ObeCourseRequirementDimensionService obeCourseRequirementDimensionService;
|
|
|
|
|
|
@Override
|
|
|
- public List<CourseDimensionTree> findDimensionTree(Long obeCourseOutlineId) {
|
|
|
+ public List<ObeCourseTargetResult> findCourseTargetList(Long obeCourseOutlineId) {
|
|
|
ObeCourseOutline courseOutline = obeCourseOutlineService.getById(obeCourseOutlineId);
|
|
|
if (Objects.isNull(courseOutline)) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("课程大纲不存在");
|
|
|
}
|
|
|
-
|
|
|
- // 课程目标
|
|
|
- List<ObeCourseTarget> obeCourseTargetList = this.list(new QueryWrapper<ObeCourseTarget>().lambda().eq(ObeCourseTarget::getObeCourseOutlineId, courseOutline.getId()));
|
|
|
-
|
|
|
- // 课程目标id - 该目标包含的所有知识点id集合
|
|
|
- Map<Long, List<Long>> targetDimensionMap = obeCourseTargetList.stream()
|
|
|
- .collect(Collectors.toMap(BaseEntity::getId, v -> {
|
|
|
- List<Long> dimensionList = new ArrayList<>();
|
|
|
- String targetContent = v.getTargetContent();
|
|
|
- if (SystemConstant.strNotNull(targetContent)) {
|
|
|
- dimensionList = JSON.parseArray(targetContent, Long.class);
|
|
|
- }
|
|
|
- return dimensionList;
|
|
|
- }));
|
|
|
-
|
|
|
- // 课程知识点
|
|
|
- List<ObeCourseDimension> obeCourseDimensionList = obeCourseDimensionService.list(
|
|
|
- new QueryWrapper<ObeCourseDimension>().lambda().eq(ObeCourseDimension::getObeCourseOutlineId, obeCourseOutlineId));
|
|
|
-
|
|
|
- List<ObeCourseDimension> firstDimensionList = obeCourseDimensionList.stream().filter(e -> e.getParentId() == 0).sorted(Comparator.comparingInt(ObeCourseDimension::getNumber)).collect(Collectors.toList());
|
|
|
-
|
|
|
- List<CourseDimensionTree> treeList = new ArrayList<>();
|
|
|
- for (ObeCourseDimension first : firstDimensionList) {
|
|
|
- Long id = first.getId();
|
|
|
- String code = first.getCode();
|
|
|
- String name = first.getName();
|
|
|
- CourseDimensionOccupiedDto occupied = this.buildCourseDimensionOccupiedDto(targetDimensionMap, id);
|
|
|
- List<CourseDimensionTree> children = new ArrayList<>();
|
|
|
-
|
|
|
- List<ObeCourseDimension> secondDimensionList = obeCourseDimensionList.stream().filter(e -> id.equals(e.getParentId()))
|
|
|
- .sorted(Comparator.comparingInt(ObeCourseDimension::getNumber)).collect(Collectors.toList());
|
|
|
- for (ObeCourseDimension child : secondDimensionList) {
|
|
|
- Long childId = child.getId();
|
|
|
- String childCode = child.getCode();
|
|
|
- String childName = child.getName();
|
|
|
- CourseDimensionOccupiedDto childOccupied = this.buildCourseDimensionOccupiedDto(targetDimensionMap,
|
|
|
- childId);
|
|
|
-
|
|
|
- CourseDimensionTree tree = new CourseDimensionTree(childId, childCode, childName, childOccupied, new ArrayList<>());
|
|
|
- children.add(tree);
|
|
|
- }
|
|
|
- CourseDimensionTree tree = new CourseDimensionTree(id, code, name, occupied, children);
|
|
|
- treeList.add(tree);
|
|
|
- }
|
|
|
- return treeList;
|
|
|
+ return this.baseMapper.findCourseTargetList(obeCourseOutlineId);
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
@@ -156,40 +78,20 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
|
|
|
throw ExceptionResultEnum.ERROR.exception("课程大纲不存在");
|
|
|
}
|
|
|
|
|
|
+ // 指标点
|
|
|
+ Long obeCultureProgramRequirementId = obeCourseTargetParam.getObeCultureProgramRequirementId();
|
|
|
+ List<Long> dimensionIdList = obeCourseTargetParam.getDimensionIdList();
|
|
|
String targetName = obeCourseTargetParam.getTargetName();
|
|
|
String degreeRequirement = obeCourseTargetParam.getDegreeRequirement();
|
|
|
- List<Long> dimensionIdList = obeCourseTargetParam.getDimensionIdList();
|
|
|
|
|
|
// 知识点检查
|
|
|
- Map<Long, ObeCourseDimension> courseDimensionMap = obeCourseDimensionService.list(new QueryWrapper<ObeCourseDimension>().lambda()
|
|
|
- .eq(ObeCourseDimension::getObeCourseOutlineId, obeCourseOutlineId)).stream()
|
|
|
- .collect(Collectors.toMap(BaseEntity::getId, v -> v));
|
|
|
+ List<Long> occupiedDimensionIdList = obeCourseRequirementDimensionService.list(new QueryWrapper<ObeCourseRequirementDimension>().lambda()
|
|
|
+ .eq(ObeCourseRequirementDimension::getObeCourseOutlineId, obeCourseOutlineId)
|
|
|
+ .ne(ObeCourseRequirementDimension::getObeCultureProgramRequirementId, obeCultureProgramRequirementId)).stream()
|
|
|
+ .map(ObeCourseRequirementDimension::getObeCourseDimensionId).distinct().collect(Collectors.toList());
|
|
|
|
|
|
- QueryWrapper<ObeCourseTarget> courseTargetQueryWrapper = new QueryWrapper<>();
|
|
|
- if (Objects.isNull(id)) {
|
|
|
- courseTargetQueryWrapper.lambda().eq(ObeCourseTarget::getObeCourseOutlineId, obeCourseOutlineId);
|
|
|
- } else {
|
|
|
- courseTargetQueryWrapper.lambda().ne(ObeCourseTarget::getId, id);
|
|
|
- }
|
|
|
- List<ObeCourseTarget> obeCourseTargetResultList = this.list(courseTargetQueryWrapper);
|
|
|
-
|
|
|
- // 占用的知识点id
|
|
|
- List<Long> occupiedIdList = obeCourseTargetResultList.stream().flatMap(e -> {
|
|
|
- List<Long> idList = new ArrayList<>();
|
|
|
- String content = e.getTargetContent();
|
|
|
- if (SystemConstant.strNotNull(content)) {
|
|
|
- idList = JSON.parseArray(content, Long.class);
|
|
|
- }
|
|
|
- return idList.stream();
|
|
|
- }).collect(Collectors.toList());
|
|
|
- for (Long dimensionId : dimensionIdList) {
|
|
|
- if (!courseDimensionMap.containsKey(dimensionId)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("知识点不存在");
|
|
|
- }
|
|
|
- if (occupiedIdList.contains(dimensionId)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(String.format("知识点[%s]已经被别的课程目标占用",
|
|
|
- courseDimensionMap.get(dimensionId).getName() + "(" + courseDimensionMap.get(dimensionId).getCode() + ")"));
|
|
|
- }
|
|
|
+ if (dimensionIdList.stream().anyMatch(occupiedDimensionIdList::contains)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("知识点已被其他指标点占用");
|
|
|
}
|
|
|
|
|
|
ObeCourseTarget checkTargetName = this.getOne(new QueryWrapper<ObeCourseTarget>().lambda()
|
|
@@ -199,35 +101,40 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
|
|
|
}
|
|
|
ObeCourseTarget obeCourseTarget = new ObeCourseTarget();
|
|
|
obeCourseTarget.setObeCourseOutlineId(obeCourseOutlineId);
|
|
|
+ obeCourseTarget.setObeCultureProgramRequirementId(obeCultureProgramRequirementId);
|
|
|
obeCourseTarget.setSchoolId(requestUser.getSchoolId());
|
|
|
obeCourseTarget.setTargetName(targetName);
|
|
|
obeCourseTarget.setDegreeRequirement(degreeRequirement);
|
|
|
- obeCourseTarget.setTargetContent(JSON.toJSONString(dimensionIdList));
|
|
|
|
|
|
if (SystemConstant.longNotNull(id)) {
|
|
|
// 编辑 (更新教学课程权重标识)
|
|
|
- UpdateWrapper<ObeCourseOutline> teachCourseUpdateWrapper = new UpdateWrapper<>();
|
|
|
- teachCourseUpdateWrapper.lambda().eq(ObeCourseOutline::getId, obeCourseOutlineId);
|
|
|
+ UpdateWrapper<ObeCourseOutline> obeCourseOutlineUpdateWrapper = new UpdateWrapper<>();
|
|
|
+ obeCourseOutlineUpdateWrapper.lambda().eq(ObeCourseOutline::getId, obeCourseOutlineId);
|
|
|
|
|
|
ObeCourseTarget db = this.getById(id);
|
|
|
- String dbContent = db.getTargetContent();
|
|
|
- if (SystemConstant.strNotNull(dbContent)) {
|
|
|
- List<Long> dbDimensionList = JSON.parseArray(dbContent, Long.class);
|
|
|
- if (!dimensionIdList.containsAll(dbDimensionList) || !dbDimensionList.containsAll(dimensionIdList)) {
|
|
|
- // 关联知识点变化 重设知识点,权重md5更新
|
|
|
- teachCourseUpdateWrapper.lambda().set(ObeCourseOutline::getDimensionSign, SystemConstant.getDbUuid())
|
|
|
- .set(ObeCourseOutline::getWeightSettingSign, SystemConstant.getDbUuid());
|
|
|
- obeCourseOutlineService.update(teachCourseUpdateWrapper);
|
|
|
- }
|
|
|
+ // 指标点下如果存在知识点,判断新增知识点和原知识点是否完全一致
|
|
|
+ List<Long> dbDimensionIdList = obeCourseRequirementDimensionService.list(new QueryWrapper<ObeCourseRequirementDimension>().lambda()
|
|
|
+ .eq(ObeCourseRequirementDimension::getObeCourseOutlineId, obeCourseOutlineId)
|
|
|
+ .eq(ObeCourseRequirementDimension::getObeCultureProgramRequirementId, obeCultureProgramRequirementId)).stream()
|
|
|
+ .map(ObeCourseRequirementDimension::getObeCourseDimensionId).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (!dimensionIdList.containsAll(dbDimensionIdList) || !dbDimensionIdList.containsAll(dimensionIdList)) {
|
|
|
+ // 关联知识点变化 重设知识点,权重md5更新
|
|
|
+ obeCourseOutlineUpdateWrapper.lambda()
|
|
|
+ .set(ObeCourseOutline::getDimensionSign, SystemConstant.getDbUuid()).set(ObeCourseOutline::getWeightSettingSign, SystemConstant.getDbUuid());
|
|
|
+ obeCourseOutlineService.update(obeCourseOutlineUpdateWrapper);
|
|
|
}
|
|
|
- // 目标描述变了 更新权重设置标识
|
|
|
+
|
|
|
+ // 目标名称描述或绑定指标点变化 更新权重设置标识
|
|
|
if (!obeCourseTarget.getTargetName().equals(db.getTargetName()) || !Objects.equals(obeCourseTarget.getDegreeRequirement(),
|
|
|
- db.getDegreeRequirement())) {
|
|
|
- teachCourseUpdateWrapper.lambda().set(ObeCourseOutline::getWeightSettingSign, SystemConstant.getDbUuid());
|
|
|
- obeCourseOutlineService.update(teachCourseUpdateWrapper);
|
|
|
+ db.getDegreeRequirement()) || !Objects.equals(obeCourseTarget.getObeCultureProgramRequirementId(),
|
|
|
+ db.getObeCultureProgramRequirementId())) {
|
|
|
+ obeCourseOutlineUpdateWrapper.lambda().set(ObeCourseOutline::getWeightSettingSign, SystemConstant.getDbUuid());
|
|
|
+ obeCourseOutlineService.update(obeCourseOutlineUpdateWrapper);
|
|
|
}
|
|
|
|
|
|
obeCourseTarget.setId(id);
|
|
|
+ obeCourseTarget.setExpectValue(db.getExpectValue());
|
|
|
obeCourseTarget.updateInfo(requestUserId);
|
|
|
} else {
|
|
|
// 新增 (清空权重设置)
|
|
@@ -237,6 +144,21 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
|
|
|
obeCourseTarget.insertInfo(requestUserId);
|
|
|
}
|
|
|
this.saveOrUpdate(obeCourseTarget);
|
|
|
+
|
|
|
+ // 更新指标点和知识点绑定关系
|
|
|
+ obeCourseRequirementDimensionService.remove(new QueryWrapper<ObeCourseRequirementDimension>().lambda()
|
|
|
+ .eq(ObeCourseRequirementDimension::getObeCourseOutlineId, obeCourseOutlineId)
|
|
|
+ .eq(ObeCourseRequirementDimension::getObeCultureProgramRequirementId, obeCultureProgramRequirementId));
|
|
|
+ List<ObeCourseRequirementDimension> willSave = dimensionIdList.stream().flatMap(e -> {
|
|
|
+ ObeCourseRequirementDimension obeCourseRequirementDimension = new ObeCourseRequirementDimension();
|
|
|
+ obeCourseRequirementDimension.setObeCourseOutlineId(obeCourseOutlineId);
|
|
|
+ obeCourseRequirementDimension.setObeCultureProgramRequirementId(obeCultureProgramRequirementId);
|
|
|
+ obeCourseRequirementDimension.setObeCourseDimensionId(e);
|
|
|
+ obeCourseRequirementDimension.setSchoolId(requestUser.getSchoolId());
|
|
|
+ obeCourseRequirementDimension.insertInfo(requestUserId);
|
|
|
+ return Stream.of(obeCourseRequirementDimension);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ obeCourseRequirementDimensionService.saveBatch(willSave);
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
@@ -351,26 +273,14 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 构建知识点占用情况对象
|
|
|
- *
|
|
|
- * @param targetDimensionMap 目标知识点map
|
|
|
- * @param courseDimensionId 课程知识点id
|
|
|
- * @return 占用情况
|
|
|
- */
|
|
|
- private CourseDimensionOccupiedDto buildCourseDimensionOccupiedDto(Map<Long, List<Long>> targetDimensionMap,
|
|
|
- Long courseDimensionId) {
|
|
|
- CourseDimensionOccupiedDto dto = new CourseDimensionOccupiedDto();
|
|
|
- for (Long targetId : targetDimensionMap.keySet()) {
|
|
|
- List<Long> dimensionList = targetDimensionMap.get(targetId);
|
|
|
- if (dimensionList.contains(courseDimensionId)) {
|
|
|
- dto.setCourseTargetId(targetId);
|
|
|
- dto.setStatus(true);
|
|
|
- return dto;
|
|
|
- }
|
|
|
- }
|
|
|
- dto.setStatus(false);
|
|
|
- return dto;
|
|
|
+ @Override
|
|
|
+ public void settingExpectValue(ObeCourseTargetExpectValueParam obeCourseTargetExpectValueParam, SysUser requestUser) {
|
|
|
+ Long obeCourseOutlineId = obeCourseTargetExpectValueParam.getObeCourseOutlineId();
|
|
|
+ Double expectValue = obeCourseTargetExpectValueParam.getExpectValue();
|
|
|
+ UpdateWrapper<ObeCourseTarget> updateWrapper = new UpdateWrapper<>();
|
|
|
+ updateWrapper.lambda().eq(ObeCourseTarget::getObeCourseOutlineId, obeCourseOutlineId).set(ObeCourseTarget::getExpectValue, expectValue)
|
|
|
+ .set(ObeCourseTarget::getUpdateId, requestUser.getId()).set(ObeCourseTarget::getUpdateTime, System.currentTimeMillis());
|
|
|
+ this.update(updateWrapper);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -386,9 +296,14 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
|
|
|
for (ObeCourseTarget obeCourseTarget : obeCourseTargetDatasource) {
|
|
|
Long courseTargetId = obeCourseTarget.getId();
|
|
|
String targetName = obeCourseTarget.getTargetName();
|
|
|
+ // 指标点id
|
|
|
+ Long obeCultureProgramRequirementId = obeCourseTarget.getObeCultureProgramRequirementId();
|
|
|
+
|
|
|
+ List<Long> dimensionIdList = obeCourseRequirementDimensionService.list(new QueryWrapper<ObeCourseRequirementDimension>().lambda()
|
|
|
+ .eq(ObeCourseRequirementDimension::getObeCourseOutlineId, obeCourseTarget.getObeCourseOutlineId())
|
|
|
+ .eq(ObeCourseRequirementDimension::getObeCultureProgramRequirementId, obeCultureProgramRequirementId)).stream()
|
|
|
+ .map(ObeCourseRequirementDimension::getObeCourseDimensionId).distinct().collect(Collectors.toList());
|
|
|
|
|
|
- String content = obeCourseTarget.getTargetContent();
|
|
|
- List<Long> dimensionIdList = JSON.parseArray(content, Long.class);
|
|
|
List<DimensionDto> dimensionList = dimensionDtoList.stream().filter(e -> dimensionIdList.contains(e.getDimensionId())).collect(Collectors.toList());
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(dimensionList)) {
|