xiaofei 1 жил өмнө
parent
commit
212c2f4917
17 өөрчлөгдсөн 548 нэмэгдсэн , 14 устгасан
  1. 43 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkProblemController.java
  2. 23 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkQualityController.java
  3. 204 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/mark/manage/MarkProblemDto.java
  4. 49 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/mark/MarkProblemStatus.java
  5. 49 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/mark/MarkProblemType.java
  6. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/mark/SubjectiveStatus.java
  7. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/MarkStudentService.java
  8. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/MarkStudentServiceImpl.java
  9. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkGroupStudent.java
  10. 5 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkProblemHistoryMapper.java
  11. 10 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkProblemHistoryService.java
  12. 3 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkService.java
  13. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkTaskService.java
  14. 92 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkProblemHistoryServiceImpl.java
  15. 31 4
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  16. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java
  17. 32 0
      teachcloud-mark/src/main/resources/mapper/MarkProblemHistoryMapper.xml

+ 43 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkProblemController.java

@@ -1,13 +1,26 @@
 package com.qmth.distributed.print.api.mark;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.bean.dto.mark.manage.MarkProblemDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.mark.service.MarkProblemHistoryService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.web.bind.annotation.RequestMapping;
-
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.util.List;
+
 /**
  * <p>
  * 问题卷 前端控制器
@@ -21,4 +34,33 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/problem")
 public class MarkProblemController {
 
+    @Resource
+    private MarkProblemHistoryService markProblemHistoryService;
+
+    /**
+     * 问题试卷列表查询
+     */
+    @ApiOperation(value = "评卷质量列表")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    public Result list(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                       @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+                       @ApiParam(value = "分组号") @RequestParam(required = false) Integer groupNumber,
+                       @ApiParam(value = "问题类型") @RequestParam(required = false) String problemType,
+                       @ApiParam(value = "状态") @RequestParam(required = false) String status,
+                       @ApiParam(value = "密号") @RequestParam(required = false) String secretNumber,
+                       @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                       @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        IPage<MarkProblemDto> markProblemDtoIPage = markProblemHistoryService.pageProblem(examId, paperNumber, groupNumber, problemType, status, secretNumber, pageNumber, pageSize);
+        return ResultUtil.ok(markProblemDtoIPage);
+    }
+
+    /**
+     * 问题试卷列表查询
+     */
+    @ApiOperation(value = "评卷质量列表")
+    @RequestMapping(value = "/reset", method = RequestMethod.POST)
+    public Result reset(@ApiParam(value = "问题卷任务ID集合", required = true) @RequestParam List<Long> taskIds) {
+        markProblemHistoryService.resetProblem(taskIds);
+        return ResultUtil.ok(true);
+    }
 }

+ 23 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkQualityController.java

@@ -3,11 +3,19 @@ package com.qmth.distributed.print.api.mark;
 
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.web.bind.annotation.RequestMapping;
-
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+
 /**
  * <p>
  * 评卷质量 前端控制器
@@ -21,4 +29,18 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/quality")
 public class MarkQualityController {
 
+    /**
+     * 评卷质量列表查询
+     */
+    @ApiOperation(value = "评卷质量列表")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    public Result classSummary(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                               @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+                               @ApiParam(value = "分组号") @RequestParam(required = false) Integer groupNumber,
+                               @ApiParam(value = "评卷员") @RequestParam(required = false) String loginName,
+                               @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                               @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+//        IPage<MarkUserGroupProgressDto> markGroupClassProgressDtoIPage = markUserGroupService.pageGroupUserByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber, loginName, pageNumber, pageSize);
+        return ResultUtil.ok();
+    }
 }

+ 204 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/mark/manage/MarkProblemDto.java

@@ -0,0 +1,204 @@
+package com.qmth.teachcloud.common.bean.dto.mark.manage;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.enums.mark.MarkProblemStatus;
+import com.qmth.teachcloud.common.enums.mark.MarkProblemType;
+
+public class MarkProblemDto {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long taskId;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long studentId;
+    private String studentName;
+    private String studentCode;
+    private String secretNumber;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long userId;
+    private String userLoginName;
+    private String userName;
+    private Long createTime;
+    private MarkProblemType type;
+    private String problemTypeName;
+    private String remark;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long updateUserId;
+    private String updateUserLoginName;
+    private String updateUserName;
+    private Long updateTime;
+    private MarkProblemStatus status;
+    private String problemStatusName;
+    private Integer groupNumber;
+    private String groupQuestions;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(Long taskId) {
+        this.taskId = taskId;
+    }
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserLoginName() {
+        return userLoginName;
+    }
+
+    public void setUserLoginName(String userLoginName) {
+        this.userLoginName = userLoginName;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+
+    public MarkProblemType getType() {
+        return type;
+    }
+
+    public void setType(MarkProblemType type) {
+        this.type = type;
+    }
+
+    public String getProblemTypeName() {
+        return problemTypeName;
+    }
+
+    public void setProblemTypeName(String problemTypeName) {
+        this.problemTypeName = problemTypeName;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Long getUpdateUserId() {
+        return updateUserId;
+    }
+
+    public void setUpdateUserId(Long updateUserId) {
+        this.updateUserId = updateUserId;
+    }
+
+    public String getUpdateUserLoginName() {
+        return updateUserLoginName;
+    }
+
+    public void setUpdateUserLoginName(String updateUserLoginName) {
+        this.updateUserLoginName = updateUserLoginName;
+    }
+
+    public String getUpdateUserName() {
+        return updateUserName;
+    }
+
+    public void setUpdateUserName(String updateUserName) {
+        this.updateUserName = updateUserName;
+    }
+
+    public Long getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public MarkProblemStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(MarkProblemStatus status) {
+        this.status = status;
+    }
+
+    public String getProblemStatusName() {
+        return problemStatusName;
+    }
+
+    public void setProblemStatusName(String problemStatusName) {
+        this.problemStatusName = problemStatusName;
+    }
+
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
+    public String getGroupQuestions() {
+        return groupQuestions;
+    }
+
+    public void setGroupQuestions(String groupQuestions) {
+        this.groupQuestions = groupQuestions;
+    }
+}

+ 49 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/mark/MarkProblemStatus.java

@@ -0,0 +1,49 @@
+package com.qmth.teachcloud.common.enums.mark;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public enum MarkProblemStatus {
+
+    WAITING("待处理", 0), MARKED("已给分", 1), BACK("已打回", 2);
+
+    private String name;
+
+    private int value;
+
+    private static List<MarkProblemStatus> options;
+
+    private MarkProblemStatus(String name, int value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getValue() {
+        return value;
+    }
+
+    public static MarkProblemStatus findByValue(int value) {
+        for (MarkProblemStatus c : MarkProblemStatus.values()) {
+            if (c.getValue() == value) {
+                return c;
+            }
+        }
+        return null;
+    }
+
+    public static List<MarkProblemStatus> getOptionList() {
+        if (options == null) {
+            options = new LinkedList<>();
+            for (MarkProblemStatus status : MarkProblemStatus.values()) {
+                if (status != BACK) {
+                    options.add(status);
+                }
+            }
+        }
+        return options;
+    }
+}

+ 49 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/mark/MarkProblemType.java

@@ -0,0 +1,49 @@
+package com.qmth.teachcloud.common.enums.mark;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public enum MarkProblemType {
+    WRONG("未处理", 0),
+    BLUR("已评", 1),
+    OTHER("其它", 2);
+
+    private String name;
+
+    private int value;
+
+    private static List<MarkProblemType> options;
+
+    private MarkProblemType(String name, int value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getValue() {
+        return value;
+    }
+
+    public static MarkProblemType findByValue(int value) {
+        for (MarkProblemType c : MarkProblemType.values()) {
+            if (c.getValue() == value) {
+                return c;
+            }
+        }
+        return null;
+    }
+
+    public static List<MarkProblemType> getOptionList() {
+        if (options == null) {
+            options = new LinkedList<>();
+            for (MarkProblemType status : MarkProblemType.values()) {
+                options.add(status);
+            }
+        }
+        return options;
+    }
+
+}

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/SubjectiveStatus.java → teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/mark/SubjectiveStatus.java

@@ -1,4 +1,4 @@
-package com.qmth.teachcloud.common.enums;
+package com.qmth.teachcloud.common.enums.mark;
 
 import java.util.LinkedList;
 import java.util.List;

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/MarkStudentService.java

@@ -2,7 +2,7 @@ package com.qmth.teachcloud.common.service;
 
 import com.qmth.teachcloud.common.entity.MarkStudent;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.qmth.teachcloud.common.enums.SubjectiveStatus;
+import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
 
 import java.util.List;
 

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/MarkStudentServiceImpl.java

@@ -4,7 +4,7 @@ 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.teachcloud.common.entity.MarkStudent;
-import com.qmth.teachcloud.common.enums.SubjectiveStatus;
+import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
 import com.qmth.teachcloud.common.mapper.MarkStudentMapper;
 import com.qmth.teachcloud.common.service.MarkStudentService;
 import org.apache.commons.collections4.CollectionUtils;

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkGroupStudent.java

@@ -6,7 +6,7 @@ import java.io.Serializable;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.teachcloud.common.enums.SubjectiveStatus;
+import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 

+ 5 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkProblemHistoryMapper.java

@@ -1,7 +1,11 @@
 package com.qmth.teachcloud.mark.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.teachcloud.common.bean.dto.mark.manage.MarkProblemDto;
 import com.qmth.teachcloud.mark.entity.MarkProblemHistory;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface MarkProblemHistoryMapper extends BaseMapper<MarkProblemHistory> {
 
+    IPage<MarkProblemDto> pageProblem(@Param("page") Page<MarkProblemDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("problemType") String problemType, @Param("status") String status, @Param("secretNumber") String secretNumber);
 }

+ 10 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkProblemHistoryService.java

@@ -1,8 +1,13 @@
 package com.qmth.teachcloud.mark.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.teachcloud.common.bean.dto.mark.manage.MarkProblemDto;
+import com.qmth.teachcloud.common.enums.mark.MarkProblemStatus;
 import com.qmth.teachcloud.mark.entity.MarkProblemHistory;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 问题卷历史表 服务类
@@ -13,4 +18,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface MarkProblemHistoryService extends IService<MarkProblemHistory> {
 
+    IPage<MarkProblemDto> pageProblem(Long examId, String paperNumber, Integer groupNumber, String problemType, String status, String secretNumber, Integer pageNumber, Integer pageSize);
+
+    void resetProblem(List<Long> taskIds);
+
+    void resetByMarkTaskId(Long id, MarkProblemStatus waiting, Long userId, MarkProblemStatus back, Long now);
 }

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

@@ -1,6 +1,7 @@
 package com.qmth.teachcloud.mark.service;
 
 import com.qmth.teachcloud.mark.entity.MarkGroup;
+import com.qmth.teachcloud.mark.entity.MarkTask;
 import com.qmth.teachcloud.mark.entity.MarkUserGroup;
 
 /**
@@ -18,4 +19,6 @@ public interface MarkService {
     void resetMarker(MarkUserGroup markUserGroup);
 
     void updateMarkedCount(Long examId, String paperNumber, Integer groupNumber);
+
+    boolean rejectMarkTask(MarkTask markTask, Long userId);
 }

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkTaskService.java

@@ -35,7 +35,7 @@ public interface MarkTaskService extends IService<MarkTask> {
 
     List<MarkTask> listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusNotIn(Long examId, String paperNumber, Integer groupNumber, Long userId, List<MarkTaskStatus> statusList);
 
-    void resetById(Long markTaskId, Long userId, Long rejecterId, Long date, MarkTaskStatus newStatus);
+    boolean resetById(Long markTaskId, Long userId, Long rejecterId, Long date, MarkTaskStatus newStatus);
 
     int countByExamIdAndPaperNumberAndGroupNumberAndStatusIn(Long examId, String paperNumber, Integer groupNumber, List<MarkTaskStatus> statusList);
 }

+ 92 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkProblemHistoryServiceImpl.java

@@ -1,11 +1,31 @@
 package com.qmth.teachcloud.mark.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+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.teachcloud.common.bean.dto.mark.manage.MarkProblemDto;
+import com.qmth.teachcloud.common.entity.MarkStudent;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.mark.MarkProblemStatus;
+import com.qmth.teachcloud.common.service.MarkQuestionService;
+import com.qmth.teachcloud.common.service.MarkStudentService;
+import com.qmth.teachcloud.common.service.SysUserService;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.entity.MarkProblemHistory;
+import com.qmth.teachcloud.mark.entity.MarkTask;
+import com.qmth.teachcloud.mark.enums.LockType;
+import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
+import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.mapper.MarkProblemHistoryMapper;
 import com.qmth.teachcloud.mark.service.MarkProblemHistoryService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.teachcloud.mark.service.MarkService;
+import com.qmth.teachcloud.mark.service.MarkTaskService;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.List;
+
 /**
  * <p>
  * 问题卷历史表 服务实现类
@@ -17,4 +37,75 @@ import org.springframework.stereotype.Service;
 @Service
 public class MarkProblemHistoryServiceImpl extends ServiceImpl<MarkProblemHistoryMapper, MarkProblemHistory> implements MarkProblemHistoryService {
 
+    @Resource
+    private MarkStudentService markStudentService;
+    @Resource
+    private MarkQuestionService markQuestionService;
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
+    private MarkTaskService markTaskService;
+    @Resource
+    private MarkService markService;
+    @Resource
+    private LockService lockService;
+
+    @Override
+    public IPage<MarkProblemDto> pageProblem(Long examId, String paperNumber, Integer groupNumber, String problemType, String status, String secretNumber, Integer pageNumber, Integer pageSize) {
+        Page<MarkProblemDto> page = new Page<>(pageNumber, pageSize);
+        IPage<MarkProblemDto> markProblemDtoIPage = this.baseMapper.pageProblem(page, examId, paperNumber, groupNumber, problemType, status, secretNumber);
+        for (MarkProblemDto problemDto : markProblemDtoIPage.getRecords()) {
+            MarkStudent markStudent = markStudentService.getById(problemDto.getStudentId());
+            problemDto.setStudentName(markStudent.getStudentName());
+            problemDto.setStudentCode(markStudent.getStudentCode());
+            problemDto.setProblemTypeName(problemDto.getType().getName());
+            problemDto.setProblemStatusName(problemDto.getStatus().getName());
+            problemDto.setGroupQuestions(markQuestionService.assembleGroupQuestionsByExamIdAndPaperNumberAndNumber(examId, paperNumber, groupNumber));
+            if (problemDto.getUserId() != null) {
+                SysUser sysUser = sysUserService.getById(problemDto.getUserId());
+                problemDto.setUserLoginName(sysUser.getLoginName());
+                problemDto.setUserName(sysUser.getRealName());
+            }
+            if (problemDto.getUpdateUserId() != null) {
+                SysUser sysUser = sysUserService.getById(problemDto.getUpdateUserId());
+                problemDto.setUpdateUserLoginName(sysUser.getLoginName());
+                problemDto.setUpdateUserName(sysUser.getRealName());
+            }
+        }
+        return markProblemDtoIPage;
+    }
+
+    @Override
+    public void resetProblem(List<Long> taskIds) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        for (Long taskId : taskIds) {
+            MarkTask markTask = markTaskService.getById(taskId);
+            if (markTask != null) {
+                try {
+                    lockService.watch(LockType.EXAM_SUBJECT, markTask.getExamId(), markTask.getPaperNumber());
+                    lockService.watch(LockType.GROUP, markTask.getExamId(), markTask.getPaperNumber(), markTask.getGroupNumber());
+                    if (markTask.getStatus().equals(MarkTaskStatus.PROBLEM)) {
+                        markService.rejectMarkTask(markTask, sysUser.getId());
+                    }
+                } catch (Exception e) {
+                    log.error("back library error", e);
+                } finally {
+                    lockService.unwatch(LockType.GROUP, markTask.getExamId(), markTask.getPaperNumber(), markTask.getGroupNumber());
+                    lockService.unwatch(LockType.EXAM_SUBJECT, markTask.getExamId(), markTask.getPaperNumber());
+                }
+            }
+        }
+
+    }
+
+    @Override
+    public void resetByMarkTaskId(Long id, MarkProblemStatus waiting, Long userId, MarkProblemStatus back, Long now) {
+        UpdateWrapper<MarkProblemHistory> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(MarkProblemHistory::getUpdateUserId, userId)
+                .set(MarkProblemHistory::getStatus, back)
+                .set(MarkProblemHistory::getUpdateTime, now)
+                .eq(MarkProblemHistory::getId, id)
+                .eq(MarkProblemHistory::getStatus, waiting);
+        this.update(updateWrapper);
+    }
 }

+ 31 - 4
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -1,14 +1,17 @@
 package com.qmth.teachcloud.mark.service.impl;
 
-import com.itextpdf.text.pdf.languages.ArabicLigaturizer;
 import com.qmth.teachcloud.common.entity.MarkPaper;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
+import com.qmth.teachcloud.common.enums.mark.MarkProblemStatus;
+import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
 import com.qmth.teachcloud.common.service.MarkPaperService;
 import com.qmth.teachcloud.common.service.MarkStudentService;
-import com.qmth.teachcloud.mark.entity.*;
+import com.qmth.teachcloud.mark.entity.MarkGroup;
+import com.qmth.teachcloud.mark.entity.MarkGroupStudent;
+import com.qmth.teachcloud.mark.entity.MarkTask;
+import com.qmth.teachcloud.mark.entity.MarkUserGroup;
 import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
-import com.qmth.teachcloud.common.enums.SubjectiveStatus;
 import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.service.*;
 import com.qmth.teachcloud.mark.utils.TaskLock;
@@ -18,7 +21,6 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.Arrays;
 import java.util.List;
-import java.util.zip.GZIPOutputStream;
 
 @Service
 public class MarkServiceImpl implements MarkService {
@@ -38,6 +40,8 @@ public class MarkServiceImpl implements MarkService {
     @Resource
     private MarkGroupStudentService markGroupStudentService;
     @Resource
+    private MarkProblemHistoryService markProblemHistoryService;
+    @Resource
     LockService lockService;
 
     /**
@@ -126,6 +130,29 @@ public class MarkServiceImpl implements MarkService {
         markGroupService.updateMarkedCount(examId, paperNumber, groupNumber, count);
     }
 
+    @Override
+    public boolean rejectMarkTask(MarkTask markTask, Long userId) {
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markTask.getExamId(), markTask.getPaperNumber());
+        if (markPaper.getStatus() == MarkPaperStatus.FINISH) {
+            return false;
+        }
+        Long now = System.currentTimeMillis();
+        if (markTaskService.resetById(markTask.getId(), null, userId, now, MarkTaskStatus.WAITING)) {
+            markTrackService.deleteByTaskId(markTask.getId());
+            resetStudentGroup(markTask.getStudentId(), markTask.getExamId(), markTask.getPaperNumber(), markTask.getGroupNumber());
+            markProblemHistoryService.resetByMarkTaskId(markTask.getId(), MarkProblemStatus.WAITING, userId, MarkProblemStatus.BACK, now);
+            updateMarkedCount(markTask.getExamId(), markTask.getPaperNumber(), markTask.getGroupNumber());
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    private void resetStudentGroup(Long studentId, Long examId, String paperNumber, Integer groupNumber) {
+        updateStudentGroupStatus(studentId, examId, paperNumber, groupNumber, SubjectiveStatus.UNMARK);
+        markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK, 0, null);
+    }
+
     private void updateStudentGroupStatus(Long studentId, Long examId, String paperNumber, Integer groupNumber, SubjectiveStatus status) {
         MarkGroupStudent gs = new MarkGroupStudent();
         gs.setStudentId(studentId);

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

@@ -125,7 +125,7 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     }
 
     @Override
-    public void resetById(Long markTaskId, Long userId, Long rejecterId, Long date, MarkTaskStatus newStatus) {
+    public boolean resetById(Long markTaskId, Long userId, Long rejecterId, Long date, MarkTaskStatus newStatus) {
         UpdateWrapper<MarkTask> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(MarkTask::getStatus, newStatus)
                 .set(MarkTask::getUserId, userId)
@@ -138,7 +138,7 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
                 .set(MarkTask::getHeaderScore, null)
                 .set(MarkTask::getHeaderScoreList, null)
                 .eq(MarkTask::getId, markTaskId);
-        this.update(updateWrapper);
+        return this.update(updateWrapper);
     }
 
     @Override

+ 32 - 0
teachcloud-mark/src/main/resources/mapper/MarkProblemHistoryMapper.xml

@@ -21,5 +21,37 @@
         <result column="update_time" property="updateTime" />
         <result column="remark" property="remark" />
     </resultMap>
+    <select id="pageProblem" resultType="com.qmth.teachcloud.common.bean.dto.mark.manage.MarkProblemDto">
+        SELECT
+            id,
+            task_id taskId,
+            student_id studentId,
+            group_number groupNumber,
+            secret_number secretNumber,
+            type,
+            status,
+            user_id userId,
+            update_user_id updateUserId,
+            create_time createTime,
+            update_time updateTime,
+            remark
+        FROM
+            mark_problem_history
+        where
+            exam_id = #{examId}
+            AND paper_number = #{paperNumber}
+            <if test="groupNumber != null">
+                AND group_number = #{groupNumber}
+            </if>
+            <if test="problemType != null and problemType != ''">
+                AND type = #{problemType}
+            </if>
+            <if test="status != null and status != ''">
+                AND status = #{status}
+            </if>
+            <if test="secretNumber != null and secretNumber != ''">
+                AND secret_number = #{secretNumber}
+            </if>
+    </select>
 
 </mapper>