Browse Source

fix:赋分检查

caozixuan 3 years ago
parent
commit
7c818e2e1b

+ 72 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/bean/dto/excel/AssignCheckDto.java

@@ -0,0 +1,72 @@
+package com.qmth.teachcloud.report.business.bean.dto.excel;
+
+import com.qmth.teachcloud.common.annotation.ExcelNote;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description: 赋分表校验
+ * @Author: CaoZixuan
+ * @Date: 2022-01-03
+ */
+public class AssignCheckDto {
+    @ExcelNote(value = "考试id")
+    @NotNull
+    private String examId;
+
+    @ExcelNote(value = "科目编号")
+    @NotNull
+    private String paperCodeS;
+
+    @ExcelNote(value = "学号")
+    @NotNull
+    private String studentCode;
+
+    @ExcelNote(value = "姓名")
+    @NotNull
+    private String studentName;
+
+    @ExcelNote(value = "赋分")
+    @NotNull
+    private String assignScore;
+
+    public String getExamId() {
+        return examId;
+    }
+
+    public void setExamId(String examId) {
+        this.examId = examId;
+    }
+
+    public String getPaperCodeS() {
+        return paperCodeS;
+    }
+
+    public void setPaperCodeS(String paperCodeS) {
+        this.paperCodeS = paperCodeS;
+    }
+
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getAssignScore() {
+        return assignScore;
+    }
+
+    public void setAssignScore(String assignScore) {
+        this.assignScore = assignScore;
+    }
+}

+ 116 - 34
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/BasicDatasourceController.java

@@ -340,7 +340,7 @@ public class BasicDatasourceController {
 
                         String courseCode = moduleConfigDto.getCourseCode();
                         String courseName = basicCourseService.getOne(new QueryWrapper<BasicCourse>().lambda()
-                                .eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, courseCode))
+                                        .eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, courseCode))
                                 .getName();
 
 
@@ -425,7 +425,7 @@ public class BasicDatasourceController {
 
                         String courseCode = dimensionDto.getCourseCode();
                         String courseName = basicCourseService.getOne(new QueryWrapper<BasicCourse>().lambda()
-                                .eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, courseCode))
+                                        .eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, courseCode))
                                 .getName();
 
                         if (tbExamCourseService.verifyExamCourseCantRun(examId, schoolId, courseCode, courseName)) {
@@ -729,36 +729,38 @@ public class BasicDatasourceController {
                 tbExamRecordList.add(tbExamRecord);
 
                 // TODO: 2021/6/4 构建考生-详细作答记录表(全批次删除并新增)
-                // 构建考生作答明细表(t_b_answer)
+                // 构建考生作答明细表(t_b_answer)正常考生才记录
                 // 客观题(选择)
-                for (Map<Object, Object> objectObjectMap : objectiveScoreDetailList) {
-                    Long answerId = SystemConstant.getDbUuid();
-                    TBAnswer tbAnswer = new TBAnswer();
-                    tbAnswer.setId(answerId);
-                    tbAnswer.setExamRecordId(examRecordId);
-                    tbAnswer.setNumberType(NumberTypeEnum.OBJECTIVE.getValue());
-                    String cloudMainNumber = String.valueOf(objectObjectMap.get(ExamCloudDataEnum.MAIN_NUMBER.getName()));
-                    String cloudSubNumber = String.valueOf(objectObjectMap.get(ExamCloudDataEnum.SUB_NUMBER.getName()));
-                    tbAnswer.setMainNumber(cloudMainNumber);
-                    tbAnswer.setSubNumber(cloudSubNumber);
-                    tbAnswer.setScore(BigDecimal.valueOf(Double.parseDouble(String.valueOf(objectObjectMap.get(ExamCloudDataEnum.SCORE.getName())))));
-                    tbAnswer.setAnswer(String.valueOf(objectObjectMap.get(ExamCloudDataEnum.ANSWER.getName())));
-                    tbAnswerList.add(tbAnswer);
-                }
-                // 主观题
-                for (Map<Object, Object> objectObjectMap : subjectiveScoreDetailList) {
-                    Long answerId = SystemConstant.getDbUuid();
-                    TBAnswer tbAnswer = new TBAnswer();
-                    tbAnswer.setId(answerId);
-                    tbAnswer.setExamRecordId(examRecordId);
-                    tbAnswer.setNumberType(NumberTypeEnum.SUBJECTIVE.getValue());
-                    String cloudMainNumber = String.valueOf(objectObjectMap.get(ExamCloudDataEnum.MAIN_NUMBER.getName()));
-                    String cloudSubNumber = String.valueOf(objectObjectMap.get(ExamCloudDataEnum.SUB_NUMBER.getName()));
-                    tbAnswer.setMainNumber(cloudMainNumber);
-                    tbAnswer.setSubNumber(cloudSubNumber);
-                    tbAnswer.setScore(BigDecimal.valueOf(Double.parseDouble(String.valueOf(objectObjectMap.get(ExamCloudDataEnum.SCORE.getName())))));
-                    tbAnswer.setAnswer(String.valueOf(objectObjectMap.get(ExamCloudDataEnum.ANSWER.getName())));
-                    tbAnswerList.add(tbAnswer);
+                if (status == 1) {
+                    for (Map<Object, Object> objectObjectMap : objectiveScoreDetailList) {
+                        Long answerId = SystemConstant.getDbUuid();
+                        TBAnswer tbAnswer = new TBAnswer();
+                        tbAnswer.setId(answerId);
+                        tbAnswer.setExamRecordId(examRecordId);
+                        tbAnswer.setNumberType(NumberTypeEnum.OBJECTIVE.getValue());
+                        String cloudMainNumber = String.valueOf(objectObjectMap.get(ExamCloudDataEnum.MAIN_NUMBER.getName()));
+                        String cloudSubNumber = String.valueOf(objectObjectMap.get(ExamCloudDataEnum.SUB_NUMBER.getName()));
+                        tbAnswer.setMainNumber(cloudMainNumber);
+                        tbAnswer.setSubNumber(cloudSubNumber);
+                        tbAnswer.setScore(BigDecimal.valueOf(Double.parseDouble(String.valueOf(objectObjectMap.get(ExamCloudDataEnum.SCORE.getName())))));
+                        tbAnswer.setAnswer(String.valueOf(objectObjectMap.get(ExamCloudDataEnum.ANSWER.getName())));
+                        tbAnswerList.add(tbAnswer);
+                    }
+                    // 主观题
+                    for (Map<Object, Object> objectObjectMap : subjectiveScoreDetailList) {
+                        Long answerId = SystemConstant.getDbUuid();
+                        TBAnswer tbAnswer = new TBAnswer();
+                        tbAnswer.setId(answerId);
+                        tbAnswer.setExamRecordId(examRecordId);
+                        tbAnswer.setNumberType(NumberTypeEnum.SUBJECTIVE.getValue());
+                        String cloudMainNumber = String.valueOf(objectObjectMap.get(ExamCloudDataEnum.MAIN_NUMBER.getName()));
+                        String cloudSubNumber = String.valueOf(objectObjectMap.get(ExamCloudDataEnum.SUB_NUMBER.getName()));
+                        tbAnswer.setMainNumber(cloudMainNumber);
+                        tbAnswer.setSubNumber(cloudSubNumber);
+                        tbAnswer.setScore(BigDecimal.valueOf(Double.parseDouble(String.valueOf(objectObjectMap.get(ExamCloudDataEnum.SCORE.getName())))));
+                        tbAnswer.setAnswer(String.valueOf(objectObjectMap.get(ExamCloudDataEnum.ANSWER.getName())));
+                        tbAnswerList.add(tbAnswer);
+                    }
                 }
             }
         }
@@ -1064,9 +1066,9 @@ public class BasicDatasourceController {
                 .eq(TBExamination::getExamId, SystemConstant.convertIdToLong(examId))
                 .eq(TBExamination::getSchoolId, SystemConstant.convertIdToLong(schoolId))
                 .eq(TBExamination::getExaminationCourseCode, tbExamCourseService.getOne(new QueryWrapper<TBExamCourse>().lambda()
-                        .eq(TBExamCourse::getExamId, examId)
-                        .eq(TBExamCourse::getCourseCode, courseCode)
-                        .eq(TBExamCourse::getSchoolId, schoolId))
+                                .eq(TBExamCourse::getExamId, examId)
+                                .eq(TBExamCourse::getCourseCode, courseCode)
+                                .eq(TBExamCourse::getSchoolId, schoolId))
                         .getExaminationCourseCode())
                 .eq(TBExamination::getCourseName, courseName)
                 .ne(TBExamination::getStudyType, "普通"));
@@ -1364,6 +1366,80 @@ public class BasicDatasourceController {
         return ResultUtil.ok();
     }
 
+    @ApiOperation(value = "特殊科目赋分检查")
+    @RequestMapping(value = "/special/assignCheck", method = RequestMethod.POST)
+    @Transactional(rollbackFor = Exception.class)
+    @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
+    @Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
+    public Result assignCheck(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file, @RequestParam Long examId, @RequestParam Long schoolId,
+                              @ApiParam(value = "该Excel中包含多科目赋分时,各科目编号用','隔开", required = true) @RequestParam String courseCodeS) throws IOException, NoSuchFieldException {
+
+        int count = 0;
+        List<AssignCheckDto> result = new ArrayList<>();
+        List<String> courseCodeList = Arrays.asList(courseCodeS.split(","));
+        // 数据同步操作
+        // 获取当前课程下所有学生考试成绩记录
+        List<BasicExamRecordDto> basicExamRecordDtoDatasource = tbExamRecordService.findByExamIdAndCourseCodeS(examId, courseCodeList);
+        Set<TAExamCourseRecord> taExamCourseRecordDatasource = new HashSet<>();
+        for (String s : courseCodeList) {
+            taExamCourseRecordDatasource.addAll(taExamCourseRecordService.list(new QueryWrapper<TAExamCourseRecord>()
+                    .lambda().eq(TAExamCourseRecord::getExamId,examId).eq(TAExamCourseRecord::getCourseCode,s)));
+        }
+
+
+        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(AssignCheckDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
+            if (finalExcelErrorList.size() > 0) {
+                throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(finalExcelErrorList));
+            }
+            return finalExcelList;
+        });
+
+        //保存到数据库
+        if (Objects.nonNull(finalList) && finalList.size() > 0) {
+            for (int i = 0; i < finalList.size(); i++) {
+                LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
+                List<Object> assignCheckList = map.get(i);
+                for (int y = 0; y < Objects.requireNonNull(assignCheckList).size(); y++) {
+                    if (assignCheckList.get(y) instanceof AssignCheckDto) {
+                        AssignCheckDto assignCheckDto = (AssignCheckDto) assignCheckList.get(y);
+                        Long assExamId = Long.parseLong(assignCheckDto.getExamId());
+                        if (!examId.equals(assExamId)) {
+                            throw ExceptionResultEnum.ERROR.exception("excel考试数据异常");
+                        }
+                        String assCourseCodeS = assignCheckDto.getPaperCodeS();
+                        String assStudentCode = assignCheckDto.getStudentCode();
+                        String assAssignScore = assignCheckDto.getAssignScore();
+                        String assStudentName = assignCheckDto.getStudentName();
+                        String[] courseCodeArr = assCourseCodeS.split(",");
+                        for (String s : courseCodeArr) {
+                            List<TAExamCourseRecord> taExamCourseRecordList = taExamCourseRecordDatasource.stream()
+                                    .filter(e -> assExamId.equals(e.getExamId()) && s.equals(e.getCourseCode()) && assStudentCode.equals(e.getStudentCode()))
+                                    .collect(Collectors.toList());
+                            if (taExamCourseRecordList.size() != 1) {
+                                if (taExamCourseRecordList.size() < 1) {
+                                    continue;
+                                }
+                                System.out.println("-----------------------");
+                                System.out.println(JSON.toJSONString(taExamCourseRecordList));
+                                throw ExceptionResultEnum.ERROR.exception("赋分异常,考生记录分析表数据异常");
+                            }
+                            TAExamCourseRecord taExamCourseRecord = taExamCourseRecordList.get(0);
+                            TBStudent tbStudent = tbStudentService.getById(taExamCourseRecord.getStudentId());
+                            if (!assStudentName.equals(tbStudent.getName())){
+                                result.add(assignCheckDto);
+                            }else {
+                                count ++;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        System.out.println(JSON.toJSONString(result));
+
+        return ResultUtil.ok(result.size() == 0 ? count : result);
+    }
+
 
     /**
      * 更新或新增专业信息
@@ -1446,15 +1522,21 @@ public class BasicDatasourceController {
      * @param tbSchoolTeacherDtoList 基础教师数据源
      */
     private void saveTeacherInfo(List<TBSchoolTeacherDto> tbSchoolTeacherDtoList) {
+        Map<String,String> checkMap = new HashMap<>();
         for (TBSchoolTeacherDto tbSchoolTeacherDto : tbSchoolTeacherDtoList) {
+            if (checkMap.containsKey(tbSchoolTeacherDto.getTeacherCode())){
+                continue;
+            }
             SysUser old = sysUserService.getOne(new QueryWrapper<SysUser>().lambda()
                     .eq(SysUser::getSchoolId, tbSchoolTeacherDto.getSchoolId())
                     .eq(SysUser::getLoginName, tbSchoolTeacherDto.getTeacherCode())
                     .eq(SysUser::getRealName, tbSchoolTeacherDto.getTeacherName()));
+            checkMap.put(tbSchoolTeacherDto.getTeacherCode(),tbSchoolTeacherDto.getTeacherName());
             Long id = 0L;
             if (Objects.nonNull(old)) {
                 id = old.getId();
             }
+
             SysRole teacherRole = sysRoleService.list(new QueryWrapper<SysRole>().lambda().eq(SysRole::getType, RoleTypeEnum.TEACHER)).get(0);
             List<Long> roleIds = new ArrayList<>();
             roleIds.add(teacherRole.getId());