wangliang hai 1 ano
pai
achega
ad12237425

+ 18 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/CourseTargetWeightDto.java → distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/CourseTargetValueDto.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
+import org.jetbrains.annotations.NotNull;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -11,14 +12,14 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * @Description: 课程目标权重dto
+ * @Description: 课程目标dto
  * @Param:
  * @return:
  * @Author: wangliang
  * @Date: 2024/2/26
  */
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class CourseTargetWeightDto implements Serializable {
+public class CourseTargetValueDto implements Serializable, Comparable<CourseTargetValueDto> {
 
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "课程目标id")
@@ -49,23 +50,23 @@ public class CourseTargetWeightDto implements Serializable {
     @ApiModelProperty(value = "期末成绩权重")
     private BigDecimal finalScoreWeight;
 
-    public CourseTargetWeightDto() {
+    public CourseTargetValueDto() {
 
     }
 
-    public CourseTargetWeightDto(Long targetId, String targetName) {
+    public CourseTargetValueDto(Long targetId, String targetName) {
         this.targetId = targetId;
         this.targetName = targetName;
     }
 
-    public CourseTargetWeightDto(CourseTargetDto courseTargetDto) {
+    public CourseTargetValueDto(CourseTargetDto courseTargetDto) {
         this.targetId = courseTargetDto.getTargetId();
         this.targetName = courseTargetDto.getTargetName();
         this.graduationRequirement = courseTargetDto.getGraduationRequirement();
         setValue(courseTargetDto);
     }
 
-    public CourseTargetWeightDto(Long targetId, String targetName, Map<String, BigDecimal> usualScoreWeight, BigDecimal finalScoreWeight) {
+    public CourseTargetValueDto(Long targetId, String targetName, Map<String, BigDecimal> usualScoreWeight, BigDecimal finalScoreWeight) {
         this.targetId = targetId;
         this.targetName = targetName;
         this.usualScoreWeight = usualScoreWeight;
@@ -153,4 +154,15 @@ public class CourseTargetWeightDto implements Serializable {
     public void setFinalScoreWeight(BigDecimal finalScoreWeight) {
         this.finalScoreWeight = finalScoreWeight;
     }
+
+    @Override
+    public int compareTo(@NotNull CourseTargetValueDto o) {
+        if (o.getTargetId().longValue() < this.getTargetId().longValue()) {
+            return 1;
+        } else if (o.getTargetId().longValue() > this.getTargetId().longValue()) {
+            return -1;
+        } else {
+            return 0;
+        }
+    }
 }

+ 59 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportCourseTargetDto.java

@@ -0,0 +1,59 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 报告课程目标dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/26
+ */
+public class ReportCourseTargetDto implements Serializable, Comparable<ReportCourseTargetDto> {
+
+    @ApiModelProperty(value = "课程目标id")
+    private Long targetId;
+
+    @ApiModelProperty(value = "课程目标值")
+    private CourseTargetValueDto courseTargetValueDto;
+
+    public ReportCourseTargetDto() {
+
+    }
+
+    public ReportCourseTargetDto(Long targetId, CourseTargetValueDto courseTargetValueDto) {
+        this.targetId = targetId;
+        this.courseTargetValueDto = courseTargetValueDto;
+    }
+
+    public Long getTargetId() {
+        return targetId;
+    }
+
+    public void setTargetId(Long targetId) {
+        this.targetId = targetId;
+    }
+
+    public CourseTargetValueDto getCourseTargetValueDto() {
+        return courseTargetValueDto;
+    }
+
+    public void setCourseTargetValueDto(CourseTargetValueDto courseTargetValueDto) {
+        this.courseTargetValueDto = courseTargetValueDto;
+    }
+
+    @Override
+    public int compareTo(@NotNull ReportCourseTargetDto o) {
+        if (o.getTargetId().longValue() < this.getTargetId().longValue()) {
+            return 1;
+        } else if (o.getTargetId().longValue() > this.getTargetId().longValue()) {
+            return -1;
+        } else {
+            return 0;
+        }
+    }
+}

+ 0 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TRExamStudentService.java

@@ -1,12 +1,7 @@
 package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.qmth.distributed.print.business.bean.dto.report.CourseTargetWeightDto;
-import com.qmth.distributed.print.business.bean.dto.report.DimensionDto;
 import com.qmth.distributed.print.business.bean.dto.report.ReportExamStudentDto;
-import com.qmth.distributed.print.business.bean.dto.report.UsualScoreOverviewDto;
-import com.qmth.distributed.print.business.bean.result.FinalScoreResult;
-import com.qmth.distributed.print.business.bean.result.report.PaperStructResult;
 import com.qmth.distributed.print.business.entity.TRBasicInfo;
 import com.qmth.distributed.print.business.entity.TRExamStudent;
 

+ 11 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java

@@ -108,7 +108,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         List<ReportExamStudentDto> examStudentList = null;//考生集合
         Map<String, FinalScoreResult> finalScoreResultMap = null;//考生成绩map
         Map<String, PaperStructResult> paperStructResultMap = null;//试卷蓝图map
-        Map<Long, CourseTargetWeightDto> targetMap = null;
+        Map<Long, CourseTargetValueDto> targetMap = null;
 
         if (!CollectionUtils.isEmpty(finalScoreResultList)) {
             //期末成绩明细map
@@ -128,7 +128,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                         List<CourseTargetDto> courseTargetDtoList = paperStructResult.getTargetList();
 
                         for (CourseTargetDto courseTargetDto : courseTargetDtoList) {
-                            targetMap.put(courseTargetDto.getTargetId(), new CourseTargetWeightDto(courseTargetDto));
+                            targetMap.put(courseTargetDto.getTargetId(), new CourseTargetValueDto(courseTargetDto));
 
                             //课程目标
                             if (!finalScoreTargetMap.containsKey(courseTargetDto.getTargetId())) {
@@ -213,7 +213,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             }
         }
 
-        Map<Long, CourseTargetWeightDto> finalTargetMap = targetMap;
+        Map<Long, CourseTargetValueDto> finalTargetMap = targetMap;
         targetDimensionMap.forEach((k, v) -> {
             List<DimensionDto> dimensionDtoList = new ArrayList<>(v.values());
             Collections.sort(dimensionDtoList);
@@ -282,7 +282,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
     public ReportCourseEvaluationResultDto reportCalculateCourseEvaluationResult(Map<String, Object> paramsMap) {
         ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = null;
         List<PaperStructResult> paperStructResultList = (List<PaperStructResult>) paramsMap.get("paperStructResultList");
-        Map<Long, CourseTargetWeightDto> targetMap = (Map<Long, CourseTargetWeightDto>) paramsMap.get("targetMap");
+        Map<Long, CourseTargetValueDto> targetMap = (Map<Long, CourseTargetValueDto>) paramsMap.get("targetMap");
         Map<String, UsualScoreOverviewDto> usualScoreOverviewDtoMap = (Map<String, UsualScoreOverviewDto>) paramsMap.get("usualScoreOverviewDtoMap");
         Map<Long, FinalScoreOverviewDto> finalScoreOverviewDtoMap = (Map<Long, FinalScoreOverviewDto>) paramsMap.get("finalScoreOverviewDtoMap");
 
@@ -390,8 +390,13 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             trBasicInfo.getReportResult().setCourseEvaluationResultDetailInfo(reportCourseEvaluationResultDetailDto);
         }
         if (Objects.nonNull(paramsMap.get("targetMap"))) {
-            Map<Long, CourseTargetWeightDto> targetMap = (Map<Long, CourseTargetWeightDto>) paramsMap.get("targetMap");
-            trBasicInfo.setCourseEvaluationResultDetail(JacksonUtil.parseJson(targetMap));
+            Map<Long, CourseTargetValueDto> targetMap = (Map<Long, CourseTargetValueDto>) paramsMap.get("targetMap");
+            List<ReportCourseTargetDto> reportCourseTargetDtoList = new ArrayList<>();
+            targetMap.forEach((k, v) -> {
+                reportCourseTargetDtoList.add(new ReportCourseTargetDto(k, v));
+            });
+            Collections.sort(reportCourseTargetDtoList);
+            trBasicInfo.setCourseEvaluationResultDetail(JacksonUtil.parseJson(reportCourseTargetDtoList));
         }
 
         trBasicInfo.getReportResult().setCommonInfo(new ReportCommonDto(markPaper.getExamId(), markPaper.getCourseCode(), markPaper.getCourseName(), markPaper.getPaperNumber()));

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRExamStudentServiceImpl.java

@@ -45,7 +45,7 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
         Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap = (Map<String, Map<Long, Map<Long, DimensionDto>>>) paramsMap.get("finalScoreExamStudentDimensionMap");
         Map<String, FinalScoreResult> finalScoreResultMap = (Map<String, FinalScoreResult>) paramsMap.get("finalScoreResultMap");
         Map<String, PaperStructResult> paperStructResultMap = (Map<String, PaperStructResult>) paramsMap.get("paperStructResultMap");
-        Map<Long, CourseTargetWeightDto> targetMap = (Map<Long, CourseTargetWeightDto>) paramsMap.get("targetMap");
+        Map<Long, CourseTargetValueDto> targetMap = (Map<Long, CourseTargetValueDto>) paramsMap.get("targetMap");
         Map<Long, Map<Long, DimensionDto>> finalScoreExamStudentDimensionSumMap = (Map<Long, Map<Long, DimensionDto>>) paramsMap.get("finalScoreExamStudentDimensionSumMap");
         Map<String, UsualScoreOverviewDto> usualScoreOverviewDtoMap = (Map<String, UsualScoreOverviewDto>) paramsMap.get("usualScoreOverviewDtoMap");
         if (!CollectionUtils.isEmpty(examStudentList)) {

+ 50 - 18
distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.api;
 
 import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -43,6 +44,10 @@ import javax.validation.constraints.Min;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -150,6 +155,7 @@ public class TRBasicInfoController {
                              @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) throws IOException {
         TRBasicInfo trBasicInfo = trBasicInfoService.getOne(new QueryWrapper<TRBasicInfo>().lambda().eq(TRBasicInfo::getExamId, examId).eq(TRBasicInfo::getCourseCode, courseCode).eq(TRBasicInfo::getPaperNumber, paperNumber));
         Objects.requireNonNull(trBasicInfo, "没有报告信息");
+        Objects.requireNonNull(trBasicInfo.getCourseEvaluationResultDetail(), "没有课程目标信息");
 
         String period = Objects.nonNull(trBasicInfo.getPeriod()) ? trBasicInfo.getPeriod() : null;
         String credit = Objects.nonNull(trBasicInfo.getCredit()) ? trBasicInfo.getCredit() : null;
@@ -162,35 +168,61 @@ public class TRBasicInfoController {
 
         CourseReportBean courseReportBean = new CourseReportBean(trBasicInfo.getOpenTime() + "《测试输出报告》", courseBasicBean);
 
+        List<ReportCourseTargetDto> reportCourseTargetDtoList = JSONArray.parseArray(trBasicInfo.getCourseEvaluationResultDetail(), ReportCourseTargetDto.class);
+        Map<Long, ReportCourseTargetDto> courseTargetValueDtoMap = reportCourseTargetDtoList.stream().collect(Collectors.toMap(ReportCourseTargetDto::getTargetId, Function.identity(), (dto1, dto2) -> dto1));
+
         //table1
         RowRenderData header1 = Rows.of("课程目标", "毕业要求指标点").bgColor("F2F2F2").center().create();
         Tables.TableBuilder tableBuilder1 = Tables.ofPercentWidth("100%");
         tableBuilder1.addRow(header1);
-        Map<String, Integer> courseTargetMap = new LinkedHashMap<>();
-        for (int i = 0; i < 2; i++) {
-            CourseTargetTableBean1 courseTargetTableBean1 = new CourseTargetTableBean1("课程目标" + (i + 1), "完成目标" + (i + 1));
+
+        Map<String, Long> courseTargetMap = new LinkedHashMap<>();
+        List<String> header2_1List = new ArrayList<>(Arrays.asList("课程目标", "支撑毕业要求")), header2_2List = new ArrayList<>();
+        header2_2List.addAll(header2_1List);
+        header2_1List.add("考核/评价环节及目标分值");
+
+        courseTargetValueDtoMap.forEach((k, v) -> {
+            CourseTargetValueDto courseTargetValueDto = v.getCourseTargetValueDto();
+            Map<String, BigDecimal> usualScoreWeightMap = courseTargetValueDto.getUsualScoreWeight();
+            usualScoreWeightMap.forEach((k1, v1) -> {
+                header2_1List.add("");
+                header2_2List.add(k1);
+            });
+
+            CourseTargetTableBean1 courseTargetTableBean1 = new CourseTargetTableBean1(courseTargetValueDto.getTargetName(), courseTargetValueDto.getGraduationRequirement());
             RowRenderData row = Rows.of(courseTargetTableBean1.getName(), courseTargetTableBean1.getTarget()).rowStyle(this.getRowStyle()).create();
             tableBuilder1.addRow(row);
-            courseTargetMap.put(courseTargetTableBean1.getName(), i + 1);
-        }
+            courseTargetMap.put(courseTargetTableBean1.getName(), k);
+        });
+        header2_1List.add("目标分值统计");
+        header2_2List.add("期末考试");
+        header2_2List.add("目标分值统计");
+
         TableRenderData tableRenderData1 = tableBuilder1.left().create();
         courseReportBean.setCourseTargetTable1(tableRenderData1);
 
-        //table2
-        RowRenderData header2_1 = Rows.of("课程目标", "支撑毕业要求", "考核/评价环节及目标分值", "", "", "", "目标分值统计").bgColor("F2F2F2").center().create();
-        RowRenderData header2_2 = Rows.of("课程目标", "支撑毕业要求", "平时表现", "课后作业", "课程实验", "期末考试", "目标分值统计").bgColor("F2F2F2").center().create();
+        //TODO 等待曹子轩接口table2
+        RowRenderData header2_1 = Rows.of(header2_1List.toArray(new String[header2_1List.size()])).bgColor("F2F2F2").center().create();
+        RowRenderData header2_2 = Rows.of(header2_2List.toArray(new String[header2_1List.size()])).bgColor("F2F2F2").center().create();
 
         List<CourseTargetTableBean2> courseTargetTableBean2List = new ArrayList<>();
-        BigDecimal bigDecimalExpressionSum = new BigDecimal(0), homeworkSum = new BigDecimal(0), testSum = new BigDecimal(0), examSum = new BigDecimal(0), targetSum2 = new BigDecimal(0);
-        for (int i = 0; i < 2; i++) {
-            CourseTargetTableBean2 courseTargetTableBean2 = new CourseTargetTableBean2("课程目标" + (i + 1), "考核目标" + (i + 1), new BigDecimal(i + 2), new BigDecimal(i + 3), new BigDecimal(i + 4), new BigDecimal(i + 5), new BigDecimal(i + 10));
-            bigDecimalExpressionSum = bigDecimalExpressionSum.add(courseTargetTableBean2.getExpression());
-            homeworkSum = homeworkSum.add(courseTargetTableBean2.getHomework());
-            testSum = testSum.add(courseTargetTableBean2.getTest());
-            examSum = examSum.add(courseTargetTableBean2.getExam());
-            targetSum2 = targetSum2.add(courseTargetTableBean2.getTargetSum());
+        AtomicReference<BigDecimal> bigDecimalExpressionSum = new AtomicReference<>(new BigDecimal(0));
+        AtomicReference<BigDecimal> homeworkSum = new AtomicReference<>(new BigDecimal(0));
+        AtomicReference<BigDecimal> testSum = new AtomicReference<>(new BigDecimal(0));
+        AtomicReference<BigDecimal> examSum = new AtomicReference<>(new BigDecimal(0));
+        AtomicReference<BigDecimal> targetSum2 = new AtomicReference<>(new BigDecimal(0));
+        AtomicInteger atomicReference = new AtomicInteger(0);
+        courseTargetValueDtoMap.forEach((k, v) -> {
+            CourseTargetValueDto courseTargetValueDto = v.getCourseTargetValueDto();
+            CourseTargetTableBean2 courseTargetTableBean2 = new CourseTargetTableBean2(courseTargetValueDto.getTargetName(), courseTargetValueDto.getGraduationRequirement(), new BigDecimal(atomicReference.get() + 2), new BigDecimal(atomicReference.get() + 3), new BigDecimal(atomicReference.get() + 4), new BigDecimal(atomicReference.get() + 5), new BigDecimal(atomicReference.get() + 10));
+            bigDecimalExpressionSum.set(bigDecimalExpressionSum.get().add(courseTargetTableBean2.getExpression()));
+            homeworkSum.set(homeworkSum.get().add(courseTargetTableBean2.getHomework()));
+            testSum.set(testSum.get().add(courseTargetTableBean2.getTest()));
+            examSum.set(examSum.get().add(courseTargetTableBean2.getExam()));
+            targetSum2.set(targetSum2.get().add(courseTargetTableBean2.getTargetSum()));
             courseTargetTableBean2List.add(courseTargetTableBean2);
-        }
+            atomicReference.decrementAndGet();
+        });
 
         RowRenderData[] rowRenderData2 = new RowRenderData[courseTargetTableBean2List.size() + 3];
         for (int i = 0; i < courseTargetTableBean2List.size(); i++) {
@@ -222,7 +254,7 @@ public class TRBasicInfoController {
 //                .left().create();
         courseReportBean.setCourseTargetTable2(tableRenderData2);
 
-        //table3
+        //TODO 等待曹子轩接口table3
         RowRenderData header3_1 = Rows.of("序号", "项目", "考核内容及要求", "目标分值", "对应的课程目标").bgColor("F2F2F2").center().create();
         List<CourseTargetTableBean3> courseTargetTableBean3List = new ArrayList<>();
         BigDecimal targetSum3 = new BigDecimal(0);