|
@@ -3,6 +3,7 @@ package com.qmth.distributed.print.api;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.qmth.boot.api.constant.ApiConstant;
|
|
|
+import com.qmth.boot.api.exception.ApiException;
|
|
|
import com.qmth.distributed.print.business.bean.dto.obe.CourseRequirementMatrixDto;
|
|
|
import com.qmth.distributed.print.business.bean.dto.report.ObeCourseRequirementDto;
|
|
|
import com.qmth.distributed.print.business.bean.dto.report.ObeRequirementDto;
|
|
@@ -16,13 +17,14 @@ import com.qmth.distributed.print.business.service.ObeCourseRequirementMatrixSer
|
|
|
import com.qmth.distributed.print.business.service.ObeCourseRequirementReportService;
|
|
|
import com.qmth.distributed.print.business.service.TRExamStudentService;
|
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
import com.qmth.teachcloud.common.util.JacksonUtil;
|
|
|
+import com.qmth.teachcloud.common.util.RedisUtil;
|
|
|
import com.qmth.teachcloud.common.util.Result;
|
|
|
import com.qmth.teachcloud.common.util.ResultUtil;
|
|
|
import io.swagger.annotations.*;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
-import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
@@ -62,6 +64,9 @@ public class ObeReportController {
|
|
|
@Resource
|
|
|
ObeCourseOutlineService obeCourseOutlineService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ RedisUtil redisUtil;
|
|
|
+
|
|
|
@ApiOperation(value = "毕业要求达成度报表列表")
|
|
|
@RequestMapping(value = "/requirements/list", method = RequestMethod.POST)
|
|
|
@ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = ObeCourseRequirementListResult.class)})
|
|
@@ -77,43 +82,59 @@ public class ObeReportController {
|
|
|
@ApiResponses({@ApiResponse(code = 200, message = "毕业要求达成度雷达报表", response = ScoreResult.class)})
|
|
|
@Transactional
|
|
|
public Result requirementsRadarReport(@ApiParam(value = "培养方案ID", required = true) @RequestParam Long cultureProgramId) {
|
|
|
- List<CourseRequirementMatrixDto> courseRequirementMatrixDtoList = obeCourseRequirementMatrixService.getMatrix(cultureProgramId);
|
|
|
+ String lockKey = SystemConstant.REDIS_OBE_RADAR_DATA_PREFIX + cultureProgramId;
|
|
|
+ boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_OBE_RADAR_DATA_TIME_OUT);
|
|
|
+ if (!lock) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("正在计算数据,请稍候再试!");
|
|
|
+ }
|
|
|
ObeCourseRequirementDto obeCourseRequirementResultDto = null;
|
|
|
- if (!CollectionUtils.isEmpty(courseRequirementMatrixDtoList)) {
|
|
|
- log.info("courseRequirementMatrixDto:{}", JacksonUtil.parseJson(courseRequirementMatrixDtoList));
|
|
|
- List<ObeCourseOutline> obeCourseOutlineList = obeCourseOutlineService.findByCultureProgramId(cultureProgramId);
|
|
|
- if (!CollectionUtils.isEmpty(obeCourseOutlineList)) {
|
|
|
- List<ObeCourseRequirementDto> obeCourseRequirementDtoList = new ArrayList<>();
|
|
|
- Map<Long, List<ObeSubRequirementsDto>> obeSubRequirementsDtoMap = new LinkedHashMap<>();
|
|
|
- for (ObeCourseOutline obeCourseOutline : obeCourseOutlineList) {
|
|
|
- obeCourseRequirementReportService.matrixCourseReportInfo(courseRequirementMatrixDtoList, obeCourseOutline.getId(),
|
|
|
- null, obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
|
|
|
- }
|
|
|
- obeCourseRequirementResultDto = obeCourseRequirementReportService.matrixCourseReport(obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
|
|
|
+ try {
|
|
|
+ List<CourseRequirementMatrixDto> courseRequirementMatrixDtoList = obeCourseRequirementMatrixService.getMatrix(cultureProgramId);
|
|
|
+ if (!CollectionUtils.isEmpty(courseRequirementMatrixDtoList)) {
|
|
|
+ log.info("courseRequirementMatrixDto:{}", JacksonUtil.parseJson(courseRequirementMatrixDtoList));
|
|
|
+ List<ObeCourseOutline> obeCourseOutlineList = obeCourseOutlineService.findByCultureProgramId(cultureProgramId);
|
|
|
+ if (!CollectionUtils.isEmpty(obeCourseOutlineList)) {
|
|
|
+ List<ObeCourseRequirementDto> obeCourseRequirementDtoList = new ArrayList<>();
|
|
|
+ Map<Long, List<ObeSubRequirementsDto>> obeSubRequirementsDtoMap = new LinkedHashMap<>();
|
|
|
+ for (ObeCourseOutline obeCourseOutline : obeCourseOutlineList) {
|
|
|
+ obeCourseRequirementReportService.matrixCourseReportInfo(courseRequirementMatrixDtoList, obeCourseOutline.getId(),
|
|
|
+ null, obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
|
|
|
+ }
|
|
|
+ obeCourseRequirementResultDto = obeCourseRequirementReportService.matrixCourseReport(obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
|
|
|
|
|
|
- ObeCourseRequirementDto finalObeCourseRequirementResultDto = obeCourseRequirementResultDto;
|
|
|
- obeSubRequirementsDtoMap.forEach((k, v) -> {
|
|
|
- List<ObeRequirementDto> obeRequirementDtoList = finalObeCourseRequirementResultDto.getObeRequirements();
|
|
|
- for (ObeRequirementDto obeRequirementDto : obeRequirementDtoList) {
|
|
|
- List<ObeSubRequirementsDto> obeSubRequirementsDtoList = obeRequirementDto.getObeSubRequirements();
|
|
|
- for (ObeSubRequirementsDto obeSubRequirementsDto : obeSubRequirementsDtoList) {
|
|
|
- if (obeSubRequirementsDto.getSubRequirementId().longValue() == k.longValue()) {
|
|
|
- Double degree = v.stream().mapToDouble(x -> x.getMatrixDegree().doubleValue()).sum();
|
|
|
- obeSubRequirementsDto.setMatrixDegree(new BigDecimal(degree).setScale(2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ ObeCourseRequirementDto finalObeCourseRequirementResultDto = obeCourseRequirementResultDto;
|
|
|
+ obeSubRequirementsDtoMap.forEach((k, v) -> {
|
|
|
+ List<ObeRequirementDto> obeRequirementDtoList = finalObeCourseRequirementResultDto.getObeRequirements();
|
|
|
+ for (ObeRequirementDto obeRequirementDto : obeRequirementDtoList) {
|
|
|
+ List<ObeSubRequirementsDto> obeSubRequirementsDtoList = obeRequirementDto.getObeSubRequirements();
|
|
|
+ for (ObeSubRequirementsDto obeSubRequirementsDto : obeSubRequirementsDtoList) {
|
|
|
+ if (obeSubRequirementsDto.getSubRequirementId().longValue() == k.longValue()) {
|
|
|
+ Double degree = v.stream().mapToDouble(x -> x.getMatrixDegree().doubleValue()).sum();
|
|
|
+ obeSubRequirementsDto.setMatrixDegree(new BigDecimal(degree).setScale(2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ });
|
|
|
+ ObeCourseRequirementReport obeCourseRequirementReport = new ObeCourseRequirementReport(
|
|
|
+ cultureProgramId, Objects.nonNull(obeCourseRequirementResultDto) ? JacksonUtil.parseJson(obeCourseRequirementResultDto) : null,
|
|
|
+ !CollectionUtils.isEmpty(obeCourseRequirementDtoList) ? JacksonUtil.parseJson(obeCourseRequirementDtoList) : null, Objects.nonNull(obeCourseRequirementResultDto) && Objects.nonNull(obeCourseRequirementResultDto.getMatrixDegree()) ? obeCourseRequirementResultDto.getMatrixDegree().doubleValue() : null);
|
|
|
+ obeCourseRequirementReportService.removeReport(cultureProgramId);
|
|
|
+ if (Objects.nonNull(obeCourseRequirementReport.getRequirementRadar()) &&
|
|
|
+ Objects.nonNull(obeCourseRequirementReport.getRequirementDetail())
|
|
|
+ && Objects.nonNull(obeCourseRequirementReport.getRequirementDegree())) {
|
|
|
+ obeCourseRequirementReportService.save(obeCourseRequirementReport);
|
|
|
}
|
|
|
- });
|
|
|
- ObeCourseRequirementReport obeCourseRequirementReport = new ObeCourseRequirementReport(
|
|
|
- cultureProgramId, Objects.nonNull(obeCourseRequirementResultDto) ? JacksonUtil.parseJson(obeCourseRequirementResultDto) : null,
|
|
|
- !CollectionUtils.isEmpty(obeCourseRequirementDtoList) ? JacksonUtil.parseJson(obeCourseRequirementDtoList) : null, Objects.nonNull(obeCourseRequirementResultDto) && Objects.nonNull(obeCourseRequirementResultDto.getMatrixDegree()) ? obeCourseRequirementResultDto.getMatrixDegree().doubleValue() : null);
|
|
|
- obeCourseRequirementReportService.removeReport(cultureProgramId);
|
|
|
- if (Objects.nonNull(obeCourseRequirementReport.getRequirementRadar()) &&
|
|
|
- Objects.nonNull(obeCourseRequirementReport.getRequirementDetail())
|
|
|
- && Objects.nonNull(obeCourseRequirementReport.getRequirementDegree())) {
|
|
|
- obeCourseRequirementReportService.save(obeCourseRequirementReport);
|
|
|
}
|
|
|
}
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(SystemConstant.LOG_ERROR, e);
|
|
|
+ if (e instanceof ApiException) {
|
|
|
+ ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
|
|
|
+ } else {
|
|
|
+ ResultUtil.error(e.getMessage());
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ redisUtil.releaseLock(lockKey);
|
|
|
}
|
|
|
return ResultUtil.ok(obeCourseRequirementResultDto);
|
|
|
}
|