Quellcode durchsuchen

3.4.4 update-20250304,联调bug修复2

xiaofei vor 3 Monaten
Ursprung
Commit
65beac6cfd
22 geänderte Dateien mit 174 neuen und 72 gelöschten Zeilen
  1. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskAssignPaperTypeService.java
  2. 22 22
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskAssignPaperTypeServiceImpl.java
  3. 25 18
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java
  4. 3 0
      distributed-print/install/mysql/upgrade/3.4.4.sql
  5. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicPrintConfigController.java
  6. 9 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/mark/MarkUser.java
  7. 13 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicPrintConfig.java
  8. 13 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/Task.java
  9. 5 5
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/TrackDTO.java
  10. 2 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java
  11. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkTaskMapper.java
  12. 2 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkStudentService.java
  13. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkTaskService.java
  14. 2 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkQuestionServiceImpl.java
  15. 11 6
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  16. 5 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  17. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java
  18. 3 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserQuestionServiceImpl.java
  19. 22 9
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/TaskServiceImpl.java
  20. 22 0
      teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml
  21. 6 2
      teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml
  22. 2 1
      teachcloud-mark/src/main/resources/mapper/MarkUserQuestionMapper.xml

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskAssignPaperTypeService.java

@@ -17,5 +17,5 @@ import com.qmth.distributed.print.business.entity.TBTaskPdf;
  */
 public interface ExamTaskAssignPaperTypeService extends IMppService<ExamTaskAssignPaperType> {
 
-    ExamTaskAssignPaperType extractPaperType(TBTaskPdf tbTaskPdf, ExamDetailCourse examDetailCourse);
+//    ExamTaskAssignPaperType extractPaperType(TBTaskPdf tbTaskPdf, ExamDetailCourse examDetailCourse);
 }

+ 22 - 22
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskAssignPaperTypeServiceImpl.java

@@ -29,26 +29,26 @@ public class ExamTaskAssignPaperTypeServiceImpl extends MppServiceImpl<ExamTaskA
     @Resource
     CreatePdfUtil createPdfUtil;
 
-    @Lockable(name = "#p0.examId + '-' + #p1.paperNumber")
-    @Override
-    public ExamTaskAssignPaperType extractPaperType(TBTaskPdf tbTaskPdf, ExamDetailCourse examDetailCourse) {
-        ExamDetail examDetail = examDetailService.getById(tbTaskPdf.getId());
-        if (examDetail.getExamStartTime() == null) {
-            examDetail.setExamStartTime(-1L);
-        }
-        if (examDetail.getExamEndTime() == null) {
-            examDetail.setExamEndTime(-1L);
-        }
-        ExamTaskAssignPaperType examTaskAssignPaperType = this.selectByMultiId(new ExamTaskAssignPaperType(tbTaskPdf.getExamId(), examDetailCourse.getPaperNumber(), examDetail.getExamStartTime(), examDetail.getExamEndTime()));
-        if (examTaskAssignPaperType == null) {
-            try {
-                ExamTaskDetail paperType = createPdfUtil.getPaperType(examDetail.getPrintPlanId(), examDetail.getExamId(), examDetailCourse.getPaperNumber());
-                examTaskAssignPaperType = new ExamTaskAssignPaperType(tbTaskPdf.getExamId(), examDetailCourse.getPaperNumber(), examDetail.getExamStartTime(), examDetail.getExamEndTime(), paperType.getSerialNumber().toString(), AssignModeEnum.AUTO);
-                this.saveOrUpdateByMultiId(examTaskAssignPaperType);
-            } catch (Exception e) {
-                throw ExceptionResultEnum.ERROR.exception(e.getMessage());
-            }
-        }
-        return examTaskAssignPaperType;
-    }
+//    @Lockable(name = "#p0.examId + '-' + #p1.paperNumber")
+//    @Override
+//    public ExamTaskAssignPaperType extractPaperType(TBTaskPdf tbTaskPdf, ExamDetailCourse examDetailCourse) {
+//        ExamDetail examDetail = examDetailService.getById(tbTaskPdf.getId());
+//        if (examDetail.getExamStartTime() == null) {
+//            examDetail.setExamStartTime(-1L);
+//        }
+//        if (examDetail.getExamEndTime() == null) {
+//            examDetail.setExamEndTime(-1L);
+//        }
+//        ExamTaskAssignPaperType examTaskAssignPaperType = this.selectByMultiId(new ExamTaskAssignPaperType(tbTaskPdf.getExamId(), examDetailCourse.getPaperNumber(), examDetail.getExamStartTime(), examDetail.getExamEndTime()));
+//        if (examTaskAssignPaperType == null) {
+//            try {
+//                ExamTaskDetail paperType = createPdfUtil.getPaperType(examDetail.getPrintPlanId(), examDetail.getExamId(), examDetailCourse.getPaperNumber());
+//                examTaskAssignPaperType = new ExamTaskAssignPaperType(tbTaskPdf.getExamId(), examDetailCourse.getPaperNumber(), examDetail.getExamStartTime(), examDetail.getExamEndTime(), paperType.getSerialNumber().toString(), AssignModeEnum.AUTO);
+//                this.saveOrUpdateByMultiId(examTaskAssignPaperType);
+//            } catch (Exception e) {
+//                throw ExceptionResultEnum.ERROR.exception(e.getMessage());
+//            }
+//        }
+//        return examTaskAssignPaperType;
+//    }
 }

+ 25 - 18
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java

@@ -12,7 +12,6 @@ import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.pdf.ExamStudentInfo;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
-import com.qmth.teachcloud.common.enums.ExamNumberStyleEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.RequiredFieldsEnum;
 import com.qmth.distributed.print.business.service.*;
@@ -33,6 +32,7 @@ import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
 import com.qmth.teachcloud.common.service.FileUploadService;
 import com.qmth.teachcloud.common.util.FileUtil;
+import io.swagger.models.auth.In;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -74,8 +74,6 @@ public class CreatePdfUtil {
     @Resource
     private BasicSemesterService basicSemesterService;
     @Resource
-    private ExamTaskService examTaskService;
-    @Resource
     private ExamTaskDetailService examTaskDetailService;
     @Resource
     private ExamPrintPlanService examPrintPlanService;
@@ -590,7 +588,7 @@ public class CreatePdfUtil {
 //                            value = examDetail.getExamRoom();
 //                        }
                         // 江西中医药大学题卡回填字段clazzName单独处理
-                        if(RequiredFieldsEnum.CLASS_NAME.getCode().equals(extendDto.getCode())) {
+                        if (RequiredFieldsEnum.CLASS_NAME.getCode().equals(extendDto.getCode())) {
                             studentHtml = studentHtml.replaceAll("\\$\\{clazzName\\}", value);
                         }
                         studentHtml = studentHtml.replaceAll("\\$\\{" + extendDto.getCode() + "\\}", value);
@@ -718,29 +716,37 @@ public class CreatePdfUtil {
         return htmlContent;
     }
 
-    public ExamTaskDetail getPaperType(Long printPlanId, Long examId, String paperNumber) {
+    public ExamTaskDetail getPaperType(Long printPlanId, Long examId, String paperNumber, Integer defaultSerialNumber) {
         ExamPrintPlan examPrintPlan = examPrintPlanService.getById(printPlanId);
         //抽取卷型
         DrawRuleEnum drawRule = Objects.nonNull(examPrintPlan.getDrawRule()) ? examPrintPlan.getDrawRule() : DrawRuleEnum.ONE;
         List<ExamTaskDetail> examTaskDetailList = examTaskDetailService.listByExamIdAndPaperNumber(examId, paperNumber);
 
         try {
-            // 未曝光备用卷
-            List<ExamTaskDetail> unexposedExamTaskDetailList = examTaskDetailList.stream().filter(m -> !m.getExposed()).collect(Collectors.toList());
-            if (drawRule == DrawRuleEnum.ONE) {
-                if (CollectionUtils.isEmpty(unexposedExamTaskDetailList)) {
-                    throw ExceptionResultEnum.PAPER_ERROR.exception();
+            if (defaultSerialNumber == 0) {
+                // 未曝光备用卷
+                List<ExamTaskDetail> unexposedExamTaskDetailList = examTaskDetailList.stream().filter(m -> !m.getExposed()).collect(Collectors.toList());
+                if (drawRule == DrawRuleEnum.ONE) {
+                    if (CollectionUtils.isEmpty(unexposedExamTaskDetailList)) {
+                        throw ExceptionResultEnum.PAPER_ERROR.exception();
+                    }
+                    return randomPaperType(unexposedExamTaskDetailList);
+                } else {
+                    if (CollectionUtils.isEmpty(examTaskDetailList)) {
+                        throw ExceptionResultEnum.PAPER_ERROR.exception();
+                    }
+                    if (CollectionUtils.isNotEmpty(unexposedExamTaskDetailList)) {
+                        return randomPaperType(unexposedExamTaskDetailList);
+                    } else {
+                        return randomPaperType(examTaskDetailList);
+                    }
                 }
-                return randomPaperType(unexposedExamTaskDetailList);
             } else {
-                if (CollectionUtils.isEmpty(examTaskDetailList)) {
+                ExamTaskDetail examTaskDetail = examTaskDetailList.stream().filter(m -> m.getSerialNumber().equals(defaultSerialNumber)).findFirst().orElse(null);
+                if (examTaskDetail == null) {
                     throw ExceptionResultEnum.PAPER_ERROR.exception();
                 }
-                if (CollectionUtils.isNotEmpty(unexposedExamTaskDetailList)) {
-                    return randomPaperType(unexposedExamTaskDetailList);
-                } else {
-                    return randomPaperType(examTaskDetailList);
-                }
+                return examTaskDetail;
             }
         } catch (Exception e) {
             throw ExceptionResultEnum.ERROR.exception(e.getMessage());
@@ -758,8 +764,9 @@ public class CreatePdfUtil {
             }
             return examTaskDetail;
         } else {
+            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(tbTaskPdf.getExamId());
             ExamDetail examDetail = examDetailService.getById(tbTaskPdf.getId());
-            ExamTaskDetail examTaskDetail = this.getPaperType(examDetail.getPrintPlanId(), examDetail.getExamId(), examDetailCourse.getPaperNumber());
+            ExamTaskDetail examTaskDetail = this.getPaperType(examDetail.getPrintPlanId(), examDetail.getExamId(), examDetailCourse.getPaperNumber(), basicPrintConfig.getDefaultSerialNumber());
             // 更新绑定的考试ID
             examTaskDetailService.updateExposedExamIdById(tbTaskPdf.getExamId(), examTaskDetail.getId());
             return examTaskDetail;

+ 3 - 0
distributed-print/install/mysql/upgrade/3.4.4.sql

@@ -148,3 +148,6 @@ VALUES(1194, '课程任课老师导入', 'AssginCourseUserImport', 'BUTTON', 576
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1013', '新增考生', '/api/scan/student/save', 'URL', '970', '44', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1014', '复制卡格式', '/api/scan/answer/card/copy', 'URL', '970', '45', 'AUTH', '1', '1', '1');
 UPDATE `sys_privilege` SET `related` = '971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1007,1009,1010,1013,1014,1148,3072,3073,3074,3075' WHERE (`id` = '970');
+
+-- 2025-03-04
+ALTER TABLE `basic_print_config` ADD COLUMN `default_serial_number` INT(2) NULL DEFAULT 0 COMMENT '默认抽取卷型(0-随机,1-卷1,2-卷2)' AFTER `draw_rule`;

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicPrintConfigController.java

@@ -21,13 +21,13 @@ import javax.validation.constraints.Min;
 
 /**
  * <p>
- * 印品配置 前端控制器
+ * 考试配置 前端控制器
  * </p>
  *
  * @author xf
  * @since 2022-02-10
  */
-@Api(tags = "印品管理Controller")
+@Api(tags = "考试配置管理Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_BASIC + "/print_config")
 @Validated

+ 9 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/mark/MarkUser.java

@@ -12,6 +12,7 @@ public class MarkUser {
     private String loginName;
     private String name;
     private String orgName;
+    private Boolean enable;
 
     public Long getMarkUserQuestionId() {
         return markUserQuestionId;
@@ -52,4 +53,12 @@ public class MarkUser {
     public void setOrgName(String orgName) {
         this.orgName = orgName;
     }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
 }

+ 13 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicPrintConfig.java

@@ -104,6 +104,11 @@ public class BasicPrintConfig extends BaseEntity implements Serializable {
      */
     @TableField("draw_rule")
     private DrawRuleEnum drawRule;
+    /**
+     * 默认抽取卷型(0-随机,1-卷1,2-卷2)
+     */
+    @TableField("default_serial_number")
+    private Integer defaultSerialNumber;
 
     /**
      * 变量印品参数json
@@ -230,6 +235,14 @@ public class BasicPrintConfig extends BaseEntity implements Serializable {
         this.drawRule = drawRule;
     }
 
+    public Integer getDefaultSerialNumber() {
+        return defaultSerialNumber;
+    }
+
+    public void setDefaultSerialNumber(Integer defaultSerialNumber) {
+        this.defaultSerialNumber = defaultSerialNumber;
+    }
+
     public String getVariableContent() {
         return variableContent;
     }

+ 13 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/Task.java

@@ -61,6 +61,11 @@ public class Task implements Serializable {
      */
     private String jsonUrl;
 
+    /**
+     * 评卷题目总分
+     */
+    private Double markerScore;
+
     /**
      * 给分步骤
      */
@@ -170,6 +175,14 @@ public class Task implements Serializable {
         this.jsonUrl = jsonUrl;
     }
 
+    public Double getMarkerScore() {
+        return markerScore;
+    }
+
+    public void setMarkerScore(Double markerScore) {
+        this.markerScore = markerScore;
+    }
+
     public List<TaskQuestion> getQuestionList() {
         return questionList;
     }

+ 5 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/TrackDTO.java

@@ -19,7 +19,7 @@ public class TrackDTO implements Serializable {
 
     private Integer mainNumber;
 
-    private String subNumber;
+    private Integer subNumber;
 
     private int number;
 
@@ -48,7 +48,7 @@ public class TrackDTO implements Serializable {
         String questionNumber = track.getQuestionNumber();
         String str[] = questionNumber.split("\\.");
         setMainNumber(Integer.parseInt(str[0]));
-        setSubNumber(str[1]);
+        setSubNumber(Integer.valueOf(str[1]));
         setNumber(track.getNumber());
         setScore(track.getScore());
         setPositionX(track.getPositionX());
@@ -62,7 +62,7 @@ public class TrackDTO implements Serializable {
         String questionNumber = track.getQuestionNumber();
         String str[] = questionNumber.split("\\.");
         setMainNumber(Integer.parseInt(str[0]));
-        setSubNumber(str[1]);
+        setSubNumber(Integer.valueOf(str[1]));
         setNumber(track.getNumber());
         setScore(track.getScore());
         setPositionX(track.getPositionX());
@@ -136,11 +136,11 @@ public class TrackDTO implements Serializable {
         this.mainNumber = mainNumber;
     }
 
-    public String getSubNumber() {
+    public Integer getSubNumber() {
         return subNumber;
     }
 
-    public void setSubNumber(String subNumber) {
+    public void setSubNumber(Integer subNumber) {
         this.subNumber = subNumber;
     }
 

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

@@ -140,4 +140,6 @@ public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
      * @return 是否开启
      */
     AbInfoVo findExamTaskPaperTypeOpenStatus(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
+
+    List<Long> findUnMarked(@Param("page") Page<Long> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("userId") Long userId, @Param("classMark") Boolean classMark);
 }

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkTaskMapper.java

@@ -50,5 +50,5 @@ public interface MarkTaskMapper extends BaseMapper<MarkTask> {
 
     Long minQuestionIdByExamIdAndPaperNumber(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("statusList") MarkTaskStatus[] statusList);
 
-    List<MarkTask> listByStudentIdAndUserId(@Param("studentId") Long studentId, @Param("userId") Long userId);
+    List<MarkTask> listByStudentIdAndUserId(@Param("studentId") Long studentId, @Param("userId") Long userId, @Param("questionId") Long questionId);
 }

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

@@ -265,4 +265,6 @@ public interface MarkStudentService extends IService<MarkStudent> {
     UpdateTimeVo breachUpdate(Long studentId, Boolean breach);
 
     boolean add(Long examId, String coursePaperId, String studentCode, String studentName, String paperType, Long basicStudentId);
+
+    List<Long> findUnMarked(Page<Long> page, Long examId, String paperNumber, Long userId, Boolean classMark);
 }

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

@@ -95,7 +95,7 @@ public interface MarkTaskService extends IService<MarkTask> {
 
     Long minQuestionIdByExamIdAndPaperNumber(Long examId, String paperNumber, MarkTaskStatus...statuses);
 
-    List<MarkTask> listByStudentIdAndUserId(Long studentId, Long userId);
+    List<MarkTask> listByStudentIdAndUserId(Long studentId, Long userId, Long questionId);
 
     List<MarkTask> listByStudentIdAndMarkerId(Long studentId, Long markerId);
 }

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

@@ -589,7 +589,8 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
                 m.setPictureConfigs(JSON.parseArray(m.getPicList(), PictureConfig.class));
             }
             // 评卷员
-            m.setMarkers(markUserQuestionService.listGroupUserByExamIdAndPaperNumberAndQuestionIdAndClassName(examId, paperNumber, m.getId(), null));
+            List<MarkUser> markUserList = markUserQuestionService.listGroupUserByExamIdAndPaperNumberAndQuestionIdAndClassName(examId, paperNumber, m.getId(), null);
+            m.setMarkers(markUserList.stream().filter(MarkUser::getEnable).collect(Collectors.toList()));
         }
         markGroupTaskDto.setQuestions(markQuestionList);
         // 分班阅参数

+ 11 - 6
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -814,17 +814,22 @@ public class MarkServiceImpl implements MarkService {
         List<Long> studentIds;
         int pageNumber = 1;
         while (task == null) {
-            if (markPaper.getClassMark()) {
-                studentIds = markTaskService.findUnMarkedFilterClass(new Page<>(pageNumber, 20), examId, paperNumber, userId, questionModel);
-            } else {
-                studentIds = markTaskService.findUnMarked(new Page<>(pageNumber, 20), examId, paperNumber, userId, questionModel);
-            }
+//            if (markPaper.getClassMark()) {
+//                studentIds = markTaskService.findUnMarkedFilterClass(new Page<>(pageNumber, 20), examId, paperNumber, userId, questionModel);
+//            } else {
+//                studentIds = markTaskService.findUnMarked(new Page<>(pageNumber, 20), examId, paperNumber, userId, questionModel);
+//            }
+            studentIds = markStudentService.findUnMarked(new Page<>(pageNumber, 20), examId, paperNumber, userId, markPaper.getClassMark());
             if (studentIds.isEmpty()) {
                 break;
             }
             for (Long studentId : studentIds) {
                 if (this.applyTask(examId, paperNumber, studentId, 1, userId)) {
-                    List<MarkTask> markTaskList = markTaskService.listByStudentIdAndUserId(studentId, userId);
+                    Long questionId = null;
+                    if (questionModel.equals(QuestionModel.SINGLE)) {
+                        questionId = markTaskService.minQuestionIdByExamIdAndPaperNumber(examId, paperNumber, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED);
+                    }
+                    List<MarkTask> markTaskList = markTaskService.listByStudentIdAndUserId(studentId, userId, questionId);
                     task = taskService.build(userId, markTaskList);
                 }
             }

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

@@ -2444,5 +2444,10 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         return this.saveOrUpdate(markStudent);
     }
 
+    @Override
+    public List<Long> findUnMarked(Page<Long> page, Long examId, String paperNumber, Long userId, Boolean classMark) {
+        return this.baseMapper.findUnMarked(page, examId, paperNumber, userId, classMark);
+    }
+
 
 }

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

@@ -420,8 +420,8 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     }
 
     @Override
-    public List<MarkTask> listByStudentIdAndUserId(Long studentId, Long userId) {
-        return baseMapper.listByStudentIdAndUserId(studentId, userId);
+    public List<MarkTask> listByStudentIdAndUserId(Long studentId, Long userId, Long questionId) {
+        return baseMapper.listByStudentIdAndUserId(studentId, userId, questionId);
     }
 
     @Override

+ 3 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserQuestionServiceImpl.java

@@ -195,7 +195,9 @@ public class MarkUserQuestionServiceImpl extends ServiceImpl<MarkUserQuestionMap
         // 逻辑解绑
         List<Long> ids = listMergeQuestionId(markUserQuestion.getExamId(), markUserQuestion.getPaperNumber(), markUserQuestion.getQuestionId());
         UpdateWrapper<MarkUserQuestion> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(MarkUserQuestion::getEnable, false).in(MarkUserQuestion::getId, ids);
+        updateWrapper.lambda().set(MarkUserQuestion::getEnable, false)
+                .eq(MarkUserQuestion::getUserId, markUserQuestion.getUserId())
+                .in(MarkUserQuestion::getQuestionId, ids);
         this.update(updateWrapper);
     }
 

+ 22 - 9
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/TaskServiceImpl.java

@@ -16,11 +16,13 @@ import com.qmth.teachcloud.mark.dto.mark.manage.*;
 import com.qmth.teachcloud.mark.entity.*;
 import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
 import com.qmth.teachcloud.mark.service.*;
+import com.qmth.teachcloud.mark.utils.BigDecimalUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.*;
 
 @Service
@@ -78,18 +80,25 @@ public class TaskServiceImpl implements TaskService {
             // 原图
             task.setSheetUrls(teachcloudCommonService.fileMarkPreview(markStudent.getSheetPathList()));
 
-            if (!markStudent.getSubjectiveStatus().equals(SubjectiveStatus.UNMARK)) {
-                List<MarkTask> markTaskList = markTaskService.listByStudentIdAndMarkerId(studentId, user.getId());
-                task.setQuestionList(buildQuestionList(user.getId(), markTaskList));
-            }
-            if (StringUtils.isNotBlank(markStudent.getObjectiveScoreList())) {
-                task.setObjectiveScore(markStudent.getObjectiveScore());
-            }
+            List<MarkTask> markTaskList = markTaskService.listByStudentIdAndMarkerId(studentId, user.getId());
+            task.setSliceConfig(buildPic(markTaskList));
+            task.setQuestionList(buildQuestionList(user.getId(), markTaskList));
+            task.setMarkerScore(calcScore(markTaskList));
+            MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markStudent.getExamId(), markStudent.getPaperNumber());
+            task.setObjectiveScore(markPaper.getShowObjectScore() ? markStudent.getObjectiveScore() : null);
             return task;
         }
         return task;
     }
 
+    private Double calcScore(List<MarkTask> markTaskList) {
+        Double total = 0d;
+        for (MarkTask markTask : markTaskList) {
+            total = BigDecimalUtils.add(total, markTask.getMarkerScore());
+        }
+        return total;
+    }
+
     /*private List<MarkStepDTO> buildMarkStep(MarkStudent markStudent) {
         Long examId = markStudent.getExamId();
         String paperNumber = markStudent.getPaperNumber();
@@ -246,11 +255,15 @@ public class TaskServiceImpl implements TaskService {
 
     private List<MarkConfigItem> buildPic(List<MarkTask> markTaskList) {
         List<MarkConfigItem> markConfigItems = new ArrayList<>();
+        Integer mainNumber = null;
         for (MarkTask t : markTaskList) {
             MarkQuestion markQuestion = markQuestionService.getById(t.getQuestionId());
             if (markQuestion.getQuestionType() == 4) {
-                markConfigItems.addAll(markQuestion.getPictureConfigList());
-                break;
+                // 填空题,只显示一次
+                if (mainNumber == null || !markQuestion.getMainNumber().equals(mainNumber)) {
+                    markConfigItems.addAll(markQuestion.getPictureConfigList());
+                }
+                mainNumber = markQuestion.getMainNumber();
             } else {
                 markConfigItems.addAll(markQuestion.getPictureConfigList());
             }

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

@@ -1040,4 +1040,26 @@
             </if>
         </where>
     </select>
+    <select id="findUnMarked" resultType="java.lang.Long">
+        SELECT m.id
+        FROM mark_student m
+        <where>
+         m.exam_id = #{examId}
+          AND m.paper_number = #{paperNumber}
+          AND m.subjective_status = 'UNMARK'
+          AND EXISTS(SELECT 1
+                     FROM mark_task mt
+                     WHERE m.id = mt.student_id)
+        <if test="classMark == true">
+            AND EXISTS (
+            SELECT 1
+            FROM
+            (select * from mark_user_class where exam_id = #{examId} and paper_number = #{paperNumber} and user_id = #{userId}) mc
+            join
+            (select ms.id, bes.teach_class_name from (select * from mark_student where exam_id = #{examId} and paper_number = #{paperNumber}) ms join (select id,teach_class_name from basic_exam_student where exam_id = #{examId}) bes on ms.basic_student_id = bes.id) s on mc.class_name = s.teach_class_name
+            WHERE m.id = s.id
+            )
+        </if>
+        </where>
+    </select>
 </mapper>

+ 6 - 2
teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

@@ -258,7 +258,7 @@
             mt.exam_id = #{examId}
             AND mt.paper_number = #{paperNumber}
         <if test="questionId != null">
-            AND mt.questionId = #{questionId}
+            AND mt.question_id = #{questionId}
         </if>
         <if test="userId != null">
             AND mt.user_id = #{userId}
@@ -387,8 +387,11 @@
             mt.*
         FROM
             mark_task mt
-        WHERE
+        <where>
             mt.student_id = #{studentId}
+            <if test="questionId != null">
+                and mt.question_id = #{questionId}
+            </if>
           AND EXISTS( SELECT
                           1
                       FROM
@@ -398,5 +401,6 @@
                         AND mt.paper_Number = muq.paper_number
                         AND mt.question_id = muq.question_id
                         AND muq.user_id = #{userId})
+        </where>
     </select>
 </mapper>

+ 2 - 1
teachcloud-mark/src/main/resources/mapper/MarkUserQuestionMapper.xml

@@ -70,7 +70,8 @@
             su.id userId,
             su.login_name loginName,
             su.real_name name,
-            so.name orgName
+            so.name orgName,
+            mug.enable
         FROM
             mark_user_question mug
                 LEFT JOIN