xiaofei 1 gadu atpakaļ
vecāks
revīzija
b539bd8e3d
60 mainītis faili ar 455 papildinājumiem un 316 dzēšanām
  1. 13 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/PrintTaskDto.java
  2. 38 20
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/SingleExamStudentAddParam.java
  3. 10 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/ExaminationDetailResult.java
  4. 10 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamStudent.java
  5. 10 10
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/BackupMethodEnum.java
  6. 7 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/CardTypeEnum.java
  7. 3 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/EnumType.java
  8. 7 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamDetailStatusEnum.java
  9. 8 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamNumberStyleEnum.java
  10. 7 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamStatusEnum.java
  11. 7 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/MakeMethodEnum.java
  12. 7 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/PaperTypeEnum.java
  13. 7 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/PrintPlanStatusEnum.java
  14. 7 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ReviewStatusEnum.java
  15. 4 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailCourseService.java
  16. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  17. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamStudentService.java
  18. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTemplateServiceImpl.java
  19. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientServiceImpl.java
  20. 100 77
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  21. 8 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  22. 9 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamStudentServiceImpl.java
  23. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  24. 3 1
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  25. 7 3
      distributed-print/install/mysql/upgrade/3.3.0.sql
  26. 10 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/EnumsController.java
  27. 14 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java
  28. 2 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkArbitrateController.java
  29. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkQualityController.java
  30. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/auth/DistributedPrintAuthenticationService.java
  31. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/RolePrivilegeResult.java
  32. 8 8
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ClassifyEnum.java
  33. 8 8
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/DrawRuleEnum.java
  34. 7 8
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PrintMethodEnum.java
  35. 8 9
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PrivilegeEnum.java
  36. 2 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PushTypeEnum.java
  37. 8 9
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/RoleTypeEnum.java
  38. 2 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/TaskStatusEnum.java
  39. 2 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/log/CustomizedOperationTypeEnum.java
  40. 16 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/mark/MarkArbitrateStatus.java
  41. 3 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/mark/MarkProblemType.java
  42. 6 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java
  43. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/AuthUtil.java
  44. 9 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/StudentScoreDetailDto.java
  45. 1 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkArbitrateHistoryMapper.java
  46. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkUserGroupMapper.java
  47. 3 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkArbitrateHistoryService.java
  48. 0 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkTaskService.java
  49. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkUserGroupService.java
  50. 12 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkArbitrateHistoryServiceImpl.java
  51. 11 14
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java
  52. 4 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  53. 3 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  54. 0 9
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java
  55. 4 4
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserGroupServiceImpl.java
  56. 4 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/TaskServiceImpl.java
  57. 3 0
      teachcloud-mark/src/main/resources/mapper/MarkArbitrateHistoryMapper.xml
  58. 2 1
      teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml
  59. 15 14
      teachcloud-mark/src/main/resources/mapper/MarkUserGroupMapper.xml
  60. 3 3
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

+ 13 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/PrintTaskDto.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.bean.dto;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 /**
@@ -23,7 +24,8 @@ public class PrintTaskDto {
     private Integer cardPages;
     private Integer pagesA4;
     private Integer totalSubjects;
-    private String status;
+    private ExamDetailStatusEnum status;
+    private String statusDisplay;
     private Boolean validate;
     private Long printStartTime;
     private Long printEndTime;
@@ -168,14 +170,22 @@ public class PrintTaskDto {
         this.totalSubjects = totalSubjects;
     }
 
-    public String getStatus() {
+    public ExamDetailStatusEnum getStatus() {
         return status;
     }
 
-    public void setStatus(String status) {
+    public void setStatus(ExamDetailStatusEnum status) {
         this.status = status;
     }
 
+    public String getStatusDisplay() {
+        return statusDisplay;
+    }
+
+    public void setStatusDisplay(String statusDisplay) {
+        this.statusDisplay = statusDisplay;
+    }
+
     public Boolean getValidate() {
         return validate;
     }

+ 38 - 20
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/SingleExamStudentAddParam.java

@@ -11,40 +11,58 @@ import java.util.List;
  */
 public class SingleExamStudentAddParam extends BasePage {
 
-    private Long examId;
-    private ExamDetailCourse examDetailCourse;
-    private List<CodeNameEnableValue> requiredFields;
-    private List<CodeNameEnableValue> extendFields;
+    private Long examDetailCourseId;
+    private String paperType;
+    private String studentCode;
+    private String studentName;
+    private String college;
+    private String className;
 
-    public Long getExamId() {
-        return examId;
+    public Long getExamDetailCourseId() {
+        return examDetailCourseId;
     }
 
-    public void setExamId(Long examId) {
-        this.examId = examId;
+    public void setExamDetailCourseId(Long examDetailCourseId) {
+        this.examDetailCourseId = examDetailCourseId;
     }
 
-    public ExamDetailCourse getExamDetailCourse() {
-        return examDetailCourse;
+    public String getPaperType() {
+        return paperType;
     }
 
-    public void setExamDetailCourse(ExamDetailCourse examDetailCourse) {
-        this.examDetailCourse = examDetailCourse;
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
     }
 
-    public List<CodeNameEnableValue> getRequiredFields() {
-        return requiredFields;
+    public String getStudentCode() {
+        return studentCode;
     }
 
-    public void setRequiredFields(List<CodeNameEnableValue> requiredFields) {
-        this.requiredFields = requiredFields;
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
     }
 
-    public List<CodeNameEnableValue> getExtendFields() {
-        return extendFields;
+    public String getStudentName() {
+        return studentName;
     }
 
-    public void setExtendFields(List<CodeNameEnableValue> extendFields) {
-        this.extendFields = extendFields;
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getCollege() {
+        return college;
+    }
+
+    public void setCollege(String college) {
+        this.college = college;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
     }
 }

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/ExaminationDetailResult.java

@@ -76,6 +76,8 @@ public class ExaminationDetailResult {
     @ApiModelProperty(value = "创建时间")
     private Long createTime;
 
+    private Boolean canDelete;
+
     public Long getId() {
         return id;
     }
@@ -235,4 +237,12 @@ public class ExaminationDetailResult {
     public void setCreateTime(Long createTime) {
         this.createTime = createTime;
     }
+
+    public Boolean getCanDelete() {
+        return canDelete;
+    }
+
+    public void setCanDelete(Boolean canDelete) {
+        this.canDelete = canDelete;
+    }
 }

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamStudent.java

@@ -106,6 +106,9 @@ public class ExamStudent extends BaseEntity implements Serializable {
     @TableField(value = "attachment_id")
     private Long attachmentId;
 
+    @TableField(value = "can_delete")
+    private Boolean canDelete;
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -298,4 +301,11 @@ public class ExamStudent extends BaseEntity implements Serializable {
         this.attachmentId = attachmentId;
     }
 
+    public Boolean getCanDelete() {
+        return canDelete;
+    }
+
+    public void setCanDelete(Boolean canDelete) {
+        this.canDelete = canDelete;
+    }
 }

+ 10 - 10
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/BackupMethodEnum.java

@@ -8,6 +8,7 @@ import java.util.Objects;
 
 /**
  * 试卷备份方式
+ *
  * @Date: 2021/3/23.
  */
 public enum BackupMethodEnum {
@@ -15,14 +16,14 @@ public enum BackupMethodEnum {
     PLACE("按考点"),
     ROOM("按考场");
 
-    BackupMethodEnum(String desc) {
-        this.desc = desc;
+    BackupMethodEnum(String name) {
+        this.name = name;
     }
 
-    private String desc;
+    private String name;
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -32,10 +33,9 @@ public enum BackupMethodEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (BackupMethodEnum value : BackupMethodEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;
@@ -43,7 +43,7 @@ public enum BackupMethodEnum {
 
     public static String convertToName(String desc) {
         for (BackupMethodEnum e : BackupMethodEnum.values()) {
-            if (Objects.equals(desc, e.getDesc())) {
+            if (Objects.equals(desc, e.getName())) {
                 return e.name();
             }
         }
@@ -52,7 +52,7 @@ public enum BackupMethodEnum {
 
     public static BackupMethodEnum convertToEnum(String desc) {
         for (BackupMethodEnum e : BackupMethodEnum.values()) {
-            if (Objects.equals(desc, e.getDesc())) {
+            if (Objects.equals(desc, e.getName())) {
                 return e;
             }
         }

+ 7 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/CardTypeEnum.java

@@ -14,14 +14,14 @@ public enum CardTypeEnum {
     GENERIC("通卡"),
     CUSTOM("自定义");
 
-    CardTypeEnum(String desc) {
-        this.desc = desc;
+    CardTypeEnum(String name) {
+        this.name = name;
     }
 
-    private String desc;
+    private String name;
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -31,10 +31,9 @@ public enum CardTypeEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (CardTypeEnum value : CardTypeEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

+ 3 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/EnumType.java

@@ -26,7 +26,9 @@ public enum EnumType {
     PUSH_TYPE_ENUM("同步云阅卷类型"),
     TB_TASK_STATUS("同步云阅卷日志表状态类型"),
     CUSTOMIZED_OPERATION_TYPE_ENUM("自定义日志记录枚举类"),
-    DATA_PERMISSION_TYPE_ENUM("角色数据权限类型");
+    DATA_PERMISSION_TYPE_ENUM("角色数据权限类型"),
+    MARK_PROBLEM_TYPE("问题卷类型"),
+    MARK_ARBITRATE_STATUS("仲裁状态");
 
 
     EnumType(String desc) {

+ 7 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamDetailStatusEnum.java

@@ -17,24 +17,23 @@ public enum ExamDetailStatusEnum {
     FINISH("已印刷"),
     CANCEL("已作废"),
     REJECT("已打回");
-    private final String desc;
+    private final String name;
 
-    ExamDetailStatusEnum(String desc) {
-        this.desc = desc;
+    ExamDetailStatusEnum(String name) {
+        this.name = name;
     }
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     public static List<EnumResult> listTypes() {
         List<EnumResult> list = new ArrayList<>();
         for (ExamDetailStatusEnum value : ExamDetailStatusEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

+ 8 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamNumberStyleEnum.java

@@ -7,6 +7,7 @@ import java.util.List;
 
 /**
  * 考号版式
+ *
  * @Date: 2021/3/23.
  */
 public enum ExamNumberStyleEnum {
@@ -15,14 +16,14 @@ public enum ExamNumberStyleEnum {
     PASTE("粘贴条码"),
     FILL("卡号填涂");
 
-    ExamNumberStyleEnum(String desc) {
-        this.desc = desc;
+    ExamNumberStyleEnum(String name) {
+        this.name = name;
     }
 
-    private String desc;
+    private String name;
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -32,10 +33,9 @@ public enum ExamNumberStyleEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (ExamNumberStyleEnum value : ExamNumberStyleEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

+ 7 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamStatusEnum.java

@@ -17,14 +17,14 @@ public enum ExamStatusEnum {
     SUBMIT("已提交"),
     CANCEL("作废");
 
-    ExamStatusEnum(String desc) {
-        this.desc = desc;
+    ExamStatusEnum(String name) {
+        this.name = name;
     }
 
-    private String desc;
+    private String name;
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -34,10 +34,9 @@ public enum ExamStatusEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (ExamStatusEnum value : ExamStatusEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

+ 7 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/MakeMethodEnum.java

@@ -15,14 +15,14 @@ public enum MakeMethodEnum {
     SELECT("选择已有题卡"),
     SELF("自助创建");
 
-    MakeMethodEnum(String desc) {
-        this.desc = desc;
+    MakeMethodEnum(String name) {
+        this.name = name;
     }
 
-    private String desc;
+    private String name;
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -32,10 +32,9 @@ public enum MakeMethodEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (MakeMethodEnum value : MakeMethodEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

+ 7 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/PaperTypeEnum.java

@@ -14,14 +14,14 @@ public enum PaperTypeEnum {
     PRINT("印刷条码"),
     FILL("卡号填涂");
 
-    PaperTypeEnum(String desc) {
-        this.desc = desc;
+    PaperTypeEnum(String name) {
+        this.name = name;
     }
 
-    private String desc;
+    private String name;
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -31,10 +31,9 @@ public enum PaperTypeEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (PaperTypeEnum value : PaperTypeEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

+ 7 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/PrintPlanStatusEnum.java

@@ -15,24 +15,23 @@ public enum PrintPlanStatusEnum {
     READY("就绪"),
     PRINTING("印刷中"),
     FINISH("印刷完成");
-    private final String desc;
+    private final String name;
 
-    PrintPlanStatusEnum(String desc) {
-        this.desc = desc;
+    PrintPlanStatusEnum(String name) {
+        this.name = name;
     }
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     public static List<EnumResult> listTypes() {
         List<EnumResult> list = new ArrayList<>();
         for (PrintPlanStatusEnum value : PrintPlanStatusEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

+ 7 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ReviewStatusEnum.java

@@ -14,14 +14,14 @@ public enum ReviewStatusEnum {
     PASS("通过"),
     NOT_PASS("不通过");
 
-    ReviewStatusEnum(String desc) {
-        this.desc = desc;
+    ReviewStatusEnum(String name) {
+        this.name = name;
     }
 
-    private String desc;
+    private String name;
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -31,10 +31,9 @@ public enum ReviewStatusEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (ReviewStatusEnum value : ReviewStatusEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

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

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.dto.ExamDetailCourseFieldsDto;
 import com.qmth.distributed.print.business.bean.params.SingleExamStudentAddParam;
@@ -41,9 +42,11 @@ public interface ExamDetailCourseService extends IService<ExamDetailCourse> {
 
     List<ExamDetailCourse> listByExamDetailId(Long examDetailId);
 
-    List<ExamDetailCourseFieldsDto> listExamDetailPaperNumber(Long examDetailId);
+    List<JSONObject> listExamDetailPaperNumber(Long examDetailId);
 
     boolean addExamStudent(SingleExamStudentAddParam singleExamStudentAddParam);
 
 	List<ExamDetailCourse> listByExamDetailIds(List<Long> edIds);
+
+    boolean deleteExamStudent(Long id);
 }

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

@@ -249,5 +249,5 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
     List<ExamDetail> listByExamAndPackage(Long examId, String packageCode);
 
-    ExamDetail getByExamDetailId(Long examDetailId);
+    ExamDetail getByExamDetailCourseId(Long examDetailId);
 }

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamStudentService.java

@@ -42,4 +42,6 @@ public interface ExamStudentService extends IService<ExamStudent> {
     ExamStudent listByExamDetailCourseIdLimit1(Long schoolId, Long examDetailCourseId);
 
     List<ExamStudent> listByExamDetailCourseIdNotIntMarkStudent(Long examDetailCourseId);
+
+    int countByExamDetailCourseIdAndStudentCode(Long examDetailCourseId, String studentCode);
 }

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

@@ -279,7 +279,7 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
                 }
                 List<JSONObject> jsonObjects = objects.stream().filter(m -> m.getString("type").equals(basicTemplate.getClassify().name()) && m.getLong("templateId").equals(id)).collect(Collectors.toList());
                 if (!jsonObjects.isEmpty()) {
-                    throw ExceptionResultEnum.ERROR.exception("模板名称[" + basicTemplate.getName() + "]的" + basicTemplate.getClassify().getDesc() + "已使用,不能删除");
+                    throw ExceptionResultEnum.ERROR.exception("模板名称[" + basicTemplate.getName() + "]的" + basicTemplate.getClassify().getName() + "已使用,不能删除");
                 }
             }
         }

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

@@ -590,7 +590,7 @@ public class ClientServiceImpl implements ClientService {
                 String pEndTime = simpleDateFormat.format(new Date(m.getPrintEndTime()));
                 m.setPrintEndTimeStr(pEndTime);
             }
-            m.setStatusStr(ExamDetailStatusEnum.valueOf(m.getStatus()).getDesc());
+            m.setStatusStr(ExamDetailStatusEnum.valueOf(m.getStatus()).getName());
             m.setValidateStr(m.getValidate() ? "是" : "否");
             m.setDownloadStr(m.getDownload() ? "是" : "否");
             return m;

+ 100 - 77
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java

@@ -1,37 +1,37 @@
 package com.qmth.distributed.print.business.service.impl;
 
-import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.distributed.print.business.bean.dto.ExamDetailCourseFieldsDto;
-import com.qmth.distributed.print.business.bean.examRule.CodeName;
-import com.qmth.distributed.print.business.bean.examRule.CodeNameEnableValue;
 import com.qmth.distributed.print.business.bean.params.SingleExamStudentAddParam;
+import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.distributed.print.business.entity.ExamStudent;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamDetailCourseMapper;
 import com.qmth.distributed.print.business.service.ExamDetailCourseService;
+import com.qmth.distributed.print.business.service.ExamDetailService;
 import com.qmth.distributed.print.business.service.ExamStudentService;
 import com.qmth.teachcloud.common.bean.result.TbTaskDetailResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicCourse;
-import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.mark.entity.MarkPaper;
+import com.qmth.teachcloud.mark.entity.MarkStudent;
+import com.qmth.teachcloud.mark.service.MarkPaperService;
+import com.qmth.teachcloud.mark.service.MarkStudentService;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
+import java.util.*;
 
 /**
  * <p>
@@ -46,6 +46,12 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
 
     @Resource
     private ExamStudentService examStudentService;
+    @Resource
+    private ExamDetailService examDetailService;
+    @Resource
+    private MarkStudentService markStudentService;
+    @Resource
+    private MarkPaperService markPaperService;
 
     @Override
     public List<Map<String, Object>> listClientByExamDetailIdAndStatus(Long examDetailId) {
@@ -106,91 +112,108 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
     }
 
     @Override
-    public List<ExamDetailCourseFieldsDto> listExamDetailPaperNumber(Long examDetailId) {
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+    public List<JSONObject> listExamDetailPaperNumber(Long examDetailId) {
         QueryWrapper<ExamDetailCourse> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(ExamDetailCourse::getSchoolId, schoolId)
-                .eq(ExamDetailCourse::getExamDetailId, examDetailId)
+        queryWrapper.lambda().eq(ExamDetailCourse::getExamDetailId, examDetailId)
                 .orderByAsc(ExamDetailCourse::getCourseCode);
         List<ExamDetailCourse> examDetailCourseList = this.list(queryWrapper);
-        List<ExamDetailCourseFieldsDto> examDetailCourseFieldsDtoList = new ArrayList<>();
+        List<JSONObject> jsonObjectList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(examDetailCourseList)) {
             for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
-                ExamDetailCourseFieldsDto examDetailCourseFieldsDto = new ExamDetailCourseFieldsDto();
-                examDetailCourseFieldsDto.setExamDetailCourse(examDetailCourse);
-                // 查询一条考生数据,拿到使用的必填字段和扩展字段
-                ExamStudent examStudent = examStudentService.listByExamDetailCourseIdLimit1(schoolId, examDetailCourse.getId());
-                List<CodeName> requireds = new ArrayList<>();
-                List<CodeName> extendes = new ArrayList<>();
-                if (examStudent != null) {
-                    List<CodeNameEnableValue> studentRequiredFieldList = JSON.parseArray(examStudent.getRequiredFields(), CodeNameEnableValue.class);
-                    if (CollectionUtils.isNotEmpty(studentRequiredFieldList)) {
-                        requireds = studentRequiredFieldList.stream().map(m -> {
-                            CodeName codeName = new CodeName();
-                            codeName.setCode(m.getCode());
-                            codeName.setName(m.getName());
-                            return codeName;
-                        }).collect(Collectors.toList());
-                    }
-                    List<CodeNameEnableValue> studentExtendFieldList = JSON.parseArray(examStudent.getExtendFields(), CodeNameEnableValue.class);
-                    if (CollectionUtils.isNotEmpty(studentExtendFieldList)) {
-                        extendes = studentExtendFieldList.stream().map(m -> {
-                            CodeName codeName = new CodeName();
-                            codeName.setCode(m.getCode());
-                            codeName.setName(m.getName());
-                            return codeName;
-                        }).collect(Collectors.toList());
-                    }
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("examDetailCourseId", String.valueOf(examDetailCourse.getId()));
+                jsonObject.put("courseCode", examDetailCourse.getCourseCode());
+                jsonObject.put("courseName", examDetailCourse.getCourseName());
+                List<String> paperTypes = new ArrayList<>();
+                if (StringUtils.isNotBlank(examDetailCourse.getPaperType())) {
+                    paperTypes = Arrays.asList(examDetailCourse.getPaperType().split(","));
+
                 }
-                examDetailCourseFieldsDto.setRequiredFields(requireds);
-                examDetailCourseFieldsDto.setExtendFields(extendes);
-                examDetailCourseFieldsDtoList.add(examDetailCourseFieldsDto);
+                jsonObject.put("paperTypes", paperTypes);
+                jsonObjectList.add(jsonObject);
             }
         }
-        return examDetailCourseFieldsDtoList;
+        return jsonObjectList;
     }
 
+    @Transactional
     @Override
     public boolean addExamStudent(SingleExamStudentAddParam singleExamStudentAddParam) {
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        ExamDetailCourse examDetailCourse = this.getById(singleExamStudentAddParam.getExamDetailCourseId());
+        if (examDetailCourse == null) {
+            throw ExceptionResultEnum.ERROR.exception("考场科目数据不存在");
+        }
+        ExamDetail examDetail = examDetailService.getById(examDetailCourse.getExamDetailId());
+        if (examDetail == null) {
+            throw ExceptionResultEnum.ERROR.exception("考场数据不存在");
+        }
+        int count = examStudentService.countByExamDetailCourseIdAndStudentCode(examDetailCourse.getId(), singleExamStudentAddParam.getStudentCode());
+        if (count > 0) {
+            throw ExceptionResultEnum.ERROR.exception("考号在本考场已存在");
+        }
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
+        if (markPaper != null && MarkPaperStatus.FINISH.equals(markPaper.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("已结束阅卷,不能新增考生");
+        }
+
+        // 保存exam_student
+        Long id = SystemConstant.getDbUuid();
         ExamStudent examStudent = new ExamStudent();
+        examStudent.setId(id);
+        examStudent.setSchoolId(examDetail.getSchoolId());
+        examStudent.setExamDetailCourseId(examDetailCourse.getId());
+        examStudent.setStudentCode(singleExamStudentAddParam.getStudentCode());
+        examStudent.setStudentName(singleExamStudentAddParam.getStudentName());
+        examStudent.setExamId(examDetail.getExamId());
+        examStudent.setPaperNumber(examDetailCourse.getPaperNumber());
+        examStudent.setCoursePaperId(examDetailCourse.getCoursePaperId());
+        examStudent.setPaperType(singleExamStudentAddParam.getPaperType());
+        examStudent.setCollegeName(singleExamStudentAddParam.getCollege());
+        examStudent.setClazzName(singleExamStudentAddParam.getClassName());
+        examStudent.setCanDelete(true);
+        examStudentService.save(examStudent);
 
-        try {
-            Field[] examinationImportDtoFields = examStudent.getClass().getDeclaredFields();
-            for (CodeNameEnableValue requiredField : singleExamStudentAddParam.getRequiredFields()) {
-                for (Field examinationImportDtoField : examinationImportDtoFields) {
-                    if(!examinationImportDtoField.getName().equals(requiredField.getCode())){
-                        continue;
-                    }
-                    examinationImportDtoField.setAccessible(true);
-                    examinationImportDtoField.set(requiredField.getCode(), requiredField.getValue());
+        // 打印完成,则推送到阅卷考生库
+        if (ExamDetailStatusEnum.FINISH.equals(examDetail.getStatus())) {
+            // 保存mark_student
+            MarkStudent markStudent = new MarkStudent(id, examDetail.getExamId(), examDetailCourse.getCourseCode(),
+                    examDetailCourse.getCourseName(), examDetailCourse.getPaperNumber(),
+                    examDetailCourse.getCoursePaperId(), singleExamStudentAddParam.getPaperType(),
+                    singleExamStudentAddParam.getStudentCode(), singleExamStudentAddParam.getStudentName(),
+                    examDetail.getPackageCode(), examDetail.getExamPlace(), examDetail.getExamRoom(),
+                    singleExamStudentAddParam.getCollege(), singleExamStudentAddParam.getClassName());
+            if (markStudent.getSecretNumber() == null) {
+                markStudent.randomSecretNumber();
+                while (markStudentService.countByExamIdAndSecretNumber(markStudent.getExamId(), markStudent.getSecretNumber()) > 0) {
+                    markStudent.randomSecretNumber();
                 }
             }
-        } catch (IllegalAccessException e) {
-            throw ExceptionResultEnum.ERROR.exception("必选字段赋值失败");
+            markStudentService.save(markStudent);
         }
-
-        examStudent.setId(SystemConstant.getDbUuid());
-        examStudent.setSchoolId(schoolId);
-        examStudent.setExamId(singleExamStudentAddParam.getExamId());
-        examStudent.setExamDetailCourseId(singleExamStudentAddParam.getExamDetailCourse().getId());
-        examStudent.setPaperNumber(singleExamStudentAddParam.getExamDetailCourse().getPaperNumber());
-        examStudent.setCoursePaperId(singleExamStudentAddParam.getExamDetailCourse().getCoursePaperId());
-        examStudent.setExtendFields(JSON.toJSONString(singleExamStudentAddParam.getExtendFields()));
-        examStudent.setCreateId(sysUser.getId());
-        examStudent.setCreateTime(System.currentTimeMillis());
-        examStudentService.save(examStudent);
-
-        // todo 往exam_student表插入扫描数据
-        return false;
+        return true;
     }
 
-	@Override
-	public List<ExamDetailCourse> listByExamDetailIds(List<Long> edIds) {
-		QueryWrapper<ExamDetailCourse> wrapper = new QueryWrapper<>();
+    @Override
+    public List<ExamDetailCourse> listByExamDetailIds(List<Long> edIds) {
+        QueryWrapper<ExamDetailCourse> wrapper = new QueryWrapper<>();
         LambdaQueryWrapper<ExamDetailCourse> lw = wrapper.lambda();
         lw.in(ExamDetailCourse::getExamDetailId, edIds);
-		return this.list(wrapper);
-	}
+        return this.list(wrapper);
+    }
+
+    @Transactional
+    @Override
+    public boolean deleteExamStudent(Long id) {
+        ExamStudent examStudent = examStudentService.getById(id);
+        if (examStudent == null || !examStudent.getCanDelete()) {
+            throw ExceptionResultEnum.ERROR.exception("考生不能删除");
+        }
+        MarkStudent markStudent = markStudentService.getById(id);
+        if (markStudent.getUpload()) {
+            throw ExceptionResultEnum.ERROR.exception("考生题卡已扫描,不能删除");
+        }
+        examStudentService.removeById(id);
+        markStudentService.removeById(id);
+        return true;
+    }
 }

+ 8 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -172,7 +172,11 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
         Page<PrintTaskDto> page = new Page<>(pageNumber, pageSize);
-        return this.baseMapper.listPrintTask(page, schoolId, semesterId, examId, printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime, printStartTime, printEndTime, printHouseId, dpr);
+        IPage<PrintTaskDto> printTaskDtoIPage = this.baseMapper.listPrintTask(page, schoolId, semesterId, examId, printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime, printStartTime, printEndTime, printHouseId, dpr);
+        for (PrintTaskDto record : printTaskDtoIPage.getRecords()) {
+            record.setStatusDisplay(record.getStatus().getName());
+        }
+        return printTaskDtoIPage;
     }
 
     @Override
@@ -1213,7 +1217,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         }
         PrintPlanStatusEnum status = examPrintPlan.getStatus();
         if (PrintPlanStatusEnum.NEW != status && PrintPlanStatusEnum.READY != status) {
-            throw ExceptionResultEnum.ERROR.exception(status.getDesc() + "状态下的印刷计划不能删除考务数据");
+            throw ExceptionResultEnum.ERROR.exception(status.getName() + "状态下的印刷计划不能删除考务数据");
         }
         // 准备删除的考务-场次表id
         LambdaQueryWrapper<ExamDetail> examDetailQueryWrapper = new QueryWrapper<ExamDetail>().lambda().eq(ExamDetail::getPrintPlanId, printPlanId);
@@ -1286,8 +1290,8 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     }
 
     @Override
-    public ExamDetail getByExamDetailId(Long examDetailId) {
-        ExamDetailCourse examDetailCourse = examDetailCourseService.getById(examDetailId);
+    public ExamDetail getByExamDetailCourseId(Long examDetailCourseId) {
+        ExamDetailCourse examDetailCourse = examDetailCourseService.getById(examDetailCourseId);
         return this.getById(examDetailCourse.getExamDetailId());
     }
 }

+ 9 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamStudentServiceImpl.java

@@ -11,6 +11,7 @@ import com.qmth.distributed.print.business.entity.ExamStudent;
 import com.qmth.distributed.print.business.mapper.ExamDetailCourseMapper;
 import com.qmth.distributed.print.business.mapper.ExamStudentMapper;
 import com.qmth.distributed.print.business.service.ExamStudentService;
+import com.qmth.teachcloud.mark.entity.MarkStudent;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
@@ -109,4 +110,12 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
     public List<ExamStudent> listByExamDetailCourseIdNotIntMarkStudent(Long examDetailCourseId) {
         return this.baseMapper.listByExamDetailCourseIdNotIntMarkStudent(examDetailCourseId);
     }
+
+    @Override
+    public int countByExamDetailCourseIdAndStudentCode(Long examDetailCourseId, String studentCode) {
+        QueryWrapper<ExamStudent> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ExamStudent::getExamDetailCourseId, examDetailCourseId)
+                .eq(ExamStudent::getStudentCode, studentCode);
+        return this.count(queryWrapper);
+    }
 }

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -688,7 +688,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         }
         PrintPlanStatusEnum printPlanStatus = examPrintPlan.getStatus();
         if (PrintPlanStatusEnum.NEW != printPlanStatus && PrintPlanStatusEnum.READY != printPlanStatus) {
-            throw ExceptionResultEnum.ERROR.exception("印刷计划状态为[" + PrintPlanStatusEnum.NEW.getDesc() + "、" + PrintPlanStatusEnum.READY.getDesc() + "]时才可导入,当前状态[" + printPlanStatus.getDesc() + "]");
+            throw ExceptionResultEnum.ERROR.exception("印刷计划状态为[" + PrintPlanStatusEnum.NEW.getName() + "、" + PrintPlanStatusEnum.READY.getName() + "]时才可导入,当前状态[" + printPlanStatus.getName() + "]");
         }
         // 该学校有效考务规则字段
         List<FieldsDto> fieldsDtoList = examDetailService.findExaminationFields(schoolId);

+ 3 - 1
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -348,7 +348,8 @@
             bs.id AS semesterId,
             bs.name AS semesterName,
             be.id AS examId,
-            be.name AS examName
+            be.name AS examName,
+            stu.can_delete canDelete
         FROM
             exam_student stu
                 INNER JOIN
@@ -368,6 +369,7 @@
                 AND det.id = #{examDetailId}
             </if>
         </where>
+        order by stu.can_delete desc, stu.student_code
     </select>
     <select id="taskTotalData" resultType="com.qmth.distributed.print.business.bean.dto.PrintTaskTotalDto">
         SELECT

+ 7 - 3
distributed-print/install/mysql/upgrade/3.3.0.sql

@@ -146,11 +146,11 @@ DELETE FROM `sys_privilege` WHERE (`id` = '435');
 DELETE FROM `sys_privilege` WHERE (`id` = '792');
 DELETE FROM `sys_privilege` WHERE (`id` = '793');
 UPDATE `sys_privilege` SET `name` = '查看详情' WHERE (`id` = '320');
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('327', '新增考生', '/api/admin/exam/print/add_student', 'URL', '44', '8', 'AUTH', '1', '1', '1');
-UPDATE `sys_privilege` SET `related` = '55,327,328' WHERE (`id` = '320');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('327', '新增考生', '/api/admin/exam/print/add_exam_student', 'URL', '44', '8', 'AUTH', '1', '1', '1');
+UPDATE `sys_privilege` SET `related` = '55,327,328,329' WHERE (`id` = '320');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('328', '查询考场下试卷列表', '/api/admin/exam/print/list_exam_detail_course', 'URL', '44', '9', 'AUTH', '1', '1', '1');
 ALTER TABLE `exam_student` ADD COLUMN `required_fields` MEDIUMTEXT NULL COMMENT '基础字段' AFTER `print_card`;
-
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('329', '删除考生', '/api/admin/exam/print/delete_exam_student', 'URL', '44', '10', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_config` (`id`, `config_key`, `config_name`, `config_value`, `enable`, `sort`, `create_id`) VALUES ('41', 'package.barcode.position', '签到表条码坐标', '[0.7,0,0.3,0.1]', '1', '17', '1');
 UPDATE `sys_privilege` SET `url` = '/api/admin/exam/card/find_jpg_file' WHERE (`id` = '672');
 UPDATE `sys_privilege` SET `url` = 'MarkEntrance' WHERE (`id` = '491');
@@ -194,3 +194,7 @@ ALTER TABLE `exam_print_plan` DROP COLUMN `sync_status`;
 ALTER TABLE `basic_print_config`
     ADD COLUMN `audit_content` VARCHAR(45) NULL COMMENT '[PAPER,CARD]' AFTER `review`;
 
+ALTER TABLE `exam_student`
+    ADD COLUMN `can_delete` TINYINT(1) NULL DEFAULT 0 COMMENT '是否可以删除(手动新增可以删除)' AFTER `attachment_id`;
+ALTER TABLE `exam_student`
+    CHANGE COLUMN `org_id` `org_id` BIGINT NULL COMMENT '机构id' ;

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

@@ -9,6 +9,8 @@ import com.qmth.distributed.print.business.service.BasicExamRuleService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
+import com.qmth.teachcloud.common.enums.mark.MarkArbitrateStatus;
+import com.qmth.teachcloud.common.enums.mark.MarkProblemType;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import io.swagger.annotations.Api;
@@ -19,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -41,13 +44,12 @@ public class EnumsController {
      * @return
      */
     @RequestMapping(method = RequestMethod.POST)
-    @Aac(auth = false)
     public Result list(@RequestParam(value = "type", required = true) String type) {
         if (StringUtils.isBlank(type)) {
             throw ExceptionResultEnum.ERROR.exception("类型不能为空");
         }
 
-        List<EnumResult> list = null;
+        List<EnumResult> list = new ArrayList<>();
         if (type.equals(EnumType.BACKUP_METHOD.name())) {
             //备份方式
             list = BackupMethodEnum.listTypes();
@@ -115,6 +117,12 @@ public class EnumsController {
         } else if (type.equals(EnumType.DATA_PERMISSION_TYPE_ENUM.name())) {
             // 同步云阅卷日志表状态类型
             list = DataPermissionTypeEnum.listTypes();
+        } else if (type.equals(EnumType.MARK_PROBLEM_TYPE.name())) {
+            // 问题卷类型
+            list = MarkProblemType.listTypes();
+        } else if (type.equals(EnumType.MARK_ARBITRATE_STATUS.name())) {
+            // 仲裁状态
+            list = MarkArbitrateStatus.listTypes();
         }
         return ResultUtil.ok(list);
     }

+ 14 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java

@@ -261,8 +261,7 @@ public class ExamDetailController {
      * 获取新增考生考务字段
      * @param examDetailId 考场ID
      */
-    @Aac(auth = false)
-    @ApiOperation(value = "考务数据导入-查看详情-新增考生-考场科目")
+    @ApiOperation(value = "考务数据导入-新增考生-考场科目")
     @RequestMapping(value = "/list_exam_detail_course", method = RequestMethod.POST)
     public Result listExamDetailPaperNumber(@ApiParam(value = "考务场次ID", required = true) @RequestParam Long examDetailId) {
         return ResultUtil.ok(examDetailCourseService.listExamDetailPaperNumber(examDetailId));
@@ -273,12 +272,23 @@ public class ExamDetailController {
      * @param singleExamStudentAddParam 请求参数
      * @return
      */
-    @Aac(auth = false)
-    @ApiOperation(value = "考务数据导入-查看详情-新增考生-保存")
+    @ApiOperation(value = "考务数据导入-新增考生-保存")
     @RequestMapping(value = "/add_exam_student", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.ADD)
     public Result addExamStudent(@RequestBody SingleExamStudentAddParam singleExamStudentAddParam) {
         return ResultUtil.ok(examDetailCourseService.addExamStudent(singleExamStudentAddParam));
     }
+
+    /**
+     * 删除考生
+     * @param id 请求参数
+     * @return
+     */
+    @ApiOperation(value = "考务数据导入-查看详情-新增考生-保存")
+    @RequestMapping(value = "/delete_exam_student", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.ADD)
+    public Result deleteExamStudent(@RequestParam Long id) {
+        return ResultUtil.ok(examDetailCourseService.deleteExamStudent(id));
+    }
 }
 

+ 2 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkArbitrateController.java

@@ -46,9 +46,10 @@ public class MarkArbitrateController {
     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 status,
                        @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        IPage<MarkArbitrateDto> markArbitrateDtoIPage = markArbitrateHistoryService.pageArbitrate(examId, paperNumber, groupNumber, pageNumber, pageSize);
+        IPage<MarkArbitrateDto> markArbitrateDtoIPage = markArbitrateHistoryService.pageArbitrate(examId, paperNumber, groupNumber, status, pageNumber, pageSize);
         return ResultUtil.ok(markArbitrateDtoIPage);
     }
 

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

@@ -46,10 +46,10 @@ public class MarkQualityController {
     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) Long userId,
+                               @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<MarkQualityDto> markQualityDtoIPage = markUserGroupService.pageQuality(examId, paperNumber, groupNumber, userId, pageNumber, pageSize);
+        IPage<MarkQualityDto> markQualityDtoIPage = markUserGroupService.pageQuality(examId, paperNumber, groupNumber, loginName, pageNumber, pageSize);
         return ResultUtil.ok(markQualityDtoIPage);
     }
 

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/auth/DistributedPrintAuthenticationService.java

@@ -118,7 +118,7 @@ public class DistributedPrintAuthenticationService implements AuthorizationServi
         request.setAttribute(SystemConstant.ORG, authBean.getOrg());
 
         //超级系统管理员拥有所有权限
-        int count = Objects.nonNull(authBean) ? (int) authBean.getRoleList().stream().filter(s -> Objects.equals(s.getName(), RoleTypeEnum.ADMIN.getDesc())).count() : 0;
+        int count = Objects.nonNull(authBean) ? (int) authBean.getRoleList().stream().filter(s -> Objects.equals(s.getName(), RoleTypeEnum.ADMIN.getName())).count() : 0;
         if (count > 0) {
             return true;
         }

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/RolePrivilegeResult.java

@@ -33,7 +33,7 @@ public class RolePrivilegeResult implements Serializable {
     public void setInfo(PrivilegeCacheDto privilegeCacheDto) {
         this.id = privilegeCacheDto.getId();
         this.name = privilegeCacheDto.getName();
-        this.type = privilegeCacheDto.getType().getDesc();
+        this.type = privilegeCacheDto.getType().getName();
     }
 
     public Long getId() {

+ 8 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ClassifyEnum.java

@@ -5,6 +5,7 @@ import java.util.List;
 
 /**
  * 模板-分类
+ *
  * @Date: 2021/3/23.
  */
 public enum ClassifyEnum {
@@ -14,14 +15,14 @@ public enum ClassifyEnum {
     PACKAGE("卷袋贴"),
     CHECK_IN("登记表");
 
-    ClassifyEnum(String desc) {
-        this.desc = desc;
+    ClassifyEnum(String name) {
+        this.name = name;
     }
 
-    private String desc;
+    private String name;
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -31,10 +32,9 @@ public enum ClassifyEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (ClassifyEnum value : ClassifyEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

+ 8 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/DrawRuleEnum.java

@@ -5,6 +5,7 @@ import java.util.List;
 
 /**
  * 抽卷规则
+ *
  * @Date: 2021/3/23.
  */
 public enum DrawRuleEnum {
@@ -12,14 +13,14 @@ public enum DrawRuleEnum {
     ONE("只抽一次"),
     CIRCLE("循环抽取");
 
-    DrawRuleEnum(String desc) {
-        this.desc = desc;
+    DrawRuleEnum(String name) {
+        this.name = name;
     }
 
-    private String desc;
+    private String name;
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -29,10 +30,9 @@ public enum DrawRuleEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (DrawRuleEnum value : DrawRuleEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

+ 7 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PrintMethodEnum.java

@@ -12,14 +12,14 @@ public enum PrintMethodEnum {
     AUTO("自动"),
     MANUAL("手动");
 
-    PrintMethodEnum(String desc) {
-        this.desc = desc;
+    PrintMethodEnum(String name) {
+        this.name = name;
     }
 
-    private String desc;
+    private String name;
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -29,10 +29,9 @@ public enum PrintMethodEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (PrintMethodEnum value : PrintMethodEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

+ 8 - 9
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PrivilegeEnum.java

@@ -22,14 +22,14 @@ public enum PrivilegeEnum {
 
     CONDITION("查询条件");
 
-    private String desc;
+    private String name;
 
-    private PrivilegeEnum(String desc) {
-        this.desc = desc;
+    private PrivilegeEnum(String name) {
+        this.name = name;
     }
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -40,7 +40,7 @@ public enum PrivilegeEnum {
      */
     public static String convertToName(String title) {
         for (PrivilegeEnum e : PrivilegeEnum.values()) {
-            if (Objects.equals(title, e.getDesc())) {
+            if (Objects.equals(title, e.getName())) {
                 return e.name();
             }
         }
@@ -54,10 +54,9 @@ public enum PrivilegeEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (PrivilegeEnum value : PrivilegeEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;

+ 2 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PushTypeEnum.java

@@ -50,10 +50,9 @@ public enum PushTypeEnum {
         List<EnumResult> list = new ArrayList<>();
         for (PushTypeEnum value : PushTypeEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setName(value.getTitle());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getTitle());
+            result.setCode(value.name());
             list.add(result);
         }
         return list;

+ 8 - 9
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/RoleTypeEnum.java

@@ -24,14 +24,14 @@ public enum RoleTypeEnum {
     PRINT("印刷员"),
     SCANNER("扫描员");
 
-    RoleTypeEnum(String desc) {
-        this.desc = desc;
+    RoleTypeEnum(String name) {
+        this.name = name;
     }
 
-    private String desc;
+    private String name;
 
-    public String getDesc() {
-        return desc;
+    public String getName() {
+        return name;
     }
 
     /**
@@ -45,10 +45,9 @@ public enum RoleTypeEnum {
                 continue;
             }
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setCode(value.name());
+            result.setName(value.getName());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
             list.add(result);
         }
         return list;
@@ -63,7 +62,7 @@ public enum RoleTypeEnum {
     public static RoleTypeEnum convertDescToEnum(String desc) {
         RoleTypeEnum res = null;
         for (RoleTypeEnum value : RoleTypeEnum.values()) {
-            if (desc.equals(value.getDesc())) {
+            if (desc.equals(value.getName())) {
                 res = value;
             }
         }

+ 2 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/TaskStatusEnum.java

@@ -50,10 +50,9 @@ public enum TaskStatusEnum {
         List<EnumResult> list = new ArrayList<>();
         for (TaskStatusEnum value : TaskStatusEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setName(value.getTitle());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getTitle());
+            result.setCode(value.name());
             list.add(result);
         }
         return list;

+ 2 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/log/CustomizedOperationTypeEnum.java

@@ -43,10 +43,9 @@ public enum CustomizedOperationTypeEnum {
         List<EnumResult> list = new ArrayList<EnumResult>();
         for (CustomizedOperationTypeEnum value : CustomizedOperationTypeEnum.values()) {
             EnumResult result = new EnumResult();
-            result.setName(value.name());
+            result.setName(value.getDesc());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
-            result.setDesc(value.getDesc());
+            result.setCode(value.name());
             list.add(result);
         }
         return list;

+ 16 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/mark/MarkArbitrateStatus.java

@@ -1,5 +1,9 @@
 package com.qmth.teachcloud.common.enums.mark;
 
+import com.qmth.teachcloud.common.enums.DataPermissionTypeEnum;
+import com.qmth.teachcloud.common.enums.EnumResult;
+
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -44,4 +48,16 @@ public enum MarkArbitrateStatus {
         }
         return options;
     }
+
+    public static List<EnumResult> listTypes() {
+        List<EnumResult> list = new ArrayList<EnumResult>();
+        for (MarkArbitrateStatus value : MarkArbitrateStatus.values()) {
+            EnumResult result = new EnumResult();
+            result.setCode(value.name());
+            result.setName(value.getName());
+            result.setOrdinal(value.ordinal());
+            list.add(result);
+        }
+        return list;
+    }
 }

+ 3 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/mark/MarkProblemType.java

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 
+import com.qmth.teachcloud.common.enums.DataPermissionTypeEnum;
 import com.qmth.teachcloud.common.enums.EnumResult;
 
 public enum MarkProblemType {
@@ -55,7 +56,8 @@ public enum MarkProblemType {
         for (MarkProblemType value : MarkProblemType.values()) {
             EnumResult result = new EnumResult();
             result.setName(value.getDesc());
-            result.setCode(value.toString());
+            result.setCode(value.name());
+            result.setOrdinal(value.ordinal());
             list.add(result);
         }
         return list;

+ 6 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -285,7 +285,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
                 sysRoleQueryWrapper.lambda().in(SysRole::getId, roleIds)
                         .eq(SysRole::getEnable, true);
                 List<SysRole> sysRoleList = sysRoleService.list(sysRoleQueryWrapper);
-                int count = Objects.nonNull(sysRoleList) && sysRoleList.size() > 0 ? (int) sysRoleList.stream().filter(s -> Objects.equals(s.getName(), RoleTypeEnum.ADMIN.getDesc())).count() : 0;
+                int count = Objects.nonNull(sysRoleList) && sysRoleList.size() > 0 ? (int) sysRoleList.stream().filter(s -> Objects.equals(s.getName(), RoleTypeEnum.ADMIN.getName())).count() : 0;
                 QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
                 if (count > 0) {//超级系统管理员
 //                    Long schoolId = Long.parseLong(ServletUtil.getRequestSchoolByNotVaild().toString());
@@ -917,7 +917,11 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         for (String path : paths) {
             FilePathVo filePathVo = JSON.parseObject(path, FilePathVo.class);
             String pathVoPath = filePathVo.getPath();
-            result.add(!pathVoPath.startsWith("/") ? "/" + pathVoPath : pathVoPath);
+            if (SystemConstant.LOCAL.equals(filePathVo.getType())) {
+                result.add(!pathVoPath.startsWith("/") ? "/" + pathVoPath : pathVoPath);
+            } else {
+                result.add(this.filePreview(pathVoPath));
+            }
         }
         return result;
     }

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/AuthUtil.java

@@ -153,7 +153,7 @@ public class AuthUtil {
         request.setAttribute(SystemConstant.ORG, authBean.getOrg());
 
         //超级系统管理员拥有所有权限
-        int count = Objects.nonNull(authBean) ? (int) authBean.getRoleList().stream().filter(s -> Objects.equals(s.getName(), RoleTypeEnum.ADMIN.getDesc())).count() : 0;
+        int count = Objects.nonNull(authBean) ? (int) authBean.getRoleList().stream().filter(s -> Objects.equals(s.getName(), RoleTypeEnum.ADMIN.getName())).count() : 0;
         if (count > 0) {
             return true;
         }

+ 9 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/StudentScoreDetailDto.java

@@ -27,6 +27,7 @@ public class StudentScoreDetailDto {
     private String checkUserLoginName;
     private String checkUserName;
     private Long checkTime;
+    private String sheetPath;
     private List<SheetUrlDto> sheetUrls;
 
     public Long getStudentId() {
@@ -173,6 +174,14 @@ public class StudentScoreDetailDto {
         this.checkTime = checkTime;
     }
 
+    public String getSheetPath() {
+        return sheetPath;
+    }
+
+    public void setSheetPath(String sheetPath) {
+        this.sheetPath = sheetPath;
+    }
+
     public List<SheetUrlDto> getSheetUrls() {
         return sheetUrls;
     }

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

@@ -2,7 +2,6 @@ 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.enums.mark.MarkArbitrateStatus;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateDto;
 import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -20,7 +19,7 @@ import java.util.List;
  */
 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);
+    IPage<MarkArbitrateDto> pageArbitrate(@Param("page") Page<MarkArbitrateDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("status") String status);
 
     MarkArbitrateHistory getArbitrateWaitingOne(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber);
 

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

@@ -28,5 +28,5 @@ public interface MarkUserGroupMapper extends BaseMapper<MarkUserGroup> {
 
     IPage<MarkUserGroupProgressDto> pageGroupUserByExamIdAndPaperNumberAndGroupNumber(@Param("page") Page<MarkUserGroupProgressDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("loginName") String loginName);
 
-    IPage<MarkQualityDto> pageQuality(@Param("page") Page<MarkQualityDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("userId") Long userId);
+    IPage<MarkQualityDto> pageQuality(@Param("page") Page<MarkQualityDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("loginName") String loginName);
 }

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

@@ -22,7 +22,7 @@ import java.util.List;
  */
 public interface MarkArbitrateHistoryService extends IService<MarkArbitrateHistory> {
 
-    IPage<MarkArbitrateDto> pageArbitrate(Long examId, String paperNumber, Integer groupNumber, Integer pageNumber, Integer pageSize);
+    IPage<MarkArbitrateDto> pageArbitrate(Long examId, String paperNumber, Integer groupNumber, String status, Integer pageNumber, Integer pageSize);
 
     void clearArbitrate(Long arbitrateId);
 
@@ -41,4 +41,6 @@ public interface MarkArbitrateHistoryService extends IService<MarkArbitrateHisto
     JSONObject getArbitrateStatus(Long examId, String paperNumber, Integer groupNumber);
 
     List<Task> getHistory(Long examId, String paperNumber, Integer groupNumber, Integer pageNumber, Integer pageSize);
+
+    Integer waitArbitrateCount(Long examId, String paperNumber, Integer groupNumber);
 }

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

@@ -29,8 +29,6 @@ public interface MarkTaskService extends IService<MarkTask> {
 
     Integer markedCount(List<MarkTask> groupNumberMarkTask);
 
-    Integer waitArbitrateCount(List<MarkTask> groupNumberMarkTask);
-
     Double calcPercent(Integer markedCount, Integer taskCount);
 
     int countByExamIdAndPaperNumberAndGroupNumberAndUserId(Long examId, String paperNumber, Integer groupNumber, Long userId);

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

@@ -41,7 +41,7 @@ public interface MarkUserGroupService extends IService<MarkUserGroup> {
 
     void resetById(Long id);
 
-    IPage<MarkQualityDto> pageQuality(Long examId, String paperNumber, Integer groupNumber, Long userId, Integer pageNumber, Integer pageSize);
+    IPage<MarkQualityDto> pageQuality(Long examId, String paperNumber, Integer groupNumber, String loginName, Integer pageNumber, Integer pageSize);
 
     void updateQuality(Long examId, String paperNumber, Integer groupNumber);
 

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

@@ -67,9 +67,9 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
     private LockService lockService;
 
     @Override
-    public IPage<MarkArbitrateDto> pageArbitrate(Long examId, String paperNumber, Integer groupNumber, Integer pageNumber, Integer pageSize) {
+    public IPage<MarkArbitrateDto> pageArbitrate(Long examId, String paperNumber, Integer groupNumber, String status, Integer pageNumber, Integer pageSize) {
         Page<MarkArbitrateDto> page = new Page<>(pageNumber, pageSize);
-        IPage<MarkArbitrateDto> markArbitrateDtoIPage = this.baseMapper.pageArbitrate(page, examId, paperNumber, groupNumber);
+        IPage<MarkArbitrateDto> markArbitrateDtoIPage = this.baseMapper.pageArbitrate(page, examId, paperNumber, groupNumber, status);
         for (MarkArbitrateDto arbitrateDto : markArbitrateDtoIPage.getRecords()) {
             if (arbitrateDto.getStudentId() != null) {
                 MarkStudent markStudent = markStudentService.getById(arbitrateDto.getStudentId());
@@ -245,6 +245,16 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
         return taskList;
     }
 
+    @Override
+    public Integer waitArbitrateCount(Long examId, String paperNumber, Integer groupNumber) {
+        QueryWrapper<MarkArbitrateHistory> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkArbitrateHistory::getExamId, examId)
+                .eq(MarkArbitrateHistory::getPaperNumber, paperNumber)
+                .eq(MarkArbitrateHistory::getGroupNumber, groupNumber)
+                .eq(MarkArbitrateHistory::getStatus, MarkArbitrateStatus.WAITING);
+        return this.count(queryWrapper);
+    }
+
     private void releaseTask(Long taskId) {
         synchronized (currentTaskMap) {
             currentTaskMap.remove(taskId);

+ 11 - 14
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -8,6 +8,8 @@ import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
+import com.qmth.teachcloud.mark.entity.*;
+import com.qmth.teachcloud.mark.service.*;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
@@ -32,22 +34,10 @@ 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.enums.LockType;
 import com.qmth.teachcloud.mark.enums.ScorePolicy;
 import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.mapper.MarkGroupMapper;
-import com.qmth.teachcloud.mark.service.MarkGroupService;
-import com.qmth.teachcloud.mark.service.MarkPaperService;
-import com.qmth.teachcloud.mark.service.MarkQuestionService;
-import com.qmth.teachcloud.mark.service.MarkService;
-import com.qmth.teachcloud.mark.service.MarkSyncService;
-import com.qmth.teachcloud.mark.service.MarkTaskService;
-import com.qmth.teachcloud.mark.service.MarkUserClassService;
-import com.qmth.teachcloud.mark.service.MarkUserGroupService;
 
 /**
  * <p>
@@ -71,6 +61,8 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
     @Resource
     private MarkUserClassService markUserClassService;
     @Resource
+    private MarkArbitrateHistoryService markArbitrateHistoryService;
+    @Resource
     private MarkTaskService markTaskService;
     @Resource
     private MarkService markService;
@@ -205,7 +197,7 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
             markGroupProgressDto.setLeftCount(markGroupProgressDto.getTaskCount() - markGroupProgressDto.getMarkedCount());
             markGroupProgressDto.setCurrentCount(markService.applyCurrentCount(markGroup));
             markGroupProgressDto.setPercent(markTaskService.calcPercent(markGroupProgressDto.getMarkedCount(), markGroupProgressDto.getTaskCount()));
-            markGroupProgressDto.setArbitrateCount(markTaskService.waitArbitrateCount(groupNumberMarkTask));
+            markGroupProgressDto.setArbitrateCount(markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, markGroup.getNumber()));
             markGroupProgressDtoList.add(markGroupProgressDto);
         }
         markGroupSummaryProgressDto.setGroupInfo(markGroupProgressDtoList);
@@ -222,6 +214,7 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
                 List<MarkTask> totalMarkTaskList = new ArrayList<>();
                 List<MarkUser> totalMarkUserList = new ArrayList<>();
                 int count = 0;
+                int classArbitrateCount = 0;
                 for (String s : markGroupClassProgressDto.getGroupNumbers().split(",")) {
                     Integer groupNumber = Integer.parseInt(s);
                     totalMarkTaskList.addAll(markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, null));
@@ -236,6 +229,10 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
                             count += markerCount;
                         }
                     }
+
+                    // 待仲裁数量
+                    int arbitrateCount = markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, groupNumber);
+                    classArbitrateCount += arbitrateCount;
                 }
                 markGroupClassProgressDto.setMarkerCount(totalMarkUserList.size());
                 markGroupClassProgressDto.setTaskCount(totalMarkTaskList.size());
@@ -243,7 +240,7 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
                 markGroupClassProgressDto.setLeftCount(markGroupClassProgressDto.getTaskCount() - markGroupClassProgressDto.getMarkedCount());
                 markGroupClassProgressDto.setCurrentCount(count);
                 markGroupClassProgressDto.setPercent(markTaskService.calcPercent(markGroupClassProgressDto.getMarkedCount(), markGroupClassProgressDto.getTaskCount()));
-                markGroupClassProgressDto.setArbitrateCount(markTaskService.waitArbitrateCount(totalMarkTaskList));
+                markGroupClassProgressDto.setArbitrateCount(classArbitrateCount);
             }
             return markGroupClassProgressDtoIPage;
         }

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

@@ -771,7 +771,8 @@ public class MarkServiceImpl implements MarkService {
     public void clear(Long userId, Long examId, String paperNumber, Integer groupNumber) {
         String key = examId + "_" + paperNumber + "_" + groupNumber;
         TaskLock taskLock = TaskLockUtil.getFormalTask(key);
-        taskLock.clear(userId);
+        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, userId);
+        taskLock.clear(markUserGroup.getId());
     }
 
     @Override
@@ -943,6 +944,7 @@ public class MarkServiceImpl implements MarkService {
         if (group == null) {
             throw ExceptionResultEnum.ERROR.exception("评卷大题不存在");
         }
+        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, userId);
         Task task = null;
         List<MarkTask> list = new ArrayList<MarkTask>();
         int pageNumber = 1;
@@ -958,7 +960,7 @@ public class MarkServiceImpl implements MarkService {
                 break;
             }
             for (MarkTask t : list) {
-                if (this.applyTask(t, userId)) {
+                if (this.applyTask(t, markUserGroup.getId())) {
                     task = taskService.build(t);
                     break;
                 }

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

@@ -161,7 +161,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         Page<StudentScoreDetailDto> page = new Page<>(pageNumber, pageSize);
         MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
         Double objectiveScoreLt = objectiveScoreRateLt == null ? null
-                : Double.parseDouble(new DecimalFormat("####.###")
+                : Double.parseDouble(new DecimalFormat("####.##")
                 .format(markPaper.getObjectiveScore() * objectiveScoreRateLt / 100));
         IPage<StudentScoreDetailDto> studentScoreDetailDtoIPage = this.baseMapper.pageStudentScore(page, examId,
                 paperNumber, college, className, teacher, filter, absent, breach, startScore, endScore, subScore,
@@ -169,7 +169,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         for (StudentScoreDetailDto scoreDetailDto : studentScoreDetailDtoIPage.getRecords()) {
             // 原图
             scoreDetailDto.setSheetUrls(buildSheetUrls(scoreDetailDto.getStudentId()));
-
+            scoreDetailDto.setSheetPath(null);
         }
         return studentScoreDetailDtoIPage;
     }
@@ -286,7 +286,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             // 清除识别对照任务
             scanOmrTaskService.deleteByStudentId(student.getExamId(), student.getId());
             // 重新生成识别对照任务
-            scanOmrTaskService.saveTask( student.getId());
+            scanOmrTaskService.saveTask(student.getId());
         }
     }
 

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

@@ -108,15 +108,6 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
         return (int) count;
     }
 
-    @Override
-    public Integer waitArbitrateCount(List<MarkTask> markTask) {
-        if (CollectionUtils.isEmpty(markTask)) {
-            return 0;
-        }
-        long count = markTask.stream().filter(m -> m.getStatus().equals(MarkTaskStatus.WAIT_ARBITRATE)).count();
-        return (int) count;
-    }
-
     @Override
     public Double calcPercent(Integer markedCount, Integer taskCount) {
         String percent = taskCount > 0 ? new DecimalFormat("####.###").format(markedCount * 100.0 / taskCount) : "0";

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

@@ -199,9 +199,9 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
     }
 
     @Override
-    public IPage<MarkQualityDto> pageQuality(Long examId, String paperNumber, Integer groupNumber, Long userId, Integer pageNumber, Integer pageSize) {
+    public IPage<MarkQualityDto> pageQuality(Long examId, String paperNumber, Integer groupNumber, String loginName, Integer pageNumber, Integer pageSize) {
         Page<MarkQualityDto> page = new Page<>(pageNumber, pageSize);
-        IPage<MarkQualityDto> markQualityDtoIPage = this.baseMapper.pageQuality(page, examId, paperNumber, groupNumber, userId);
+        IPage<MarkQualityDto> markQualityDtoIPage = this.baseMapper.pageQuality(page, examId, paperNumber, groupNumber, loginName);
         for (MarkQualityDto qualityDto : markQualityDtoIPage.getRecords()) {
             MarkGroup markGroup = markGroupService.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, qualityDto.getGroupNumber());
             markGroup.setQuestionList(markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, qualityDto.getGroupNumber(), false));
@@ -213,7 +213,7 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
                 qualityDto.setOrgName(sysUser.getOrgName());
                 String percent = qualityDto.getFinishCount() > 0 ? new DecimalFormat("####.###").format((qualityDto.getFinishCount() - qualityDto.getHeaderFinishCount()) * 100.0 / qualityDto.getFinishCount()) : "0";
                 qualityDto.setAdoptionRate(Double.parseDouble(percent));
-                String avgScore = qualityDto.getAvgScore() > 0 ? new DecimalFormat("####.##").format(qualityDto.getAvgScore()) : "0";
+                String avgScore = qualityDto.getAvgScore() != null && qualityDto.getAvgScore() > 0 ? new DecimalFormat("####.##").format(qualityDto.getAvgScore()) : "0";
                 qualityDto.setAvgScore(Double.parseDouble(avgScore));
             }
         }
@@ -265,7 +265,7 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
         }
         List<MarkQualityChartDto> markQualityChartDtoList = new ArrayList<>();
         List<MarkUserGroup> markUserGroupList = this.listByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber);
-        Double totalAvgScore = markUserGroupList.stream().collect(Collectors.averagingDouble(MarkUserGroup::getAvgScore));
+        Double totalAvgScore = markUserGroupList.stream().filter(m -> m.getAvgScore() != null).collect(Collectors.averagingDouble(MarkUserGroup::getAvgScore));
         for (MarkUserGroup markUserGroup : markUserGroupList) {
             MarkQualityChartDto markQualityChartDto = new MarkQualityChartDto();
             markQualityChartDto.setUserId(markUserGroup.getUserId());

+ 4 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/TaskServiceImpl.java

@@ -105,7 +105,8 @@ public class TaskServiceImpl implements TaskService {
             task.setPaperNumber(markStudent.getPaperNumber());
 
             // 原图
-            task.setSheetUrls(teachcloudCommonService.filePreview(markStudent.getSheetPathList()));
+//            task.setSheetUrls(teachcloudCommonService.filePreview(markStudent.getSheetPathList()));
+            task.setSheetUrls(teachcloudCommonService.fileMarkPreview(markStudent.getSheetPathList()));
 
             if (!markStudent.getSubjectiveStatus().equals(SubjectiveStatus.UNMARK)) {
                 task.setQuestionList(buildMarkStep(markStudent));
@@ -223,8 +224,8 @@ public class TaskServiceImpl implements TaskService {
         task.setQuestionList(buildMarkStep(t));
         task.setSpecialTagList(getMarkSpecialTagList(t));
         MarkStudent student = markStudentService.getById(t.getStudentId());
-        task.setSheetUrls(teachcloudCommonService.filePreview(student.getSheetPathList()));
-//        task.setSheetUrls(teachcloudCommonService.fileMarkPreview(student.getSheetPathList()));
+//        task.setSheetUrls(teachcloudCommonService.filePreview(student.getSheetPathList()));
+        task.setSheetUrls(teachcloudCommonService.fileMarkPreview(student.getSheetPathList()));
         MarkGroup group = markGroupService.getByExamIdAndPaperNumberAndGroupNumber(t.getExamId(), t.getPaperNumber(),
                 t.getGroupNumber());
         task.setSliceConfig(group.getPictureConfigList());

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

@@ -40,6 +40,9 @@
             <if test="groupNumber != null and groupNumber != ''">
                 AND group_number = #{groupNumber}
             </if>
+            <if test="status != null and status != ''">
+                AND status = #{status}
+            </if>
     </select>
     <select id="getArbitrateWaitingOne" resultType="com.qmth.teachcloud.mark.entity.MarkArbitrateHistory">
         SELECT

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

@@ -61,7 +61,8 @@
             ifnull(ms.objective_score, 0) +  ifnull(ms.subjective_score, 0) totalScore,
             ms.subjective_score_list subjectiveScoreList,
             ms.check_user_id checkUserId,
-            ms.check_time checkTime
+            ms.check_time checkTime,
+            ms.sheet_path sheetPath
         FROM
             mark_student ms
         where ms.exam_id = #{examId}

+ 15 - 14
teachcloud-mark/src/main/resources/mapper/MarkUserGroupMapper.xml

@@ -92,24 +92,25 @@
     </select>
     <select id="pageQuality" resultType="com.qmth.teachcloud.mark.dto.mark.manage.MarkQualityDto">
         SELECT
-            user_id userId,
-            group_number groupNumber,
-            ifnull(finish_count, 0) finishCount,
-            ifnull(header_finish_count, 0) headerFinishCount,
-            avg_score avgScore,
-            max_score maxScore,
-            min_score minScore,
-            avg_speed avgSpeed
+            mug.user_id userId,
+            mug.group_number groupNumber,
+            ifnull(mug.finish_count, 0) finishCount,
+            ifnull(mug.header_finish_count, 0) headerFinishCount,
+            mug.avg_score avgScore,
+            mug.max_score maxScore,
+            mug.min_score minScore,
+            mug.avg_speed avgSpeed
         FROM
-            mark_user_group
+            mark_user_group mug
+                LEFT JOIN sys_user su ON mug.user_id = su.id
         where
-            exam_id = #{examId}
-            AND paper_number = #{paperNumber}
+            mug.exam_id = #{examId}
+            AND mug.paper_number = #{paperNumber}
             <if test="groupNumber != null and groupNumber != ''">
-                AND group_number = #{groupNumber}
+                AND mug.group_number = #{groupNumber}
             </if>
-            <if test="userId != null">
-                AND user_id = #{userId}
+            <if test="loginName != null and loginName != ''">
+                AND su.login_name = #{loginName}
             </if>
     </select>
 

+ 3 - 3
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

@@ -105,12 +105,12 @@ public class PrintFinishServiceImpl implements PrintFinishService {
             List<MarkStudent> markStudentList = new ArrayList<>();
             Set<String> secretNumberSet = new HashSet<>();
             for (String id : dto.getExamDetailCourseIds().split(",")) {
-                Long examDetailId = Long.valueOf(id);
-                ExamDetail examDetail = examDetailService.getByExamDetailId(examDetailId);
+                Long examDetailCourseId = Long.valueOf(id);
+                ExamDetail examDetail = examDetailService.getByExamDetailCourseId(examDetailCourseId);
                 if (examDetail == null) {
                     continue;
                 }
-                List<ExamStudent> examStudentList = examStudentService.listByExamDetailCourseIdNotIntMarkStudent(examDetailId);
+                List<ExamStudent> examStudentList = examStudentService.listByExamDetailCourseIdNotIntMarkStudent(examDetailCourseId);
                 for (ExamStudent examStudent : examStudentList) {
                     MarkStudent markStudent = markStudentService.getById(examStudent.getId());
                     if (markStudent != null) {