浏览代码

3.3.0 评卷任务新增

xiaofei 1 年之前
父节点
当前提交
9c6ad86170

+ 1 - 1
distributed-print/install/mysql/upgrade/3.3.0.sql

@@ -30,7 +30,7 @@ INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('902', '结构查询', '/api/admin/mark/question/list', 'URL', '897', '1', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('903', '结构提交', '/api/admin/mark/question/save', 'URL', '897', '2', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('904', '评卷任务查询', '/api/admin/mark/group/list', 'URL', '897', '3', 'AUTH', '1', '1', '1');
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('905', '评卷任务提交', '/api/admin/mark/group/save', 'URL', '897', '4', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('905', '评卷任务新增', '/api/admin/mark/group/save', 'URL', '897', '4', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('906', '评卷任务修改', '/api/admin/mark/group/update', 'URL', '897', '5', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('907', '评卷任务删除', '/api/admin/mark/group/delete', 'URL', '897', '6', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('908', '分班阅查询', '/api/admin/mark/class/list', 'URL', '897', '7', 'AUTH', '1', '1', '1');

+ 4 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkGroupController.java

@@ -49,13 +49,13 @@ public class MarkGroupController {
     }
 
     /**
-     * 提交
+     * 新增
      */
-    @ApiOperation(value = "提交")
+    @ApiOperation(value = "新增")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.ADD)
-    public Result add(@RequestBody MarkGroupTaskDto markGroupTaskDto) {
-        markGroupService.saveGroupBatch(markGroupTaskDto);
+    public Result add(@RequestBody MarkGroupSingleDto markGroupSingleDto) {
+        markGroupService.saveGroup(markGroupSingleDto);
         return ResultUtil.ok(true);
     }
 

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

@@ -38,7 +38,7 @@ public interface MarkGroupService extends IService<MarkGroup> {
 
     void updateMarkedCount(Long examId, String paperNumber, Integer groupNumber, int count);
 
-    void saveGroupBatch(MarkGroupTaskDto markGroupTaskDto);
+    void saveGroup(MarkGroupSingleDto markGroupSingleDto);
 
     void updateGroup(MarkGroupSingleDto markGroupSingleDto);
 

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

@@ -42,4 +42,6 @@ public interface MarkQuestionService extends IService<MarkQuestion> {
     double sumTotalScoreByGroupNumber(Long examId, String paperNumber, Integer groupNumber);
 
     long countQuestionByExamIdAndPaperNumberAndGroupNumberIsNull(Long examId, String paperNumber, boolean isObjective);
+
+    MarkQuestion getByExamIdAndPaperNumberAndMainNumberAndSubNumberAndObjective(Long examId, String paperNumber, Integer mainNumber, Integer subNumber, boolean isObjective);
 }

+ 84 - 6
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -17,10 +17,7 @@ import com.qmth.teachcloud.mark.dto.mark.manage.MarkGroupTotalProgressDto;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupDto;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupSingleDto;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupTaskDto;
-import com.qmth.teachcloud.mark.entity.MarkGroup;
-import com.qmth.teachcloud.mark.entity.MarkPaper;
-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.mapper.MarkGroupMapper;
 import com.qmth.teachcloud.mark.service.*;
 import org.apache.commons.collections4.CollectionUtils;
@@ -241,7 +238,76 @@ public class MarkGroupServiceImpl extends ServiceImpl<MarkGroupMapper, MarkGroup
 
     @Transactional
     @Override
-    public void saveGroupBatch(MarkGroupTaskDto markGroupTaskDto) {
+    public void saveGroup(MarkGroupSingleDto markGroupSingleDto) {
+        Long examId = markGroupSingleDto.getExamId();
+        String paperNumber = markGroupSingleDto.getPaperNumber();
+        MarkGroupDto markGroupDto = markGroupSingleDto.getGroupInfo();
+        MarkGroup markGroup = this.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, markGroupDto.getGroupNumber());
+        if (markGroup != null) {
+            throw ExceptionResultEnum.ERROR.exception("数据已存在");
+        }
+        List<MarkQuestion> questions = markGroupDto.getQuestions();
+        // 分组
+        markGroup = new MarkGroup();
+        markGroup.setExamId(examId);
+        markGroup.setPaperNumber(paperNumber);
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+        markGroup.setCourseCode(markPaper.getCourseCode());
+        markGroup.setCourseName(markPaper.getCourseName());
+        markGroup.setNumber(markGroupDto.getGroupNumber());
+        markGroup.setPicList(JSON.toJSONString(markGroupDto.getPictureConfigs()));
+        Double totalScore = questions.stream().collect(Collectors.summingDouble(MarkQuestion::getTotalScore));
+        markGroup.setTotalScore(totalScore);
+        if (markGroupDto.getDoubleRate() != null || markGroupDto.getArbitrateThreshold() != null || markGroupDto.getScorePolicy() != null) {
+            if (markGroupDto.getDoubleRate() == null) {
+                throw ExceptionResultEnum.ERROR.exception("开启双评,双评比例必填");
+            }
+            if (markGroupDto.getArbitrateThreshold() == null) {
+                throw ExceptionResultEnum.ERROR.exception("开启双评, 仲裁阀值必填");
+            }
+            if (markGroupDto.getScorePolicy() == null) {
+                throw ExceptionResultEnum.ERROR.exception("开启双评, 合分规则必填");
+            }
+        }
+        markGroup.setDoubleRate(markGroupDto.getDoubleRate());
+        markGroup.setArbitrateThreshold(markGroupDto.getArbitrateThreshold());
+        markGroup.setScorePolicy(markGroupDto.getScorePolicy());
+        markGroup.setTaskCount(0);
+        markGroup.setMarkedCount(0);
+        markGroup.setLeftCount(0);
+        this.save(markGroup);
+
+        // 题目
+        for (MarkQuestion markQuestion : questions) {
+            MarkQuestion question = markQuestionService.getByExamIdAndPaperNumberAndMainNumberAndSubNumberAndObjective(examId, paperNumber, markQuestion.getMainNumber(), markQuestion.getSubNumber(), false);
+            if (question == null) {
+                throw ExceptionResultEnum.ERROR.exception("大题号[" + markQuestion.getMainNumber() + "],小题号[" + markQuestion.getSubNumber() + "]数据不存在");
+            } else if (question.getGroupNumber() != null) {
+                throw ExceptionResultEnum.ERROR.exception("大题号[" + markQuestion.getMainNumber() + "],小题号[" + markQuestion.getSubNumber() + "]存在评阅题目");
+            }
+            question.setGroupNumber(markGroupDto.getGroupNumber());
+            markQuestionService.updateById(question);
+        }
+
+        // 评卷员
+        List<MarkUser> markers = markGroupDto.getMarkers();
+        if (CollectionUtils.isEmpty(markers)) {
+            throw ExceptionResultEnum.ERROR.exception("请选择评卷员");
+        }
+        List<MarkUserGroup> markUserGroupList = markUserGroupService.listByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, markGroupDto.getGroupNumber());
+        if (CollectionUtils.isNotEmpty(markUserGroupList)) {
+            List<Long> userIds = markUserGroupList.stream().map(MarkUserGroup::getUserId).collect(Collectors.toList());
+            List<MarkUserGroup> markUserGroups = new ArrayList<>();
+            for (MarkUser marker : markGroupDto.getMarkers()) {
+                if (userIds.contains(marker.getUserId())) {
+                    continue;
+                }
+                markUserGroups.add(new MarkUserGroup(examId, paperNumber, markGroupDto.getGroupNumber(), marker.getUserId(), markPaper.getMarkMode()));
+            }
+            if (CollectionUtils.isNotEmpty(markUserGroups)) {
+                markUserGroupService.saveBatch(markUserGroups);
+            }
+        }
 
     }
 
@@ -255,7 +321,19 @@ public class MarkGroupServiceImpl extends ServiceImpl<MarkGroupMapper, MarkGroup
         if (markGroup == null) {
             throw ExceptionResultEnum.ERROR.exception("数据不存在");
         }
-
+        if (markGroupDto.getDoubleRate() != null || markGroupDto.getArbitrateThreshold() != null || markGroupDto.getScorePolicy() != null) {
+            if (markGroupDto.getDoubleRate() == null) {
+                throw ExceptionResultEnum.ERROR.exception("开启双评,双评比例必填");
+            } else if (markGroupDto.getDoubleRate() < markGroup.getDoubleRate()) {
+                throw ExceptionResultEnum.ERROR.exception("双评比例不能小于原值");
+            }
+            if (markGroupDto.getArbitrateThreshold() == null) {
+                throw ExceptionResultEnum.ERROR.exception("开启双评,仲裁阀值必填");
+            }
+            if (markGroupDto.getScorePolicy() == null) {
+                throw ExceptionResultEnum.ERROR.exception("开启双评,合分规则必填");
+            }
+        }
         markGroup.setDoubleRate(markGroupDto.getDoubleRate());
         markGroup.setScorePolicy(markGroupDto.getScorePolicy());
         markGroup.setArbitrateThreshold(markGroupDto.getArbitrateThreshold());

+ 11 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkQuestionServiceImpl.java

@@ -194,4 +194,15 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
                 .isNull(MarkQuestion::getGroupNumber);
         return this.count(queryWrapper);
     }
+
+    @Override
+    public MarkQuestion getByExamIdAndPaperNumberAndMainNumberAndSubNumberAndObjective(Long examId, String paperNumber, Integer mainNumber, Integer subNumber, boolean isObjective) {
+        QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkQuestion::getExamId, examId)
+                .eq(MarkQuestion::getPaperNumber, paperNumber)
+                .eq(MarkQuestion::getMainNumber, mainNumber)
+                .eq(MarkQuestion::getSubNumber, subNumber)
+                .eq(MarkQuestion::getObjective, isObjective);
+        return this.getOne(queryWrapper);
+    }
 }