xiaofei 1 год назад
Родитель
Сommit
eafac3bf5d

+ 13 - 8
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/SpecialTagDTO.java

@@ -1,5 +1,10 @@
 package com.qmth.teachcloud.mark.dto.mark;
 
+import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
+import com.qmth.teachcloud.mark.entity.MarkHeaderTag;
+import com.qmth.teachcloud.mark.entity.MarkSpecialTag;
+import com.qmth.teachcloud.mark.entity.MarkTask;
+
 import java.io.Serializable;
 
 public class SpecialTagDTO implements Serializable {
@@ -40,9 +45,9 @@ public class SpecialTagDTO implements Serializable {
 //        this.offsetY = tag.getOffsetY();
 //    }
 
-    /*public MarkSpecialTag transform(MarkLibrary library) {
+    public MarkSpecialTag transform(MarkTask markTask) {
         MarkSpecialTag markSpecialTag = new MarkSpecialTag();
-        markSpecialTag.setLibraryId(library.getId());
+        markSpecialTag.setTaskId(markTask.getId());
         markSpecialTag.setTagName(tagName);
         markSpecialTag.setPositionX(positionX);
         markSpecialTag.setPositionY(positionY);
@@ -52,11 +57,11 @@ public class SpecialTagDTO implements Serializable {
         return markSpecialTag;
     }
 
-    public HeaderTag transform(ArbitrateHistory library) {
-        HeaderTag markSpecialTag = new HeaderTag();
-        markSpecialTag.setStudentId(library.getStudentId());
-        markSpecialTag.setGroupNumber(library.getGroupNumber());
-        markSpecialTag.setUserId(library.getUserId());
+    public MarkHeaderTag transform(MarkArbitrateHistory arbitrateHistory) {
+        MarkHeaderTag markSpecialTag = new MarkHeaderTag();
+        markSpecialTag.setStudentId(arbitrateHistory.getStudentId());
+        markSpecialTag.setGroupNumber(arbitrateHistory.getGroupNumber());
+        markSpecialTag.setUserId(arbitrateHistory.getUpdateUserId());
         markSpecialTag.setTagName(tagName);
         markSpecialTag.setPositionX(positionX);
         markSpecialTag.setPositionY(positionY);
@@ -64,7 +69,7 @@ public class SpecialTagDTO implements Serializable {
         markSpecialTag.setOffsetX(offsetX);
         markSpecialTag.setOffsetY(offsetY);
         return markSpecialTag;
-    }*/
+    }
 
     public String getTagName() {
         return tagName;

+ 23 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkHeaderTag.java

@@ -25,6 +25,12 @@ public class MarkHeaderTag implements Serializable {
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    @ApiModelProperty(value = "考试ID")
+    private Long examId;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
     @ApiModelProperty(value = "考生ID")
     private Long studentId;
 
@@ -59,6 +65,23 @@ public class MarkHeaderTag implements Serializable {
     public void setId(Long id) {
         this.id = id;
     }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
     public Long getStudentId() {
         return studentId;
     }

+ 4 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkSpecialTagMapper.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.mark.mapper;
 
 import com.qmth.teachcloud.mark.entity.MarkSpecialTag;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface MarkSpecialTagMapper extends BaseMapper<MarkSpecialTag> {
 
+    void deleteByStudentId(@Param("studentId") Long studentId);
+
+    void deleteByExamIdAndPaperNumberAndGroupNumber(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber);
 }

+ 27 - 10
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/params/MarkResult.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.mark.params;
 
+import com.qmth.teachcloud.mark.dto.mark.SpecialTagDTO;
 import com.qmth.teachcloud.mark.dto.mark.manage.TrackDTO;
 import com.qmth.teachcloud.mark.entity.*;
 import org.apache.commons.lang3.StringUtils;
@@ -56,7 +57,7 @@ public class MarkResult {
     /**
      * 特殊标记列表
      */
-//    private SpecialTagDTO[] specialTagList;
+    private SpecialTagDTO[] specialTagList;
 
     /**
      * 所花时间
@@ -131,7 +132,13 @@ public class MarkResult {
     public void setTrackList(TrackDTO[] trackList) {
         this.trackList = trackList;
     }
+    public SpecialTagDTO[] getSpecialTagList() {
+        return specialTagList;
+    }
 
+    public void setSpecialTagList(SpecialTagDTO[] specialTagList) {
+        this.specialTagList = specialTagList;
+    }
     public int getSpent() {
         return spent;
     }
@@ -168,15 +175,25 @@ public class MarkResult {
         return list;
     }
 
-//    public List<MarkHeaderTrack> getHeaderTagList(MarkArbitrateHistory library) {
-//        List<MarkHeaderTrack> list = new LinkedList<>();
-//        if (specialTagList != null) {
-//            for (SpecialTagDTO dto : specialTagList) {
-//                list.add(dto.transform(library));
-//            }
-//        }
-//        return list;
-//    }
+    public List<MarkHeaderTag> getHeaderTagList(MarkArbitrateHistory library) {
+        List<MarkHeaderTag> list = new LinkedList<>();
+        if (specialTagList != null) {
+            for (SpecialTagDTO dto : specialTagList) {
+                list.add(dto.transform(library));
+            }
+        }
+        return list;
+    }
+
+    public List<MarkSpecialTag> getSpecialTagList(MarkTask markTask, MarkUserGroup markUserGroup) {
+        List<MarkSpecialTag> list = new LinkedList<>();
+        if (specialTagList != null) {
+            for (SpecialTagDTO dto : specialTagList) {
+                list.add(dto.transform(markTask));
+            }
+        }
+        return list;
+    }
 
     public boolean isProblem() {
         return isProblem;

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkHeaderTagService.java

@@ -13,4 +13,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface MarkHeaderTagService extends IService<MarkHeaderTag> {
 
+    void deleteByStudentIdAndGroupNumber(Long studentId, Integer groupNumber);
+
+    void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer number);
 }

+ 5 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkSpecialTagService.java

@@ -13,4 +13,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface MarkSpecialTagService extends IService<MarkSpecialTag> {
 
+    void deleteByTaskId(Long taskId);
+
+    void deleteByStudentId(Long studentId);
+
+    void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber);
 }

+ 23 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkHeaderTagServiceImpl.java

@@ -1,9 +1,11 @@
 package com.qmth.teachcloud.mark.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.mark.entity.MarkHeaderTag;
 import com.qmth.teachcloud.mark.mapper.MarkHeaderTagMapper;
 import com.qmth.teachcloud.mark.service.MarkHeaderTagService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,4 +19,24 @@ import org.springframework.stereotype.Service;
 @Service
 public class MarkHeaderTagServiceImpl extends ServiceImpl<MarkHeaderTagMapper, MarkHeaderTag> implements MarkHeaderTagService {
 
+    @Override
+    public void deleteByStudentIdAndGroupNumber(Long studentId, Integer groupNumber) {
+        UpdateWrapper<MarkHeaderTag> updateWrapper = new UpdateWrapper<>();
+        LambdaUpdateWrapper<MarkHeaderTag> lambdaUpdateWrapper = updateWrapper.lambda();
+        lambdaUpdateWrapper.eq(MarkHeaderTag::getStudentId, studentId);
+        if (groupNumber != null) {
+            lambdaUpdateWrapper.eq(MarkHeaderTag::getGroupNumber, groupNumber);
+        }
+        this.remove(updateWrapper);
+    }
+
+    @Override
+    public void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer number) {
+        UpdateWrapper<MarkHeaderTag> updateWrapper = new UpdateWrapper<>();
+        LambdaUpdateWrapper<MarkHeaderTag> lambdaUpdateWrapper = updateWrapper.lambda();
+        lambdaUpdateWrapper.eq(MarkHeaderTag::getExamId, examId)
+                .eq(MarkHeaderTag::getPaperNumber, paperNumber)
+                .eq(MarkHeaderTag::getGroupNumber, number);
+        this.remove(updateWrapper);
+    }
 }

+ 44 - 74
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -1,46 +1,17 @@
 package com.qmth.teachcloud.mark.service.impl;
 
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import javax.annotation.Resource;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.enums.mark.MarkArbitrateStatus;
-import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
-import com.qmth.teachcloud.common.enums.mark.MarkProblemStatus;
-import com.qmth.teachcloud.common.enums.mark.MarkProblemType;
-import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
+import com.qmth.teachcloud.common.enums.mark.*;
 import com.qmth.teachcloud.mark.dto.mark.ScoreItem;
 import com.qmth.teachcloud.mark.dto.mark.mark.MarkGroupDto;
 import com.qmth.teachcloud.mark.dto.mark.mark.MarkSettingDto;
 import com.qmth.teachcloud.mark.dto.mark.mark.MarkStatusDto;
 import com.qmth.teachcloud.mark.dto.mark.mark.MarkTaskDto;
-import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
-import com.qmth.teachcloud.mark.entity.MarkGroup;
-import com.qmth.teachcloud.mark.entity.MarkGroupStudent;
-import com.qmth.teachcloud.mark.entity.MarkHeaderTrack;
-import com.qmth.teachcloud.mark.entity.MarkPaper;
-import com.qmth.teachcloud.mark.entity.MarkStudent;
-import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
-import com.qmth.teachcloud.mark.entity.MarkTask;
-import com.qmth.teachcloud.mark.entity.MarkUserGroup;
+import com.qmth.teachcloud.mark.entity.*;
 import com.qmth.teachcloud.mark.enums.ExamType;
 import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
@@ -48,24 +19,21 @@ import com.qmth.teachcloud.mark.enums.ScorePolicy;
 import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.params.MarkHeaderGroupResult;
 import com.qmth.teachcloud.mark.params.MarkResult;
-import com.qmth.teachcloud.mark.service.MarkArbitrateHistoryService;
-import com.qmth.teachcloud.mark.service.MarkGroupService;
-import com.qmth.teachcloud.mark.service.MarkGroupStudentService;
-import com.qmth.teachcloud.mark.service.MarkHeaderTrackService;
-import com.qmth.teachcloud.mark.service.MarkPaperService;
-import com.qmth.teachcloud.mark.service.MarkProblemHistoryService;
-import com.qmth.teachcloud.mark.service.MarkQuestionService;
-import com.qmth.teachcloud.mark.service.MarkService;
-import com.qmth.teachcloud.mark.service.MarkStudentService;
-import com.qmth.teachcloud.mark.service.MarkSubjectiveScoreService;
-import com.qmth.teachcloud.mark.service.MarkTaskService;
-import com.qmth.teachcloud.mark.service.MarkTrackService;
-import com.qmth.teachcloud.mark.service.MarkUserGroupService;
+import com.qmth.teachcloud.mark.service.*;
 import com.qmth.teachcloud.mark.utils.BigDecimalUtils;
 import com.qmth.teachcloud.mark.utils.TaskLock;
 import com.qmth.teachcloud.mark.utils.TaskLockUtil;
-
 import io.lettuce.core.GeoArgs.Sort;
+import org.apache.commons.collections4.CollectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 @Service
 public class MarkServiceImpl implements MarkService {
@@ -101,6 +69,10 @@ public class MarkServiceImpl implements MarkService {
     @Resource
     private MarkHeaderTrackService markHeaderTrackService;
     @Resource
+    private MarkSpecialTagService markSpecialTagService;
+    @Resource
+    private MarkHeaderTagService markHeaderTagService;
+    @Resource
     LockService lockService;
 
     /**
@@ -165,19 +137,17 @@ public class MarkServiceImpl implements MarkService {
             for (MarkTask markTask : markTaskList) {
                 Long studentId = markTask.getStudentId();
                 markTrackService.deleteByTaskId(markTask.getId());
-//                specialTagDao.deleteByLibraryId(library.getId());
+                markSpecialTagService.deleteByTaskId(markTask.getId());
                 markTaskService.resetById(markTask.getId(), null, null, null, MarkTaskStatus.WAITING);
                 lockService.waitlock(LockType.STUDENT, markTask.getStudentId());
                 updateStudentGroupStatus(studentId, examId, paperNumber, groupNumber, SubjectiveStatus.UNMARK);
                 markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK, 0D, null);
-//                inspectedService.cancelByStudent(library.getStudentId());
                 lockService.unlock(LockType.STUDENT, markTask.getStudentId());
             }
             markUserGroupService.resetById(markUserGroup.getId());
         }
         this.updateMarkedCount(examId, paperNumber, groupNumber);
         releaseByMarkUserGroup(markUserGroup);
-//        inspectHistoryService.deleteByExamIdAndSubjectCode(marker.getExamId(), marker.getSubjectCode());
     }
 
     @Override
@@ -300,10 +270,10 @@ public class MarkServiceImpl implements MarkService {
             }
         }
         // 保存特殊标记
-//        if (result.getSpecialTagList() != null && !result.isUnselective()) {
-//            headerTagDao.deleteByStudentIdAndGroupNumber(history.getStudentId(), history.getGroupNumber());
-//            headerTagDao.save(result.getHeaderTagList(history));
-//        }
+        if (markResult.getSpecialTagList() != null) {
+            markHeaderTagService.deleteByStudentIdAndGroupNumber(markArbitrateHistory.getStudentId(), markArbitrateHistory.getGroupNumber());
+            markHeaderTagService.saveBatch(markResult.getHeaderTagList(markArbitrateHistory));
+        }
         markArbitrateHistoryService.saveOrUpdate(markArbitrateHistory);
         markTaskService.updateHeaderResult(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(), markArbitrateHistory.getGroupNumber(), markArbitrateHistory.getStudentId(), markArbitrateHistory.getUpdateUserId(), markArbitrateHistory.getTotalScore(), markArbitrateHistory.getScoreList(), markArbitrateHistory.getUpdateTime(), MarkTaskStatus.ARBITRATED);
         updateMarkedCount(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(), markArbitrateHistory.getGroupNumber());
@@ -464,8 +434,8 @@ public class MarkServiceImpl implements MarkService {
     public void deleteMarkTaskByStudent(MarkStudent student) {
         // 正评相关数据
         markTrackService.deleteByStudentId(student.getId());
-//        specialTagDao.deleteByStudentId(student.getId());
-//        headerTagDao.deleteByStudentId(student.getId());
+        markSpecialTagService.deleteByStudentId(student.getId());
+        markHeaderTagService.deleteByStudentIdAndGroupNumber(student.getId(), null);
         markHeaderTrackService.deleteByStudentId(student.getId());
         markArbitrateHistoryService.deleteByStudentId(student.getId());
         markProblemHistoryService.deleteByStudentId(student.getId());
@@ -723,19 +693,19 @@ public class MarkServiceImpl implements MarkService {
     }
 
     @Override
-    public void clear(Long userId, Long examId, String paperNumber,Integer groupNumber) {
-    	MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(userId, null, null, userId);
-    	TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(markUserGroup));
-    	taskLock.clear(markUserGroup.getId());
+    public void clear(Long userId, Long examId, String paperNumber, Integer groupNumber) {
+        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(userId, null, null, userId);
+        TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(markUserGroup));
+        taskLock.clear(markUserGroup.getId());
     }
 
     @Override
     public void deleteMarkGroup(MarkGroup markGroup) {
         // 正评相关数据
         markTrackService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
-//        specialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
+        markSpecialTagService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
         markHeaderTrackService.deleteByExamIdAndPaperNumberAndGroupNumberAndStudentId(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber(), null);
-//        headerTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
+        markHeaderTagService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
         markArbitrateHistoryService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
         markProblemHistoryService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
         markTaskService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
@@ -820,15 +790,15 @@ public class MarkServiceImpl implements MarkService {
         return student.getExamId() + "_" + student.getPaperNumber();
     }
 
-	@Override
-	public IPage<MarkTaskDto> getHistory(Long userId, int pageNumber, int pageSize, Sort sort, Long examId,
-			String paperNumber, Integer groupNumber, String secretNumber, Double markerScore) {
-		IPage<MarkTaskDto> list = markTaskService.listPageHistory(new Page<>(pageNumber,pageSize),sort,userId,examId,paperNumber,groupNumber,secretNumber,markerScore);
-		for (MarkTaskDto dto : list.getRecords()) {
-		}
-		return list;
-	}
-	
+    @Override
+    public IPage<MarkTaskDto> getHistory(Long userId, int pageNumber, int pageSize, Sort sort, Long examId,
+                                         String paperNumber, Integer groupNumber, String secretNumber, Double markerScore) {
+        IPage<MarkTaskDto> list = markTaskService.listPageHistory(new Page<>(pageNumber, pageSize), sort, userId, examId, paperNumber, groupNumber, secretNumber, markerScore);
+        for (MarkTaskDto dto : list.getRecords()) {
+        }
+        return list;
+    }
+
 
     @Override
     public MarkTaskDto getTask(Long userId, Long examId, String paperNumber) {
@@ -836,9 +806,9 @@ public class MarkServiceImpl implements MarkService {
         return null;
     }
 
-	@Override
-	public String saveTask(Long userId, MarkResult markResult) {
-		// TODO Auto-generated method stub
-		return null;
-	}
+    @Override
+    public String saveTask(Long userId, MarkResult markResult) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }

+ 18 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkSpecialTagServiceImpl.java

@@ -1,9 +1,10 @@
 package com.qmth.teachcloud.mark.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.mark.entity.MarkSpecialTag;
 import com.qmth.teachcloud.mark.mapper.MarkSpecialTagMapper;
 import com.qmth.teachcloud.mark.service.MarkSpecialTagService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,4 +18,20 @@ import org.springframework.stereotype.Service;
 @Service
 public class MarkSpecialTagServiceImpl extends ServiceImpl<MarkSpecialTagMapper, MarkSpecialTag> implements MarkSpecialTagService {
 
+    @Override
+    public void deleteByTaskId(Long taskId) {
+        UpdateWrapper<MarkSpecialTag> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().eq(MarkSpecialTag::getTaskId, taskId);
+        this.remove(updateWrapper);
+    }
+
+    @Override
+    public void deleteByStudentId(Long studentId) {
+        this.baseMapper.deleteByStudentId(studentId);
+    }
+
+    @Override
+    public void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber) {
+        this.baseMapper.deleteByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber);
+    }
 }

+ 22 - 0
teachcloud-mark/src/main/resources/mapper/MarkSpecialTagMapper.xml

@@ -13,5 +13,27 @@
         <result column="offset_x" property="offsetX" />
         <result column="offset_y" property="offsetY" />
     </resultMap>
+    <delete id="deleteByStudentId" parameterType="java.lang.Long">
+        DELETE FROM mark_special_tag
+        WHERE
+            EXISTS (SELECT
+                        1
+                    FROM
+                        mark_task mt
+                    WHERE
+                        mt.student_id = #{studentId} AND task_id = mt.id)
+    </delete>
+    <delete id="deleteByExamIdAndPaperNumberAndGroupNumber">
+        DELETE FROM mark_special_tag
+        WHERE
+                task_id IN (SELECT
+                                mt.id
+                            FROM
+                                mark_task mt
+                            WHERE
+                                mt.exam_id = #{examId}
+                              AND mt.paper_number = #{paperNumber}
+                              AND mt.group_number = #{groupNumber})
+    </delete>
 
 </mapper>