瀏覽代碼

加入重新计算

wangliang 1 年之前
父節點
當前提交
989ef1ec3b

+ 16 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseRequirementReportService.java

@@ -21,6 +21,22 @@ import java.util.Map;
  */
 public interface ObeCourseRequirementReportService extends IService<ObeCourseRequirementReport> {
 
+    /**
+     * 雷达报表计算方法
+     *
+     * @param cultureProgramId
+     * @return
+     */
+    public ObeCourseRequirementDto calculate(Long cultureProgramId);
+
+    /**
+     * 雷达详情报表计算方法
+     *
+     * @param cultureProgramId
+     * @return
+     */
+    public List<ObeCourseRequirementDto> calculateDetail(Long cultureProgramId);
+
     /**
      * 换算课程毕业达成度报表详情
      *

+ 76 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseRequirementReportServiceImpl.java

@@ -16,6 +16,7 @@ import com.qmth.distributed.print.business.entity.ObeCourseRequirementReport;
 import com.qmth.distributed.print.business.entity.TRBasicInfo;
 import com.qmth.distributed.print.business.mapper.ObeCourseRequirementReportMapper;
 import com.qmth.distributed.print.business.service.ObeCourseOutlineService;
+import com.qmth.distributed.print.business.service.ObeCourseRequirementMatrixService;
 import com.qmth.distributed.print.business.service.ObeCourseRequirementReportService;
 import com.qmth.distributed.print.business.service.TRBasicInfoService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -58,6 +59,81 @@ public class ObeCourseRequirementReportServiceImpl extends ServiceImpl<ObeCourse
     @Resource
     ObeCourseOutlineService obeCourseOutlineService;
 
+    @Resource
+    ObeCourseRequirementMatrixService obeCourseRequirementMatrixService;
+
+    /**
+     * 雷达报表计算方法
+     *
+     * @param cultureProgramId
+     * @return
+     */
+    @Override
+    @Transactional
+    public ObeCourseRequirementDto calculate(Long cultureProgramId) {
+        ObeCourseRequirementDto obeCourseRequirementResultDto = null;
+        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));
+                            }
+                        }
+                    }
+                });
+                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);
+                }
+            }
+        }
+        return obeCourseRequirementResultDto;
+    }
+
+    /**
+     * @param cultureProgramId
+     * @return
+     */
+    @Override
+    public List<ObeCourseRequirementDto> calculateDetail(Long cultureProgramId) {
+        List<ObeCourseRequirementDto> obeCourseRequirementDtoList = new ArrayList<>();
+        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)) {
+                Map<Long, List<ObeSubRequirementsDto>> obeSubRequirementsDtoMap = new LinkedHashMap<>();
+                for (ObeCourseOutline obeCourseOutline : obeCourseOutlineList) {
+                    obeCourseRequirementReportService.matrixCourseReportInfo(courseRequirementMatrixDtoList, obeCourseOutline.getId(),
+                            null, obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
+                }
+            }
+        }
+        return obeCourseRequirementDtoList;
+    }
+
     /**
      * 换算课程毕业达成度报表详情
      *

+ 9 - 1
distributed-print-business/src/main/resources/db/log/wangliang.sql

@@ -42,4 +42,12 @@ ALTER TABLE t_r_basic_info CHANGE requirement_points requirement_points MEDIUMTE
 ALTER TABLE t_r_basic_info ADD course_suggest MEDIUMTEXT NULL COMMENT '课程持续改进';
 ALTER TABLE t_r_basic_info CHANGE course_suggest course_suggest MEDIUMTEXT NULL COMMENT '课程持续改进' AFTER requirement_points;
 ALTER TABLE t_r_basic_info ADD course_en_name varchar(100) NULL COMMENT '课程英文名称';
-ALTER TABLE t_r_basic_info CHANGE course_en_name course_en_name varchar(100) NULL COMMENT '课程英文名称' AFTER course_name;
+ALTER TABLE t_r_basic_info CHANGE course_en_name course_en_name varchar(100) NULL COMMENT '课程英文名称' AFTER course_name;
+
+-- 2024-06-20
+INSERT INTO sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(2102, '毕业要求达成情况重新计算', '/api/admin/obe/requirements/again/calculate', 'URL', 2070, 4, 'AUTH', NULL, 1, 1, 1);
+INSERT INTO  sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(2101, '重新计算', 'Calculate', 'LINK', 2070, 5, 'AUTH', '2076,2077', 1, 0, 1);

+ 37 - 60
distributed-print/src/main/java/com/qmth/distributed/print/api/ObeReportController.java

@@ -1,16 +1,13 @@
 package com.qmth.distributed.print.api;
 
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 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;
-import com.qmth.distributed.print.business.bean.dto.report.ObeSubRequirementsDto;
 import com.qmth.distributed.print.business.bean.result.ObeCourseRequirementListResult;
 import com.qmth.distributed.print.business.bean.result.ScoreResult;
-import com.qmth.distributed.print.business.entity.ObeCourseOutline;
 import com.qmth.distributed.print.business.entity.ObeCourseRequirementReport;
 import com.qmth.distributed.print.business.service.ObeCourseOutlineService;
 import com.qmth.distributed.print.business.service.ObeCourseRequirementMatrixService;
@@ -18,15 +15,12 @@ import com.qmth.distributed.print.business.service.ObeCourseRequirementReportSer
 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.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -35,8 +29,8 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
-import java.math.BigDecimal;
-import java.util.*;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * <p>
@@ -67,6 +61,32 @@ public class ObeReportController {
     @Resource
     RedisUtil redisUtil;
 
+    @ApiOperation(value = "毕业要求达成度报表列表")
+    @RequestMapping(value = "/requirements/again/calculate", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = ObeCourseRequirementListResult.class)})
+    public Result againCalculate(@ApiParam(value = "培养方案ID", required = true) @RequestParam Long cultureProgramId) {
+        String lockKey = SystemConstant.REDIS_OBE_RADAR_AGAIN_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;
+        try {
+            obeCourseRequirementResultDto = obeCourseRequirementReportService.calculate(cultureProgramId);
+        } 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);
+    }
+
+
     @ApiOperation(value = "毕业要求达成度报表列表")
     @RequestMapping(value = "/requirements/list", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = ObeCourseRequirementListResult.class)})
@@ -80,7 +100,6 @@ public class ObeReportController {
     @ApiOperation(value = "毕业要求达成度雷达报表")
     @RequestMapping(value = "/requirements/radar/report", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "毕业要求达成度雷达报表", response = ScoreResult.class)})
-    @Transactional
     public Result requirementsRadarReport(@ApiParam(value = "培养方案ID", required = true) @RequestParam Long cultureProgramId) {
         String lockKey = SystemConstant.REDIS_OBE_RADAR_DATA_PREFIX + cultureProgramId;
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_OBE_RADAR_DATA_TIME_OUT);
@@ -89,42 +108,11 @@ public class ObeReportController {
         }
         ObeCourseRequirementDto obeCourseRequirementResultDto = null;
         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));
-                                }
-                            }
-                        }
-                    });
-                    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 = obeCourseRequirementReportService.findByCultureProgramId(cultureProgramId);
+            if (Objects.nonNull(obeCourseRequirementReport) && Objects.nonNull(obeCourseRequirementReport.getRequirementRadar())) {
+                obeCourseRequirementResultDto = JSONObject.parseObject(obeCourseRequirementReport.getRequirementRadar(), ObeCourseRequirementDto.class);
+            } else {
+                obeCourseRequirementResultDto = obeCourseRequirementReportService.calculate(cultureProgramId);
             }
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
@@ -146,26 +134,15 @@ public class ObeReportController {
         String lockKey = SystemConstant.REDIS_OBE_RADAR_DETAIL_DATA_PREFIX + cultureProgramId;
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_OBE_RADAR_DATA_TIME_OUT);
         if (!lock) {
-            throw ExceptionResultEnum.ERROR.exception("正在计算数据,请稍候再试!");
+            throw ExceptionResultEnum.ERROR.exception("正在计算详情数据,请稍候再试!");
         }
-        List<ObeCourseRequirementDto> obeCourseRequirementDtoList = new ArrayList<>();
+        List<ObeCourseRequirementDto> obeCourseRequirementDtoList = null;
         try {
             ObeCourseRequirementReport obeCourseRequirementReport = obeCourseRequirementReportService.findByCultureProgramId(cultureProgramId);
             if (Objects.nonNull(obeCourseRequirementReport) && Objects.nonNull(obeCourseRequirementReport.getRequirementDetail())) {
                 obeCourseRequirementDtoList = JSONArray.parseArray(obeCourseRequirementReport.getRequirementDetail(), ObeCourseRequirementDto.class);
             } else {
-                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)) {
-                        Map<Long, List<ObeSubRequirementsDto>> obeSubRequirementsDtoMap = new LinkedHashMap<>();
-                        for (ObeCourseOutline obeCourseOutline : obeCourseOutlineList) {
-                            obeCourseRequirementReportService.matrixCourseReportInfo(courseRequirementMatrixDtoList, obeCourseOutline.getId(),
-                                    null, obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
-                        }
-                    }
-                }
+                obeCourseRequirementDtoList = obeCourseRequirementReportService.calculateDetail(cultureProgramId);
             }
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -537,6 +537,7 @@ public class SystemConstant {
     public static final String REDIS_PAPER_STRUCT_PREFIX = "redis:lock:final:score:paper:struct";//期末考试试卷结构锁
     public static final String REDIS_OBE_RADAR_DATA_PREFIX = "redis:lock:obe:radar:data";//obe雷达报表锁
     public static final String REDIS_OBE_RADAR_DETAIL_DATA_PREFIX = "redis:lock:obe:radar:detail:data";//obe雷达详情报表锁
+    public static final String REDIS_OBE_RADAR_AGAIN_DATA_PREFIX = "redis:lock:obe:radar:again:data";//obe雷达报表重新算锁
 
     public static final String REDIS_LOCK_IMPORT_EXAM_DATA = "redis:lock:import:exam:data:";//导入考务数据锁
     public static final long REDIS_LOCK_IMPORT_EXAM_DATA_TIME_OUT = 60L * 10;