浏览代码

3.3.0 fix

xiaofei 1 年之前
父节点
当前提交
aebba6c529

+ 26 - 9
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkArbitrateController.java

@@ -3,12 +3,12 @@ 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.mark.dto.mark.manage.MarkArbitrateDto;
-import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateMarkerDto;
-import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateSettingDto;
 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.dto.mark.manage.MarkArbitrateDto;
+import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateMarkerDto;
+import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateSettingDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.Task;
 import com.qmth.teachcloud.mark.params.MarkResult;
 import com.qmth.teachcloud.mark.service.MarkArbitrateHistoryService;
@@ -62,13 +62,24 @@ public class MarkArbitrateController {
         return ResultUtil.ok(true);
     }
 
+    /**
+     * 获取评卷状态
+     */
+    @ApiOperation(value = "获取评卷状态")
+    @RequestMapping(value = "/getStatus", method = RequestMethod.POST)
+    public Result getStatus(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                            @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+                            @ApiParam(value = "分组号", required = true) @RequestParam Integer groupNumber) {
+        return ResultUtil.ok(markArbitrateHistoryService.getArbitrateStatus(examId, paperNumber, groupNumber));
+    }
+
     /**
      * 左边的列表
      */
     @ApiOperation(value = "左边的列表")
     @RequestMapping(value = "/getArbitrationList", method = RequestMethod.POST)
-    public Result getArbitrationList(@ApiParam(value = "仲裁历史ID", required = true) @RequestParam Long historyId) {
-        List<MarkArbitrateMarkerDto> markArbitrateDtoList = markArbitrateHistoryService.listMarkerArbitrateRecord(historyId);
+    public Result getArbitrationList(@ApiParam(value = "仲裁历史ID", required = true) @RequestParam Long arbitrateId) {
+        List<MarkArbitrateMarkerDto> markArbitrateDtoList = markArbitrateHistoryService.listMarkerArbitrateRecord(arbitrateId);
         return ResultUtil.ok(markArbitrateDtoList);
     }
 
@@ -77,8 +88,11 @@ public class MarkArbitrateController {
      */
     @ApiOperation(value = "获取配置信息")
     @RequestMapping(value = "/getSetting", method = RequestMethod.POST)
-    public Result getSetting(@ApiParam(value = "仲裁历史ID", required = true) @RequestParam Long historyId) {
-        MarkArbitrateSettingDto markArbitrateSettingDto = markArbitrateHistoryService.getArbitrateSetting(historyId);
+    public Result getSetting(@ApiParam(value = "仲裁历史ID") @RequestParam(required = false) Long arbitrateId,
+                             @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
+                             @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
+                             @ApiParam(value = "分组号") @RequestParam(required = false) Integer groupNumber) {
+        MarkArbitrateSettingDto markArbitrateSettingDto = markArbitrateHistoryService.getArbitrateSetting(arbitrateId, examId, paperNumber, groupNumber);
         return ResultUtil.ok(markArbitrateSettingDto);
     }
 
@@ -87,8 +101,11 @@ public class MarkArbitrateController {
      */
     @ApiOperation(value = "获取单个任务")
     @RequestMapping(value = "/getTask", method = RequestMethod.POST)
-    public Result getTask(@ApiParam(value = "仲裁历史ID", required = true) @RequestParam Long historyId) {
-        Task task = markArbitrateHistoryService.getArbitrateTask(historyId);
+    public Result getTask(@ApiParam(value = "仲裁历史ID") @RequestParam(required = false) Long arbitrateId,
+                          @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
+                          @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
+                          @ApiParam(value = "分组号") @RequestParam(required = false) Integer groupNumber) {
+        Task task = markArbitrateHistoryService.getArbitrateTask(arbitrateId, examId, paperNumber, groupNumber);
         return ResultUtil.ok(task);
     }
 

+ 2 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkArbitrateHistoryMapper.java

@@ -18,4 +18,6 @@ import org.apache.ibatis.annotations.Param;
 public interface MarkArbitrateHistoryMapper extends BaseMapper<MarkArbitrateHistory> {
 
     IPage<MarkArbitrateDto> pageArbitrate(@Param("page") Page<MarkArbitrateDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber);
+
+    MarkArbitrateHistory getArbitrateWaitingOne(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber);
 }

+ 5 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkArbitrateHistoryService.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.mark.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateMarkerDto;
@@ -27,13 +28,15 @@ public interface MarkArbitrateHistoryService extends IService<MarkArbitrateHisto
 
     List<MarkArbitrateMarkerDto> listMarkerArbitrateRecord(Long arbitrateId);
 
-    MarkArbitrateSettingDto getArbitrateSetting(Long arbitrateId);
+    MarkArbitrateSettingDto getArbitrateSetting(Long arbitrateId, Long examId, String paperNumber, Integer groupNumber);
 
-    Task getArbitrateTask(Long arbitrateId);
+    Task getArbitrateTask(Long arbitrateId, Long examId, String paperNumber, Integer groupNumber);
 
     void saveArbitrateTask(MarkResult markResult);
 
     void deleteByStudentId(Long studentId);
 
     void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber);
+
+    JSONObject getArbitrateStatus(Long examId, String paperNumber, Integer groupNumber);
 }

+ 50 - 4
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkArbitrateHistoryServiceImpl.java

@@ -1,11 +1,14 @@
 package com.qmth.teachcloud.mark.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.mark.MarkArbitrateStatus;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.ServletUtil;
@@ -19,6 +22,7 @@ import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.mapper.MarkArbitrateHistoryMapper;
 import com.qmth.teachcloud.mark.params.MarkResult;
 import com.qmth.teachcloud.mark.service.*;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
@@ -115,9 +119,17 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
     }
 
     @Override
-    public MarkArbitrateSettingDto getArbitrateSetting(Long arbitrateId) {
+    public MarkArbitrateSettingDto getArbitrateSetting(Long arbitrateId, Long examId, String paperNumber, Integer groupNumber) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        MarkArbitrateHistory markArbitrateHistory = this.getById(arbitrateId);
+        MarkArbitrateHistory markArbitrateHistory;
+        if (arbitrateId != null) {
+            markArbitrateHistory = this.getById(arbitrateId);
+        } else {
+            if (examId == null || StringUtils.isBlank(paperNumber) || groupNumber == null) {
+                throw ExceptionResultEnum.ERROR.exception("参数有误");
+            }
+            markArbitrateHistory = this.baseMapper.getArbitrateWaitingOne(examId, paperNumber, groupNumber);
+        }
         if (markArbitrateHistory == null) {
             throw ExceptionResultEnum.ERROR.exception("仲裁数据异常");
         }
@@ -141,8 +153,19 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
     }
 
     @Override
-    public Task getArbitrateTask(Long arbitrateId) {
-        MarkArbitrateHistory markArbitrateHistory = this.getById(arbitrateId);
+    public Task getArbitrateTask(Long arbitrateId, Long examId, String paperNumber, Integer groupNumber) {
+        MarkArbitrateHistory markArbitrateHistory;
+        if (arbitrateId != null) {
+            markArbitrateHistory = this.getById(arbitrateId);
+        } else {
+            if (examId == null || StringUtils.isBlank(paperNumber) || groupNumber == null) {
+                throw ExceptionResultEnum.ERROR.exception("参数有误");
+            }
+            markArbitrateHistory = this.baseMapper.getArbitrateWaitingOne(examId, paperNumber, groupNumber);
+        }
+        if (markArbitrateHistory == null) {
+            throw ExceptionResultEnum.ERROR.exception("仲裁数据异常");
+        }
         MarkGroup markGroup = markGroupService.getByExamIdAndPaperNumberAndGroupNumber(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(), markArbitrateHistory.getGroupNumber());
         return taskService.build(markArbitrateHistory, markGroup);
     }
@@ -184,6 +207,29 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
         this.remove(updateWrapper);
     }
 
+    @Override
+    public JSONObject getArbitrateStatus(Long examId, String paperNumber, Integer groupNumber) {
+        Long userId = ServletUtil.getRequestUserId();
+        QueryWrapper<MarkArbitrateHistory> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkArbitrateHistory::getExamId, examId)
+                .eq(MarkArbitrateHistory::getPaperNumber, paperNumber)
+                .eq(MarkArbitrateHistory::getGroupNumber, groupNumber);
+        List<MarkArbitrateHistory> markArbitrateHistoryList = this.list(queryWrapper);
+        JSONObject jsonObject = new JSONObject();
+        if (CollectionUtils.isEmpty(markArbitrateHistoryList)) {
+            jsonObject.put("valid", false);
+            return jsonObject;
+        }
+
+        long totalCount = markArbitrateHistoryList.stream().filter(m -> MarkArbitrateStatus.WAITING.equals(m.getStatus())).count();
+        long markedCount = markArbitrateHistoryList.stream().filter(m -> MarkArbitrateStatus.MARKED.equals(m.getStatus()) && userId.equals(m.getUpdateUserId())).count();
+
+        jsonObject.put("totalCount", totalCount);
+        jsonObject.put("markedCount", markedCount);
+        jsonObject.put("valid", (totalCount + markedCount) > 0);
+        return jsonObject;
+    }
+
     private void releaseTask(Long taskId) {
         synchronized (currentTaskMap) {
             currentTaskMap.remove(taskId);

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

@@ -288,6 +288,7 @@ public class MarkServiceImpl implements MarkService {
      * @param markResult
      * @param userId
      */
+    @Transactional
     @Override
     public void processArbitrate(MarkResult markResult, Long userId) {
         MarkArbitrateHistory markArbitrateHistory = markArbitrateHistoryService.getById(markResult.getTaskId());
@@ -304,9 +305,7 @@ public class MarkServiceImpl implements MarkService {
                     markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(),
                     markArbitrateHistory.getGroupNumber(), markArbitrateHistory.getStudentId());
             List<MarkHeaderTrack> tracks = markResult.getTrackList(markArbitrateHistory);
-            for (MarkHeaderTrack t : tracks) {
-                markHeaderTrackService.saveOrUpdate(t);
-            }
+            markHeaderTrackService.saveOrUpdateBatchByMultiId(tracks);
         }
         // 保存特殊标记
         if (markResult.getSpecialTagList() != null) {

+ 12 - 0
teachcloud-mark/src/main/resources/mapper/MarkArbitrateHistoryMapper.xml

@@ -41,5 +41,17 @@
                 AND group_number = #{groupNumber}
             </if>
     </select>
+    <select id="getArbitrateWaitingOne" resultType="com.qmth.teachcloud.mark.entity.MarkArbitrateHistory">
+        SELECT
+            *
+        FROM
+            mark_arbitrate_history
+        WHERE
+            exam_id = #{examId} AND paper_number = #{paperNumber}
+          AND group_number = #{groupNumber}
+          AND status = 'WAITING'
+            ORDER BY id
+            LIMIT 1
+    </select>
 
 </mapper>