yin 9 mesi fa
parent
commit
288cf243ba

+ 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,

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

@@ -62,9 +62,9 @@ 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);
     }
 
@@ -72,7 +72,7 @@ public class AuditorController extends BaseController {
     @PostMapping("/check/assigned/task/status")
     public TaskStatusVo statusVo(@RequestParam Long examId,@RequestParam String subjectCode) {
         User user = getAccessUser();
-        return studentService.getAssignedCheckTaskStatus(examId, user);
+        return studentService.getAssignedCheckTaskStatus(examId,subjectCode, user);
     }
 
 

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

@@ -137,14 +137,14 @@ public class CheckAssignedController extends BaseController {
     @PostMapping("task/status")
     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, @RequestParam String subjectCode) {
         User user = getAccessUser();
-        studentService.releaseAssignedCheckTaskByUser(examId, user.getAccount());
+        studentService.releaseAssignedCheckTaskByUser(examId, subjectCode,user.getAccount());
         return success(true);
     }
 

+ 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;
+    }
 }

+ 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);
 }

+ 3 - 3
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,9 +155,9 @@ 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);
 

+ 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;
     }
 

+ 14 - 11
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) {
@@ -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,7 +1876,7 @@ 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;
     }
 

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

@@ -604,7 +604,7 @@
                  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 t.subject_code = #{subjectCode}
+          and h.subject_code = #{subjectCode}
         order by h.id desc
     </select>