caozixuan 4 年 前
コミット
fb002604ea

+ 1 - 1
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/TAExamCourseService.java

@@ -124,7 +124,7 @@ public interface TAExamCourseService extends IService<TAExamCourse> {
      * @param coefficient 赋分系数
      * @return 结果
      */
-    TrialCalculationResult trialCalculate(Long examId, String courseCode, BigDecimal coefficient);
+    TrialCalculationResult trialCalculate(Long examId, String courseCode, String coefficient);
 
     /**
      * 导出课程分析接口

+ 93 - 70
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TAExamCourseServiceImpl.java

@@ -249,7 +249,7 @@ public class TAExamCourseServiceImpl extends ServiceImpl<TAExamCourseMapper, TAE
     }
 
     @Override
-    public TrialCalculationResult trialCalculate(Long examId, String courseCode, BigDecimal coefficient) {
+    public TrialCalculationResult trialCalculate(Long examId, String courseCode, String coefficient) {
         // 试卷分数设置
         List<TBPaper> tbPaperList = tbPaperService.list(new QueryWrapper<TBPaper>().lambda().eq(TBPaper::getExamId, examId).eq(TBPaper::getCourseCode, courseCode));
         if (tbPaperList.size() == 0) {
@@ -258,77 +258,100 @@ public class TAExamCourseServiceImpl extends ServiceImpl<TAExamCourseMapper, TAE
         TBPaper tbPaper = tbPaperList.get(0);
         BigDecimal fullScore = tbPaper.getTotalScore();
         BigDecimal passScore = tbPaper.getPassScore();
-        // 参考的考生数据
-        List<TAExamCourseRecord> taExamCourseRecordList = taExamCourseRecordMapper.selectList(new QueryWrapper<TAExamCourseRecord>().lambda()
-                .eq(TAExamCourseRecord::getExamId, examId)
-                .eq(TAExamCourseRecord::getCourseCode, courseCode)
-                .eq(TAExamCourseRecord::getAbsent, false));
-        for (TAExamCourseRecord taExamCourseRecord : taExamCourseRecordList) {
-            BigDecimal paperScore = taExamCourseRecord.getTotalScore();
-            BigDecimal assignScore;
-            if (coefficient.compareTo(BigDecimal.ZERO) != 0) {
-                assignScore = paperScore.add((fullScore.subtract(paperScore)).divide(coefficient, 4, BigDecimal.ROUND_HALF_UP));
-            } else {
-                assignScore = paperScore;
+        TrialCalculationResult trialCalculationResult = new TrialCalculationResult();
+        if (coefficient.equals(SystemConstant.DEFAULT_SIGN)) {
+            // 特殊赋分处理
+            TAExamCourse taExamCourse = taExamCourseService.getOne(new QueryWrapper<TAExamCourse>().lambda().eq(TAExamCourse::getExamId, examId).eq(TAExamCourse::getCourseCode, courseCode));
+            // 组装
+            trialCalculationResult.setTotalCount(taExamCourse.getRealityCount());
+            trialCalculationResult.setCurrentCount(taExamCourse.getCurrentRealityCount());
+            // - 卷面-总体
+            trialCalculationResult.setAvgScore(taExamCourse.getPaperAvgScore());
+            trialCalculationResult.setFailRate(BigDecimal.ONE.subtract(taExamCourse.getPaperPassRate()));
+            trialCalculationResult.setFailCount(taExamCourse.getRealityCount() - taExamCourse.getPaperPassCount());
+            // - 卷面-应届
+            trialCalculationResult.setCurrentAvgScore(taExamCourse.getPaperCurrentAvgScore());
+            trialCalculationResult.setCurrentFailRate(BigDecimal.ONE.subtract(taExamCourse.getCurrentPassRate()));
+            trialCalculationResult.setCurrentFailCount(taExamCourse.getRealityCount() - taExamCourse.getPaperCurrentPassCount());
+            // - 赋分-总体
+            trialCalculationResult.setAvgScoreAssign(taExamCourse.getAvgScore());
+            trialCalculationResult.setFailRateAssign(BigDecimal.ONE.subtract(taExamCourse.getPassRate()));
+            trialCalculationResult.setFailCountAssign(taExamCourse.getRealityCount() - taExamCourse.getPassCount());
+            // - 赋分-应届
+            trialCalculationResult.setCurrentAvgScoreAssign(taExamCourse.getCurrentAvgScore());
+            trialCalculationResult.setCurrentFailRateAssign(BigDecimal.ONE.subtract(taExamCourse.getCurrentPassRate()));
+            trialCalculationResult.setCurrentFailCountAssign(taExamCourse.getRealityCount() - taExamCourse.getCurrentPassCount());
+        } else {
+            // 参考的考生数据
+            List<TAExamCourseRecord> taExamCourseRecordList = taExamCourseRecordMapper.selectList(new QueryWrapper<TAExamCourseRecord>().lambda()
+                    .eq(TAExamCourseRecord::getExamId, examId)
+                    .eq(TAExamCourseRecord::getCourseCode, courseCode)
+                    .eq(TAExamCourseRecord::getAbsent, false));
+            for (TAExamCourseRecord taExamCourseRecord : taExamCourseRecordList) {
+                BigDecimal paperScore = taExamCourseRecord.getTotalScore();
+                BigDecimal assignScore;
+                if (!coefficient.equals(String.valueOf(0))) {
+                    assignScore = paperScore.add((fullScore.subtract(paperScore)).divide(BigDecimal.valueOf(Double.parseDouble(coefficient)), 4, BigDecimal.ROUND_HALF_UP));
+                    assignScore = assignScore.setScale(0, BigDecimal.ROUND_HALF_UP);
+                } else {
+                    assignScore = paperScore;
+                }
+
+                taExamCourseRecord.setAssignedScore(assignScore);
             }
-
-            assignScore = assignScore.setScale(0, BigDecimal.ROUND_HALF_UP);
-            taExamCourseRecord.setAssignedScore(assignScore);
+            int totalCount = taExamCourseRecordList.size();
+            int currentCount = (int) taExamCourseRecordList.stream().filter(TAExamCourseRecord::getStudentCurrent).count();
+
+            // 查找卷面数据
+            // 总体
+            List<Double> paperTotalScoreList = taExamCourseRecordList.stream().map(e -> e.getTotalScore().doubleValue()).collect(Collectors.toList());
+            DoubleSummaryStatistics paperTotalStatistics = paperTotalScoreList.stream().collect(Collectors.summarizingDouble(e -> e));
+            double paperTotalAvgScore = paperTotalStatistics.getAverage();
+            long paperTotalFailCount = paperTotalScoreList.stream().filter(e -> e < passScore.doubleValue()).count();
+            BigDecimal paperTotalFailRate = BigDecimal.valueOf(paperTotalFailCount).divide(BigDecimal.valueOf(paperTotalScoreList.size()), SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+            // 应届
+            List<Double> paperCurrentScoreList = taExamCourseRecordList.stream().filter(TAExamCourseRecord::getStudentCurrent).map(e -> e.getTotalScore().doubleValue()).collect(Collectors.toList());
+            DoubleSummaryStatistics paperCurrentStatistics = paperCurrentScoreList.stream().collect(Collectors.summarizingDouble(e -> e));
+            double paperCurrentAvgScore = paperCurrentStatistics.getAverage();
+            long paperCurrentFailCount = paperCurrentScoreList.stream().filter(e -> e < passScore.doubleValue()).count();
+            BigDecimal paperCurrentFailRate = BigDecimal.valueOf(paperCurrentFailCount).divide(BigDecimal.valueOf(paperCurrentScoreList.size()), SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+            // 查找赋分试算后数据
+            // 总体
+            List<Double> totalScoreList = taExamCourseRecordList.stream().map(e -> e.getAssignedScore().doubleValue()).collect(Collectors.toList());
+            DoubleSummaryStatistics totalStatistics = totalScoreList.stream().collect(Collectors.summarizingDouble(e -> e));
+            double totalAvgScore = totalStatistics.getAverage();
+            long totalFailCount = totalScoreList.stream().filter(e -> e < passScore.doubleValue()).count();
+            BigDecimal totalFailRate = BigDecimal.valueOf(totalFailCount).divide(BigDecimal.valueOf(totalScoreList.size()), SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+            // 应届
+            List<Double> currentScoreList = taExamCourseRecordList.stream().filter(TAExamCourseRecord::getStudentCurrent).map(e -> e.getAssignedScore().doubleValue()).collect(Collectors.toList());
+            DoubleSummaryStatistics currentStatistics = currentScoreList.stream().collect(Collectors.summarizingDouble(e -> e));
+            double currentAvgScore = currentStatistics.getAverage();
+            long currentFailCount = currentScoreList.stream().filter(e -> e < passScore.doubleValue()).count();
+            BigDecimal currentFailRate = BigDecimal.valueOf(currentFailCount).divide(BigDecimal.valueOf(currentScoreList.size()), SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+            // 组装
+            trialCalculationResult.setTotalCount(totalCount);
+            trialCalculationResult.setCurrentCount(currentCount);
+            // - 卷面-总体
+            trialCalculationResult.setAvgScore(BigDecimal.valueOf(paperTotalAvgScore).setScale(1, BigDecimal.ROUND_HALF_UP));
+            trialCalculationResult.setFailRate(paperTotalFailRate.setScale(SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP));
+            trialCalculationResult.setFailCount((int) paperTotalFailCount);
+            // - 卷面-应届
+            trialCalculationResult.setCurrentAvgScore(BigDecimal.valueOf(paperCurrentAvgScore).setScale(1, BigDecimal.ROUND_HALF_UP));
+            trialCalculationResult.setCurrentFailRate(paperCurrentFailRate.setScale(SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP));
+            trialCalculationResult.setCurrentFailCount((int) paperCurrentFailCount);
+            // - 赋分-总体
+            trialCalculationResult.setAvgScoreAssign(BigDecimal.valueOf(totalAvgScore).setScale(1, BigDecimal.ROUND_HALF_UP));
+            trialCalculationResult.setFailRateAssign(totalFailRate.setScale(SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP));
+            trialCalculationResult.setFailCountAssign((int) totalFailCount);
+            // - 赋分-应届
+            trialCalculationResult.setCurrentAvgScoreAssign(BigDecimal.valueOf(currentAvgScore).setScale(1, BigDecimal.ROUND_HALF_UP));
+            trialCalculationResult.setCurrentFailRateAssign(currentFailRate.setScale(SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP));
+            trialCalculationResult.setCurrentFailCountAssign((int) currentFailCount);
         }
-        int totalCount = taExamCourseRecordList.size();
-        int currentCount = (int) taExamCourseRecordList.stream().filter(TAExamCourseRecord::getStudentCurrent).count();
-
-        // 查找卷面数据
-        // 总体
-        List<Double> paperTotalScoreList = taExamCourseRecordList.stream().map(e -> e.getTotalScore().doubleValue()).collect(Collectors.toList());
-        DoubleSummaryStatistics paperTotalStatistics = paperTotalScoreList.stream().collect(Collectors.summarizingDouble(e -> e));
-        double paperTotalAvgScore = paperTotalStatistics.getAverage();
-        long paperTotalFailCount = paperTotalScoreList.stream().filter(e -> e < passScore.doubleValue()).count();
-        BigDecimal paperTotalFailRate = BigDecimal.valueOf(paperTotalFailCount).divide(BigDecimal.valueOf(paperTotalScoreList.size()), SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP);
-
-        // 应届
-        List<Double> paperCurrentScoreList = taExamCourseRecordList.stream().filter(TAExamCourseRecord::getStudentCurrent).map(e -> e.getTotalScore().doubleValue()).collect(Collectors.toList());
-        DoubleSummaryStatistics paperCurrentStatistics = paperCurrentScoreList.stream().collect(Collectors.summarizingDouble(e -> e));
-        double paperCurrentAvgScore = paperCurrentStatistics.getAverage();
-        long paperCurrentFailCount = paperCurrentScoreList.stream().filter(e -> e < passScore.doubleValue()).count();
-        BigDecimal paperCurrentFailRate = BigDecimal.valueOf(paperCurrentFailCount).divide(BigDecimal.valueOf(paperCurrentScoreList.size()), SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP);
-
-        // 查找赋分试算后数据
-        // 总体
-        List<Double> totalScoreList = taExamCourseRecordList.stream().map(e -> e.getAssignedScore().doubleValue()).collect(Collectors.toList());
-        DoubleSummaryStatistics totalStatistics = totalScoreList.stream().collect(Collectors.summarizingDouble(e -> e));
-        double totalAvgScore = totalStatistics.getAverage();
-        long totalFailCount = totalScoreList.stream().filter(e -> e < passScore.doubleValue()).count();
-        BigDecimal totalFailRate = BigDecimal.valueOf(totalFailCount).divide(BigDecimal.valueOf(totalScoreList.size()), SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP);
-
-        // 应届
-        List<Double> currentScoreList = taExamCourseRecordList.stream().filter(TAExamCourseRecord::getStudentCurrent).map(e -> e.getAssignedScore().doubleValue()).collect(Collectors.toList());
-        DoubleSummaryStatistics currentStatistics = currentScoreList.stream().collect(Collectors.summarizingDouble(e -> e));
-        double currentAvgScore = currentStatistics.getAverage();
-        long currentFailCount = currentScoreList.stream().filter(e -> e < passScore.doubleValue()).count();
-        BigDecimal currentFailRate = BigDecimal.valueOf(currentFailCount).divide(BigDecimal.valueOf(currentScoreList.size()), SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP);
-
-        // 组装
-        TrialCalculationResult trialCalculationResult = new TrialCalculationResult();
-        trialCalculationResult.setTotalCount(totalCount);
-        trialCalculationResult.setCurrentCount(currentCount);
-        // - 卷面-总体
-        trialCalculationResult.setAvgScore(BigDecimal.valueOf(paperTotalAvgScore).setScale(1, BigDecimal.ROUND_HALF_UP));
-        trialCalculationResult.setFailRate(paperTotalFailRate.setScale(SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP));
-        trialCalculationResult.setFailCount((int) paperTotalFailCount);
-        // - 卷面-应届
-        trialCalculationResult.setCurrentAvgScore(BigDecimal.valueOf(paperCurrentAvgScore).setScale(1, BigDecimal.ROUND_HALF_UP));
-        trialCalculationResult.setCurrentFailRate(paperCurrentFailRate.setScale(SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP));
-        trialCalculationResult.setCurrentFailCount((int) paperCurrentFailCount);
-        // - 赋分-总体
-        trialCalculationResult.setAvgScoreAssign(BigDecimal.valueOf(totalAvgScore).setScale(1, BigDecimal.ROUND_HALF_UP));
-        trialCalculationResult.setFailRateAssign(totalFailRate.setScale(SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP));
-        trialCalculationResult.setFailCountAssign((int) totalFailCount);
-        // - 赋分-应届
-        trialCalculationResult.setCurrentAvgScoreAssign(BigDecimal.valueOf(currentAvgScore).setScale(1, BigDecimal.ROUND_HALF_UP));
-        trialCalculationResult.setCurrentFailRateAssign(currentFailRate.setScale(SystemConstant.CALCULATE_SCALE, BigDecimal.ROUND_HALF_UP));
-        trialCalculationResult.setCurrentFailCountAssign((int) currentFailCount);
-
         return trialCalculationResult;
     }
 

+ 1 - 1
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/CourseController.java

@@ -196,7 +196,7 @@ public class CourseController {
     public Result surveyAspointsCalculation(
             @ApiParam(value = "考试id", required = true) @RequestParam String examId,
             @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
-            @ApiParam(value = "赋分系数", required = true) @RequestParam BigDecimal coefficient) {
+            @ApiParam(value = "赋分系数", required = true) @RequestParam String coefficient) {
         return ResultUtil.ok(taExamCourseService.trialCalculate(SystemConstant.convertIdToLong(examId), courseCode, coefficient));
     }
 

+ 1 - 1
teachcloud-report/src/test/java/com/qmth/teachcloud/report/AnalyzeForStudentServiceTest.java

@@ -21,7 +21,7 @@ public class AnalyzeForStudentServiceTest {
     private AnalyzeForReportService analyzeForReportService;
     @Test
     public void buildAnalyzeExamCourse() {
-        Long examId = 1L;
+        Long examId = 2L;
         String courseCode = null;
         System.out.println(analyzeForReportService.buildAnalyzeExamCourse(examId,courseCode));
 

+ 1 - 1
teachcloud-report/src/test/java/com/qmth/teachcloud/report/report/CourseReportTest.java

@@ -34,7 +34,7 @@ public class CourseReportTest {
     public void trail(){
         long examId = 1L;
         String examCode = "1013";
-        BigDecimal coefficient = new BigDecimal("4.5");
+        String coefficient = "4.5";
         System.out.println(JSON.toJSONString(taExamCourseService.trialCalculate(examId,examCode,coefficient)));
     }