xiatian 9 mesi fa
parent
commit
d174b6e198

+ 94 - 0
src/main/java/cn/com/qmth/scancentral/bean/omredit/OmrFieldEditDomain.java

@@ -0,0 +1,94 @@
+package cn.com.qmth.scancentral.bean.omredit;
+
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+import cn.com.qmth.scancentral.enums.OmrField;
+
+public class OmrFieldEditDomain {
+
+    @NotNull(message = "考试ID不能为空")
+    private Long examId;
+
+    @NotBlank(message = "subjectCode不能为空")
+    private String subjectCode;
+
+    @NotBlank(message = "准考证号不能为空")
+    private String examNumber;
+
+    @NotNull(message = "paper.number不能为空")
+    @Min(value = 1, message = "paper.number不能小于1")
+    private Integer paperNumber;
+
+    @NotNull(message = "pageIndex不能为空")
+    @Min(value = 1, message = "pageIndex不能小于1")
+    @Max(value = 2, message = "pageIndex不能大于2")
+    private Integer pageIndex;
+
+    @NotNull(message = "field不能为空")
+    private OmrField field;
+
+    @Valid
+    @NotBlank(message = "value不能为空")
+    private Object value;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getExamNumber() {
+        return examNumber;
+    }
+
+    public void setExamNumber(String examNumber) {
+        this.examNumber = examNumber;
+    }
+
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
+
+    public Integer getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(Integer paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public Integer getPageIndex() {
+        return pageIndex;
+    }
+
+    public void setPageIndex(Integer pageIndex) {
+        this.pageIndex = pageIndex;
+    }
+
+    public OmrField getField() {
+        return field;
+    }
+
+    public void setField(OmrField field) {
+        this.field = field;
+    }
+
+    public Object getValue() {
+        return value;
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+}

+ 7 - 0
src/main/java/cn/com/qmth/scancentral/controller/admin/ScanAnswerController.java

@@ -31,6 +31,7 @@ import cn.com.qmth.scancentral.bean.MismatchQueryDomain;
 import cn.com.qmth.scancentral.bean.MismatchToggleDomain;
 import cn.com.qmth.scancentral.bean.PageDeleteDomain;
 import cn.com.qmth.scancentral.bean.omredit.OmrEditDomain;
+import cn.com.qmth.scancentral.bean.omredit.OmrFieldEditDomain;
 import cn.com.qmth.scancentral.bean.papermigrate.PaperMigrateDomain;
 import cn.com.qmth.scancentral.bean.refix.AnswerRefixDomain;
 import cn.com.qmth.scancentral.controller.BaseController;
@@ -189,6 +190,12 @@ public class ScanAnswerController extends BaseController {
         return studentService.omrEdit(getAccessUser(), domain);
     }
 
+    @ApiOperation(value = "按类型修改卷型、识别结果等")
+    @RequestMapping(value = "omr/field/edit", method = RequestMethod.POST)
+    public UpdateTimeVo omrFieldEdit(@Validated @RequestBody OmrFieldEditDomain domain) {
+        return studentService.omrFieldEdit(getAccessUser(), domain);
+    }
+
     @ApiOperation(value = "更新答题卡裁切图")
     @RequestMapping(value = "slice/update", method = RequestMethod.POST)
     public UriVo sliceUpdate(@RequestParam Long paperId, @RequestParam Integer pageIndex, @RequestParam Integer index,

+ 3 - 0
src/main/java/cn/com/qmth/scancentral/service/StudentService.java

@@ -2,6 +2,7 @@ package cn.com.qmth.scancentral.service;
 
 import cn.com.qmth.scancentral.bean.*;
 import cn.com.qmth.scancentral.bean.omredit.OmrEditDomain;
+import cn.com.qmth.scancentral.bean.omredit.OmrFieldEditDomain;
 import cn.com.qmth.scancentral.bean.refix.AnswerRefixDomain;
 import cn.com.qmth.scancentral.entity.StudentEntity;
 import cn.com.qmth.scancentral.entity.StudentPaperEntity;
@@ -184,4 +185,6 @@ public interface StudentService extends IService<StudentEntity> {
 
     List<StudentExamRoomVo> studentExamRoomExportList(AnswerQueryDomain query);
 
+    UpdateTimeVo omrFieldEdit(User accessUser, OmrFieldEditDomain domain);
+
 }

+ 163 - 35
src/main/java/cn/com/qmth/scancentral/service/impl/StudentServiceImpl.java

@@ -1,27 +1,132 @@
 package cn.com.qmth.scancentral.service.impl;
 
-import cn.com.qmth.scancentral.bean.*;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.validation.constraints.NotNull;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+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.gson.Gson;
+import com.qmth.boot.core.collection.PageResult;
+import com.qmth.boot.core.concurrent.service.ConcurrentService;
+import com.qmth.boot.core.exception.ParameterException;
+import com.qmth.boot.core.exception.StatusException;
+import com.qmth.boot.core.retrofit.utils.SignatureInfo;
+import com.qmth.boot.tools.excel.ExcelReader;
+import com.qmth.boot.tools.excel.enums.ExcelType;
+import com.qmth.boot.tools.io.IOUtils;
+import com.qmth.boot.tools.signature.SignatureType;
+
+import cn.com.qmth.scancentral.bean.AbsentQueryDomain;
+import cn.com.qmth.scancentral.bean.AnswerDeleteDomain;
+import cn.com.qmth.scancentral.bean.AnswerQueryDomain;
+import cn.com.qmth.scancentral.bean.AssignedQueryDomain;
+import cn.com.qmth.scancentral.bean.ImportCetAbsentDomain;
+import cn.com.qmth.scancentral.bean.ImportStudentDomain;
+import cn.com.qmth.scancentral.bean.PageDeleteDomain;
+import cn.com.qmth.scancentral.bean.SchoolSession;
+import cn.com.qmth.scancentral.bean.User;
 import cn.com.qmth.scancentral.bean.answersave.ArrayResult;
+import cn.com.qmth.scancentral.bean.answersave.BoolResult;
 import cn.com.qmth.scancentral.bean.answersave.StringResult;
 import cn.com.qmth.scancentral.bean.omredit.OmrEditDomain;
 import cn.com.qmth.scancentral.bean.omredit.OmrEditPaper;
+import cn.com.qmth.scancentral.bean.omredit.OmrFieldEditDomain;
 import cn.com.qmth.scancentral.bean.refix.AnswerRefixDomain;
 import cn.com.qmth.scancentral.bean.refix.PageRefixDomain;
 import cn.com.qmth.scancentral.bean.refix.PaperRefixDomain;
 import cn.com.qmth.scancentral.config.SysProperty;
 import cn.com.qmth.scancentral.dao.StudentDao;
-import cn.com.qmth.scancentral.entity.*;
-import cn.com.qmth.scancentral.enums.*;
+import cn.com.qmth.scancentral.entity.AnswerCardEntity;
+import cn.com.qmth.scancentral.entity.ExamEntity;
+import cn.com.qmth.scancentral.entity.OmrGroupEntity;
+import cn.com.qmth.scancentral.entity.PaperEntity;
+import cn.com.qmth.scancentral.entity.PaperPageEntity;
+import cn.com.qmth.scancentral.entity.QuestionEntity;
+import cn.com.qmth.scancentral.entity.StudentEntity;
+import cn.com.qmth.scancentral.entity.StudentPaperEntity;
+import cn.com.qmth.scancentral.entity.SubjectEntity;
+import cn.com.qmth.scancentral.entity.UserEntity;
+import cn.com.qmth.scancentral.enums.ExamMode;
+import cn.com.qmth.scancentral.enums.ExamStatus;
+import cn.com.qmth.scancentral.enums.ExamStatusCheckMode;
+import cn.com.qmth.scancentral.enums.GroupType;
+import cn.com.qmth.scancentral.enums.LockType;
+import cn.com.qmth.scancentral.enums.OP;
+import cn.com.qmth.scancentral.enums.OmrField;
+import cn.com.qmth.scancentral.enums.OmrType;
+import cn.com.qmth.scancentral.enums.Role;
+import cn.com.qmth.scancentral.enums.ScanStatus;
+import cn.com.qmth.scancentral.enums.UploadStatus;
 import cn.com.qmth.scancentral.exception.NotFoundExceptions;
 import cn.com.qmth.scancentral.exception.ParameterExceptions;
 import cn.com.qmth.scancentral.model.ManualAbsentImportDTO;
-import cn.com.qmth.scancentral.service.*;
+import cn.com.qmth.scancentral.service.AnswerCardService;
+import cn.com.qmth.scancentral.service.AnswerCardSubjectService;
+import cn.com.qmth.scancentral.service.AssignedCheckHistoryService;
+import cn.com.qmth.scancentral.service.BatchService;
+import cn.com.qmth.scancentral.service.ExamService;
+import cn.com.qmth.scancentral.service.OmrGroupService;
+import cn.com.qmth.scancentral.service.OmrTaskService;
+import cn.com.qmth.scancentral.service.PaperPageService;
+import cn.com.qmth.scancentral.service.PaperService;
+import cn.com.qmth.scancentral.service.QuestionService;
+import cn.com.qmth.scancentral.service.SessionService;
+import cn.com.qmth.scancentral.service.StudentPaperService;
+import cn.com.qmth.scancentral.service.StudentService;
+import cn.com.qmth.scancentral.service.SubjectService;
+import cn.com.qmth.scancentral.service.ToolExportService;
+import cn.com.qmth.scancentral.service.UserService;
 import cn.com.qmth.scancentral.support.TaskLock;
 import cn.com.qmth.scancentral.support.TaskLockUtil;
 import cn.com.qmth.scancentral.util.BatchGetDataUtil;
 import cn.com.qmth.scancentral.util.BatchSetDataUtil;
 import cn.com.qmth.scancentral.util.PageUtil;
-import cn.com.qmth.scancentral.vo.*;
+import cn.com.qmth.scancentral.vo.AbsentInfoVo;
+import cn.com.qmth.scancentral.vo.AbsentManualImportVo;
+import cn.com.qmth.scancentral.vo.AbsentQueryVo;
+import cn.com.qmth.scancentral.vo.AnswerDeleteVo;
+import cn.com.qmth.scancentral.vo.AnswerExportK12Vo;
+import cn.com.qmth.scancentral.vo.AnswerExportVo;
+import cn.com.qmth.scancentral.vo.AnswerRefixVo;
+import cn.com.qmth.scancentral.vo.CampusVo;
+import cn.com.qmth.scancentral.vo.ExamSiteVo;
+import cn.com.qmth.scancentral.vo.ExportCetMarkingQueryVo;
+import cn.com.qmth.scancentral.vo.ExportCetVo;
+import cn.com.qmth.scancentral.vo.ImportResult;
+import cn.com.qmth.scancentral.vo.ImportStudentQueryVo;
+import cn.com.qmth.scancentral.vo.ImportStudentVo;
+import cn.com.qmth.scancentral.vo.PaperDeleteVo;
+import cn.com.qmth.scancentral.vo.ScanAnswerInfoVo;
+import cn.com.qmth.scancentral.vo.StudentUploadVo;
+import cn.com.qmth.scancentral.vo.UpdateTimeVo;
 import cn.com.qmth.scancentral.vo.answerquery.AnswerPageVo;
 import cn.com.qmth.scancentral.vo.answerquery.AnswerPaperVo;
 import cn.com.qmth.scancentral.vo.answerquery.AnswerQueryVo;
@@ -42,36 +147,6 @@ import cn.com.qmth.scancentral.vo.student.StudentQuery;
 import cn.com.qmth.scancentral.vo.student.StudentVo;
 import cn.com.qmth.scancentral.vo.subject.SubjectScanProgressVo;
 import cn.com.qmth.scancentral.vo.task.TaskStatusVo;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-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.qmth.boot.core.collection.PageResult;
-import com.qmth.boot.core.concurrent.service.ConcurrentService;
-import com.qmth.boot.core.exception.ParameterException;
-import com.qmth.boot.core.exception.StatusException;
-import com.qmth.boot.core.retrofit.utils.SignatureInfo;
-import com.qmth.boot.tools.excel.ExcelReader;
-import com.qmth.boot.tools.excel.enums.ExcelType;
-import com.qmth.boot.tools.io.IOUtils;
-import com.qmth.boot.tools.signature.SignatureType;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.validation.constraints.NotNull;
-import java.io.*;
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
 
 @Service
 public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> implements StudentService {
@@ -1087,6 +1162,59 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         }
     }
 
+    @Transactional
+    @Override
+    public UpdateTimeVo omrFieldEdit(User user, OmrFieldEditDomain domain) {
+        StudentEntity student = this.findByExamAndSubjectCodeAndExamNumber(domain.getExamId(), domain.getSubjectCode(),
+                domain.getExamNumber());
+        if (student == null) {
+            throw new ParameterException("考生信息未找到");
+        }
+        concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().lock();
+        try {
+            StudentPaperEntity sp = studentPaperService.findByStudentIdAndPaperNumber(student.getId(),
+                    domain.getPaperNumber());
+            if (sp == null) {
+                throw new ParameterException("未找到绑定扫描结果");
+            }
+            PaperEntity paperEntity = paperService.getById(sp.getPaperId());
+            if (paperEntity == null) {
+                throw new ParameterException("未找到paper信息结果");
+            }
+            paperEntity.setUpdaterId(user.getId());
+            paperEntity.setUpdateTime(System.currentTimeMillis());
+            List<PaperPageEntity> pages = paperPageService.listByPaperId(paperEntity.getId());
+            boolean pageIndexValid = false;
+            for (PaperPageEntity pageEntity : pages) {
+                if (pageEntity.getPageIndex().equals(domain.getPageIndex())) {
+                    pageIndexValid = true;
+                    Gson gson = new Gson();
+                    if (OmrField.ABSENT.equals(domain.getField())) {
+                        pageEntity.setAbsent(gson.fromJson(domain.getValue().toString(), BoolResult.class));
+                    } else if (OmrField.BREACH.equals(domain.getField())) {
+                        pageEntity.setBreach(gson.fromJson(domain.getValue().toString(), BoolResult.class));
+                    } else if (OmrField.PAPER_TYPE.equals(domain.getField())) {
+                        pageEntity.setPaperType(gson.fromJson(domain.getValue().toString(), StringResult.class));
+                    } else if (OmrField.QUESTION.equals(domain.getField())) {
+                        pageEntity.setQuestion(gson.fromJson(domain.getValue().toString(), ArrayResult.class));
+                    } else if (OmrField.SELECTIVE.equals(domain.getField())) {
+                        pageEntity.setSelective(gson.fromJson(domain.getValue().toString(), ArrayResult.class));
+                    } else {
+                        throw new ParameterException("field值错误");
+                    }
+                }
+            }
+            if (!pageIndexValid) {
+                throw new ParameterException("未找到page信息结果");
+            }
+            paperService.savePaperAndPages(paperEntity, pages);
+            updateStudentByPaper(user, student.getId(), false);
+            return UpdateTimeVo.create();
+        } finally {
+            concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().unlock();
+        }
+    }
+
     @Transactional
     @Override
     public Integer importCetAbsent(List<ImportCetAbsentDomain> students) {