Browse Source

3.4.4 update-20250514

xiaofei 1 month ago
parent
commit
9e279895b6

+ 13 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkController.java

@@ -34,6 +34,7 @@ import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -66,14 +67,23 @@ public class MarkController extends BaseController {
      * @param examId      考试ID
      * @param paperNumber 试卷编号
      */
-    @PostMapping(value = "/")
+    @GetMapping(value = "/lock_list")
     @Aac(auth = false)
     public Object getTaskLock(@RequestParam(required = false) Long examId,
-                              @RequestParam(required = false) String paperNumber) {
+                              @RequestParam(required = false) String paperNumber,
+                              @RequestParam(required = false) Long questionId,
+                              @RequestParam(required = false) Long userId) {
         Map<String, TaskLock> formalTaskMap = TaskLockUtil.getFormalTaskMap();
         if (examId != null && StringUtils.isNotBlank(paperNumber)) {
             TaskLock taskLock = TaskLockUtil.getFormalTask(examId + "_" + paperNumber);
-            return taskLock.list();
+            List<Map<String, Object>> mapList = taskLock.list();
+            if (questionId != null) {
+                mapList = mapList.stream().filter(m -> m.get("questions").toString().indexOf(String.valueOf(questionId)) > 0).collect(Collectors.toList());
+            }
+            if (userId != null) {
+                mapList = mapList.stream().filter(m -> m.get("markerId").toString().equals(userId.toString())).collect(Collectors.toList());
+            }
+            return mapList;
         }
         Map<String, List<Map<String, Object>>> map = new HashMap<>();
         for (Map.Entry<String, TaskLock> entry : formalTaskMap.entrySet()) {

+ 2 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -1071,6 +1071,8 @@ public class MarkServiceImpl implements MarkService {
                 }
             } else if (questionModel.equals(QuestionModel.MULTI)) {
                 Set<Long> questions = markUserQuestions.stream().map(MarkUserQuestion::getQuestionId).collect(Collectors.toSet());
+                List<MarkQuestion> markQuestionList = markQuestionService.listByIds(questions);
+                questions = markQuestionList.stream().filter(m->m.getTaskCount() > m.getMarkedCount()).map(MarkQuestion::getId).collect(Collectors.toSet());
                 studentIds = markStudentService.findUnMarked(new Page<>(pageNumber, 20), examId, paperNumber, questions, classNames);
                 if (studentIds.isEmpty()) {
                     break;

+ 2 - 6
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/utils/TaskLock.java

@@ -30,12 +30,8 @@ public class TaskLock {
         } else {
             LockNode node = head.next;
             while (true) {
-                // id+questions,只能被一个owner获取
-                if (node.isId(id) && node.isEqualQuestions(questions)) {
-                    return false;
-                }
-                // id只能被一个owner领取一个number
-                else if (node.isId(id) && !node.isOwner(owner)) {
+                // 一个id只能被锁一次
+                if (node.isId(id)) {
                     return false;
                 }
                 // 跳到下一个node