Selaa lähdekoodia

联考版-v3.1.0-测试bug修复。

xiaof 2 vuotta sitten
vanhempi
commit
640e5e5b2b
26 muutettua tiedostoa jossa 257 lisäystä ja 186 poistoa
  1. 56 54
      sql/msyj-local-v3.1.0.sql
  2. 2 0
      sql/清空所有数据脚本.sql
  3. 40 15
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/PaperExporter.java
  4. 3 3
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/ScoreExporter.java
  5. 5 3
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/WorkService.java
  6. 0 2
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/ChangeLevel.java
  7. 2 1
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/MarkLog.java
  8. 1 1
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Paper.java
  9. 8 13
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/ChangeLevelRepo.java
  10. 1 1
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkLogRepo.java
  11. 7 1
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/PaperRepo.java
  12. 2 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/ParamSettingRepo.java
  13. 77 35
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkSubjectApi.java
  14. 2 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java
  15. 4 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/PaperApi.java
  16. 1 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskLevelAssembler.java
  17. 2 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskRoughLevelAssembler.java
  18. 1 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskScoreAssembler.java
  19. 1 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/PaperAssembler.java
  20. 9 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/MarkTaskDTO.java
  21. 1 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkLogService.java
  22. 4 4
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkTaskLevelService.java
  23. 0 41
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkTaskRoughLevelService.java
  24. 1 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkTaskScoreService.java
  25. 1 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingLevelService.java
  26. 26 4
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingService.java

+ 56 - 54
sql/msyj-local-v3.1.0.sql

@@ -5,13 +5,13 @@
  Source Server Type    : MySQL
  Source Server Version : 50717
  Source Host           : localhost:3306
- Source Schema         : aa
+ Source Schema         : 2
 
  Target Server Type    : MySQL
  Target Server Version : 50717
  File Encoding         : 65001
 
- Date: 06/09/2022 13:55:32
+ Date: 25/10/2022 10:01:35
 */
 
 SET NAMES utf8mb4;
@@ -73,7 +73,7 @@ CREATE TABLE `check_data`  (
   `status` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
   `result` tinyint(1) NULL DEFAULT NULL COMMENT '是否校验通过(1:是,0:否)',
   `error_count` int(7) NULL DEFAULT 0 COMMENT '未通过数量(result=0时,数量大于0)',
-  `content` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '校验不通过考生列表',
+  `content` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '校验不通过考生列表',
   `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间',
   `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间',
   PRIMARY KEY (`id`) USING BTREE
@@ -84,13 +84,13 @@ CREATE TABLE `check_data`  (
 -- ----------------------------
 DROP TABLE IF EXISTS `check_data_error`;
 CREATE TABLE `check_data_error`  (
-     `id` bigint(20) NOT NULL AUTO_INCREMENT,
-     `check_data_id` bigint(20) NULL DEFAULT NULL,
-     `exam_number` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考号',
-     `student_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
-     `error_message` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '错误信息',
-     PRIMARY KEY (`id`) USING BTREE,
-     INDEX `idx_check_data_id`(`check_data_id`) USING BTREE
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `check_data_id` bigint(20) NULL DEFAULT NULL,
+  `exam_number` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考号',
+  `student_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `error_message` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '错误信息',
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `idx_check_data_id`(`check_data_id`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据校验错误数据' ROW_FORMAT = Dynamic;
 
 -- ----------------------------
@@ -168,7 +168,6 @@ CREATE TABLE `inspect_task`  (
   `score` int(11) NULL DEFAULT NULL,
   PRIMARY KEY (`id`) USING BTREE,
   INDEX `FK4e9mfahf522t4ej4y4yd065dh`(`paper_id`) USING BTREE,
-  CONSTRAINT `FK4e9mfahf522t4ej4y4yd065dh` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `inspect_task_ibfk_1` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `inspect_task_ibfk_10` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `inspect_task_ibfk_11` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -177,6 +176,7 @@ CREATE TABLE `inspect_task`  (
   CONSTRAINT `inspect_task_ibfk_14` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `inspect_task_ibfk_15` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `inspect_task_ibfk_16` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+  CONSTRAINT `inspect_task_ibfk_17` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `inspect_task_ibfk_2` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `inspect_task_ibfk_3` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `inspect_task_ibfk_4` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -208,7 +208,6 @@ CREATE TABLE `level`  (
   `rough_weight` int(11) NULL DEFAULT NULL COMMENT '粗分档典型值',
   PRIMARY KEY (`id`) USING BTREE,
   UNIQUE INDEX `idx_level_workId_code`(`work_id`, `code`) USING BTREE,
-  CONSTRAINT `FK3km0g7jbkt78oj20csqeh26f2` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `level_ibfk_1` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `level_ibfk_10` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `level_ibfk_11` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -217,6 +216,7 @@ CREATE TABLE `level`  (
   CONSTRAINT `level_ibfk_14` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `level_ibfk_15` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `level_ibfk_16` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+  CONSTRAINT `level_ibfk_17` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `level_ibfk_2` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `level_ibfk_3` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `level_ibfk_4` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -232,28 +232,30 @@ CREATE TABLE `level`  (
 -- ----------------------------
 DROP TABLE IF EXISTS `mark_log`;
 CREATE TABLE `mark_log`  (
- `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
- `work_id` bigint(20) NULL DEFAULT NULL COMMENT '考区id',
- `work_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
- `paper_id` bigint(20) NULL DEFAULT NULL COMMENT '试卷id',
- `subject` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '科目',
- `stage` int(1) NULL DEFAULT NULL COMMENT '试卷阶段,0:初始,1:分档,2:打分',
- `exam_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '准考证号',
- `student_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
- `create_user_id` bigint(20) NULL DEFAULT NULL COMMENT '操作人id',
- `create_user_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作人名字',
- `create_role` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作人角色',
- `oper_type` int(11) NULL DEFAULT NULL COMMENT '操作类型,1:分档,2:打分,3:回评档位,4:回评分数,5:档位打回,6:档位打回回评,7:一键定档,8:标准卷设置',
- `oper_data_before` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作前数据',
- `oper_data_after` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作后数据',
- `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
- `test` INT (1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 0 ,
- `create_time` datetime(0) NULL DEFAULT NULL COMMENT '操作时间',
- `login_time` datetime(0) NULL DEFAULT NULL COMMENT '登录时间(采集专用)',
- `logout_time` datetime(0) NULL DEFAULT NULL COMMENT '登出时间(采集专用)',
- PRIMARY KEY (`id`) USING BTREE,
- INDEX `union_001_index`(`create_user_id`, `oper_type`, `subject`, `exam_number`) USING BTREE,
- INDEX `idx_union_2`(`work_id`, `paper_id`, `oper_type`) USING BTREE
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `create_user_id` bigint(20) NULL DEFAULT NULL COMMENT '操作人id',
+  `create_user_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作人名字',
+  `create_role` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作人角色',
+  `subject` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '科目',
+  `exam_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '准考证号',
+  `student_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
+  `login_time` datetime(0) NULL DEFAULT NULL COMMENT '登录时间(采集专用)',
+  `logout_time` datetime(0) NULL DEFAULT NULL COMMENT '登出时间(采集专用)',
+  `oper_type` int(11) NULL DEFAULT NULL COMMENT '操作类型,1:分档,2:打分,3:回评档位,4:回评分数,5:档位打回,6:档位打回回评,7:一键定档,8:标准卷设置',
+  `oper_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `oper_data_before` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作前数据',
+  `oper_data_after` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作后数据',
+  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '操作时间',
+  `work_id` bigint(20) NULL DEFAULT NULL COMMENT '考区id',
+  `paper_id` bigint(20) NULL DEFAULT NULL COMMENT '试卷id',
+  `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+  `test` int(4) NULL DEFAULT 0,
+  `stage` int(1) NULL DEFAULT NULL COMMENT '试卷阶段,0:初始,1:分档,2:打分',
+  `work_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `stage_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `union_001_index`(`create_user_id`, `oper_type`, `subject`, `exam_number`) USING BTREE,
+  INDEX `idx_union_2`(`work_id`, `paper_id`, `oper_type`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '操作日志' ROW_FORMAT = Dynamic;
 
 -- ----------------------------
@@ -273,7 +275,6 @@ CREATE TABLE `mark_subject`  (
   `enable` tinyint(1) NULL DEFAULT 1 COMMENT '是否启用 0:禁用 1:启用',
   PRIMARY KEY (`id`) USING BTREE,
   INDEX `FK1tvc2mil1ebqgt08912t4hxqw`(`work_id`) USING BTREE,
-  CONSTRAINT `FK1tvc2mil1ebqgt08912t4hxqw` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_subject_ibfk_1` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_subject_ibfk_10` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_subject_ibfk_11` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -282,6 +283,7 @@ CREATE TABLE `mark_subject`  (
   CONSTRAINT `mark_subject_ibfk_14` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_subject_ibfk_15` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_subject_ibfk_16` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+  CONSTRAINT `mark_subject_ibfk_17` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_subject_ibfk_2` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_subject_ibfk_3` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_subject_ibfk_4` FOREIGN KEY (`work_id`) REFERENCES `work` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -342,7 +344,6 @@ CREATE TABLE `mark_task_level`  (
   INDEX `idx_mark_task_paper_id`(`paper_id`) USING BTREE,
   INDEX `question_id`(`question_id`, `marker_id`, `stage`, `result`, `is_rejected`, `random_seq`, `random_seq_new`) USING BTREE,
   INDEX `idx_union_1`(`marker_id`, `stage`, `result`, `random_seq`, `random_seq_new`) USING BTREE,
-  CONSTRAINT `FKq15ptavipihjxg24fo2hnuaiy` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_level_ibfk_1` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_level_ibfk_10` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_level_ibfk_11` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -351,6 +352,7 @@ CREATE TABLE `mark_task_level`  (
   CONSTRAINT `mark_task_level_ibfk_14` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_level_ibfk_15` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_level_ibfk_16` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+  CONSTRAINT `mark_task_level_ibfk_17` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_level_ibfk_2` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_level_ibfk_3` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_level_ibfk_4` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -373,7 +375,7 @@ CREATE TABLE `mark_task_rough_level`  (
   `level_value` int(11) NULL DEFAULT NULL,
   `marker_id` bigint(20) NOT NULL,
   `marker_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `origin_level` VARCHAR(10) NULL DEFAULT NULL,
+  `origin_level` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
   `question_id` bigint(20) NULL DEFAULT NULL,
   `result` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
   `level` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '最终档位(和paper表中level一致)',
@@ -397,7 +399,6 @@ CREATE TABLE `mark_task_rough_level`  (
   INDEX `idx_mark_task_paper_id`(`paper_id`) USING BTREE,
   INDEX `question_id`(`question_id`, `marker_id`, `stage`, `result`, `is_rejected`, `random_seq`, `random_seq_new`) USING BTREE,
   INDEX `idx_union_1`(`marker_id`, `stage`, `result`, `random_seq`, `random_seq_new`) USING BTREE,
-  CONSTRAINT `FKg9qn80erklpyev237eux96hkr` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_rough_level_ibfk_1` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_rough_level_ibfk_10` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_rough_level_ibfk_11` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -406,6 +407,7 @@ CREATE TABLE `mark_task_rough_level`  (
   CONSTRAINT `mark_task_rough_level_ibfk_14` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_rough_level_ibfk_15` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_rough_level_ibfk_16` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+  CONSTRAINT `mark_task_rough_level_ibfk_17` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_rough_level_ibfk_2` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_rough_level_ibfk_3` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_rough_level_ibfk_4` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -452,7 +454,6 @@ CREATE TABLE `mark_task_score`  (
   INDEX `idx_mark_task_paper_id`(`paper_id`) USING BTREE,
   INDEX `question_id`(`question_id`, `marker_id`, `stage`, `result`, `is_rejected`, `random_seq`, `random_seq_new`) USING BTREE,
   INDEX `idx_union_1`(`marker_id`, `stage`, `result`, `random_seq`, `random_seq_new`) USING BTREE,
-  CONSTRAINT `FK9sftme2i9tse0k40ulrsk8u6j` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_score_ibfk_1` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_score_ibfk_10` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_score_ibfk_11` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -461,6 +462,7 @@ CREATE TABLE `mark_task_score`  (
   CONSTRAINT `mark_task_score_ibfk_14` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_score_ibfk_15` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_score_ibfk_16` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+  CONSTRAINT `mark_task_score_ibfk_17` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_score_ibfk_2` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_score_ibfk_3` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_task_score_ibfk_4` FOREIGN KEY (`paper_id`) REFERENCES `paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -502,7 +504,6 @@ CREATE TABLE `mark_user`  (
   PRIMARY KEY (`id`) USING BTREE,
   UNIQUE INDEX `UK_cyf7k1neuij8lma85x19omo07`(`login_name`) USING BTREE,
   INDEX `FKinr4i9gbxj9njwo82s7cc89q5`(`group_id`) USING BTREE,
-  CONSTRAINT `FKinr4i9gbxj9njwo82s7cc89q5` FOREIGN KEY (`group_id`) REFERENCES `marker_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_user_ibfk_1` FOREIGN KEY (`group_id`) REFERENCES `marker_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_user_ibfk_10` FOREIGN KEY (`group_id`) REFERENCES `marker_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_user_ibfk_11` FOREIGN KEY (`group_id`) REFERENCES `marker_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -512,6 +513,7 @@ CREATE TABLE `mark_user`  (
   CONSTRAINT `mark_user_ibfk_15` FOREIGN KEY (`group_id`) REFERENCES `marker_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_user_ibfk_16` FOREIGN KEY (`group_id`) REFERENCES `marker_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_user_ibfk_17` FOREIGN KEY (`group_id`) REFERENCES `marker_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+  CONSTRAINT `mark_user_ibfk_18` FOREIGN KEY (`group_id`) REFERENCES `marker_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_user_ibfk_2` FOREIGN KEY (`group_id`) REFERENCES `marker_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_user_ibfk_3` FOREIGN KEY (`group_id`) REFERENCES `marker_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
   CONSTRAINT `mark_user_ibfk_4` FOREIGN KEY (`group_id`) REFERENCES `marker_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
@@ -587,7 +589,7 @@ CREATE TABLE `message`  (
   `send_user_id` bigint(20) NULL DEFAULT NULL COMMENT '发件人ID',
   `send_user_name` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发件人名称',
   `content` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息内容',
-  `receive_user` VARCHAR(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '收件人集合json',
+  `receive_user` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '收件人集合json',
   `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '消息管理' ROW_FORMAT = Dynamic;
@@ -597,14 +599,14 @@ CREATE TABLE `message`  (
 -- ----------------------------
 DROP TABLE IF EXISTS `message_receive`;
 CREATE TABLE `message_receive`  (
-    `id` bigint(20) NOT NULL AUTO_INCREMENT,
-    `message_id` bigint(20) NULL DEFAULT NULL,
-    `receive_user_id` bigint(20) NULL DEFAULT NULL,
-    `is_read` tinyint(1) NULL DEFAULT NULL,
-    PRIMARY KEY (`id`) USING BTREE,
-    INDEX `idx_message_id`(`message_id`) USING BTREE,
-    CONSTRAINT `FKsg879qydqr4dx6r0khxfkkick` FOREIGN KEY (`message_id`) REFERENCES `message` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
-    CONSTRAINT `message_receive_ibfk_1` FOREIGN KEY (`message_id`) REFERENCES `message` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `message_id` bigint(20) NULL DEFAULT NULL,
+  `receive_user_id` bigint(20) NULL DEFAULT NULL,
+  `is_read` tinyint(1) NULL DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `FKsg879qydqr4dx6r0khxfkkick`(`message_id`) USING BTREE,
+  CONSTRAINT `message_receive_ibfk_1` FOREIGN KEY (`message_id`) REFERENCES `message` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+  CONSTRAINT `message_receive_ibfk_2` FOREIGN KEY (`message_id`) REFERENCES `message` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
 ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '消息发送的用户' ROW_FORMAT = Dynamic;
 
 -- ----------------------------
@@ -676,10 +678,10 @@ DROP TABLE IF EXISTS `param_setting`;
 CREATE TABLE `param_setting`  (
   `id` bigint(10) NOT NULL AUTO_INCREMENT,
   `work_id` bigint(10) NULL DEFAULT NULL COMMENT '工作id',
-  `collect_config` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '采集规则参数',
-  `level_config` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '细分档规则参数',
-  `rough_level_config` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '粗分档规则参数',
-  `score_config` VARCHAR(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '打分规则参数',
+  `collect_config` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '采集规则参数',
+  `level_config` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '细分档规则参数',
+  `rough_level_config` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '粗分档规则参数',
+  `score_config` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '打分规则参数',
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '参数设置' ROW_FORMAT = Dynamic;
 
@@ -717,7 +719,7 @@ CREATE TABLE `task_publish_setting`  (
   `code` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '档位',
   `total_count` int(11) NULL DEFAULT NULL COMMENT '总数量',
   `success_count` int(11) NULL DEFAULT NULL COMMENT '已评数量',
-  `wait_count` INT(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '待评数量',
+  `wait_count` int(11) NULL DEFAULT NULL COMMENT '待评数量',
   `sort_rule` int(1) NULL DEFAULT NULL COMMENT '排序规则:0-乱序,1-定序',
   `display_number` int(1) NULL DEFAULT NULL COMMENT '是否显示序号:0-否,1-是',
   `task_count` int(11) NULL DEFAULT NULL COMMENT '本次任务数',

+ 2 - 0
sql/清空所有数据脚本.sql

@@ -1,6 +1,7 @@
 delete from attachment;
 delete from change_level;
 delete from check_data;
+delete from check_data_error;
 delete from exam_question;
 delete from exam_score_prop;
 delete from inspect_range;
@@ -31,6 +32,7 @@ delete from `work`;
 alter table attachment AUTO_INCREMENT 1;
 alter table change_level AUTO_INCREMENT 1;
 alter table check_data AUTO_INCREMENT 1;
+alter table check_data_error AUTO_INCREMENT 1;
 alter table exam_question AUTO_INCREMENT 1;
 alter table exam_score_prop AUTO_INCREMENT 1;
 alter table inspect_range AUTO_INCREMENT 1;

+ 40 - 15
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/PaperExporter.java

@@ -4,6 +4,7 @@ import cn.com.qmth.stmms.ms.admin.dto.MarkExpDTO;
 import cn.com.qmth.stmms.ms.admin.dto.OneClickExpDTO;
 import cn.com.qmth.stmms.ms.admin.dto.PaperExpDTO;
 import cn.com.qmth.stmms.ms.admin.dto.SampleExpDTO;
+import cn.com.qmth.stmms.ms.commons.utils.DigitalToChineseUtil;
 import cn.com.qmth.stmms.ms.commons.utils.PdfUtils;
 import cn.com.qmth.stmms.ms.commons.utils.excel.ExportUtils;
 import cn.com.qmth.stmms.ms.core.domain.*;
@@ -78,13 +79,24 @@ public class PaperExporter {
         //科目名称
         String subjectName = Objects.isNull(markSubject) ? subject.name() : markSubject.getName();
         List<SampleExpDTO> sampleExpDTOS = new ArrayList<>();
-        List<Paper> papers = paperRepo.findByWorkIdAndSubjectAndIsSampleTrue(workId, subject);
-        for (Paper paper : papers) {
-            SampleExpDTO sampleExpDTO = new SampleExpDTO();
-            sampleExpDTO.setSubject(subjectName);
-            sampleExpDTO.setExamNumber(paper.getExamNumber());
-            sampleExpDTO.setLevel(paper.getLevel());
-            sampleExpDTOS.add(sampleExpDTO);
+        List<Paper> papers = new ArrayList<>();
+        if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
+            papers = paperRepo.findByWorkIdAndSubjectAndIsRoughSampleTrue(workId, subject);
+        } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
+            papers = paperRepo.findByWorkIdAndSubjectAndIsSampleTrue(workId, subject);
+        }
+        if (!papers.isEmpty()) {
+            for (Paper paper : papers) {
+                SampleExpDTO sampleExpDTO = new SampleExpDTO();
+                sampleExpDTO.setSubject(subjectName);
+                sampleExpDTO.setExamNumber(paper.getExamNumber());
+                if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
+                    sampleExpDTO.setLevel(DigitalToChineseUtil.int2chineseNum(Integer.parseInt(paper.getRoughLevel())));
+                } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
+                    sampleExpDTO.setLevel(paper.getLevel());
+                }
+                sampleExpDTOS.add(sampleExpDTO);
+            }
         }
         ExportUtils.exportEXCEL("标准卷信息", SampleExpDTO.class, sampleExpDTOS, response);
     }
@@ -102,9 +114,9 @@ public class PaperExporter {
         String subjectName = Objects.isNull(markSubject) ? subject.name() : markSubject.getName();
         List<OneClickExpDTO> oneClickExpDTOS = new ArrayList<>();
         List<Paper> papers = null;
-        if(MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())){
+        if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
             papers = paperRepo.findByWorkIdAndSubjectAndIsRoughOneClickTrue(workId, subject);
-        } else if(MarkStage.LEVEL.equals(markSubject.getStage())){
+        } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
             papers = paperRepo.findByWorkIdAndSubjectAndIsOneClickTrue(workId, subject);
         }
         if (papers != null && papers.size() > 0) {
@@ -118,8 +130,15 @@ public class PaperExporter {
                 oneClickExpDTO.setSeqNo(i + 1);
                 Paper paper = paperRepo.findOne(markLog.getPaperId());
                 oneClickExpDTO.setSecretNumber(paper == null ? "" : paper.getSecretNumber());
-                oneClickExpDTO.setOriginLevel(markLog.getOperDataBefore() == null ? "-" : markLog.getOperDataBefore());
-                oneClickExpDTO.setLevel(markLog.getOperDataAfter());
+                if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
+                    oneClickExpDTO.setOriginLevel(markLog.getOperDataBefore() == null ? "-" : markLog.getOperDataBefore().equals("-") ?
+                            markLog.getOperDataBefore() : DigitalToChineseUtil.int2chineseNum(Integer.parseInt(markLog.getOperDataBefore())))
+                    ;
+                    oneClickExpDTO.setLevel(DigitalToChineseUtil.int2chineseNum(Integer.parseInt(markLog.getOperDataAfter())));
+                } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
+                    oneClickExpDTO.setOriginLevel(markLog.getOperDataBefore() == null ? "-" : markLog.getOperDataBefore());
+                    oneClickExpDTO.setLevel(markLog.getOperDataAfter());
+                }
                 oneClickExpDTOS.add(oneClickExpDTO);
             }
         }
@@ -138,15 +157,21 @@ public class PaperExporter {
         MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
         //科目名称
         String subjectName = Objects.isNull(markSubject) ? subject.name() : markSubject.getName();
-        List<ChangeLevel> changeLevels = changeLevelRepo.findByWorkIdAndSubjectAndAuditStatus(workId, subject.name());
+        List<ChangeLevel> changeLevels = changeLevelRepo.findByWorkIdAndSubjectAndAuditStatusAndStage(workId, subject.name(), markSubject.getStage());
 
         List<JSONObject> datas = new ArrayList<>();
         for (ChangeLevel changeLevel : changeLevels) {
             JSONObject object = new JSONObject();
             Paper paper = paperRepo.findOne(changeLevel.getPaperId());
             object.put("secretNumber", paper.getSecretNumber());
-            object.put("oldLevel", changeLevel.getOriginalLevel());
-            object.put("newLevel", changeLevel.getSuggestLevel());
+            // 细分档改的是粗分档大档位
+            if (MarkStage.LEVEL.equals(markSubject.getStage())) {
+                object.put("oldLevel", DigitalToChineseUtil.int2chineseNum(Integer.parseInt(changeLevel.getOriginalLevel())));
+                object.put("newLevel", DigitalToChineseUtil.int2chineseNum(Integer.parseInt(changeLevel.getSuggestLevel())));
+            } else {
+                object.put("oldLevel", changeLevel.getOriginalLevel());
+                object.put("newLevel", changeLevel.getSuggestLevel());
+            }
             datas.add(object);
         }
         PdfUtils.exportPdf(subjectName + "科目改档签字表", datas, response);
@@ -155,7 +180,7 @@ public class PaperExporter {
     /**
      * 导出标记试卷信息
      *
-     * @param workId 工作ID
+     * @param workId   工作ID
      * @param response response对象
      */
     @GetMapping("{workId}/mark")

+ 3 - 3
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/ScoreExporter.java

@@ -457,9 +457,9 @@ public class ScoreExporter {
         //测试-导出档位成绩表
         StringBuilder sbAll = null;
         if (!imageConfig.isCustomSubject()) {
-            String scSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SC' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SC' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SC') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL.ordinal() + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_rough_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SC') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SC' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SC' ";
-            String smSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SM' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SM' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SM') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL.ordinal() + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_rough_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SM') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SM' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SM' ";
-            String sxSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SX' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SX' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SX') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL.ordinal() + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_rough_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SX') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SX' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SX' ";
+            String scSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_rough_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SC' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SC' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SC') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL.ordinal() + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_rough_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SC') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SC' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SC' ";
+            String smSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_rough_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SM' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SM' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SM') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL.ordinal() + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_rough_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SM') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SM' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SM' ";
+            String sxSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_rough_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SX' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SX' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SX') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL.ordinal() + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_rough_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SX') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SX' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SX' ";
             //拼装问号
             scSql = sqlUtil.sqlPrint(scSql, workId, workId, workId, workId, workId, workId);
             smSql = sqlUtil.sqlPrint(smSql, workId, workId, workId, workId, workId, workId);

+ 5 - 3
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/WorkService.java

@@ -44,7 +44,7 @@ public class WorkService {
     ImageConfig imageConfig;
 
     @Autowired
-    BuiltInParamUtils bultInAccountUtil;
+    BuiltInParamUtils builtInParamUtils;
 
     /**
      * 删除评卷工作
@@ -59,6 +59,8 @@ public class WorkService {
         }
         workRepo.delete(workId);
 
+        // 删除参数
+        paramSettingRepo.deleteByWorkId(workId);
     }
 
     /**
@@ -98,10 +100,10 @@ public class WorkService {
         ParamCache.cacheParam(ParamSettingTypeEnum.SCORE, work.getId(), paramSetting.getScoreConfig());
 
         // 设置默认档位
-        bultInAccountUtil.createLevels(work.getId());
+        builtInParamUtils.createLevels(work.getId());
 
         //生成内置账号
-        bultInAccountUtil.createAccount(work.getId());
+        builtInParamUtils.createAccount(work.getId());
     }
 
 }

+ 0 - 2
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/ChangeLevel.java

@@ -1,7 +1,5 @@
 package cn.com.qmth.stmms.ms.core.domain;
 
-import cn.com.qmth.stmms.ms.core.vo.Subject;
-
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
 import java.util.Date;

+ 2 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/MarkLog.java

@@ -76,7 +76,6 @@ public class MarkLog implements Serializable {
     @Column(name = "is_test")
     private int test;
 
-    @Transient
     private String stageName;
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -310,6 +309,8 @@ public class MarkLog implements Serializable {
         this.logoutTime = logoutTime;
     }
 
+    @Basic
+    @Column(name = "stage_name")
     public String getStageName() {
         return stageName;
     }

+ 1 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Paper.java

@@ -354,7 +354,7 @@ public class Paper implements Serializable {
         this.setRoughLevel(level);
         this.setRejected(false);
         this.setArbitrated(false);
-        this.setRedoRoughLevel(null);
+        this.setRedoLevel(null);
         this.setUpdatedOn(new Date());
     }
 

+ 8 - 13
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/ChangeLevelRepo.java

@@ -11,26 +11,21 @@ import java.util.List;
 
 @Repository
 public interface ChangeLevelRepo extends JpaRepository<ChangeLevel, Long>, JpaSpecificationExecutor {
-    @Query("select s from ChangeLevel s where s.workId = ?1 and s.subject = ?2 and s.paperId = ?3 and s.auditStatus = 0")
-    ChangeLevel findByWorkIdAndSubjectAndPaperId(Long workId, String subject, Long paperId);
 
-    @Query("select s from ChangeLevel s where s.workId = ?1 and s.subject = ?2 and s.auditStatus = 1")
-    List<ChangeLevel> findByWorkIdAndSubjectAndAuditStatus(Long workId, String name);
+    @Query("select s from ChangeLevel s where s.workId = ?1 and s.subject = ?2 and s.stage = ?3 and s.auditStatus = 1")
+    List<ChangeLevel> findByWorkIdAndSubjectAndAuditStatusAndStage(Long workId, String subject, MarkStage stage);
 
-    @Query("select s from ChangeLevel s where s.workId = ?1 and s.subject = ?2 and s.paperId = ?3")
-    List<ChangeLevel> findAllByWorkIdAndSubjectAndPaperId(Long workId, String name, Long paperId);
-
-    @Query("select s from ChangeLevel s where s.workId = ?1 and s.subject = ?2 and s.paperId = ?3 and s.auditStatus = 1 and s.isCurr = 1")
-    ChangeLevel findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndIsCurr(Long workId, String name, Long paperId);
+    @Query("select s from ChangeLevel s where s.workId = ?1 and s.subject = ?2 and s.stage = ?3 and s.paperId = ?4 and s.auditStatus = 1 and s.isCurr = 1")
+    ChangeLevel findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndStageAndIsCurr(Long workId, String subject, MarkStage stage, Long paperId);
 
-    void deleteByWorkIdAndSubject(Long workId, String name);
+    void deleteByWorkIdAndSubjectAndStage(Long workId, String subject, MarkStage stage);
 
     @Query("select s from ChangeLevel s where s.workId = ?1 and s.subject = ?2 and s.stage = ?3 and s.paperId = ?4 and s.auditStatus = 1 and s.isCurr = 1")
-    ChangeLevel findByWorkIdAndSubjectAndStageAndPaperIdAndAuditStatusAndIsCurr(Long workId, String name, MarkStage stage, Long paperId);
+    ChangeLevel findByWorkIdAndSubjectAndStageAndPaperIdAndAuditStatusAndIsCurr(Long workId, String subject, MarkStage stage, Long paperId);
 
     @Query("select s from ChangeLevel s where s.workId = ?1 and s.subject = ?2 and s.stage = ?3 and s.paperId = ?4")
-    List<ChangeLevel> findAllByWorkIdAndSubjectAndStageAndPaperId(Long workId, String name, MarkStage stage, Long paperId);
+    List<ChangeLevel> findAllByWorkIdAndSubjectAndStageAndPaperId(Long workId, String subject, MarkStage stage, Long paperId);
 
     @Query("select s from ChangeLevel s where s.workId = ?1 and s.subject = ?2 and s.stage = ?3 and s.paperId = ?4 and s.auditStatus = 0")
-    ChangeLevel findByWorkIdAndSubjectAndStageAndPaperId(Long workId, String name, MarkStage stage, Long paperId);
+    ChangeLevel findByWorkIdAndSubjectAndStageAndPaperId(Long workId, String subject, MarkStage stage, Long paperId);
 }

+ 1 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkLogRepo.java

@@ -49,6 +49,6 @@ public interface MarkLogRepo extends JpaRepository<MarkLog, Long>, JpaSpecificat
     @Query("select count(distinct s.createTime) from MarkLog s where s.workId = ?1 and s.paperId = ?2 and s.operType = ?3")
     int countByWorkIdAndPaperIdAndOperType(Long workId, Long id, int id1);
 
-    void deleteByWorkIdAndSubjectAndStage(Long workId, String name, MarkStage stage);
+    void deleteByWorkIdAndSubjectAndStage(Long workId, String subject, MarkStage stage);
 
 }

+ 7 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/PaperRepo.java

@@ -234,6 +234,8 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
 
     int countByWorkIdAndSubjectAndScoreBatchNoIsNotNullAndScoreIsNull(Long workId, Subject subject);
 
+    List<Paper> findByWorkIdAndSubjectAndIsRoughSampleTrue(Long workId, Subject subject);
+
     List<Paper> findByWorkIdAndSubjectAndIsSampleTrue(Long workId, Subject subject);
 
     @Query("select max(p.scoreBatchNo) from Paper p where p.questionId = ?1")
@@ -314,7 +316,11 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
     int countByWorkIdAndSubjectAndIsMissingFalse(Long workId, Subject subject);
 
     @Modifying
-    @Query("update Paper s set s.level = ?2, s.redoLevel = null where s.id = ?1")
+    @Query("update Paper s set s.roughLevel = ?2, s.redoLevel = null, s.isShift = false , s.isShiftScore = false where s.id = ?1")
+    void updateRoughLevelById(Long paperId, String originalLevel);
+
+    @Modifying
+    @Query("update Paper s set s.level = ?2, s.redoLevel = null, s.isShift = false , s.isShiftScore = false where s.id = ?1")
     void updateLevelById(Long paperId, String originalLevel);
 
     long countByWorkIdAndSubjectAndLevelAndTest(Long workId, Subject subject, String valueOf, int test);

+ 2 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/ParamSettingRepo.java

@@ -7,4 +7,6 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface ParamSettingRepo extends JpaRepository<ParamSetting, Long> {
     ParamSetting findByWorkId(Long id);
+
+    void deleteByWorkId(Long workId);
 }

+ 77 - 35
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkSubjectApi.java

@@ -12,6 +12,7 @@ import cn.com.qmth.stmms.ms.marking.assembler.QuestionStatAssembler;
 import cn.com.qmth.stmms.ms.marking.dto.LevelStatDTO;
 import cn.com.qmth.stmms.ms.marking.dto.LevleProgressDTO;
 import cn.com.qmth.stmms.ms.marking.dto.QuestionStatDTO;
+import cn.com.qmth.stmms.ms.marking.service.DetermineRoughLevelService;
 import cn.com.qmth.stmms.ms.marking.service.MarkerGroupLeaderService;
 import cn.com.qmth.stmms.ms.marking.service.StageControlService;
 import com.alibaba.fastjson.JSONObject;
@@ -236,43 +237,84 @@ public class MarkSubjectApi {
     @RequestMapping(value = "{markSubject}/stat/levels", method = RequestMethod.GET)
     public List<LevelStatDTO> levelStat(@PathVariable MarkSubject markSubject, @RequestParam Long questionId) {
         List<LevelStatDTO> levelStatDTOs = new ArrayList<>();
-        paperRepo.countGroupByLevelAll(questionId, markSubject.getTest())
-                .forEach(o -> levelStatDTOs.add(levelStatAssembler.toDTO(o)));
-        List<Level> levels = levelRepo.findByWorkId(markSubject.getWorkId());
-        for (Level level : levels) {
-            long count = levelStatDTOs.stream().filter(l -> String.valueOf(l.getId()).equals(level.getCode())).count();
-            //没有该档位,新增
-            if (count == 0) {
-                LevelStatDTO dto = new LevelStatDTO();
-                dto.setId(level.getCode());
-                dto.setCount(0);
-                dto.setPercent(0.0);
-                levelStatDTOs.add(dto);
+        if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
+            paperRepo.countGroupByRoughLevelAll(questionId, markSubject.getTest())
+                    .forEach(o -> levelStatDTOs.add(levelStatAssembler.toDTO(o)));
+            List<Level> levels = levelRepo.findByWorkId(markSubject.getWorkId());
+            List<RoughLevel> roughLevels = DetermineRoughLevelService.parseRoughLevels(levels);
+            for (RoughLevel level : roughLevels) {
+                long count = levelStatDTOs.stream().filter(l -> String.valueOf(l.getId()).equals(level.getRoughCode())).count();
+                //没有该档位,新增
+                if (count == 0) {
+                    LevelStatDTO dto = new LevelStatDTO();
+                    dto.setId(level.getRoughCode());
+                    dto.setCount(0);
+                    dto.setPercent(0.0);
+                    levelStatDTOs.add(dto);
+                }
             }
-        }
-        //当前考区总数
-        long total = paperRepo.countByWorkIdAndQuestionIdAndIsMissingIsFalseAndTest(markSubject.getWorkId(), questionId, markSubject.getTest());
-        //所有考区总数
-        long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTest(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getTest());
-        levelStatDTOs.forEach(o -> {
-            if (o.getId() != null) {
-                //当前考区档位占比
-                double p = total == 0 ? 0 : (double) o.getCount() / total * 100;
-                BigDecimal bd = new BigDecimal(p).setScale(3, RoundingMode.HALF_EVEN);
-                o.setPercent(bd.doubleValue());
-                //考区阈值
-                Level level = levels.stream().filter(l -> l.getCode().equals(o.getId())).collect(Collectors.toList()).get(0);
-                o.setKdpt(level.getKdpt());
-                //所有考区档位数量
-                long gcount = paperRepo.countByWorkIdAndSubjectAndLevelAndTestAndBatchNoNotNull(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(o.getId()), markSubject.getTest());
-                o.setGcount((int) gcount);
-                //所有考区档位占比
-                double gp = gtotal == 0 ? 0 : (double) o.getGcount() / gtotal * 100;
-                BigDecimal gbd = new BigDecimal(gp).setScale(3, RoundingMode.HALF_EVEN);
-                o.setGpercent(gbd.doubleValue());
-                o.setPt(level.getPt());
+            //当前考区总数
+            long total = paperRepo.countByWorkIdAndQuestionIdAndIsMissingIsFalseAndTest(markSubject.getWorkId(), questionId, markSubject.getTest());
+            //所有考区总数
+            long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTest(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getTest());
+            levelStatDTOs.forEach(o -> {
+                if (o.getId() != null) {
+                    //当前考区档位占比
+                    double p = total == 0 ? 0 : (double) o.getCount() / total * 100;
+                    BigDecimal bd = new BigDecimal(p).setScale(3, RoundingMode.HALF_EVEN);
+                    o.setPercent(bd.doubleValue());
+                    //考区阈值
+                    o.setKdpt(0);
+                    //所有考区档位数量
+                    long gcount = paperRepo.countByWorkIdAndSubjectAndRoughLevelAndTestAndRoughBatchNoNotNull(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(o.getId()), markSubject.getTest());
+                    o.setGcount((int) gcount);
+                    //所有考区档位占比
+                    double gp = gtotal == 0 ? 0 : (double) o.getGcount() / gtotal * 100;
+                    BigDecimal gbd = new BigDecimal(gp).setScale(3, RoundingMode.HALF_EVEN);
+                    o.setGpercent(gbd.doubleValue());
+                    o.setPt(0);
+                }
+            });
+        } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
+            paperRepo.countGroupByLevelAll(questionId, markSubject.getTest())
+                    .forEach(o -> levelStatDTOs.add(levelStatAssembler.toDTO(o)));
+            List<Level> levels = levelRepo.findByWorkId(markSubject.getWorkId());
+            for (Level level : levels) {
+                long count = levelStatDTOs.stream().filter(l -> String.valueOf(l.getId()).equals(level.getCode())).count();
+                //没有该档位,新增
+                if (count == 0) {
+                    LevelStatDTO dto = new LevelStatDTO();
+                    dto.setId(level.getCode());
+                    dto.setCount(0);
+                    dto.setPercent(0.0);
+                    levelStatDTOs.add(dto);
+                }
             }
-        });
+            //当前考区总数
+            long total = paperRepo.countByWorkIdAndQuestionIdAndIsMissingIsFalseAndTest(markSubject.getWorkId(), questionId, markSubject.getTest());
+            //所有考区总数
+            long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTest(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getTest());
+            levelStatDTOs.forEach(o -> {
+                if (o.getId() != null) {
+                    //当前考区档位占比
+                    double p = total == 0 ? 0 : (double) o.getCount() / total * 100;
+                    BigDecimal bd = new BigDecimal(p).setScale(3, RoundingMode.HALF_EVEN);
+                    o.setPercent(bd.doubleValue());
+                    //考区阈值
+                    Level level = levels.stream().filter(l -> l.getCode().equals(o.getId())).collect(Collectors.toList()).get(0);
+                    o.setKdpt(level.getKdpt());
+                    //所有考区档位数量
+                    long gcount = paperRepo.countByWorkIdAndSubjectAndLevelAndTestAndBatchNoNotNull(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(o.getId()), markSubject.getTest());
+                    o.setGcount((int) gcount);
+                    //所有考区档位占比
+                    double gp = gtotal == 0 ? 0 : (double) o.getGcount() / gtotal * 100;
+                    BigDecimal gbd = new BigDecimal(gp).setScale(3, RoundingMode.HALF_EVEN);
+                    o.setGpercent(gbd.doubleValue());
+                    o.setPt(level.getPt());
+                }
+            });
+        }
+
         Collections.sort(levelStatDTOs, (o1, o2) -> {
             if (o1.getId() == null || o2.getId() == null) {
                 return 1;

+ 2 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.ms.marking.api;
 
+import cn.com.qmth.stmms.ms.commons.utils.DigitalToChineseUtil;
 import cn.com.qmth.stmms.ms.commons.utils.ServletUtil;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
 import cn.com.qmth.stmms.ms.core.domain.*;
@@ -324,7 +325,7 @@ public class MarkTaskApi {
                 levelDetailDTO.setWorkId(workId);
                 levelDetailDTO.setSubjectName(markSubject.getName());
                 //档位
-                levelDetailDTO.setCode(level.getRoughCode());
+                levelDetailDTO.setCode(DigitalToChineseUtil.int2chineseNum(Integer.parseInt(level.getRoughCode())));
                 levelDetailDTO.setMinScore(level.getMinScore());
                 levelDetailDTO.setMaxScore(level.getMaxScore());
                 //数量

+ 4 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/PaperApi.java

@@ -351,9 +351,13 @@ public class PaperApi {
             }
             if (arbi != null) {
                 predicates.add(builder.equal(root.get("isArbitrated"), arbi));
+            } else {
+                predicates.add(builder.equal(root.get("isArbitrated"), false));
             }
             if (reject != null) {
                 predicates.add(builder.equal(root.get("isRejected"), reject));
+            } else {
+                predicates.add(builder.equal(root.get("isRejected"), false));
             }
             if (isSample != null) {
                 if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {

+ 1 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskLevelAssembler.java

@@ -167,7 +167,7 @@ public class MarkTaskLevelAssembler {
             Paper paper = markTask.getPaper();
             if (paper.isShift()) {
                 markTaskDTO.setLevel(markTask.getResult());
-                ChangeLevel changeLevel = changeLevelRepo.findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndIsCurr(markTask.getWorkId(), markTask.getSubject().name(), paper.getId());
+                ChangeLevel changeLevel = changeLevelRepo.findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndStageAndIsCurr(markTask.getWorkId(), markTask.getSubject().name(), markTask.getStage(), paper.getId());
                 markTaskDTO.setOriginLevel(changeLevel != null ? changeLevel.getOriginalLevel() : "");
             }
             if (paper.isShiftScore()) {

+ 2 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskRoughLevelAssembler.java

@@ -81,6 +81,7 @@ public class MarkTaskRoughLevelAssembler {
             }
             markTaskDTO.setThumbSrc(thumbSrc);
             markTaskDTO.setImgSrc(imgSrc);
+            markTaskDTO.setRoughSample(paper.isRoughSample());
             markTaskDTO.setSample(paper.isSample());
             markTaskDTO.setMarkByLeader(paper.isMarkByLeader());
             markTaskDTO.setRandomSeqNew(markTask.getRandomSeqNew());
@@ -167,7 +168,7 @@ public class MarkTaskRoughLevelAssembler {
             Paper paper = markTask.getPaper();
             if (paper.isShift()) {
                 markTaskDTO.setLevel(markTask.getResult());
-                ChangeLevel changeLevel = changeLevelRepo.findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndIsCurr(markTask.getWorkId(), markTask.getSubject().name(), paper.getId());
+                ChangeLevel changeLevel = changeLevelRepo.findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndStageAndIsCurr(markTask.getWorkId(), markTask.getSubject().name(), markTask.getStage(), paper.getId());
                 markTaskDTO.setOriginLevel(changeLevel != null ? changeLevel.getOriginalLevel() : "");
             }
             if (paper.isShiftScore()) {

+ 1 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskScoreAssembler.java

@@ -164,7 +164,7 @@ public class MarkTaskScoreAssembler {
             Paper paper = markTask.getPaper();
             if (paper.isShift()) {
                 markTaskDTO.setLevel(markTask.getResult());
-                ChangeLevel changeLevel = changeLevelRepo.findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndIsCurr(markTask.getWorkId(), markTask.getSubject().name(), paper.getId());
+                ChangeLevel changeLevel = changeLevelRepo.findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndStageAndIsCurr(markTask.getWorkId(), markTask.getSubject().name(),markTask.getStage(), paper.getId());
                 markTaskDTO.setOriginLevel(changeLevel != null ? changeLevel.getOriginalLevel() : "");
             }
             if (paper.isShiftScore()) {

+ 1 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/PaperAssembler.java

@@ -111,7 +111,7 @@ public class PaperAssembler {
             int rejectedCount = markLogRepo.countByWorkIdAndPaperIdAndOperType(paper.getWorkId(), paper.getId(), MarkLogOperType.CALLBACK_LEVEl.getId());
             paperDTO.setRejectedCount(rejectedCount);
             paperDTO.setSortSum(paper.getSortNum());
-            ChangeLevel changeLevel = changeLevelRepo.findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndIsCurr(paper.getWorkId(), paper.getSubject().name(), paper.getId());
+            ChangeLevel changeLevel = changeLevelRepo.findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndStageAndIsCurr(paper.getWorkId(), paper.getSubject().name(), markSubject.getStage(), paper.getId());
             paperDTO.setOriginLevel(changeLevel != null ? changeLevel.getOriginalLevel() : "");
         }
         return paperDTO;

+ 9 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/MarkTaskDTO.java

@@ -25,6 +25,7 @@ public class MarkTaskDTO implements Serializable{
     private Date updatedOn;
     private String imgSrc;
     private String thumbSrc;
+    private boolean isRoughSample;
     private boolean isSample;
     private boolean markByLeader;
     private boolean oldRejected;
@@ -168,6 +169,14 @@ public class MarkTaskDTO implements Serializable{
         this.thumbSrc = thumbSrc;
     }
 
+    public boolean isRoughSample() {
+        return isRoughSample;
+    }
+
+    public void setRoughSample(boolean roughSample) {
+        isRoughSample = roughSample;
+    }
+
     public boolean isSample() {
         return isSample;
     }

+ 1 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkLogService.java

@@ -158,7 +158,7 @@ public class MarkLogService {
         Work work = workRepo.findOne(paper.getWorkId());
         Long userId = ServletUtil.getUserId();
         MarkUser markUser = markUserRepo.findOne(userId);
-        MarkLogOperType markLogOperType = null;
+        MarkLogOperType markLogOperType;
         String operDateBefore;
         String operDateAfter;
         // 标准卷

+ 4 - 4
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkTaskLevelService.java

@@ -340,10 +340,10 @@ public class MarkTaskLevelService {
         Specification<MarkTaskLevel> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
 
-//            if (ParamCache.roughLevelConfigMap.get(String.valueOf(workId)).getLevelShowAllPaper() == 0) {
-//                Long batchNo = paperRepo.findMaxBatchNoByWorkIdAndSubject(workId, subject);
-//                predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
-//            }
+            if (ParamCache.levelConfigMap.get(String.valueOf(workId)).getLevelShowAllPaper() == 0) {
+                Long batchNo = paperRepo.findMaxBatchNoByWorkIdAndSubject(workId, subject);
+                predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
+            }
 
             predicates.add(builder.equal(root.get("workId"), workId));
             predicates.add(builder.equal(root.get("questionId"), questionId));

+ 0 - 41
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkTaskRoughLevelService.java

@@ -258,47 +258,6 @@ public class MarkTaskRoughLevelService {
         }
     }
 
-    public List<MarkTaskRoughLevel> getBySecretNumberLevel(Long workId, Subject subject, String secretNumber, int test) {
-        return markTaskRoughLevelRepo.findByWorkIdAndSubjectAndSecretNumberAndTest(workId, subject, secretNumber, test);
-    }
-
-    public PageableDTO shiftLevel(Long markerId, Long workId, Boolean isShift, Boolean isShiftScore, Long questionId, Pageable pageable) {
-        List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
-        Specification<MarkTaskLevel> specification = (root, query, builder) -> {
-            List<Predicate> predicates = new ArrayList<>();
-            predicates.add(builder.equal(root.get("questionId"), questionId));
-            predicates.add(builder.equal(root.get("markerId"), markerId));
-            //查询
-            predicates.add(builder.equal(root.get("paper").get("isShift"), isShift));
-            predicates.add(builder.equal(root.get("stage"), MarkStage.LEVEL));
-            predicates.add(builder.isNull(root.get("result")));
-            return builder.and(predicates.toArray(new Predicate[predicates.size()]));
-        };
-        Sort sort = new Sort("paper.level", "serialNumber", "randomSeq");
-        Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
-        Page<MarkTaskRoughLevel> markTasks = markTaskRoughLevelRepo.findAll(specification, pageable1);
-
-        markTasks.getContent().forEach(m -> markTaskDTOs.add(markTaskRoughLevelAssembler.toShiftDTO(m)));
-        return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
-    }
-
-    public PaperDTO getByTaskSecretNumberLevel(Long questionId, String sn) {
-        PaperDTO paperDTO = null;
-        Specification<MarkTaskLevel> specification = (root, query, builder) -> {
-            List<Predicate> predicates = new ArrayList<>();
-            predicates.add(builder.equal(root.get("paper").get("questionId"), questionId));
-            if (sn != null) {
-                predicates.add(builder.equal(root.get("secretNumber"), sn));
-            }
-            return builder.and(predicates.toArray(new Predicate[predicates.size()]));
-        };
-        Optional<MarkTaskRoughLevel> taskOptional = markTaskRoughLevelRepo.findAll(specification, new PageRequest(0, 1)).getContent().stream().findFirst();
-        if (taskOptional.isPresent()) {
-            paperDTO = paperAssembler.toDTO(taskOptional.get().getPaper());
-        }
-        return paperDTO;
-    }
-
     public PageableDTO markedPapers(Long workId, Subject subject, Long markerId, Long questionId, Pageable pageable) {
         List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
         Specification<MarkTaskRoughLevel> specification = (root, query, builder) -> {

+ 1 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkTaskScoreService.java

@@ -313,7 +313,7 @@ public class MarkTaskScoreService {
         Specification<MarkTaskScore> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
 
-            if (ParamCache.roughLevelConfigMap.get(String.valueOf(workId)).getLevelShowAllPaper() == 0) {
+            if (ParamCache.scoreConfigMap.get(String.valueOf(workId)).getScoreShowAllPaper() == 0) {
                 Long batchNo = paperRepo.findMaxScoreBatchNoByWorkIdAndSubject(workId, subject);
                 predicates.add(builder.equal(root.get("paper").get("scoreBatchNo"), batchNo));
             }

+ 1 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingLevelService.java

@@ -268,7 +268,7 @@ public class MarkingLevelService {
     public Paper levelMarkPaper(Paper paper, String level, boolean isSample) {
         List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
 
-        MarkLog markLog = markLogService.markingPaper(MarkStage.ROUGH_LEVEL, paper, level, isSample);
+        MarkLog markLog = markLogService.markingPaper(MarkStage.LEVEL, paper, level, isSample);
 
         paper.determineLevel(level);
         paper.setMarkByLeader(true);

+ 26 - 4
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingService.java

@@ -16,9 +16,11 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -94,6 +96,20 @@ public class MarkingService {
             markTaskLevelRepo.deleteByWorkIdAndSubject(workId, subject);
             // 清除paper中的档位,各种状态
             paperRepo.updateLevelByWorkIdAndSubject(workId, subject.name());
+
+            // 还原改档审核同意前的档位(第一步)
+            List<ChangeLevel> changeLevels = changeLevelRepo.findByWorkIdAndSubjectAndAuditStatusAndStage(workId, subject.name(), stage);
+            Map<Long, List<ChangeLevel>> changeLevelCollects = changeLevels.stream().collect(Collectors.groupingBy(ChangeLevel::getPaperId));
+            for (Map.Entry<Long, List<ChangeLevel>> entry : changeLevelCollects.entrySet()) {
+                List<ChangeLevel> changeLevelsList = entry.getValue();
+                if(!changeLevelsList.isEmpty()){
+                    changeLevelsList.sort(Comparator.comparing(ChangeLevel::getCreateDate).reversed());
+                    ChangeLevel changeLevel =changeLevelsList.get(0);
+                    paperRepo.updateRoughLevelById(changeLevel.getPaperId(), changeLevel.getOriginalLevel());
+                }
+            }
+            // 清除改档打分记录(第二步)
+            changeLevelRepo.deleteByWorkIdAndSubjectAndStage(workId, subject.name(), stage);
         }
         // 打分阶段
         else if (MarkStage.SCORE.equals(stage)) {
@@ -106,12 +122,18 @@ public class MarkingService {
             //初始化打分任务数据
             assignTaskService.initTaskPublishData(workId, subject.name());
             // 还原改档审核同意前的档位(第一步)
-            List<ChangeLevel> changeLevels = changeLevelRepo.findByWorkIdAndSubjectAndAuditStatus(workId, subject.name());
-            for (ChangeLevel changeLevel : changeLevels) {
-                paperRepo.updateLevelById(changeLevel.getPaperId(), changeLevel.getOriginalLevel());
+            List<ChangeLevel> changeLevels = changeLevelRepo.findByWorkIdAndSubjectAndAuditStatusAndStage(workId, subject.name(), stage);
+            Map<Long, List<ChangeLevel>> changeLevelCollects = changeLevels.stream().collect(Collectors.groupingBy(ChangeLevel::getPaperId));
+            for (Map.Entry<Long, List<ChangeLevel>> entry : changeLevelCollects.entrySet()) {
+                List<ChangeLevel> changeLevelsList = entry.getValue();
+                if(!changeLevelsList.isEmpty()){
+                    changeLevelsList.sort(Comparator.comparing(ChangeLevel::getCreateDate).reversed());
+                    ChangeLevel changeLevel =changeLevelsList.get(0);
+                    paperRepo.updateLevelById(changeLevel.getPaperId(), changeLevel.getOriginalLevel());
+                }
             }
             // 清除改档打分记录(第二步)
-            changeLevelRepo.deleteByWorkIdAndSubject(workId, subject.name());
+            changeLevelRepo.deleteByWorkIdAndSubjectAndStage(workId, subject.name(), stage);
         } else {
             throw new RuntimeException("当前阶段无法重置数据");
         }