Ver Fonte

Merge remote-tracking branch 'origin/dev_v2.1.0' into dev_v2.1.0

wangliang há 4 anos atrás
pai
commit
175539c5a0

+ 12 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/entity/TAExamCourseRecordDio.java

@@ -60,6 +60,10 @@ public class TAExamCourseRecordDio implements Serializable {
     @TableField(value = "course_name")
     private String courseName;
 
+    @ApiModelProperty(value = "考号")
+    @TableField(value = "student_code")
+    private String studentCode;
+
     @ApiModelProperty(value = "维度编号")
     @TableField(value = "dimension_code")
     private String dimensionCode;
@@ -177,6 +181,14 @@ public class TAExamCourseRecordDio implements Serializable {
         this.courseName = courseName;
     }
 
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
     public Long getInspectCollegeId() {
         return inspectCollegeId;
     }

+ 8 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/mapper/TAExamCourseRecordDioMapper.java

@@ -1,7 +1,12 @@
 package com.qmth.teachcloud.report.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.teachcloud.report.business.bean.result.DimensionDetailResult;
+import com.qmth.teachcloud.report.business.bean.result.ModuleDetailResult;
 import com.qmth.teachcloud.report.business.entity.TAExamCourseRecordDio;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +18,7 @@ import com.qmth.teachcloud.report.business.entity.TAExamCourseRecordDio;
  */
 public interface TAExamCourseRecordDioMapper extends BaseMapper<TAExamCourseRecordDio> {
 
+    List<ModuleDetailResult> listDiosBySchoolIdAndExamIdAndCourseCodeAndModuleName(@Param("schoolId") String schoolId, @Param("examId") String examId, @Param("courseCode") String courseCode, @Param("moduleName") String moduleName);
+
+    List<DimensionDetailResult> listSubDiosBySchoolIdAndExamIdAndStudentCodeAndCourseCodeAndModuleName(@Param("schoolId") String schoolId, @Param("examId") String examId, @Param("studentCode") String studentCode, @Param("courseCode") String courseCode, @Param("moduleName") String moduleName);
 }

+ 83 - 5
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExamStudentServiceImpl.java

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
-import com.qmth.boot.api.exception.ApiException;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.BasicCourseService;
@@ -20,7 +19,6 @@ import com.qmth.teachcloud.report.business.entity.*;
 import com.qmth.teachcloud.report.business.enums.AssignEnum;
 import com.qmth.teachcloud.report.business.mapper.*;
 import com.qmth.teachcloud.report.business.service.TBExamStudentService;
-import io.swagger.annotations.Api;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,11 +28,13 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -68,6 +68,15 @@ public class TBExamStudentServiceImpl extends ServiceImpl<TBExamStudentMapper, T
     @Resource
     TAExamCourseRecordDioMapper taExamCourseRecordDioMapper;
 
+    @Resource
+    TAExamCourseRecordModMapper taExamCourseRecordModMapper;
+
+    @Resource
+    TBModuleConfigMapper tbModuleConfigMapper;
+
+    @Resource
+    TBModuleProficiencyMapper tbModuleProficiencyMapper;
+
     /**
      * 查询开课学院列表
      *
@@ -291,19 +300,88 @@ public class TBExamStudentServiceImpl extends ServiceImpl<TBExamStudentMapper, T
         }
         diagnosisResult.setAssignedScore(isAssignedScore);
         double passScore = papers.get(0).getPassScore().doubleValue();
-        boolean result = examCourseRecords.get(0).getAssignedScore().doubleValue() >=passScore;
+        boolean result = examCourseRecords.get(0).getAssignedScore().doubleValue() >= passScore;
         diagnosisResult.setResult(result);
 
         // 模块
         QueryWrapper<TAExamCourseRecordDio> examCourseRecordDioQueryWrapper = new QueryWrapper<>();
         examCourseRecordDioQueryWrapper.lambda().eq(TAExamCourseRecordDio::getSchoolId, schoolId).eq(TAExamCourseRecordDio::getExamId, examId).eq(TAExamCourseRecordDio::getCourseCode, courseCode);
         List<TAExamCourseRecordDio> examCourseRecordDios = taExamCourseRecordDioMapper.selectList(examCourseRecordDioQueryWrapper);
-        Set<String> moduleNames = examCourseRecordDios.stream().map(m->m.getDimensionType()).collect(Collectors.toSet());
+        Set<String> moduleNames = examCourseRecordDios.stream().map(m -> m.getDimensionType()).collect(Collectors.toSet());
+        List<DiagnosisDetailResult> diagnosisDetailResults = new ArrayList<>();
         for (String moduleName : moduleNames) {
+            DiagnosisDetailResult diagnosisDetailResult = new DiagnosisDetailResult();
+            diagnosisDetailResult.setName(moduleName);
             QueryWrapper<TAExamCourseRecordMod> examCourseRecordModQueryWrapper = new QueryWrapper<>();
             examCourseRecordModQueryWrapper.lambda().eq(TAExamCourseRecordMod::getSchoolId, schoolId).eq(TAExamCourseRecordMod::getExamId, examId).eq(TAExamCourseRecordMod::getStudentCode, studentCode).eq(TAExamCourseRecordMod::getCourseCode, courseCode);
+            List<TAExamCourseRecordMod> examCourseRecordMods = taExamCourseRecordModMapper.selectList(examCourseRecordModQueryWrapper);
+            if (examCourseRecordMods.size() != 1) {
+                throw ExceptionResultEnum.ERROR.exception("获取数据异常,应该有且仅有一条数据");
+            }
+            TAExamCourseRecordMod taExamCourseRecordMod = examCourseRecordMods.get(0);
+            String levelCode = taExamCourseRecordMod.getLevel();
+
+            QueryWrapper<TBModuleConfig> moduleConfigQueryWrapper = new QueryWrapper<>();
+            moduleConfigQueryWrapper.lambda().eq(TBModuleConfig::getExamId, examId).eq(TBModuleConfig::getCourseCode, courseCode).eq(TBModuleConfig::getLevelCode, levelCode).eq(TBModuleConfig::getModuleType, moduleName);
+            List<TBModuleConfig> moduleConfigs = tbModuleConfigMapper.selectList(moduleConfigQueryWrapper);
+            if (moduleConfigs.size() != 1) {
+                throw ExceptionResultEnum.ERROR.exception("获取数据异常,应该有且仅有一条数据");
+            }
+            diagnosisDetailResult.setResult(moduleConfigs.get(0).getResult());
+            diagnosisDetailResult.setAdvice(moduleConfigs.get(0).getAdvice());
+
+            QueryWrapper<TBModuleProficiency> moduleProficiencyQueryWrapper = new QueryWrapper<>();
+            moduleProficiencyQueryWrapper.lambda().eq(TBModuleProficiency::getExamId, examId).eq(TBModuleProficiency::getCourseCode, courseCode).eq(TBModuleProficiency::getModuleType, moduleName);
+            List<TBModuleProficiency> moduleProficiencies = tbModuleProficiencyMapper.selectList(moduleProficiencyQueryWrapper);
+            List<TBModuleProficiency> moduleProficiencieTemps = moduleProficiencies.stream().flatMap(e -> {
+                TBModuleProficiency tbModuleProficiency = new TBModuleProficiency();
+                tbModuleProficiency.setExamId(e.getExamId());
+                tbModuleProficiency.setCourseCode(e.getCourseCode());
+                tbModuleProficiency.setModuleType(e.getModuleType());
+                tbModuleProficiency.setInterpret(e.getInterpret());
+                return Stream.of(tbModuleProficiency);
+            }).distinct().collect(Collectors.toList());
+
+            if (moduleProficiencieTemps.size() != 1) {
+                throw ExceptionResultEnum.ERROR.exception("获取数据异常,应该有且仅有一条数据");
+            }
+            ModuleResult moduleResult = new ModuleResult();
+            TBModuleProficiency tbModuleProficiency = moduleProficiencieTemps.get(0);
+            String info = tbModuleProficiency.getModuleType().concat(":").concat(tbModuleProficiency.getInterpret());
+            moduleResult.setInfo(info);
+
+            List<ModuleDetailResult> dios = taExamCourseRecordDioMapper.listDiosBySchoolIdAndExamIdAndCourseCodeAndModuleName(schoolId, examId, courseCode, moduleName);
+            moduleResult.setDios(dios);
+            diagnosisDetailResult.setModules(moduleResult);
+
+            DimensionResult dimensionResult = new DimensionResult();
+            dimensionResult.setMyScore(taExamCourseRecordMod.getTotalScore().setScale(1, BigDecimal.ROUND_HALF_UP));
+            dimensionResult.setMasteryRate(taExamCourseRecordMod.getScoreRate().multiply(new BigDecimal("100")).setScale(1, BigDecimal.ROUND_HALF_UP));
+            dimensionResult.setDioFullScore(taExamCourseRecordMod.getFullScore().setScale(1, BigDecimal.ROUND_HALF_UP));
+
+            List<DimensionDetailResult> subDios = taExamCourseRecordDioMapper.listSubDiosBySchoolIdAndExamIdAndStudentCodeAndCourseCodeAndModuleName(schoolId, examId, studentCode, courseCode, moduleName);
+            dimensionResult.setSubDios(subDios);
+
+            List<DimensionMasterysResult> dimensionMasterysResults = new ArrayList<>();
+            List<String> defines = new ArrayList<>();
+            for (TBModuleProficiency moduleProficiency : moduleProficiencies) {
+                DimensionMasterysResult dimensionMasterysResult = new DimensionMasterysResult();
+                dimensionMasterysResult.setLevel(moduleProficiency.getLevel());
+                List<Double> grades = new ArrayList<>();
+                grades.add(Double.valueOf(moduleProficiency.getMin()));
+                grades.add(Double.valueOf(moduleProficiency.getMax()));
+                dimensionMasterysResult.setGrade(grades);
+                dimensionMasterysResults.add(dimensionMasterysResult);
+                defines.add(moduleProficiency.getDefine());
+            }
+            dimensionResult.setDefine(defines);
+            dimensionResult.setMasterys(dimensionMasterysResults);
+            diagnosisDetailResult.setDetail(dimensionResult);
+            diagnosisDetailResults.add(diagnosisDetailResult);
         }
-        return null;
+        diagnosisResult.setList(diagnosisDetailResults);
+        collegeResult.setDiagnosis(diagnosisResult);
+        return collegeResult;
     }
 
     private ExamStudentResult buildExamStudentResult(String schoolId, String examId, String studentCode, String courseCode) {

+ 81 - 0
teachcloud-report-business/src/main/resources/mapper/TAExamCourseRecordDioMapper.xml

@@ -2,4 +2,85 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.qmth.teachcloud.report.business.mapper.TAExamCourseRecordDioMapper">
 
+    <select id="listDiosBySchoolIdAndExamIdAndCourseCodeAndModuleName"
+            resultType="com.qmth.teachcloud.report.business.bean.result.ModuleDetailResult">
+        SELECT
+            ROUND(a.score_rate * 100, 1) rate,
+            ROUND(c.score_rate * 100, 1) collegeRate,
+            b.code_primary code,
+            b.name_primary name,
+            b.interpretation
+        FROM
+            t_a_exam_course_record_dio a
+                JOIN
+            (SELECT DISTINCT
+                exam_id,
+                    code_primary,
+                    name_primary,
+                    course_code,
+                    dimension_type,
+                    interpretation
+            FROM
+                t_b_dimension
+            WHERE
+                exam_id = #{examId} AND course_code = #{courseCode}
+                    AND dimension_type = #{moduleName}) b ON a.exam_id = b.exam_id
+                AND a.course_code = b.course_code
+                AND a.dimension_type = b.dimension_type
+                AND a.dimension_code = b.code_primary
+                LEFT JOIN
+            t_a_exam_course_college_inspect_dio c ON a.school_id = c.school_id
+                AND a.exam_id = c.exam_id
+                AND a.course_code = c.course_code
+                AND a.dimension_type = c.dimension_type
+                AND a.dimension_code = c.dimension_code
+                AND a.inspect_college_id = c.inspect_college_id
+        <where>
+            and a.school_id = #{schoolId}
+            and a.exam_id = #{examId}
+            and a.course_code = #{courseCode}
+            and a.dimension_type = #{moduleName}
+        </where>
+    </select>
+    <select id="listSubDiosBySchoolIdAndExamIdAndStudentCodeAndCourseCodeAndModuleName"
+            resultType="com.qmth.teachcloud.report.business.bean.result.DimensionDetailResult">
+        SELECT
+            ROUND(a.score_rate * 100, 1) scoreRate,
+            ROUND(c.score_rate * 100, 1) collegeAvgScore,
+            b.code_second code,
+            b.name_second name,
+            a.proficiency
+        FROM
+            t_a_exam_course_record_dio a
+                JOIN
+            (SELECT DISTINCT
+                exam_id,
+                    code_second,
+                    name_second,
+                    course_code,
+                    dimension_type,
+                    interpretation
+            FROM
+                t_b_dimension
+            WHERE
+                exam_id = #{examId} AND course_code = #{courseCode}
+                    AND dimension_type = #{moduleName}) b ON a.exam_id = b.exam_id
+                AND a.course_code = b.course_code
+                AND a.dimension_type = b.dimension_type
+                AND a.dimension_code = b.code_second
+                LEFT JOIN
+            t_a_exam_course_college_inspect_dio c ON a.school_id = c.school_id
+                AND a.exam_id = c.exam_id
+                AND a.course_code = c.course_code
+                AND a.dimension_type = c.dimension_type
+                AND a.dimension_code = c.dimension_code
+                AND a.inspect_college_id = c.inspect_college_id
+        <where>
+            and a.school_id = #{schoolId}
+            and a.exam_id = #{examId}
+            and a.student_code = #{studentCode}
+            and a.course_code = #{courseCode}
+            and a.dimension_type = #{moduleName}
+        </where>
+    </select>
 </mapper>