Jelajahi Sumber

Merge branch 'dev_1.0.0' of http://git.qmth.com.cn/scan-central/server.git into dev_1.0.0

xiatian 8 bulan lalu
induk
melakukan
9eca51f436

+ 1 - 0
install/mysql/init/scan_central_db.sql

@@ -532,6 +532,7 @@ CREATE TABLE IF NOT EXISTS `sc_assigned_check_history`
 (
     `id`          bigint NOT NULL AUTO_INCREMENT,
     `exam_id`     bigint NOT NULL,
+    `subject_code` varchar(64) NOT NULL,
     `student_id`  bigint NOT NULL,
     `user_id`     bigint NOT NULL,
     `creator_id`  bigint DEFAULT NULL,

+ 14 - 6
src/main/java/cn/com/qmth/scancentral/controller/admin/AuditorController.java

@@ -1,13 +1,12 @@
 package cn.com.qmth.scancentral.controller.admin;
 
-import java.util.List;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.core.collection.PageResult;
 
 import cn.com.qmth.scancentral.bean.User;
 import cn.com.qmth.scancentral.controller.BaseController;
@@ -17,6 +16,7 @@ import cn.com.qmth.scancentral.vo.answerquery.AnswerQueryVo;
 import cn.com.qmth.scancentral.vo.assginedcheck.AssginedTaskResult;
 import cn.com.qmth.scancentral.vo.assginedcheck.AssignedTaskSaveVo;
 import cn.com.qmth.scancentral.vo.auditor.AuditorOverview;
+import cn.com.qmth.scancentral.vo.task.TaskStatusVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -48,9 +48,9 @@ public class AuditorController extends BaseController {
 
     @ApiOperation(value = "审核员任务历史")
     @RequestMapping(value = "/check/assigned/task/history", method = RequestMethod.POST)
-    public List<AnswerQueryVo> history(@RequestParam Long id, @RequestParam Long pageSize) {
+    public PageResult<AnswerQueryVo> history(@RequestParam Long examId,@RequestParam String subjectCode, @RequestParam Long pageSize, @RequestParam Long pageNumber) {
         User user = getAccessUser();
-        return studentService.getAssignedCheckTaskHistory(id, pageSize, user);
+        return studentService.getAssignedCheckTaskHistory(examId,subjectCode, pageNumber,pageSize, user);
     }
 
     @ApiOperation(value = "审核员任务提交")
@@ -62,10 +62,18 @@ public class AuditorController extends BaseController {
 
     @ApiOperation(value = "审核员任务释放")
     @PostMapping("/check/assigned/task/release")
-    public Object release(@RequestParam Long examId) {
+    public Object release(@RequestParam Long examId,@RequestParam String subjectCode) {
         User user = getAccessUser();
-        studentService.releaseAssignedCheckTaskByUser(examId, user.getAccount());
+        studentService.releaseAssignedCheckTaskByUser(examId,subjectCode, user.getAccount());
         return success(true);
     }
 
+    @ApiOperation(value = "审核员任务状态")
+    @PostMapping("/check/assigned/task/status")
+    public TaskStatusVo statusVo(@RequestParam Long examId,@RequestParam String subjectCode) {
+        User user = getAccessUser();
+        return studentService.getAssignedCheckTaskStatus(examId,subjectCode, user);
+    }
+
+
 }

+ 7 - 6
src/main/java/cn/com/qmth/scancentral/controller/admin/CheckAssignedController.java

@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
 
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
+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.ReentrantException;
@@ -120,9 +121,9 @@ public class CheckAssignedController extends BaseController {
 
     @ApiOperation(value = "管理员任务历史")
     @RequestMapping(value = "task/history", method = RequestMethod.POST)
-    public List<AnswerQueryVo> history(@RequestParam Long id, @RequestParam Long pageSize) {
+    public PageResult<AnswerQueryVo> history(@RequestParam Long examId, @RequestParam String subjectCode, @RequestParam Long pageNumber, @RequestParam Long pageSize) {
         User user = getAccessUser();
-        return studentService.getAssignedCheckTaskHistory(id, pageSize, user);
+        return studentService.getAssignedCheckTaskHistory(examId, subjectCode,pageNumber,pageSize, user);
     }
 
     @ApiOperation(value = "管理员任务提交")
@@ -134,16 +135,16 @@ public class CheckAssignedController extends BaseController {
 
     @ApiOperation(value = "管理员任务状态")
     @PostMapping("task/status")
-    public TaskStatusVo status(@RequestParam Long examId) {
+    public TaskStatusVo status(@RequestParam Long examId, @RequestParam String subjectCode) {
         User user = getAccessUser();
-        return studentService.getAssignedCheckTaskStatus(examId, user);
+        return studentService.getAssignedCheckTaskStatus(examId, subjectCode,user);
     }
 
     @ApiOperation(value = "管理员任务释放")
     @PostMapping("task/release")
-    public Object release(@RequestParam Long examId) {
+    public Object release(@RequestParam Long examId, @RequestParam String subjectCode) {
         User user = getAccessUser();
-        studentService.releaseAssignedCheckTaskByUser(examId, user.getAccount());
+        studentService.releaseAssignedCheckTaskByUser(examId, subjectCode,user.getAccount());
         return success(true);
     }
 

+ 7 - 0
src/main/java/cn/com/qmth/scancentral/dao/OmrGroupDao.java

@@ -1,10 +1,17 @@
 package cn.com.qmth.scancentral.dao;
 
 import cn.com.qmth.scancentral.entity.OmrGroupEntity;
+import cn.com.qmth.scancentral.vo.OmrGroupVo;
+import cn.com.qmth.scancentral.vo.omr.OmrGroupQuery;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 
 public interface OmrGroupDao extends BaseMapper<OmrGroupEntity> {
 
     void updateTotalCount(@Param(value = "id") Long id);
+
+    IPage<OmrGroupVo> queryPage(Page<OmrGroupVo> page, @Param("query") OmrGroupQuery query);
+
 }

+ 2 - 2
src/main/java/cn/com/qmth/scancentral/dao/StudentDao.java

@@ -83,8 +83,8 @@ public interface StudentDao extends BaseMapper<StudentEntity> {
                                     @Param("checkCount") int checkCount,@Param("pageNumber") int pageNumber,
             @Param("pageSize") int pageSize);
 
-    List<AnswerQueryVo> getAssignedCheckTaskHistory(@Param("id") Long id, @Param("pageSize") Long pageSize,
-            @Param("userId") Long userId, @Param("examId") Long examId);
+    IPage<AnswerQueryVo> getAssignedCheckTaskHistory(Page<AnswerQueryVo> page,@Param("examId") Long examId, @Param("subjectCode") String subjectCode,
+            @Param("userId") Long userId);
 
     void updateAssignedCheckCount(@Param("id") Long id);
 

+ 12 - 1
src/main/java/cn/com/qmth/scancentral/entity/AssignedCheckHistoryEntity.java

@@ -18,13 +18,16 @@ public class AssignedCheckHistoryEntity extends AuditingEntity implements Serial
 
     private Long examId;
 
+    private String subjectCode;
+
     public AssignedCheckHistoryEntity() {
     }
 
-    public AssignedCheckHistoryEntity(Long userId, Long studentId, Long examId) {
+    public AssignedCheckHistoryEntity(Long userId, Long studentId, Long examId,String subjectCode) {
         this.studentId = studentId;
         this.userId = userId;
         this.examId = examId;
+        this.subjectCode =subjectCode;
     }
 
     public Long getStudentId() {
@@ -50,4 +53,12 @@ public class AssignedCheckHistoryEntity extends AuditingEntity implements Serial
     public void setExamId(Long examId) {
         this.examId = examId;
     }
+
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
 }

+ 17 - 0
src/main/java/cn/com/qmth/scancentral/handle/OmrConditionVoListTypeHandler.java

@@ -0,0 +1,17 @@
+package cn.com.qmth.scancentral.handle;
+
+import cn.com.qmth.scancentral.vo.OmrConditionVo;
+import com.google.gson.reflect.TypeToken;
+
+import java.util.List;
+
+public class OmrConditionVoListTypeHandler extends ListTypeHandler<OmrConditionVo> {
+
+    @Override
+    protected TypeToken<List<OmrConditionVo>> specificType() {
+        return new TypeToken<List<OmrConditionVo>>() {
+
+        };
+    }
+
+}

+ 1 - 1
src/main/java/cn/com/qmth/scancentral/service/AssignedCheckHistoryService.java

@@ -10,5 +10,5 @@ public interface AssignedCheckHistoryService {
 
     AssignedCheckHistoryEntity findByStudentIdAndUserId(Long studentId, Long userId);
 
-    int getCountByUserId(Long userId, Long examId);
+    int getCountByUserId(Long userId, Long examId,String subjectCode);
 }

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

@@ -141,7 +141,7 @@ public interface StudentService extends IService<StudentEntity> {
 
     ImportResult importExamStatus(Long examId, ExamStatusCheckMode mode, InputStream inputStream) throws IOException;
 
-    int getCountByExamAndAssignedCheckCount(Long examId, int assignedCheckCount, OP op);
+    int getCountByExamAndAssignedCheckCount(Long examId, String subjectCode,int assignedCheckCount, OP op);
 
     int countByExamIdAndExamStatus(Long examId, ExamStatus examStatus);
 
@@ -155,13 +155,13 @@ public interface StudentService extends IService<StudentEntity> {
 
     boolean hasAppliedAssignedCheckTask(StudentEntity t, String account);
 
-    TaskStatusVo getAssignedCheckTaskStatus(Long examId, User user);
+    TaskStatusVo getAssignedCheckTaskStatus(Long examId,String subjectCode, User user);
 
-    void releaseAssignedCheckTaskByUser(Long examId, String account);
+    void releaseAssignedCheckTaskByUser(Long examId,String subjectCode, String account);
 
     AssignedTaskSaveVo submitAssignedCheckTask(AssginedTaskResult result, User user);
 
-    List<AnswerQueryVo> getAssignedCheckTaskHistory(Long id, Long pageSize, User user);
+    PageResult<AnswerQueryVo> getAssignedCheckTaskHistory(Long examId,String subjectCode, Long pageNumber,Long pageSize, User user);
 
     AnswerQueryVo getAssignedCheckTask(Long examId,String subjectCode, User user);
 

+ 17 - 7
src/main/java/cn/com/qmth/scancentral/service/impl/AssignedCheckHistoryServiceImpl.java

@@ -1,20 +1,28 @@
 package cn.com.qmth.scancentral.service.impl;
 
-import cn.com.qmth.scancentral.dao.AssignedCheckHistoryDao;
-import cn.com.qmth.scancentral.entity.AssignedCheckHistoryEntity;
-import cn.com.qmth.scancentral.service.AssignedCheckHistoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.boot.core.exception.ParameterException;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
+
+import cn.com.qmth.scancentral.dao.AssignedCheckHistoryDao;
+import cn.com.qmth.scancentral.entity.AssignedCheckHistoryEntity;
+import cn.com.qmth.scancentral.entity.StudentEntity;
+import cn.com.qmth.scancentral.service.AssignedCheckHistoryService;
+import cn.com.qmth.scancentral.service.StudentService;
 
 @Service
 public class AssignedCheckHistoryServiceImpl extends ServiceImpl<AssignedCheckHistoryDao, AssignedCheckHistoryEntity>
         implements AssignedCheckHistoryService {
 
+    @Autowired
+    private StudentService studentService;
+
     @Transactional
     @Override
     public void deleteByStudentId(Long studentId) {
@@ -32,12 +40,13 @@ public class AssignedCheckHistoryServiceImpl extends ServiceImpl<AssignedCheckHi
         if (studentId == null) {
             throw new ParameterException("studentId 不能为空");
         }
+        StudentEntity student = studentService.getById(studentId);
         if (userId == null) {
             throw new ParameterException("userId 不能为空");
         }
         AssignedCheckHistoryEntity entity = this.findByStudentIdAndUserId(studentId, userId);
         if (entity == null) {
-            entity = new AssignedCheckHistoryEntity(userId, studentId, examId);
+            entity = new AssignedCheckHistoryEntity(userId, studentId, examId,student.getSubjectCode());
         }
         this.saveOrUpdate(entity);
     }
@@ -52,11 +61,12 @@ public class AssignedCheckHistoryServiceImpl extends ServiceImpl<AssignedCheckHi
     }
 
     @Override
-    public int getCountByUserId(Long userId, Long examId) {
+    public int getCountByUserId(Long userId, Long examId,String subjectCode) {
         QueryWrapper<AssignedCheckHistoryEntity> wrapper = new QueryWrapper<>();
         LambdaQueryWrapper<AssignedCheckHistoryEntity> lw = wrapper.lambda();
         lw.eq(AssignedCheckHistoryEntity::getUserId, userId);
         lw.eq(AssignedCheckHistoryEntity::getExamId, examId);
+        lw.eq(AssignedCheckHistoryEntity::getSubjectCode, subjectCode);
         return this.count(wrapper);
     }
 }

+ 22 - 7
src/main/java/cn/com/qmth/scancentral/service/impl/ExamServiceImpl.java

@@ -25,9 +25,24 @@ import cn.com.qmth.scancentral.dao.ExamDao;
 import cn.com.qmth.scancentral.entity.ExamEntity;
 import cn.com.qmth.scancentral.entity.ExamSummaryEntity;
 import cn.com.qmth.scancentral.entity.SubjectEntity;
-import cn.com.qmth.scancentral.enums.*;
+import cn.com.qmth.scancentral.enums.CheckStatus;
+import cn.com.qmth.scancentral.enums.ExamMode;
+import cn.com.qmth.scancentral.enums.ExamStatus;
+import cn.com.qmth.scancentral.enums.ImageTransferMode;
+import cn.com.qmth.scancentral.enums.OP;
+import cn.com.qmth.scancentral.enums.Role;
+import cn.com.qmth.scancentral.enums.TaskStatus;
 import cn.com.qmth.scancentral.exception.ParameterExceptions;
-import cn.com.qmth.scancentral.service.*;
+import cn.com.qmth.scancentral.service.AnswerCardService;
+import cn.com.qmth.scancentral.service.BatchService;
+import cn.com.qmth.scancentral.service.ExamService;
+import cn.com.qmth.scancentral.service.ExamSummaryService;
+import cn.com.qmth.scancentral.service.OmrGroupService;
+import cn.com.qmth.scancentral.service.OmrTaskService;
+import cn.com.qmth.scancentral.service.PackageCardService;
+import cn.com.qmth.scancentral.service.PackageTaskService;
+import cn.com.qmth.scancentral.service.StudentService;
+import cn.com.qmth.scancentral.service.SubjectService;
 import cn.com.qmth.scancentral.util.JsonMapper;
 import cn.com.qmth.scancentral.util.MathUtil;
 import cn.com.qmth.scancentral.util.PageUtil;
@@ -176,10 +191,10 @@ public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements
         vo.getScan().setImageCheckCount(imageCheckCount);
         vo.getScan().setImageCheckTodoCount(imageCheckTodoCount);
 
-        int auditorTodoCount = studentService.getCountByExamAndAssignedCheckCount(examId, 0, OP.EQ);
-        int auditorFinishCount = studentService.getCountByExamAndAssignedCheckCount(examId, 0, OP.GT);
-        int adminTodoCount = studentService.getCountByExamAndAssignedCheckCount(examId, 1, OP.EQ);
-        int adminFinishCount = studentService.getCountByExamAndAssignedCheckCount(examId, 2, OP.GE);
+        int auditorTodoCount = studentService.getCountByExamAndAssignedCheckCount(examId, null, 0, OP.EQ);
+        int auditorFinishCount = studentService.getCountByExamAndAssignedCheckCount(examId, null, 0, OP.GT);
+        int adminTodoCount = studentService.getCountByExamAndAssignedCheckCount(examId, null, 1, OP.EQ);
+        int adminFinishCount = studentService.getCountByExamAndAssignedCheckCount(examId, null, 2, OP.GE);
         int auditorTotalCount = auditorTodoCount + auditorFinishCount;
         double auditorFinishRate = MathUtil.percentage(auditorFinishCount, auditorTotalCount);
         int adminTotalCount = adminTodoCount + adminFinishCount;
@@ -511,7 +526,7 @@ public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements
         vo.getImageCheckTask().setFinishCount(batchService.getCheckCountByExamId(examId, CheckStatus.FINISH, user));
         vo.getImageCheckTask().setTodoCount(batchService.getCheckCountByExamId(examId, CheckStatus.WAITING, user));
 
-        vo.getAssignedCheck().setTodoCount(studentService.getCountByExamAndAssignedCheckCount(examId, 0, OP.EQ));
+        vo.getAssignedCheck().setTodoCount(studentService.getCountByExamAndAssignedCheckCount(examId, null, 0, OP.EQ));
         return vo;
     }
 

+ 37 - 75
src/main/java/cn/com/qmth/scancentral/service/impl/OmrGroupServiceImpl.java

@@ -1,29 +1,5 @@
 package cn.com.qmth.scancentral.service.impl;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-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.ReentrantException;
-import com.qmth.boot.core.exception.StatusException;
-
 import cn.com.qmth.scancentral.dao.OmrGroupDao;
 import cn.com.qmth.scancentral.entity.OmrGroupEntity;
 import cn.com.qmth.scancentral.entity.OmrTaskEntity;
@@ -38,10 +14,33 @@ import cn.com.qmth.scancentral.service.OmrTaskService;
 import cn.com.qmth.scancentral.service.StudentPaperService;
 import cn.com.qmth.scancentral.service.SubjectService;
 import cn.com.qmth.scancentral.util.BatchSetDataUtil;
+import cn.com.qmth.scancentral.util.PageUtil;
 import cn.com.qmth.scancentral.vo.OmrConditionVo;
 import cn.com.qmth.scancentral.vo.OmrGroupUpdateVo;
 import cn.com.qmth.scancentral.vo.OmrGroupVo;
 import cn.com.qmth.scancentral.vo.omr.OmrGroupQuery;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.ReentrantException;
+import com.qmth.boot.core.exception.StatusException;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 @Service
 public class OmrGroupServiceImpl extends ServiceImpl<OmrGroupDao, OmrGroupEntity> implements OmrGroupService {
@@ -124,63 +123,25 @@ public class OmrGroupServiceImpl extends ServiceImpl<OmrGroupDao, OmrGroupEntity
         if (query.getExamId() == null) {
             throw new ParameterException("examId不能为空");
         }
-        if (StringUtils.isBlank(query.getSubjectCode())) {
-            throw new ParameterException("subjectCode不能为空");
-        }
 
-        SubjectEntity subject = subjectService.findByExamIdAndCode(query.getExamId(), query.getSubjectCode());
-        if (subject == null) {
-            throw new ParameterException("科目不存在");
-        }
+        IPage<OmrGroupVo> page = baseMapper.queryPage(new Page<>(query.getPageNumber(), query.getPageSize()), query);
+        for (OmrGroupVo omrGroup : page.getRecords()) {
+            omrGroup.setBuilding(
+                    !concurrentService.getSemaphore(LockType.OMR_GROUP_BUILD + "-" + omrGroup.getId()).isAvailable());
+            omrGroup.setDeleting(
+                    !concurrentService.getSemaphore(LockType.OMR_GROUP_DELETE + "-" + omrGroup.getId()).isAvailable());
+            omrGroup.setReseting(
+                    !concurrentService.getSemaphore(LockType.OMR_GROUP_RESET + "-" + omrGroup.getId()).isAvailable());
 
-        LambdaQueryWrapper<OmrGroupEntity> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(OmrGroupEntity::getExamId, query.getExamId());
-        wrapper.eq(OmrGroupEntity::getSubjectCode, query.getSubjectCode());
-        IPage<OmrGroupEntity> page = this.page(new Page<>(query.getPageNumber(), query.getPageSize()), wrapper);
-
-        List<OmrGroupVo> omrGroups = new ArrayList<>();
-        for (OmrGroupEntity omrGroup : page.getRecords()) {
-            OmrGroupVo groupVo = new OmrGroupVo();
-            groupVo.setId(omrGroup.getId());
-            groupVo.setSubjectCode(omrGroup.getSubjectCode());
-            groupVo.setSubjectName(subject.getName());
-
-            List<OmrConditionVo> conditions = new ArrayList<>();
-            if (CollectionUtils.isNotEmpty(omrGroup.getConditions())) {
-                for (OmrCondition c : omrGroup.getConditions()) {
-                    conditions.add(new OmrConditionVo(c));
-                }
-            }
-            groupVo.setConditions(conditions);
-
-            groupVo.setStage(omrGroup.getStage());
-            groupVo.setFixed(omrGroup.getFixed());
-
-            // groupVo.setBuilding(
-            //         !concurrentService.getSemaphore(LockType.OMR_GROUP_BUILD + "-" + omrGroup.getId()).isAvailable());
-            // groupVo.setDeleting(
-            //         !concurrentService.getSemaphore(LockType.OMR_GROUP_DELETE + "-" + omrGroup.getId()).isAvailable());
-            // groupVo.setReseting(
-            //         !concurrentService.getSemaphore(LockType.OMR_GROUP_RESET + "-" + omrGroup.getId()).isAvailable());
-
-            groupVo.setTotalCount(omrGroup.getTotalCount());
-            groupVo.setFinishCount(
+            omrGroup.setFinishCount(
                     taskService.getCountByGroupAndStatus(omrGroup.getId(), TaskStatus.PROCESSED));
-            groupVo.setUnarbitrateCount(
+            omrGroup.setUnarbitrateCount(
                     taskService.getCountByGroupAndStatus(omrGroup.getId(), TaskStatus.WAIT_ARBITRATE));
-            groupVo.setArbitratedCount(
+            omrGroup.setArbitratedCount(
                     taskService.getCountByGroupAndStatus(omrGroup.getId(), TaskStatus.ARBITRATED));
-            groupVo.setUpdateTime(omrGroup.getUpdateTime());
-            omrGroups.add(groupVo);
         }
 
-        PageResult<OmrGroupVo> result = new PageResult<>();
-        result.setResult(omrGroups);
-        result.setPageNumber(page.getCurrent());
-        result.setPageSize(page.getSize());
-        result.setTotalCount(page.getTotal());
-        result.setPageCount(page.getPages());
-        return result;
+        return PageUtil.of(page);
     }
 
     @Transactional
@@ -376,7 +337,7 @@ public class OmrGroupServiceImpl extends ServiceImpl<OmrGroupDao, OmrGroupEntity
         }
 
         LambdaQueryWrapper<OmrGroupEntity> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(OmrGroupEntity::getExamId,examId);
+        wrapper.eq(OmrGroupEntity::getExamId, examId);
         wrapper.eq(OmrGroupEntity::getSubjectCode, subjectCode);
         List<OmrGroupEntity> list = this.list(wrapper);
         List<OmrGroupVo> omrGroups = new ArrayList<>();
@@ -401,4 +362,5 @@ public class OmrGroupServiceImpl extends ServiceImpl<OmrGroupDao, OmrGroupEntity
         }
         return omrGroups;
     }
+
 }

+ 20 - 19
src/main/java/cn/com/qmth/scancentral/service/impl/StudentServiceImpl.java

@@ -1673,9 +1673,12 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
     }
 
     @Override
-    public int getCountByExamAndAssignedCheckCount(Long examId, int assignedCheckCount, OP op) {
+    public int getCountByExamAndAssignedCheckCount(Long examId,String subjectCode, int assignedCheckCount, OP op) {
         LambdaQueryWrapper<StudentEntity> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(StudentEntity::getExamId, examId);
+        if(subjectCode!=null){
+            wrapper.eq(StudentEntity::getSubjectCode, subjectCode);
+        }
         wrapper.eq(StudentEntity::getAssigned, true);
 
         if (OP.EQ == op) {
@@ -1763,7 +1766,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
                     pvo.setId(p.getPaperId());
                     pvo.setNumber(p.getNumber());
                     pvo.setAssigned(p.getAssigned());
-                    pvo.setAssignedSuspect(p.getAssignedSuspect());
+//                    pvo.setAssignedSuspect(p.getAssignedSuspect());
                     papers.add(pvo);
                     paperMap.put(p.getPaperId(), pvo);
                 }
@@ -1809,7 +1812,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
 
     @Override
     public boolean apply(StudentEntity t, String account) {
-        TaskLock taskLock = TaskLockUtil.getAssignedCheckTask(t.getExamId().toString());
+        TaskLock taskLock = TaskLockUtil.getAssignedCheckTask(t.getExamId()+"_"+t.getSubjectCode());
         boolean lock = taskLock.add(t.getId(), account);
         // 上锁失败直接返回
         if (!lock) {
@@ -1826,26 +1829,26 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
 
     @Override
     public boolean hasAppliedAssignedCheckTask(StudentEntity t, String account) {
-        TaskLock taskLock = TaskLockUtil.getAssignedCheckTask(t.getExamId().toString());
+        TaskLock taskLock = TaskLockUtil.getAssignedCheckTask(t.getExamId()+"_"+t.getSubjectCode());
         return taskLock.exist(t.getId(), account);
     }
 
     @Override
-    public TaskStatusVo getAssignedCheckTaskStatus(Long examId, User user) {
+    public TaskStatusVo getAssignedCheckTaskStatus(Long examId,String subjectCode, User user) {
         TaskStatusVo status = new TaskStatusVo();
         if (Role.AUDITOR.equals(user.getRole())) {
-            status.setFinishCount(assignedCheckHistoryService.getCountByUserId(user.getId(), examId));
-            status.setTodoCount(this.getCountByExamAndAssignedCheckCount(examId, 0, OP.EQ));
+            status.setFinishCount(assignedCheckHistoryService.getCountByUserId(user.getId(), examId,subjectCode));
+            status.setTodoCount(this.getCountByExamAndAssignedCheckCount(examId,subjectCode, 0, OP.EQ));
         } else {
-            status.setFinishCount(this.getCountByExamAndAssignedCheckCount(examId, 2, OP.GE));
-            status.setTodoCount(this.getCountByExamAndAssignedCheckCount(examId, 1, OP.EQ));
+            status.setFinishCount(this.getCountByExamAndAssignedCheckCount(examId,subjectCode, 2, OP.GE));
+            status.setTodoCount(this.getCountByExamAndAssignedCheckCount(examId, subjectCode,1, OP.EQ));
         }
         return status;
     }
 
     @Override
-    public void releaseAssignedCheckTaskByUser(Long examId, String account) {
-        TaskLock taskLock = TaskLockUtil.getAssignedCheckTask(examId.toString());
+    public void releaseAssignedCheckTaskByUser(Long examId,String subjectCode , String account) {
+        TaskLock taskLock = TaskLockUtil.getAssignedCheckTask(examId+"_"+subjectCode);
         taskLock.clear(account);
     }
 
@@ -1873,19 +1876,17 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         }
         AssignedTaskSaveVo vo = new AssignedTaskSaveVo();
         vo.setId(student.getId());
-        vo.setStatus(this.getAssignedCheckTaskStatus(student.getExamId(), user));
+        vo.setStatus(this.getAssignedCheckTaskStatus(student.getExamId(),student.getSubjectCode(), user));
         return vo;
     }
 
     @Override
-    public List<AnswerQueryVo> getAssignedCheckTaskHistory(Long id, Long pageSize, User user) {
-        StudentEntity student = this.getById(id);
-        List<AnswerQueryVo> result = this.baseMapper.getAssignedCheckTaskHistory(id, pageSize, user.getId(),
-                student.getExamId());
-        for (AnswerQueryVo t : result) {
+    public PageResult<AnswerQueryVo> getAssignedCheckTaskHistory(Long examId,String subjectCode,Long pageNumber, Long pageSize, User user) {
+        IPage<AnswerQueryVo> result = this.baseMapper.getAssignedCheckTaskHistory(new Page<>(pageNumber, pageSize),examId,subjectCode,user.getId());
+        for (AnswerQueryVo t : result.getRecords()) {
             t = toTaskVo(t);
         }
-        return result;
+        return  PageUtil.of(result);
     }
 
     @Override
@@ -1961,7 +1962,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
                 pvo.setId(p.getPaperId());
                 pvo.setNumber(p.getNumber());
                 pvo.setAssigned(p.getAssigned());
-                pvo.setAssignedSuspect(p.getAssignedSuspect());
+//                pvo.setAssignedSuspect(p.getAssignedSuspect());
                 papers.add(pvo);
                 paperMap.put(p.getPaperId(), pvo);
             }

+ 10 - 10
src/main/java/cn/com/qmth/scancentral/vo/answerquery/AnswerPaperVo.java

@@ -1,9 +1,9 @@
 package cn.com.qmth.scancentral.vo.answerquery;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-
 import java.util.List;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
+
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class AnswerPaperVo {
 
@@ -13,7 +13,7 @@ public class AnswerPaperVo {
 
     private Boolean assigned;
 
-    private Boolean assignedSuspect;
+//    private Boolean assignedSuspect;
 
     private List<AnswerPageVo> pages;
 
@@ -49,11 +49,11 @@ public class AnswerPaperVo {
         this.pages = pages;
     }
 
-    public Boolean getAssignedSuspect() {
-        return assignedSuspect;
-    }
-
-    public void setAssignedSuspect(Boolean assignedSuspect) {
-        this.assignedSuspect = assignedSuspect;
-    }
+//    public Boolean getAssignedSuspect() {
+//        return assignedSuspect;
+//    }
+//
+//    public void setAssignedSuspect(Boolean assignedSuspect) {
+//        this.assignedSuspect = assignedSuspect;
+//    }
 }

+ 8 - 8
src/main/java/cn/com/qmth/scancentral/vo/answerquery/StudentPaperVo.java

@@ -10,7 +10,7 @@ public class StudentPaperVo {
 
     private Boolean assigned;
 
-    private Boolean assignedSuspect;
+//    private Boolean assignedSuspect;
 
     public Integer getNumber() {
         return number;
@@ -44,11 +44,11 @@ public class StudentPaperVo {
         this.studentId = studentId;
     }
 
-    public Boolean getAssignedSuspect() {
-        return assignedSuspect;
-    }
-
-    public void setAssignedSuspect(Boolean assignedSuspect) {
-        this.assignedSuspect = assignedSuspect;
-    }
+//    public Boolean getAssignedSuspect() {
+//        return assignedSuspect;
+//    }
+//
+//    public void setAssignedSuspect(Boolean assignedSuspect) {
+//        this.assignedSuspect = assignedSuspect;
+//    }
 }

+ 29 - 10
src/main/resources/mapper/OmrGroupMapper.xml

@@ -1,16 +1,35 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="cn.com.qmth.scancentral.dao.OmrGroupDao">
+    <resultMap id="queryPageMap" type="cn.com.qmth.scancentral.vo.OmrGroupVo">
+        <result column="conditions" property="conditions"
+                typeHandler="cn.com.qmth.scancentral.handle.OmrConditionVoListTypeHandler"/>
+    </resultMap>
+
     <update id="updateTotalCount">
         UPDATE sc_omr_group
-		SET total_count = (
-			SELECT
-				count(1)
-			FROM
-				sc_omr_task
-			WHERE
-				group_id =#{id}
-		)
-		WHERE id =#{id}
+        SET total_count = (SELECT count(1)
+                           FROM sc_omr_task
+                           WHERE group_id = #{id})
+        WHERE id = #{id}
     </update>
-</mapper>
+
+    <select id="queryPage" resultMap="queryPageMap">
+        SELECT
+        g.id,
+        g.subject_code,
+        sb.name as subject_name,
+        g.fixed,
+        g.stage,
+        g.conditions,
+        g.total_count,
+        g.update_time
+        FROM sc_omr_group g
+        INNER JOIN sc_subject sb ON sb.exam_id = g.exam_id AND sb.code = g.subject_code
+        WHERE g.exam_id = 1
+        <if test="query.subjectCode != null and query.subjectCode !=''">
+            AND g.subject_code = #{query.subjectCode}
+        </if>
+    </select>
+
+</mapper>

+ 5 - 8
src/main/resources/mapper/PaperMapper.xml

@@ -75,8 +75,7 @@
         t.paper_id,
         t.student_id,
         t.paper_number number,
-        p.assigned,
-        p.assigned_suspect
+        p.assigned
         FROM
         sc_student_paper t
         inner join sc_paper p on t.paper_id=p.id
@@ -98,12 +97,10 @@
     </select>
     <select id="listByBatchIdAndStudentId"
             resultType="cn.com.qmth.scancentral.vo.answerquery.StudentPaperVo">
-        SELECT
-        p.id aper_id,
-        bp.student_id,
-        p.number,
-        p.assigned,
-        p.assigned_suspect
+        SELECT p.id aper_id,
+               bp.student_id,
+               p.number,
+               p.assigned
         FROM sc_batch_paper bp
                  inner join sc_paper p on bp.paper_id = p.id
         WHERE bp.student_id = #{studentId}

+ 1 - 6
src/main/resources/mapper/StudentMapper.xml

@@ -604,13 +604,8 @@
                  left join sc_subject s on s.code = t.subject_code and s.exam_id = t.exam_id
         where h.user_id = #{userId}
           and h.exam_id = #{examId}
-          and h.id &lt;= (select id
-                          from sc_assigned_check_history
-                          where student_id = #{id}
-                            and user_id = #{userId}
-                            and exam_id = #{examId})
+          and h.subject_code = #{subjectCode}
         order by h.id desc
-            limit #{pageSize}
     </select>
 
     <update id="updateAssignedCheckCount">