Jelajahi Sumber

3.3.0 新增service、entity、mapper

xiaofei 1 tahun lalu
induk
melakukan
b27d651077
100 mengubah file dengan 5493 tambahan dan 34 penghapusan
  1. 39 2
      distributed-print/install/mysql/upgrade/3.3.0.sql
  2. 4 0
      distributed-print/pom.xml
  3. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/DistributedPrintApplication.java
  4. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkArbitrateController.java
  5. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkClassController.java
  6. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkController.java
  7. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkEntranceController.java
  8. 38 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkGroupController.java
  9. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkInspectedController.java
  10. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkPaperController.java
  11. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkProblemController.java
  12. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkQualityController.java
  13. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkQuestionController.java
  14. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkScoreController.java
  15. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkStudentController.java
  16. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkTrackController.java
  17. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkUserGroupController.java
  18. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanAnswerBatchController.java
  19. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanAnswerCardController.java
  20. 23 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanAnswerController.java
  21. 23 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanController.java
  22. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanOmrTaskController.java
  23. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanPackageController.java
  24. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanPaperController.java
  25. 24 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanStudentController.java
  26. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/config/MapApiReader.java
  27. 6 5
      distributed-print/src/main/java/com/qmth/distributed/print/config/SwaggerConfig.java
  28. 22 14
      pom.xml
  29. 10 10
      teachcloud-common/pom.xml
  30. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  31. 33 0
      teachcloud-mark/.gitignore
  32. 59 0
      teachcloud-mark/pom.xml
  33. 175 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkArbitrateHistory.java
  34. 152 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkGroup.java
  35. 86 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkGroupStudent.java
  36. 152 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkHeaderSubjectiveScore.java
  37. 174 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkHeaderTrack.java
  38. 206 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkPaper.java
  39. 208 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkProblemHistory.java
  40. 184 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkQuestion.java
  41. 423 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java
  42. 141 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkSubjectiveScore.java
  43. 230 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkTask.java
  44. 207 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkTrack.java
  45. 85 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkUserClass.java
  46. 152 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkUserGroup.java
  47. 216 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanAnswerCard.java
  48. 86 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanAnswerCardSubject.java
  49. 157 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanBatch.java
  50. 96 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanBatchPaper.java
  51. 95 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanFileProperty.java
  52. 178 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanOmrTask.java
  53. 146 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanPackage.java
  54. 155 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanPaper.java
  55. 151 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanPaperPage.java
  56. 151 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanRefixBatch.java
  57. 81 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanStudentPaper.java
  58. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkArbitrateHistoryMapper.java
  59. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkGroupMapper.java
  60. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkGroupStudentMapper.java
  61. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkHeaderSubjectiveScoreMapper.java
  62. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkHeaderTrackMapper.java
  63. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkPaperMapper.java
  64. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkProblemHistoryMapper.java
  65. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkQuestionMapper.java
  66. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java
  67. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkSubjectiveScoreMapper.java
  68. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkTaskMapper.java
  69. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkTrackMapper.java
  70. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkUserClassMapper.java
  71. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkUserGroupMapper.java
  72. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanAnswerCardMapper.java
  73. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanAnswerCardSubjectMapper.java
  74. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanBatchMapper.java
  75. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanBatchPaperMapper.java
  76. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanFilePropertyMapper.java
  77. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanOmrTaskMapper.java
  78. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanPackageMapper.java
  79. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanPaperMapper.java
  80. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanPaperPageMapper.java
  81. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanRefixBatchMapper.java
  82. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanStudentPaperMapper.java
  83. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkArbitrateHistoryService.java
  84. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkGroupService.java
  85. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkGroupStudentService.java
  86. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkHeaderSubjectiveScoreService.java
  87. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkHeaderTrackService.java
  88. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkPaperService.java
  89. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkProblemHistoryService.java
  90. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkQuestionService.java
  91. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkStudentService.java
  92. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkSubjectiveScoreService.java
  93. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkTaskService.java
  94. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkTrackService.java
  95. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkUserClassService.java
  96. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkUserGroupService.java
  97. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanAnswerCardService.java
  98. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanAnswerCardSubjectService.java
  99. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanBatchPaperService.java
  100. 16 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanBatchService.java

+ 39 - 2
distributed-print/install/mysql/upgrade/3.3.0.sql

@@ -25,8 +25,8 @@ INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('898', '列表', 'List', 'LIST', '897', '1', 'AUTH', '900', '1', '0', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('899', '查询', 'Select', 'BUTTON', '897', '2', 'AUTH', '900', '1', '0', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('901', '评卷参数设置', 'MarkParamSetting', 'LINK', '897', '3', 'AUTH', '902,903,904,905,906,907,908,909,910,911,912,913', '1', '0', '1');
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('902', '结构查询', '/api/admin/mark/structure/list', 'URL', '897', '1', 'AUTH', '1', '1', '1');
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('903', '结构提交', '/api/admin/mark/structure/save', 'URL', '897', '2', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('902', '结构查询', '/api/admin/mark/question/list', 'URL', '897', '1', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('903', '结构提交', '/api/admin/mark/question/save', 'URL', '897', '2', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('904', '评卷任务查询', '/api/admin/mark/group/list', 'URL', '897', '3', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('905', '评卷任务提交', '/api/admin/mark/group/save', 'URL', '897', '4', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('906', '评卷任务修改', '/api/admin/mark/group/update', 'URL', '897', '5', 'AUTH', '1', '1', '1');
@@ -86,3 +86,40 @@ INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('959', '客观题检查-获取任务', '/api/admin/mark/check/answer/getTask', 'URL', '946', '8', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('960', '客观题检查-保存任务', '/api/admin/mark/check/answer/saveTask', 'URL', '946', '9', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('961', '签到表列表', '/api/admin/mark/package/list', 'URL', '946', '10', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `sequence`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('970', '扫描端', 'scan', 'MENU', '11', '971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005', '1', '0', '0');
+UPDATE `sys_privilege` SET `name` = '打印端', `related` = '200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,973,974,975' WHERE (`id` = '199');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('971', '心跳接口', '/api/scan/server/heartbeat', 'URL', '970', '1', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('972', '登出接口', '/api/scan/logout', 'URL', '970', '2', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('973', '获取学期、考试列表', '/api/scan/semester/list', 'URL', '970', '3', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('974', '获取课程、试卷编号列表', '/api/scan/course/list', 'URL', '970', '4', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('975', '获取校区、考场', '/api/scan/campus/list', 'URL', '970', '5', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('976', '扫描汇总-答题卡扫描、签到表扫描', '/api/scan/exam/card/info', 'URL', '970', '6', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('977', '扫描汇总-数据校对', '/api/scan/exam/check/info', 'URL', '970', '7', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('978', '答题卡卡格式列表', '/api/scan/answer/card/list', 'URL', '970', '8', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('979', '创建/修改题卡卡格式', '/api/scan/answer/card/save', 'URL', '970', '9', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('980', '删除答题卡卡格式', '/api/scan/answer/card/delete', 'URL', '970', '10', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('981', '答题卡适配卡格式上传', '/api/scan/answer/card/adapt/upload', 'URL', '970', '11', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('982', '答题卡卡格式查询', '/api/scan/answer/card/get', 'URL', '970', '12', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('983', '答题卡扫描批次创建', '/api/scan/answer/batch/create', 'URL', '970', '13', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('984', '答题卡扫描批次完成', '/api/scan/answer/batch/finish', 'URL', '970', '14', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('985', '答题卡扫描结果保存', '/api/scan/answer/batch/save', 'URL', '970', '15', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('986', '获取考生信息', '/api/scan/student/find', 'URL', '970', '16', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('987', '答题卡扫描原图上传', '/api/scan/answer/sheet/upload', 'URL', '970', '17', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('988', '答题卡条码识别坐标获取', '/api/scan/package/position/get', 'URL', '970', '18', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('989', '签到表扫描图片上传', '/api/scan/package/image/upload', 'URL', '970', '19', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('990', '签到表扫描结果保存', '/api/scan/package/save', 'URL', '970', '20', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('991', '签到表扫描结果列表', '/api/scan/package/image/list', 'URL', '970', '21', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('992', '签到表编号查询', '/api/scan/package/find', 'URL', '970', '22', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('993', '签到表详情', '/api/scan/package/image/get', 'URL', '970', '23', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('994', '查询答题卡扫描详情', '/api/scan/answer/query', 'URL', '970', '24', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('995', '查询答题卡扫描概要', '/api/scan/answer/summary', 'URL', '970', '25', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('996', '修改答题卡识别结果', '/api/scan/answer/omr/edit', 'URL', '970', '26', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('997', '更新缺考状态', '/api/scan/student/absent/update', 'URL', '970', '27', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('998', '修改答题卡扫描图片绑定考生', '/api/scan/answer/paper/migrate', 'URL', '970', '28', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('999', '任务确认', '/api/scan/student/confirm', 'URL', '970', '29', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1000', '任务待处理列表', '/api/scan/task/omr/get', 'URL', '970', '30', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1001', '任务提交', '/api/scan/task/omr/save', 'URL', '970', '31', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1002', '任务状态', '/api/scan/task/omr/status', 'URL', '970', '32', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1003', '任务释放', '/api/scan/task/omr/release', 'URL', '970', '33', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1004', '任务历史', '/api/scan/task/omr/history', 'URL', '970', '34', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1005', '答题卡二次识别', '/api/scan/answer/refix', 'URL', '970', '35', 'AUTH', '1', '1', '1');

+ 4 - 0
distributed-print/pom.xml

@@ -28,6 +28,10 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>com.qmth.teachcloud.mark</groupId>
+            <artifactId>teachcloud-mark</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.qmth.teachcloud.common.api</groupId>
             <artifactId>teachcloud-common-api</artifactId>

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

@@ -19,9 +19,9 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 import javax.annotation.Resource;
 
 @SpringBootApplication(scanBasePackages = "com.qmth.*", exclude = {SecurityAutoConfiguration.class})
-@MapperScan({"com.qmth.distributed.print.business.mapper", "com.qmth.teachcloud.report.business.mapper", "com.qmth.teachcloud.common.mapper"})
+@MapperScan({"com.qmth.distributed.print.business.mapper", "com.qmth.teachcloud.report.business.mapper", "com.qmth.teachcloud.common.mapper", "com.qmth.teachcloud.mark.mapper"})
 //主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中,做过web开发的同学一定都有用过@Controller,@Service,@Repository注解,查看其源码你会发现,他们中有一个共同的注解@Component,没错@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中
-@EntityScan(basePackages = {"com.qmth.distributed.print.business.entity", "com.qmth.teachcloud.report.business.entity", "com.qmth.teachcloud.common.entity"})
+@EntityScan(basePackages = {"com.qmth.distributed.print.business.entity", "com.qmth.teachcloud.report.business.entity", "com.qmth.teachcloud.common.entity", "com.qmth.teachcloud.mark.entity"})
 //用来扫描和发现指定包及其子包中的Entity定义
 @EnableTransactionManagement // spring开启事务支持
 @EnableAsync // 开启异步任务

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkArbitrateController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 仲裁记录表 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-仲裁管理")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/arbitrate")
+public class MarkArbitrateController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkClassController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 评卷班级(分班阅) 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-分班阅管理")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/class")
+public class MarkClassController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 评卷端接口 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-评卷接口")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/mark")
+public class MarkController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkEntranceController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 评卷入口 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-评卷入口")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/entrance")
+public class MarkEntranceController {
+
+}

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

@@ -0,0 +1,38 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 评卷分组表 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-分组管理")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/mark-group")
+public class MarkGroupController {
+
+    @ApiOperation(value = "查询")
+    @RequestMapping(value = "/query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result list() {
+        return ResultUtil.ok();
+    }
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkInspectedController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 评卷任务检查 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-评卷任务检查")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/inspected")
+public class MarkInspectedController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkPaperController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 考试试卷表 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-评卷试卷管理")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/paper")
+public class MarkPaperController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkProblemController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 问题卷 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-问题卷")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/problem")
+public class MarkProblemController {
+
+}

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

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 评卷质量 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-评卷质量")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/quality")
+public class MarkQualityController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkQuestionController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 小题信息表 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-试卷结构")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/question")
+public class MarkQuestionController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkScoreController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 成绩相关 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-成绩检查")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/score")
+public class MarkScoreController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkStudentController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 考试考生库 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-考生")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/student")
+public class MarkStudentController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkTrackController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 轨迹给分表 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-评卷轨迹")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/track")
+public class MarkTrackController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkUserGroupController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 评卷员 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-评卷员")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/marker")
+public class MarkUserGroupController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanAnswerBatchController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 批次 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "扫描-批次")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN + "/answer/batch")
+public class ScanAnswerBatchController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanAnswerCardController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 题卡卡格式表 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "扫描-卡格式")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN + "/answer/card")
+public class ScanAnswerCardController {
+
+}

+ 23 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanAnswerController.java

@@ -0,0 +1,23 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 题卡 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "扫描-考生题卡")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN + "/answer")
+public class ScanAnswerController {
+
+}

+ 23 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanController.java

@@ -0,0 +1,23 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 扫描系统相关 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "扫描-登录、登出、服务器时间")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN)
+public class ScanController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanOmrTaskController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 识别对照 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "扫描-识别对照")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN + "/task/omr")
+public class ScanOmrTaskController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanPackageController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 签到表 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "扫描-签到表")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN + "/package")
+public class ScanPackageController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanPaperController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 试卷 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "扫描-试卷")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN + "/paper")
+public class ScanPaperController {
+
+}

+ 24 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanStudentController.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 考生 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "扫描-考生")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN + "/student")
+public class ScanStudentController {
+
+}

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/config/MapApiReader.java

@@ -1,7 +1,6 @@
 package com.qmth.distributed.print.config;
 
 import com.fasterxml.classmate.TypeResolver;
-import com.google.common.base.Optional;
 import com.qmth.teachcloud.common.annotation.ApiJsonObject;
 import com.qmth.teachcloud.common.annotation.ApiJsonProperty;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -23,6 +22,7 @@ import springfox.documentation.spi.service.ParameterBuilderPlugin;
 import springfox.documentation.spi.service.contexts.ParameterContext;
 
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * @Description: swagger2 map参数说明插件

+ 6 - 5
distributed-print/src/main/java/com/qmth/distributed/print/config/SwaggerConfig.java

@@ -1,6 +1,5 @@
 package com.qmth.distributed.print.config;
 
-import com.google.common.base.Predicates;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -12,7 +11,7 @@ import springfox.documentation.service.ApiInfo;
 import springfox.documentation.service.Parameter;
 import springfox.documentation.spi.DocumentationType;
 import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -25,7 +24,7 @@ import java.util.List;
  * @Date: 2019/9/21
  */
 @Configuration
-@EnableSwagger2
+@EnableSwagger2WebMvc
 public class SwaggerConfig {
 
     @Bean
@@ -50,6 +49,8 @@ public class SwaggerConfig {
         pars.add(tokenPar4.build());
         pars.add(tokenPar5.build());
 
+
+
         return new Docket(DocumentationType.SWAGGER_2)
                 .groupName("distributed-print")
                 .select()
@@ -57,7 +58,7 @@ public class SwaggerConfig {
 //                .apis(RequestHandlerSelectors.any())
                 .paths(PathSelectors.any())
                 // 不显示错误的接口地址
-                .paths(Predicates.not(PathSelectors.regex("/error.*")))// 错误路径不监控
+//                .paths(Predicates.not(PathSelectors.regex("/error.*")))// 错误路径不监控
                 .build()
                 .globalOperationParameters(pars)
                 .apiInfo(apiInfo());
@@ -65,7 +66,7 @@ public class SwaggerConfig {
 
     private ApiInfo apiInfo() {
         ApiInfo apiInfo = new ApiInfo(
-                "分布式印刷平台 - api",
+                "知学知考接口文档",
                 "Some custom description of API.",
                 "API TOS",
                 "Terms of service",

+ 22 - 14
pom.xml

@@ -10,6 +10,7 @@
     <modules>
         <module>distributed-print</module>
         <module>distributed-print-business</module>
+        <module>teachcloud-mark</module>
         <module>teachcloud-common</module>
         <module>teachcloud-common-api</module>
         <module>teachcloud-task</module>
@@ -23,7 +24,8 @@
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
         <qmth.boot.version>1.0.4</qmth.boot.version>
-        <swagger2.version>2.9.2</swagger2.version>
+<!--        <swagger2.version>2.9.2</swagger2.version>-->
+        <knife4j.version>2.0.7</knife4j.version>
         <fastjson.version>1.2.68</fastjson.version>
         <fileupload.version>1.4</fileupload.version>
         <poi.version>3.17</poi.version>
@@ -77,6 +79,11 @@
                 <artifactId>distributed-print-business</artifactId>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.qmth.teachcloud.mark</groupId>
+                <artifactId>teachcloud-mark</artifactId>
+                <version>${project.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.qmth.teachcloud.task</groupId>
                 <artifactId>teachcloud-task</artifactId>
@@ -157,21 +164,22 @@
                 <artifactId>core-sms</artifactId>
                 <version>${qmth.boot.version}</version>
             </dependency>
+<!--            <dependency>-->
+<!--                <groupId>io.springfox</groupId>-->
+<!--                <artifactId>springfox-swagger-ui</artifactId>-->
+<!--                <version>${swagger2.version}</version>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>io.springfox</groupId>-->
+<!--                <artifactId>springfox-swagger2</artifactId>-->
+<!--                <version>${swagger2.version}</version>-->
+<!--            </dependency>-->
             <dependency>
-                <groupId>io.springfox</groupId>
-                <artifactId>springfox-swagger-ui</artifactId>
-                <version>${swagger2.version}</version>
-            </dependency>
-            <!--            <dependency>-->
-            <!--                <groupId>com.github.xiaoymin</groupId>-->
-            <!--                <artifactId>swagger-bootstrap-ui</artifactId>-->
-            <!--                <version>${swagger2-bootstrap.version}</version>-->
-            <!--            </dependency>-->
-            <dependency>
-                <groupId>io.springfox</groupId>
-                <artifactId>springfox-swagger2</artifactId>
-                <version>${swagger2.version}</version>
+                <groupId>com.github.xiaoymin</groupId>
+                <artifactId>knife4j-spring-boot-starter</artifactId>
+                <version>${knife4j.version}</version>
             </dependency>
+
             <dependency>
                 <groupId>org.apache.commons</groupId>
                 <artifactId>commons-lang3</artifactId>

+ 10 - 10
teachcloud-common/pom.xml

@@ -106,18 +106,18 @@
             <groupId>com.qmth.boot</groupId>
             <artifactId>data-mybatis-plus</artifactId>
         </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-        </dependency>
 <!--        <dependency>-->
-<!--            <groupId>com.github.xiaoymin</groupId>-->
-<!--            <artifactId>swagger-bootstrap-ui</artifactId>-->
+<!--            <groupId>io.springfox</groupId>-->
+<!--            <artifactId>springfox-swagger2</artifactId>-->
 <!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>io.springfox</groupId>-->
+<!--            <artifactId>springfox-swagger-ui</artifactId>-->
+<!--        </dependency>-->
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.aliyun.oss</groupId>
             <artifactId>aliyun-sdk-oss</artifactId>

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -60,6 +60,8 @@ public class SystemConstant {
     public static final String PREFIX_URL_COMMON = "/admin/common";
     public static final String PREFIX_URL_SYS = "/admin/sys";
     public static final String PREFIX_URL_BASIC = "/admin/basic";
+    public static final String PREFIX_URL_MARK = "/admin/mark";
+    public static final String PREFIX_URL_SCAN = "/scan";
     public static final String PREFIX_URL_EXAM = "/admin/exam";
     public static final String PREFIX_URL_DATA = "/admin/data";
     public static final String PREFIX_URL_WORK = "/admin/work";

+ 33 - 0
teachcloud-mark/.gitignore

@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/

+ 59 - 0
teachcloud-mark/pom.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.qmth.teachcloud.mark</groupId>
+    <artifactId>teachcloud-mark</artifactId>
+    <version>3.3.0.1</version>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <packaging>jar</packaging>
+
+    <parent>
+        <groupId>com.qmth.distributed.print.service</groupId>
+        <artifactId>distributed-print-service</artifactId>
+        <version>3.3.0.1</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.qmth.teachcloud.common</groupId>
+            <artifactId>teachcloud-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jetbrains</groupId>
+            <artifactId>annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itextpdf</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>javase</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.freemarker</groupId>
+            <artifactId>freemarker</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>5.2.12.RELEASE</version>
+        </dependency>
+    </dependencies>
+</project>

+ 175 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkArbitrateHistory.java

@@ -0,0 +1,175 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 仲裁记录表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_arbitrate_history")
+@ApiModel(value="MarkArbitrateHistory对象", description="仲裁记录表")
+public class MarkArbitrateHistory implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "自增主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "大题号")
+    private Integer groupNumber;
+
+    @ApiModelProperty(value = "准考证号")
+    private String studentCode;
+
+    @ApiModelProperty(value = "考生密号")
+    private String secretNumber;
+
+    @ApiModelProperty(value = "考生ID")
+    private Integer studentId;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    @ApiModelProperty(value = "处理人ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "总分")
+    private Double totalScore;
+
+    @ApiModelProperty(value = "给分明细")
+    private String scoreList;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "处理时间")
+    private LocalDateTime updateTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+    public Double getTotalScore() {
+        return totalScore;
+    }
+
+    public void setTotalScore(Double totalScore) {
+        this.totalScore = totalScore;
+    }
+    public String getScoreList() {
+        return scoreList;
+    }
+
+    public void setScoreList(String scoreList) {
+        this.scoreList = scoreList;
+    }
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+    public LocalDateTime getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(LocalDateTime updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkArbitrateHistory{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", groupNumber=" + groupNumber +
+            ", studentCode=" + studentCode +
+            ", secretNumber=" + secretNumber +
+            ", studentId=" + studentId +
+            ", status=" + status +
+            ", userId=" + userId +
+            ", totalScore=" + totalScore +
+            ", scoreList=" + scoreList +
+            ", createTime=" + createTime +
+            ", updateTime=" + updateTime +
+        "}";
+    }
+}

+ 152 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkGroup.java

@@ -0,0 +1,152 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 评卷分组表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_group")
+@ApiModel(value="MarkGroup对象", description="评卷分组表")
+public class MarkGroup implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "考试ID")
+    @TableId(value = "exam_id", type = IdType.AUTO)
+    private Integer examId;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "序号")
+    private Integer number;
+
+    @ApiModelProperty(value = "小图配置")
+    private String picList;
+
+    @ApiModelProperty(value = "满分")
+    private Double totalScore;
+
+    @ApiModelProperty(value = "双评比例")
+    private Double doubleRate;
+
+    @ApiModelProperty(value = "仲裁阈值")
+    private Double arbitrateThreshold;
+
+    @ApiModelProperty(value = "合分策略")
+    private String scorePolicy;
+
+    @ApiModelProperty(value = "任务总量")
+    private Integer libraryCount;
+
+    @ApiModelProperty(value = "已评数量")
+    private Integer markedCount;
+
+    @ApiModelProperty(value = "剩余数量")
+    private Integer leftCount;
+
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+    public String getPicList() {
+        return picList;
+    }
+
+    public void setPicList(String picList) {
+        this.picList = picList;
+    }
+    public Double getTotalScore() {
+        return totalScore;
+    }
+
+    public void setTotalScore(Double totalScore) {
+        this.totalScore = totalScore;
+    }
+    public Double getDoubleRate() {
+        return doubleRate;
+    }
+
+    public void setDoubleRate(Double doubleRate) {
+        this.doubleRate = doubleRate;
+    }
+    public Double getArbitrateThreshold() {
+        return arbitrateThreshold;
+    }
+
+    public void setArbitrateThreshold(Double arbitrateThreshold) {
+        this.arbitrateThreshold = arbitrateThreshold;
+    }
+    public String getScorePolicy() {
+        return scorePolicy;
+    }
+
+    public void setScorePolicy(String scorePolicy) {
+        this.scorePolicy = scorePolicy;
+    }
+    public Integer getLibraryCount() {
+        return libraryCount;
+    }
+
+    public void setLibraryCount(Integer libraryCount) {
+        this.libraryCount = libraryCount;
+    }
+    public Integer getMarkedCount() {
+        return markedCount;
+    }
+
+    public void setMarkedCount(Integer markedCount) {
+        this.markedCount = markedCount;
+    }
+    public Integer getLeftCount() {
+        return leftCount;
+    }
+
+    public void setLeftCount(Integer leftCount) {
+        this.leftCount = leftCount;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkGroup{" +
+            "examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", number=" + number +
+            ", picList=" + picList +
+            ", totalScore=" + totalScore +
+            ", doubleRate=" + doubleRate +
+            ", arbitrateThreshold=" + arbitrateThreshold +
+            ", scorePolicy=" + scorePolicy +
+            ", libraryCount=" + libraryCount +
+            ", markedCount=" + markedCount +
+            ", leftCount=" + leftCount +
+        "}";
+    }
+}

+ 86 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkGroupStudent.java

@@ -0,0 +1,86 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 考生分组状态表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_group_student")
+@ApiModel(value="MarkGroupStudent对象", description="考生分组状态表")
+public class MarkGroupStudent implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "考生ID")
+    @TableId(value = "student_id", type = IdType.AUTO)
+    private Integer studentId;
+
+    @ApiModelProperty(value = "分组ID")
+    private Integer groupNumber;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "科目代码")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkGroupStudent{" +
+            "studentId=" + studentId +
+            ", groupNumber=" + groupNumber +
+            ", examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", status=" + status +
+        "}";
+    }
+}

+ 152 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkHeaderSubjectiveScore.java

@@ -0,0 +1,152 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 主观题得分明细表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_header_subjective_score")
+@ApiModel(value="MarkHeaderSubjectiveScore对象", description="主观题得分明细表")
+public class MarkHeaderSubjectiveScore implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "考生ID")
+    @TableId(value = "student_id", type = IdType.AUTO)
+    private Integer studentId;
+
+    @ApiModelProperty(value = "大题号")
+    private Integer mainNumber;
+
+    @ApiModelProperty(value = "小题号")
+    private String subNumber;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "课程代码")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "分组序号")
+    private Integer groupNumber;
+
+    @ApiModelProperty(value = "分组得分")
+    private Double groupScore;
+
+    @ApiModelProperty(value = "大题得分")
+    private Double mainScore;
+
+    @ApiModelProperty(value = "小题得分")
+    private Double score;
+
+    @ApiModelProperty(value = "是否合分")
+    private Integer uncalculate;
+
+    @ApiModelProperty(value = "科组长ID")
+    private Long userId;
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+    public Integer getMainNumber() {
+        return mainNumber;
+    }
+
+    public void setMainNumber(Integer mainNumber) {
+        this.mainNumber = mainNumber;
+    }
+    public String getSubNumber() {
+        return subNumber;
+    }
+
+    public void setSubNumber(String subNumber) {
+        this.subNumber = subNumber;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+    public Double getGroupScore() {
+        return groupScore;
+    }
+
+    public void setGroupScore(Double groupScore) {
+        this.groupScore = groupScore;
+    }
+    public Double getMainScore() {
+        return mainScore;
+    }
+
+    public void setMainScore(Double mainScore) {
+        this.mainScore = mainScore;
+    }
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+    public Integer getUncalculate() {
+        return uncalculate;
+    }
+
+    public void setUncalculate(Integer uncalculate) {
+        this.uncalculate = uncalculate;
+    }
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkHeaderSubjectiveScore{" +
+            "studentId=" + studentId +
+            ", mainNumber=" + mainNumber +
+            ", subNumber=" + subNumber +
+            ", examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", groupNumber=" + groupNumber +
+            ", groupScore=" + groupScore +
+            ", mainScore=" + mainScore +
+            ", score=" + score +
+            ", uncalculate=" + uncalculate +
+            ", userId=" + userId +
+        "}";
+    }
+}

+ 174 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkHeaderTrack.java

@@ -0,0 +1,174 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 组长轨迹给分表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_header_track")
+@ApiModel(value="MarkHeaderTrack对象", description="组长轨迹给分表")
+public class MarkHeaderTrack implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "考生ID")
+    @TableId(value = "student_id", type = IdType.AUTO)
+    private Integer studentId;
+
+    @ApiModelProperty(value = "完整题号")
+    private String questionNumber;
+
+    @ApiModelProperty(value = "序号")
+    private Integer number;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "科目代码")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "大题题号")
+    private Integer groupNumber;
+
+    @ApiModelProperty(value = "用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "给分")
+    private Double score;
+
+    @ApiModelProperty(value = "X轴位置")
+    private Double positionX;
+
+    @ApiModelProperty(value = "Y轴位置")
+    private Double positionY;
+
+    @ApiModelProperty(value = "裁切图序号")
+    private Integer offsetIndex;
+
+    @ApiModelProperty(value = "裁切图X轴坐标")
+    private Integer offsetX;
+
+    @ApiModelProperty(value = "裁切图Y轴坐标")
+    private Integer offsetY;
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+    public String getQuestionNumber() {
+        return questionNumber;
+    }
+
+    public void setQuestionNumber(String questionNumber) {
+        this.questionNumber = questionNumber;
+    }
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+    public Double getPositionX() {
+        return positionX;
+    }
+
+    public void setPositionX(Double positionX) {
+        this.positionX = positionX;
+    }
+    public Double getPositionY() {
+        return positionY;
+    }
+
+    public void setPositionY(Double positionY) {
+        this.positionY = positionY;
+    }
+    public Integer getOffsetIndex() {
+        return offsetIndex;
+    }
+
+    public void setOffsetIndex(Integer offsetIndex) {
+        this.offsetIndex = offsetIndex;
+    }
+    public Integer getOffsetX() {
+        return offsetX;
+    }
+
+    public void setOffsetX(Integer offsetX) {
+        this.offsetX = offsetX;
+    }
+    public Integer getOffsetY() {
+        return offsetY;
+    }
+
+    public void setOffsetY(Integer offsetY) {
+        this.offsetY = offsetY;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkHeaderTrack{" +
+            "studentId=" + studentId +
+            ", questionNumber=" + questionNumber +
+            ", number=" + number +
+            ", examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", groupNumber=" + groupNumber +
+            ", userId=" + userId +
+            ", score=" + score +
+            ", positionX=" + positionX +
+            ", positionY=" + positionY +
+            ", offsetIndex=" + offsetIndex +
+            ", offsetX=" + offsetX +
+            ", offsetY=" + offsetY +
+        "}";
+    }
+}

+ 206 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkPaper.java

@@ -0,0 +1,206 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 考试科目表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_paper")
+@ApiModel(value="MarkPaper对象", description="考试科目表")
+public class MarkPaper implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "课程代码")
+    private String courseCode;
+
+    @ApiModelProperty(value = "科目名称")
+    private String courseName;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "客观题满分")
+    private Double objectiveScore;
+
+    @ApiModelProperty(value = "主观题满分")
+    private Double subjectiveScore;
+
+    @ApiModelProperty(value = "全卷满分")
+    private Double totalScore;
+
+    @ApiModelProperty(value = "已上传人数")
+    private Integer uploadCount;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "原图遮盖配置")
+    private String sheetConfig;
+
+    @ApiModelProperty(value = "及格分")
+    private Double passScore;
+
+    @ApiModelProperty(value = "优秀分")
+    private Double excellentScore;
+
+    @ApiModelProperty(value = "题卡类型")
+    private String cardType;
+
+    @ApiModelProperty(value = "试卷文件类型")
+    private String paperFileType;
+
+    @ApiModelProperty(value = "标答文件类型")
+    private String answerFileType;
+
+    @ApiModelProperty(value = "评卷是否跳转")
+    private Boolean autoScroll;
+
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Double getObjectiveScore() {
+        return objectiveScore;
+    }
+
+    public void setObjectiveScore(Double objectiveScore) {
+        this.objectiveScore = objectiveScore;
+    }
+    public Double getSubjectiveScore() {
+        return subjectiveScore;
+    }
+
+    public void setSubjectiveScore(Double subjectiveScore) {
+        this.subjectiveScore = subjectiveScore;
+    }
+    public Double getTotalScore() {
+        return totalScore;
+    }
+
+    public void setTotalScore(Double totalScore) {
+        this.totalScore = totalScore;
+    }
+    public Integer getUploadCount() {
+        return uploadCount;
+    }
+
+    public void setUploadCount(Integer uploadCount) {
+        this.uploadCount = uploadCount;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+    public String getSheetConfig() {
+        return sheetConfig;
+    }
+
+    public void setSheetConfig(String sheetConfig) {
+        this.sheetConfig = sheetConfig;
+    }
+    public Double getPassScore() {
+        return passScore;
+    }
+
+    public void setPassScore(Double passScore) {
+        this.passScore = passScore;
+    }
+    public Double getExcellentScore() {
+        return excellentScore;
+    }
+
+    public void setExcellentScore(Double excellentScore) {
+        this.excellentScore = excellentScore;
+    }
+    public String getCardType() {
+        return cardType;
+    }
+
+    public void setCardType(String cardType) {
+        this.cardType = cardType;
+    }
+    public String getPaperFileType() {
+        return paperFileType;
+    }
+
+    public void setPaperFileType(String paperFileType) {
+        this.paperFileType = paperFileType;
+    }
+    public String getAnswerFileType() {
+        return answerFileType;
+    }
+
+    public void setAnswerFileType(String answerFileType) {
+        this.answerFileType = answerFileType;
+    }
+    public Boolean getAutoScroll() {
+        return autoScroll;
+    }
+
+    public void setAutoScroll(Boolean autoScroll) {
+        this.autoScroll = autoScroll;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkPaper{" +
+            "examId=" + examId +
+            ", courseCode=" + courseCode +
+            ", courseName=" + courseName +
+            ", paperNumber=" + paperNumber +
+            ", objectiveScore=" + objectiveScore +
+            ", subjectiveScore=" + subjectiveScore +
+            ", totalScore=" + totalScore +
+            ", uploadCount=" + uploadCount +
+            ", remark=" + remark +
+            ", sheetConfig=" + sheetConfig +
+            ", passScore=" + passScore +
+            ", excellentScore=" + excellentScore +
+            ", cardType=" + cardType +
+            ", paperFileType=" + paperFileType +
+            ", answerFileType=" + answerFileType +
+            ", autoScroll=" + autoScroll +
+        "}";
+    }
+}

+ 208 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkProblemHistory.java

@@ -0,0 +1,208 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 问题卷历史表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_problem_history")
+@ApiModel(value="MarkProblemHistory对象", description="问题卷历史表")
+public class MarkProblemHistory implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "自增主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "大题号")
+    private Integer groupNumber;
+
+    @ApiModelProperty(value = "学号")
+    private String studentCode;
+
+    @ApiModelProperty(value = "考生密号")
+    private String secretNumber;
+
+    @ApiModelProperty(value = "问题类型")
+    private String type;
+
+    @ApiModelProperty(value = "考生ID")
+    private Integer studentId;
+
+    @ApiModelProperty(value = "评卷任务ID")
+    private Integer taskId;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    @ApiModelProperty(value = "处理人ID")
+    private Integer updateUserId;
+
+    @ApiModelProperty(value = "评卷员ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "给分明细")
+    private String scoreList;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "处理时间")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "问题原因")
+    private String remark;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+    public Integer getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(Integer taskId) {
+        this.taskId = taskId;
+    }
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    public Integer getUpdateUserId() {
+        return updateUserId;
+    }
+
+    public void setUpdateUserId(Integer updateUserId) {
+        this.updateUserId = updateUserId;
+    }
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+    public String getScoreList() {
+        return scoreList;
+    }
+
+    public void setScoreList(String scoreList) {
+        this.scoreList = scoreList;
+    }
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+    public LocalDateTime getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(LocalDateTime updateTime) {
+        this.updateTime = updateTime;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkProblemHistory{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", groupNumber=" + groupNumber +
+            ", studentCode=" + studentCode +
+            ", secretNumber=" + secretNumber +
+            ", type=" + type +
+            ", studentId=" + studentId +
+            ", taskId=" + taskId +
+            ", status=" + status +
+            ", updateUserId=" + updateUserId +
+            ", userId=" + userId +
+            ", scoreList=" + scoreList +
+            ", createTime=" + createTime +
+            ", updateTime=" + updateTime +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 184 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkQuestion.java

@@ -0,0 +1,184 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 小题信息表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_question")
+@ApiModel(value="MarkQuestion对象", description="小题信息表")
+public class MarkQuestion implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "试卷类型")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "是否客观题")
+    private Boolean isObjective;
+
+    @ApiModelProperty(value = "分组序号")
+    private Integer groupNumber;
+
+    @ApiModelProperty(value = "大题号")
+    private Integer mainNumber;
+
+    @ApiModelProperty(value = "小题号")
+    private String subNumber;
+
+    @ApiModelProperty(value = "大题名称")
+    private String mainTitle;
+
+    @ApiModelProperty(value = "正确答案")
+    private String answer;
+
+    @ApiModelProperty(value = "满分")
+    private Double totalScore;
+
+    @ApiModelProperty(value = "评卷间隔分")
+    private Double intervalScore;
+
+    @ApiModelProperty(value = "客观题判分策略")
+    private String objectivePolicy;
+
+    @ApiModelProperty(value = "题型")
+    private String questionType;
+
+    private String name;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Boolean getObjective() {
+        return isObjective;
+    }
+
+    public void setObjective(Boolean isObjective) {
+        this.isObjective = isObjective;
+    }
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+    public Integer getMainNumber() {
+        return mainNumber;
+    }
+
+    public void setMainNumber(Integer mainNumber) {
+        this.mainNumber = mainNumber;
+    }
+    public String getSubNumber() {
+        return subNumber;
+    }
+
+    public void setSubNumber(String subNumber) {
+        this.subNumber = subNumber;
+    }
+    public String getMainTitle() {
+        return mainTitle;
+    }
+
+    public void setMainTitle(String mainTitle) {
+        this.mainTitle = mainTitle;
+    }
+    public String getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+    public Double getTotalScore() {
+        return totalScore;
+    }
+
+    public void setTotalScore(Double totalScore) {
+        this.totalScore = totalScore;
+    }
+    public Double getIntervalScore() {
+        return intervalScore;
+    }
+
+    public void setIntervalScore(Double intervalScore) {
+        this.intervalScore = intervalScore;
+    }
+    public String getObjectivePolicy() {
+        return objectivePolicy;
+    }
+
+    public void setObjectivePolicy(String objectivePolicy) {
+        this.objectivePolicy = objectivePolicy;
+    }
+    public String getQuestionType() {
+        return questionType;
+    }
+
+    public void setQuestionType(String questionType) {
+        this.questionType = questionType;
+    }
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkQuestion{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", isObjective=" + isObjective +
+            ", groupNumber=" + groupNumber +
+            ", mainNumber=" + mainNumber +
+            ", subNumber=" + subNumber +
+            ", mainTitle=" + mainTitle +
+            ", answer=" + answer +
+            ", totalScore=" + totalScore +
+            ", intervalScore=" + intervalScore +
+            ", objectivePolicy=" + objectivePolicy +
+            ", questionType=" + questionType +
+            ", name=" + name +
+        "}";
+    }
+}

+ 423 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java

@@ -0,0 +1,423 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 考试考生库
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_student")
+@ApiModel(value="MarkStudent对象", description="考试考生库")
+public class MarkStudent implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键(和exam_student表id一样)")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "科目代码")
+    private String courseCode;
+
+    @ApiModelProperty(value = "科目名称")
+    private String courseName;
+
+    @ApiModelProperty(value = "试卷类型")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "密号")
+    private String secretNumber;
+
+    @ApiModelProperty(value = "学号")
+    private String studentCode;
+
+    @ApiModelProperty(value = "姓名")
+    private String studentName;
+
+    @ApiModelProperty(value = "试卷袋编号")
+    private String packageCode;
+
+    @ApiModelProperty(value = "校区")
+    private String examPlace;
+
+    @ApiModelProperty(value = "考场")
+    private String examRoom;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "扫描批次号")
+    private String batchCode;
+
+    @ApiModelProperty(value = "原图数量")
+    private Integer sheetCount;
+
+    @ApiModelProperty(value = "客观题识别结果")
+    private String answers;
+
+    @ApiModelProperty(value = "是否已上传")
+    private Integer isUpload;
+
+    @ApiModelProperty(value = "是否缺考")
+    private Integer isAbsent;
+
+    @ApiModelProperty(value = "是否人工指定缺考")
+    private Integer isManualAbsent;
+
+    @ApiModelProperty(value = "是否违纪")
+    private Integer isBreach;
+
+    @ApiModelProperty(value = "上传时间")
+    private LocalDateTime uploadTime;
+
+    @ApiModelProperty(value = "复核时间")
+    private LocalDateTime inspectTime;
+
+    @ApiModelProperty(value = "复核人ID")
+    private Integer inspectorId;
+
+    @ApiModelProperty(value = "客观总分")
+    private Double objectiveScore;
+
+    @ApiModelProperty(value = "客观得分明细")
+    private String objectiveScoreList;
+
+    @ApiModelProperty(value = "主观题状态")
+    private String subjectiveStatus;
+
+    @ApiModelProperty(value = "主观总分")
+    private Double subjectiveScore;
+
+    @ApiModelProperty(value = "主观得分明细")
+    private String subjectiveScoreList;
+
+    @ApiModelProperty(value = "学院")
+    private String college;
+
+    @ApiModelProperty(value = "班级")
+    private String className;
+
+    @ApiModelProperty(value = "任课老师")
+    private String teacher;
+
+    @ApiModelProperty(value = "扫描状态")
+    private String scanStatus;
+
+    private Boolean questionFilled;
+
+    private Boolean assigned;
+
+    private Boolean absentSuspect;
+
+    private Boolean incomplete;
+
+    private String breachCode;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+    public String getPackageCode() {
+        return packageCode;
+    }
+
+    public void setPackageCode(String packageCode) {
+        this.packageCode = packageCode;
+    }
+    public String getExamPlace() {
+        return examPlace;
+    }
+
+    public void setExamPlace(String examPlace) {
+        this.examPlace = examPlace;
+    }
+    public String getExamRoom() {
+        return examRoom;
+    }
+
+    public void setExamRoom(String examRoom) {
+        this.examRoom = examRoom;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+    public String getBatchCode() {
+        return batchCode;
+    }
+
+    public void setBatchCode(String batchCode) {
+        this.batchCode = batchCode;
+    }
+    public Integer getSheetCount() {
+        return sheetCount;
+    }
+
+    public void setSheetCount(Integer sheetCount) {
+        this.sheetCount = sheetCount;
+    }
+    public String getAnswers() {
+        return answers;
+    }
+
+    public void setAnswers(String answers) {
+        this.answers = answers;
+    }
+    public Integer getIsUpload() {
+        return isUpload;
+    }
+
+    public void setIsUpload(Integer isUpload) {
+        this.isUpload = isUpload;
+    }
+    public Integer getIsAbsent() {
+        return isAbsent;
+    }
+
+    public void setIsAbsent(Integer isAbsent) {
+        this.isAbsent = isAbsent;
+    }
+    public Integer getIsManualAbsent() {
+        return isManualAbsent;
+    }
+
+    public void setIsManualAbsent(Integer isManualAbsent) {
+        this.isManualAbsent = isManualAbsent;
+    }
+    public Integer getIsBreach() {
+        return isBreach;
+    }
+
+    public void setIsBreach(Integer isBreach) {
+        this.isBreach = isBreach;
+    }
+    public LocalDateTime getUploadTime() {
+        return uploadTime;
+    }
+
+    public void setUploadTime(LocalDateTime uploadTime) {
+        this.uploadTime = uploadTime;
+    }
+    public LocalDateTime getInspectTime() {
+        return inspectTime;
+    }
+
+    public void setInspectTime(LocalDateTime inspectTime) {
+        this.inspectTime = inspectTime;
+    }
+    public Integer getInspectorId() {
+        return inspectorId;
+    }
+
+    public void setInspectorId(Integer inspectorId) {
+        this.inspectorId = inspectorId;
+    }
+    public Double getObjectiveScore() {
+        return objectiveScore;
+    }
+
+    public void setObjectiveScore(Double objectiveScore) {
+        this.objectiveScore = objectiveScore;
+    }
+    public String getObjectiveScoreList() {
+        return objectiveScoreList;
+    }
+
+    public void setObjectiveScoreList(String objectiveScoreList) {
+        this.objectiveScoreList = objectiveScoreList;
+    }
+    public String getSubjectiveStatus() {
+        return subjectiveStatus;
+    }
+
+    public void setSubjectiveStatus(String subjectiveStatus) {
+        this.subjectiveStatus = subjectiveStatus;
+    }
+    public Double getSubjectiveScore() {
+        return subjectiveScore;
+    }
+
+    public void setSubjectiveScore(Double subjectiveScore) {
+        this.subjectiveScore = subjectiveScore;
+    }
+    public String getSubjectiveScoreList() {
+        return subjectiveScoreList;
+    }
+
+    public void setSubjectiveScoreList(String subjectiveScoreList) {
+        this.subjectiveScoreList = subjectiveScoreList;
+    }
+    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;
+    }
+    public String getTeacher() {
+        return teacher;
+    }
+
+    public void setTeacher(String teacher) {
+        this.teacher = teacher;
+    }
+    public String getScanStatus() {
+        return scanStatus;
+    }
+
+    public void setScanStatus(String scanStatus) {
+        this.scanStatus = scanStatus;
+    }
+    public Boolean getQuestionFilled() {
+        return questionFilled;
+    }
+
+    public void setQuestionFilled(Boolean questionFilled) {
+        this.questionFilled = questionFilled;
+    }
+    public Boolean getAssigned() {
+        return assigned;
+    }
+
+    public void setAssigned(Boolean assigned) {
+        this.assigned = assigned;
+    }
+    public Boolean getAbsentSuspect() {
+        return absentSuspect;
+    }
+
+    public void setAbsentSuspect(Boolean absentSuspect) {
+        this.absentSuspect = absentSuspect;
+    }
+    public Boolean getIncomplete() {
+        return incomplete;
+    }
+
+    public void setIncomplete(Boolean incomplete) {
+        this.incomplete = incomplete;
+    }
+    public String getBreachCode() {
+        return breachCode;
+    }
+
+    public void setBreachCode(String breachCode) {
+        this.breachCode = breachCode;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkStudent{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", courseCode=" + courseCode +
+            ", courseName=" + courseName +
+            ", paperNumber=" + paperNumber +
+            ", secretNumber=" + secretNumber +
+            ", studentCode=" + studentCode +
+            ", studentName=" + studentName +
+            ", packageCode=" + packageCode +
+            ", examPlace=" + examPlace +
+            ", examRoom=" + examRoom +
+            ", remark=" + remark +
+            ", batchCode=" + batchCode +
+            ", sheetCount=" + sheetCount +
+            ", answers=" + answers +
+            ", isUpload=" + isUpload +
+            ", isAbsent=" + isAbsent +
+            ", isManualAbsent=" + isManualAbsent +
+            ", isBreach=" + isBreach +
+            ", uploadTime=" + uploadTime +
+            ", inspectTime=" + inspectTime +
+            ", inspectorId=" + inspectorId +
+            ", objectiveScore=" + objectiveScore +
+            ", objectiveScoreList=" + objectiveScoreList +
+            ", subjectiveStatus=" + subjectiveStatus +
+            ", subjectiveScore=" + subjectiveScore +
+            ", subjectiveScoreList=" + subjectiveScoreList +
+            ", college=" + college +
+            ", className=" + className +
+            ", teacher=" + teacher +
+            ", scanStatus=" + scanStatus +
+            ", questionFilled=" + questionFilled +
+            ", assigned=" + assigned +
+            ", absentSuspect=" + absentSuspect +
+            ", incomplete=" + incomplete +
+            ", breachCode=" + breachCode +
+        "}";
+    }
+}

+ 141 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkSubjectiveScore.java

@@ -0,0 +1,141 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 主观题得分明细表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_subjective_score")
+@ApiModel(value="MarkSubjectiveScore对象", description="主观题得分明细表")
+public class MarkSubjectiveScore implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "考生ID")
+    @TableId(value = "student_id", type = IdType.AUTO)
+    private Integer studentId;
+
+    @ApiModelProperty(value = "大题号")
+    private Integer mainNumber;
+
+    @ApiModelProperty(value = "小题号")
+    private String subNumber;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "课程代码")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "分组序号")
+    private Integer groupNumber;
+
+    @ApiModelProperty(value = "分组得分")
+    private Double groupScore;
+
+    @ApiModelProperty(value = "大题得分")
+    private Double mainScore;
+
+    @ApiModelProperty(value = "小题得分")
+    private Double score;
+
+    @ApiModelProperty(value = "是否合分")
+    private Boolean uncalculate;
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+    public Integer getMainNumber() {
+        return mainNumber;
+    }
+
+    public void setMainNumber(Integer mainNumber) {
+        this.mainNumber = mainNumber;
+    }
+    public String getSubNumber() {
+        return subNumber;
+    }
+
+    public void setSubNumber(String subNumber) {
+        this.subNumber = subNumber;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+    public Double getGroupScore() {
+        return groupScore;
+    }
+
+    public void setGroupScore(Double groupScore) {
+        this.groupScore = groupScore;
+    }
+    public Double getMainScore() {
+        return mainScore;
+    }
+
+    public void setMainScore(Double mainScore) {
+        this.mainScore = mainScore;
+    }
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+    public Boolean getUncalculate() {
+        return uncalculate;
+    }
+
+    public void setUncalculate(Boolean uncalculate) {
+        this.uncalculate = uncalculate;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkSubjectiveScore{" +
+            "studentId=" + studentId +
+            ", mainNumber=" + mainNumber +
+            ", subNumber=" + subNumber +
+            ", examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", groupNumber=" + groupNumber +
+            ", groupScore=" + groupScore +
+            ", mainScore=" + mainScore +
+            ", score=" + score +
+            ", uncalculate=" + uncalculate +
+        "}";
+    }
+}

+ 230 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkTask.java

@@ -0,0 +1,230 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 评卷任务表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_task")
+@ApiModel(value="MarkTask对象", description="评卷任务表")
+public class MarkTask implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "大题号")
+    private Integer groupNumber;
+
+    @ApiModelProperty(value = "考生ID")
+    private Integer studentId;
+
+    @ApiModelProperty(value = "学号")
+    private String studentCode;
+
+    @ApiModelProperty(value = "考生密号")
+    private String secretNumber;
+
+    @ApiModelProperty(value = "多评任务序号")
+    private Integer taskNumber;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    @ApiModelProperty(value = "评卷员ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "评卷时间")
+    private LocalDateTime markerTime;
+
+    @ApiModelProperty(value = "评卷总分")
+    private Double markerScore;
+
+    @ApiModelProperty(value = "评卷给分明细")
+    private String markerScoreList;
+
+    @ApiModelProperty(value = "评卷时长")
+    private Integer markerSpent;
+
+    @ApiModelProperty(value = "科组长ID")
+    private Integer headerId;
+
+    @ApiModelProperty(value = "科组长评卷时间")
+    private LocalDateTime headerTime;
+
+    @ApiModelProperty(value = "科组长总分")
+    private Double headerScore;
+
+    @ApiModelProperty(value = "科组长给分明细")
+    private String headerScoreList;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
+    public Integer getTaskNumber() {
+        return taskNumber;
+    }
+
+    public void setTaskNumber(Integer taskNumber) {
+        this.taskNumber = taskNumber;
+    }
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+    public LocalDateTime getMarkerTime() {
+        return markerTime;
+    }
+
+    public void setMarkerTime(LocalDateTime markerTime) {
+        this.markerTime = markerTime;
+    }
+    public Double getMarkerScore() {
+        return markerScore;
+    }
+
+    public void setMarkerScore(Double markerScore) {
+        this.markerScore = markerScore;
+    }
+    public String getMarkerScoreList() {
+        return markerScoreList;
+    }
+
+    public void setMarkerScoreList(String markerScoreList) {
+        this.markerScoreList = markerScoreList;
+    }
+    public Integer getMarkerSpent() {
+        return markerSpent;
+    }
+
+    public void setMarkerSpent(Integer markerSpent) {
+        this.markerSpent = markerSpent;
+    }
+    public Integer getHeaderId() {
+        return headerId;
+    }
+
+    public void setHeaderId(Integer headerId) {
+        this.headerId = headerId;
+    }
+    public LocalDateTime getHeaderTime() {
+        return headerTime;
+    }
+
+    public void setHeaderTime(LocalDateTime headerTime) {
+        this.headerTime = headerTime;
+    }
+    public Double getHeaderScore() {
+        return headerScore;
+    }
+
+    public void setHeaderScore(Double headerScore) {
+        this.headerScore = headerScore;
+    }
+    public String getHeaderScoreList() {
+        return headerScoreList;
+    }
+
+    public void setHeaderScoreList(String headerScoreList) {
+        this.headerScoreList = headerScoreList;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkTask{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", groupNumber=" + groupNumber +
+            ", studentId=" + studentId +
+            ", studentCode=" + studentCode +
+            ", secretNumber=" + secretNumber +
+            ", taskNumber=" + taskNumber +
+            ", status=" + status +
+            ", userId=" + userId +
+            ", markerTime=" + markerTime +
+            ", markerScore=" + markerScore +
+            ", markerScoreList=" + markerScoreList +
+            ", markerSpent=" + markerSpent +
+            ", headerId=" + headerId +
+            ", headerTime=" + headerTime +
+            ", headerScore=" + headerScore +
+            ", headerScoreList=" + headerScoreList +
+        "}";
+    }
+}

+ 207 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkTrack.java

@@ -0,0 +1,207 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 轨迹给分表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_track")
+@ApiModel(value="MarkTrack对象", description="轨迹给分表")
+public class MarkTrack implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "评卷任务ID")
+    @TableId(value = "task_id", type = IdType.AUTO)
+    private Integer taskId;
+
+    @ApiModelProperty(value = "完整题号")
+    private String questionNumber;
+
+    @ApiModelProperty(value = "序号")
+    private Integer number;
+
+    @ApiModelProperty(value = "考生ID")
+    private Integer studentId;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "大题题号")
+    private Integer groupNumber;
+
+    @ApiModelProperty(value = "评卷员ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "标记类型(SCORE:分数,REMARK:备注)")
+    private String type;
+
+    @ApiModelProperty(value = "给分")
+    private Double score;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "X轴位置")
+    private Double positionX;
+
+    @ApiModelProperty(value = "Y轴位置")
+    private Double positionY;
+
+    @ApiModelProperty(value = "裁切图序号")
+    private Integer offsetIndex;
+
+    @ApiModelProperty(value = "裁切图X轴坐标")
+    private Integer offsetX;
+
+    @ApiModelProperty(value = "裁切图Y轴坐标")
+    private Integer offsetY;
+
+    public Integer getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(Integer taskId) {
+        this.taskId = taskId;
+    }
+    public String getQuestionNumber() {
+        return questionNumber;
+    }
+
+    public void setQuestionNumber(String questionNumber) {
+        this.questionNumber = questionNumber;
+    }
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+    public Double getPositionX() {
+        return positionX;
+    }
+
+    public void setPositionX(Double positionX) {
+        this.positionX = positionX;
+    }
+    public Double getPositionY() {
+        return positionY;
+    }
+
+    public void setPositionY(Double positionY) {
+        this.positionY = positionY;
+    }
+    public Integer getOffsetIndex() {
+        return offsetIndex;
+    }
+
+    public void setOffsetIndex(Integer offsetIndex) {
+        this.offsetIndex = offsetIndex;
+    }
+    public Integer getOffsetX() {
+        return offsetX;
+    }
+
+    public void setOffsetX(Integer offsetX) {
+        this.offsetX = offsetX;
+    }
+    public Integer getOffsetY() {
+        return offsetY;
+    }
+
+    public void setOffsetY(Integer offsetY) {
+        this.offsetY = offsetY;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkTrack{" +
+            "taskId=" + taskId +
+            ", questionNumber=" + questionNumber +
+            ", number=" + number +
+            ", studentId=" + studentId +
+            ", examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", groupNumber=" + groupNumber +
+            ", userId=" + userId +
+            ", type=" + type +
+            ", score=" + score +
+            ", remark=" + remark +
+            ", positionX=" + positionX +
+            ", positionY=" + positionY +
+            ", offsetIndex=" + offsetIndex +
+            ", offsetX=" + offsetX +
+            ", offsetY=" + offsetY +
+        "}";
+    }
+}

+ 85 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkUserClass.java

@@ -0,0 +1,85 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 评卷员班级
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_user_class")
+@ApiModel(value="MarkUserClass对象", description="评卷员班级")
+public class MarkUserClass implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "Id", type = IdType.AUTO)
+    private Integer Id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Long examId;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "评卷员ID")
+    private Long userId;
+
+    @ApiModelProperty(value = "班级名称")
+    private String classsName;
+
+    public Integer getId() {
+        return Id;
+    }
+
+    public void setId(Integer Id) {
+        this.Id = Id;
+    }
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+    public String getClasssName() {
+        return classsName;
+    }
+
+    public void setClasssName(String classsName) {
+        this.classsName = classsName;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkUserClass{" +
+            "Id=" + Id +
+            ", examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", userId=" + userId +
+            ", classsName=" + classsName +
+        "}";
+    }
+}

+ 152 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkUserGroup.java

@@ -0,0 +1,152 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 评卷员表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("mark_user_group")
+@ApiModel(value="MarkUserGroup对象", description="评卷员表")
+public class MarkUserGroup implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "分组编号")
+    private Integer groupNumber;
+
+    @ApiModelProperty(value = "用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "强制评卷模式")
+    private String mode;
+
+    @ApiModelProperty(value = "评卷数上限")
+    private Integer topCount;
+
+    @ApiModelProperty(value = "完成数量")
+    private Integer finishCount;
+
+    @ApiModelProperty(value = "平均分")
+    private Double avgScore;
+
+    @ApiModelProperty(value = "平均时长")
+    private Double avgSpeed;
+
+    @ApiModelProperty(value = "标准差")
+    private Double stdevScore;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+    public String getMode() {
+        return mode;
+    }
+
+    public void setMode(String mode) {
+        this.mode = mode;
+    }
+    public Integer getTopCount() {
+        return topCount;
+    }
+
+    public void setTopCount(Integer topCount) {
+        this.topCount = topCount;
+    }
+    public Integer getFinishCount() {
+        return finishCount;
+    }
+
+    public void setFinishCount(Integer finishCount) {
+        this.finishCount = finishCount;
+    }
+    public Double getAvgScore() {
+        return avgScore;
+    }
+
+    public void setAvgScore(Double avgScore) {
+        this.avgScore = avgScore;
+    }
+    public Double getAvgSpeed() {
+        return avgSpeed;
+    }
+
+    public void setAvgSpeed(Double avgSpeed) {
+        this.avgSpeed = avgSpeed;
+    }
+    public Double getStdevScore() {
+        return stdevScore;
+    }
+
+    public void setStdevScore(Double stdevScore) {
+        this.stdevScore = stdevScore;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkUserGroup{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", groupNumber=" + groupNumber +
+            ", userId=" + userId +
+            ", mode=" + mode +
+            ", topCount=" + topCount +
+            ", finishCount=" + finishCount +
+            ", avgScore=" + avgScore +
+            ", avgSpeed=" + avgSpeed +
+            ", stdevScore=" + stdevScore +
+        "}";
+    }
+}

+ 216 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanAnswerCard.java

@@ -0,0 +1,216 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 题卡卡格式表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("scan_answer_card")
+@ApiModel(value="ScanAnswerCard对象", description="题卡卡格式表")
+public class ScanAnswerCard implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "考试ID")
+    @TableId(value = "exam_id", type = IdType.AUTO)
+    private Integer examId;
+
+    @ApiModelProperty(value = "科目代码")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "试卷编号(交互)")
+    private String coursePaperId;
+
+    @ApiModelProperty(value = "序号")
+    private Integer number;
+
+    @ApiModelProperty(value = "来源")
+    private String source;
+
+    @ApiModelProperty(value = "文件md5")
+    private String md5;
+
+    @ApiModelProperty(value = "其他属性")
+    private String parameter;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "修改时间")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "是否需要适配")
+    private Integer needAdapte;
+
+    private Integer paperCount;
+
+    private Boolean singlePage;
+
+    @ApiModelProperty(value = "裁切配置")
+    private String sliceConfig;
+
+    @ApiModelProperty(value = "dpi")
+    private Integer dpi;
+
+    @ApiModelProperty(value = "混扫代码")
+    private String code;
+
+    @ApiModelProperty(value = "适配后文件md5")
+    private String adapteMd5;
+
+    private String adapteUri;
+
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public String getCoursePaperId() {
+        return coursePaperId;
+    }
+
+    public void setCoursePaperId(String coursePaperId) {
+        this.coursePaperId = coursePaperId;
+    }
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+    public String getMd5() {
+        return md5;
+    }
+
+    public void setMd5(String md5) {
+        this.md5 = md5;
+    }
+    public String getParameter() {
+        return parameter;
+    }
+
+    public void setParameter(String parameter) {
+        this.parameter = parameter;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+    public LocalDateTime getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(LocalDateTime updateTime) {
+        this.updateTime = updateTime;
+    }
+    public Integer getNeedAdapte() {
+        return needAdapte;
+    }
+
+    public void setNeedAdapte(Integer needAdapte) {
+        this.needAdapte = needAdapte;
+    }
+    public Integer getPaperCount() {
+        return paperCount;
+    }
+
+    public void setPaperCount(Integer paperCount) {
+        this.paperCount = paperCount;
+    }
+    public Boolean getSinglePage() {
+        return singlePage;
+    }
+
+    public void setSinglePage(Boolean singlePage) {
+        this.singlePage = singlePage;
+    }
+    public String getSliceConfig() {
+        return sliceConfig;
+    }
+
+    public void setSliceConfig(String sliceConfig) {
+        this.sliceConfig = sliceConfig;
+    }
+    public Integer getDpi() {
+        return dpi;
+    }
+
+    public void setDpi(Integer dpi) {
+        this.dpi = dpi;
+    }
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+    public String getAdapteMd5() {
+        return adapteMd5;
+    }
+
+    public void setAdapteMd5(String adapteMd5) {
+        this.adapteMd5 = adapteMd5;
+    }
+    public String getAdapteUri() {
+        return adapteUri;
+    }
+
+    public void setAdapteUri(String adapteUri) {
+        this.adapteUri = adapteUri;
+    }
+
+    @Override
+    public String toString() {
+        return "ScanAnswerCard{" +
+            "examId=" + examId +
+            ", paperNumber=" + paperNumber +
+            ", coursePaperId=" + coursePaperId +
+            ", number=" + number +
+            ", source=" + source +
+            ", md5=" + md5 +
+            ", parameter=" + parameter +
+            ", remark=" + remark +
+            ", updateTime=" + updateTime +
+            ", needAdapte=" + needAdapte +
+            ", paperCount=" + paperCount +
+            ", singlePage=" + singlePage +
+            ", sliceConfig=" + sliceConfig +
+            ", dpi=" + dpi +
+            ", code=" + code +
+            ", adapteMd5=" + adapteMd5 +
+            ", adapteUri=" + adapteUri +
+        "}";
+    }
+}

+ 86 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanAnswerCardSubject.java

@@ -0,0 +1,86 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 卡格式科目关联关系
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("scan_answer_card_subject")
+@ApiModel(value="ScanAnswerCardSubject对象", description="卡格式科目关联关系")
+public class ScanAnswerCardSubject implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Integer examId;
+
+    @ApiModelProperty(value = "卡格式号")
+    private Integer cardNumber;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "试卷编号(交互)")
+    private String coursePaperId;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+    public Integer getCardNumber() {
+        return cardNumber;
+    }
+
+    public void setCardNumber(Integer cardNumber) {
+        this.cardNumber = cardNumber;
+    }
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+    public String getCoursePaperId() {
+        return coursePaperId;
+    }
+
+    public void setCoursePaperId(String coursePaperId) {
+        this.coursePaperId = coursePaperId;
+    }
+
+    @Override
+    public String toString() {
+        return "ScanAnswerCardSubject{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", cardNumber=" + cardNumber +
+            ", paperNumber=" + paperNumber +
+            ", coursePaperId=" + coursePaperId +
+        "}";
+    }
+}

+ 157 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanBatch.java

@@ -0,0 +1,157 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("scan_batch")
+@ApiModel(value="ScanBatch对象", description="")
+public class ScanBatch implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Long examId;
+
+    @ApiModelProperty(value = "扫描员ID")
+    private Long userId;
+
+    @ApiModelProperty(value = "卷袋号")
+    private String packageCode;
+
+    @ApiModelProperty(value = "扫描数量")
+    private Integer scanCount;
+
+    private Integer assignedCount;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    private Long creatorId;
+
+    private Long updaterId;
+
+    private Long createTime;
+
+    private Long updateTime;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String coursePaperId;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+    public String getPackageCode() {
+        return packageCode;
+    }
+
+    public void setPackageCode(String packageCode) {
+        this.packageCode = packageCode;
+    }
+    public Integer getScanCount() {
+        return scanCount;
+    }
+
+    public void setScanCount(Integer scanCount) {
+        this.scanCount = scanCount;
+    }
+    public Integer getAssignedCount() {
+        return assignedCount;
+    }
+
+    public void setAssignedCount(Integer assignedCount) {
+        this.assignedCount = assignedCount;
+    }
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    public Long getCreatorId() {
+        return creatorId;
+    }
+
+    public void setCreatorId(Long creatorId) {
+        this.creatorId = creatorId;
+    }
+    public Long getUpdaterId() {
+        return updaterId;
+    }
+
+    public void setUpdaterId(Long updaterId) {
+        this.updaterId = updaterId;
+    }
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+    public Long getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+    public String getCoursePaperId() {
+        return coursePaperId;
+    }
+
+    public void setCoursePaperId(String coursePaperId) {
+        this.coursePaperId = coursePaperId;
+    }
+
+    @Override
+    public String toString() {
+        return "ScanBatch{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", userId=" + userId +
+            ", packageCode=" + packageCode +
+            ", scanCount=" + scanCount +
+            ", assignedCount=" + assignedCount +
+            ", status=" + status +
+            ", creatorId=" + creatorId +
+            ", updaterId=" + updaterId +
+            ", createTime=" + createTime +
+            ", updateTime=" + updateTime +
+            ", coursePaperId=" + coursePaperId +
+        "}";
+    }
+}

+ 96 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanBatchPaper.java

@@ -0,0 +1,96 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("scan_batch_paper")
+@ApiModel(value="ScanBatchPaper对象", description="")
+public class ScanBatchPaper implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "批次ID")
+    @TableId(value = "batch_id", type = IdType.AUTO)
+    private Long batchId;
+
+    @ApiModelProperty(value = "考生ID")
+    private Long studentId;
+
+    @ApiModelProperty(value = "试卷页数")
+    private Integer paperIndex;
+
+    @ApiModelProperty(value = "试卷ID")
+    private Long paperId;
+
+    @ApiModelProperty(value = "题卡编号")
+    private Integer cardNumber;
+
+    private Boolean assigned;
+
+    public Long getBatchId() {
+        return batchId;
+    }
+
+    public void setBatchId(Long batchId) {
+        this.batchId = batchId;
+    }
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+    public Integer getPaperIndex() {
+        return paperIndex;
+    }
+
+    public void setPaperIndex(Integer paperIndex) {
+        this.paperIndex = paperIndex;
+    }
+    public Long getPaperId() {
+        return paperId;
+    }
+
+    public void setPaperId(Long paperId) {
+        this.paperId = paperId;
+    }
+    public Integer getCardNumber() {
+        return cardNumber;
+    }
+
+    public void setCardNumber(Integer cardNumber) {
+        this.cardNumber = cardNumber;
+    }
+    public Boolean getAssigned() {
+        return assigned;
+    }
+
+    public void setAssigned(Boolean assigned) {
+        this.assigned = assigned;
+    }
+
+    @Override
+    public String toString() {
+        return "ScanBatchPaper{" +
+            "batchId=" + batchId +
+            ", studentId=" + studentId +
+            ", paperIndex=" + paperIndex +
+            ", paperId=" + paperId +
+            ", cardNumber=" + cardNumber +
+            ", assigned=" + assigned +
+        "}";
+    }
+}

+ 95 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanFileProperty.java

@@ -0,0 +1,95 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("scan_file_property")
+@ApiModel(value="ScanFileProperty对象", description="")
+public class ScanFileProperty implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "文件路径")
+    @TableId(value = "path", type = IdType.AUTO)
+    private String path;
+
+    @ApiModelProperty(value = "文件md5")
+    private String md5;
+
+    @ApiModelProperty(value = "考试ID")
+    private Long examId;
+
+    @ApiModelProperty(value = "文件大小")
+    private Long fileSize;
+
+    private Long createTime;
+
+    private Long updateTime;
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+    public String getMd5() {
+        return md5;
+    }
+
+    public void setMd5(String md5) {
+        this.md5 = md5;
+    }
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+    public Long getFileSize() {
+        return fileSize;
+    }
+
+    public void setFileSize(Long fileSize) {
+        this.fileSize = fileSize;
+    }
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+    public Long getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "ScanFileProperty{" +
+            "path=" + path +
+            ", md5=" + md5 +
+            ", examId=" + examId +
+            ", fileSize=" + fileSize +
+            ", createTime=" + createTime +
+            ", updateTime=" + updateTime +
+        "}";
+    }
+}

+ 178 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanOmrTask.java

@@ -0,0 +1,178 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("scan_omr_task")
+@ApiModel(value="ScanOmrTask对象", description="")
+public class ScanOmrTask implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Long examId;
+
+    @ApiModelProperty(value = "条件")
+    private String conditions;
+
+    @ApiModelProperty(value = "考生ID")
+    private Long studentId;
+
+    @ApiModelProperty(value = "试卷页数")
+    private Integer paperIndex;
+
+    @ApiModelProperty(value = "试卷ID")
+    private Integer paperId;
+
+    @ApiModelProperty(value = "题卡编号")
+    private Integer cardNumber;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    private Long userId;
+
+    private String pages;
+
+    private Long creatorId;
+
+    private Long updaterId;
+
+    private Long createTime;
+
+    private Long updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+    public String getConditions() {
+        return conditions;
+    }
+
+    public void setConditions(String conditions) {
+        this.conditions = conditions;
+    }
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+    public Integer getPaperIndex() {
+        return paperIndex;
+    }
+
+    public void setPaperIndex(Integer paperIndex) {
+        this.paperIndex = paperIndex;
+    }
+    public Integer getPaperId() {
+        return paperId;
+    }
+
+    public void setPaperId(Integer paperId) {
+        this.paperId = paperId;
+    }
+    public Integer getCardNumber() {
+        return cardNumber;
+    }
+
+    public void setCardNumber(Integer cardNumber) {
+        this.cardNumber = cardNumber;
+    }
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+    public String getPages() {
+        return pages;
+    }
+
+    public void setPages(String pages) {
+        this.pages = pages;
+    }
+    public Long getCreatorId() {
+        return creatorId;
+    }
+
+    public void setCreatorId(Long creatorId) {
+        this.creatorId = creatorId;
+    }
+    public Long getUpdaterId() {
+        return updaterId;
+    }
+
+    public void setUpdaterId(Long updaterId) {
+        this.updaterId = updaterId;
+    }
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+    public Long getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "ScanOmrTask{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", conditions=" + conditions +
+            ", studentId=" + studentId +
+            ", paperIndex=" + paperIndex +
+            ", paperId=" + paperId +
+            ", cardNumber=" + cardNumber +
+            ", status=" + status +
+            ", userId=" + userId +
+            ", pages=" + pages +
+            ", creatorId=" + creatorId +
+            ", updaterId=" + updaterId +
+            ", createTime=" + createTime +
+            ", updateTime=" + updateTime +
+        "}";
+    }
+}

+ 146 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanPackage.java

@@ -0,0 +1,146 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("scan_package")
+@ApiModel(value="ScanPackage对象", description="")
+public class ScanPackage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Long examId;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String coursePaperId;
+
+    @ApiModelProperty(value = "卷袋编号")
+    private String packageCode;
+
+    @ApiModelProperty(value = "签到表图片路径")
+    private String path;
+
+    @ApiModelProperty(value = "文件md5")
+    private String md5;
+
+    private Boolean assigned;
+
+    private Long creatorId;
+
+    private Long updaterId;
+
+    private Long createTime;
+
+    private Long updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+    public String getCoursePaperId() {
+        return coursePaperId;
+    }
+
+    public void setCoursePaperId(String coursePaperId) {
+        this.coursePaperId = coursePaperId;
+    }
+    public String getPackageCode() {
+        return packageCode;
+    }
+
+    public void setPackageCode(String packageCode) {
+        this.packageCode = packageCode;
+    }
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+    public String getMd5() {
+        return md5;
+    }
+
+    public void setMd5(String md5) {
+        this.md5 = md5;
+    }
+    public Boolean getAssigned() {
+        return assigned;
+    }
+
+    public void setAssigned(Boolean assigned) {
+        this.assigned = assigned;
+    }
+    public Long getCreatorId() {
+        return creatorId;
+    }
+
+    public void setCreatorId(Long creatorId) {
+        this.creatorId = creatorId;
+    }
+    public Long getUpdaterId() {
+        return updaterId;
+    }
+
+    public void setUpdaterId(Long updaterId) {
+        this.updaterId = updaterId;
+    }
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+    public Long getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "ScanPackage{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", coursePaperId=" + coursePaperId +
+            ", packageCode=" + packageCode +
+            ", path=" + path +
+            ", md5=" + md5 +
+            ", assigned=" + assigned +
+            ", creatorId=" + creatorId +
+            ", updaterId=" + updaterId +
+            ", createTime=" + createTime +
+            ", updateTime=" + updateTime +
+        "}";
+    }
+}

+ 155 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanPaper.java

@@ -0,0 +1,155 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("scan_paper")
+@ApiModel(value="ScanPaper对象", description="")
+public class ScanPaper implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "考试ID")
+    private Long examId;
+
+    @ApiModelProperty(value = "卡格式编号")
+    private Integer cardNumber;
+
+    @ApiModelProperty(value = "题卡编号(对应paper_index)")
+    private Integer number;
+
+    @ApiModelProperty(value = "数量")
+    private Integer pageCount;
+
+    private Boolean mismatch;
+
+    private Boolean assigned;
+
+    private Boolean questionFilled;
+
+    private Long creatorId;
+
+    private Long updaterId;
+
+    private Long createTime;
+
+    private Long updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+    public Integer getCardNumber() {
+        return cardNumber;
+    }
+
+    public void setCardNumber(Integer cardNumber) {
+        this.cardNumber = cardNumber;
+    }
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+    public Integer getPageCount() {
+        return pageCount;
+    }
+
+    public void setPageCount(Integer pageCount) {
+        this.pageCount = pageCount;
+    }
+    public Boolean getMismatch() {
+        return mismatch;
+    }
+
+    public void setMismatch(Boolean mismatch) {
+        this.mismatch = mismatch;
+    }
+    public Boolean getAssigned() {
+        return assigned;
+    }
+
+    public void setAssigned(Boolean assigned) {
+        this.assigned = assigned;
+    }
+    public Boolean getQuestionFilled() {
+        return questionFilled;
+    }
+
+    public void setQuestionFilled(Boolean questionFilled) {
+        this.questionFilled = questionFilled;
+    }
+    public Long getCreatorId() {
+        return creatorId;
+    }
+
+    public void setCreatorId(Long creatorId) {
+        this.creatorId = creatorId;
+    }
+    public Long getUpdaterId() {
+        return updaterId;
+    }
+
+    public void setUpdaterId(Long updaterId) {
+        this.updaterId = updaterId;
+    }
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+    public Long getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "ScanPaper{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", cardNumber=" + cardNumber +
+            ", number=" + number +
+            ", pageCount=" + pageCount +
+            ", mismatch=" + mismatch +
+            ", assigned=" + assigned +
+            ", questionFilled=" + questionFilled +
+            ", creatorId=" + creatorId +
+            ", updaterId=" + updaterId +
+            ", createTime=" + createTime +
+            ", updateTime=" + updateTime +
+        "}";
+    }
+}

+ 151 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanPaperPage.java

@@ -0,0 +1,151 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("scan_paper_page")
+@ApiModel(value="ScanPaperPage对象", description="")
+public class ScanPaperPage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "paper_id", type = IdType.AUTO)
+    private Long paperId;
+
+    private Integer pageIndex;
+
+    private String absent;
+
+    private String breach;
+
+    private String question;
+
+    private String selective;
+
+    private String sheetPath;
+
+    private String recogData;
+
+    private Long creatorId;
+
+    private Long updaterId;
+
+    private Long createTime;
+
+    private Long updateTime;
+
+    public Long getPaperId() {
+        return paperId;
+    }
+
+    public void setPaperId(Long paperId) {
+        this.paperId = paperId;
+    }
+    public Integer getPageIndex() {
+        return pageIndex;
+    }
+
+    public void setPageIndex(Integer pageIndex) {
+        this.pageIndex = pageIndex;
+    }
+    public String getAbsent() {
+        return absent;
+    }
+
+    public void setAbsent(String absent) {
+        this.absent = absent;
+    }
+    public String getBreach() {
+        return breach;
+    }
+
+    public void setBreach(String breach) {
+        this.breach = breach;
+    }
+    public String getQuestion() {
+        return question;
+    }
+
+    public void setQuestion(String question) {
+        this.question = question;
+    }
+    public String getSelective() {
+        return selective;
+    }
+
+    public void setSelective(String selective) {
+        this.selective = selective;
+    }
+    public String getSheetPath() {
+        return sheetPath;
+    }
+
+    public void setSheetPath(String sheetPath) {
+        this.sheetPath = sheetPath;
+    }
+    public String getRecogData() {
+        return recogData;
+    }
+
+    public void setRecogData(String recogData) {
+        this.recogData = recogData;
+    }
+    public Long getCreatorId() {
+        return creatorId;
+    }
+
+    public void setCreatorId(Long creatorId) {
+        this.creatorId = creatorId;
+    }
+    public Long getUpdaterId() {
+        return updaterId;
+    }
+
+    public void setUpdaterId(Long updaterId) {
+        this.updaterId = updaterId;
+    }
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+    public Long getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "ScanPaperPage{" +
+            "paperId=" + paperId +
+            ", pageIndex=" + pageIndex +
+            ", absent=" + absent +
+            ", breach=" + breach +
+            ", question=" + question +
+            ", selective=" + selective +
+            ", sheetPath=" + sheetPath +
+            ", recogData=" + recogData +
+            ", creatorId=" + creatorId +
+            ", updaterId=" + updaterId +
+            ", createTime=" + createTime +
+            ", updateTime=" + updateTime +
+        "}";
+    }
+}

+ 151 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanRefixBatch.java

@@ -0,0 +1,151 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("scan_refix_batch")
+@ApiModel(value="ScanRefixBatch对象", description="")
+public class ScanRefixBatch implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Long examId;
+
+    private Integer cardNumber;
+
+    private String conditions;
+
+    private Boolean updateSlice;
+
+    private Integer totalCount;
+
+    private Integer sucessCount;
+
+    private Boolean finished;
+
+    private Long creatorId;
+
+    private Long updaterId;
+
+    private Long createTime;
+
+    private Long updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+    public Integer getCardNumber() {
+        return cardNumber;
+    }
+
+    public void setCardNumber(Integer cardNumber) {
+        this.cardNumber = cardNumber;
+    }
+    public String getConditions() {
+        return conditions;
+    }
+
+    public void setConditions(String conditions) {
+        this.conditions = conditions;
+    }
+    public Boolean getUpdateSlice() {
+        return updateSlice;
+    }
+
+    public void setUpdateSlice(Boolean updateSlice) {
+        this.updateSlice = updateSlice;
+    }
+    public Integer getTotalCount() {
+        return totalCount;
+    }
+
+    public void setTotalCount(Integer totalCount) {
+        this.totalCount = totalCount;
+    }
+    public Integer getSucessCount() {
+        return sucessCount;
+    }
+
+    public void setSucessCount(Integer sucessCount) {
+        this.sucessCount = sucessCount;
+    }
+    public Boolean getFinished() {
+        return finished;
+    }
+
+    public void setFinished(Boolean finished) {
+        this.finished = finished;
+    }
+    public Long getCreatorId() {
+        return creatorId;
+    }
+
+    public void setCreatorId(Long creatorId) {
+        this.creatorId = creatorId;
+    }
+    public Long getUpdaterId() {
+        return updaterId;
+    }
+
+    public void setUpdaterId(Long updaterId) {
+        this.updaterId = updaterId;
+    }
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+    public Long getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "ScanRefixBatch{" +
+            "id=" + id +
+            ", examId=" + examId +
+            ", cardNumber=" + cardNumber +
+            ", conditions=" + conditions +
+            ", updateSlice=" + updateSlice +
+            ", totalCount=" + totalCount +
+            ", sucessCount=" + sucessCount +
+            ", finished=" + finished +
+            ", creatorId=" + creatorId +
+            ", updaterId=" + updaterId +
+            ", createTime=" + createTime +
+            ", updateTime=" + updateTime +
+        "}";
+    }
+}

+ 81 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanStudentPaper.java

@@ -0,0 +1,81 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@TableName("scan_student_paper")
+@ApiModel(value="ScanStudentPaper对象", description="")
+public class ScanStudentPaper implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "student_id", type = IdType.AUTO)
+    private Long studentId;
+
+    private Integer paperIndex;
+
+    private Long paperId;
+
+    private Long createTime;
+
+    private Long updateTime;
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+    public Integer getPaperIndex() {
+        return paperIndex;
+    }
+
+    public void setPaperIndex(Integer paperIndex) {
+        this.paperIndex = paperIndex;
+    }
+    public Long getPaperId() {
+        return paperId;
+    }
+
+    public void setPaperId(Long paperId) {
+        this.paperId = paperId;
+    }
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+    public Long getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "ScanStudentPaper{" +
+            "studentId=" + studentId +
+            ", paperIndex=" + paperIndex +
+            ", paperId=" + paperId +
+            ", createTime=" + createTime +
+            ", updateTime=" + updateTime +
+        "}";
+    }
+}

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

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 仲裁记录表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkArbitrateHistoryMapper extends BaseMapper<MarkArbitrateHistory> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkGroupMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkGroup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 评卷分组表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkGroupMapper extends BaseMapper<MarkGroup> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkGroupStudentMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkGroupStudent;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 考生分组状态表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkGroupStudentMapper extends BaseMapper<MarkGroupStudent> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkHeaderSubjectiveScoreMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkHeaderSubjectiveScore;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 主观题得分明细表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkHeaderSubjectiveScoreMapper extends BaseMapper<MarkHeaderSubjectiveScore> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkHeaderTrackMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkHeaderTrack;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 组长轨迹给分表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkHeaderTrackMapper extends BaseMapper<MarkHeaderTrack> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkPaperMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkPaper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 考试科目表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkPaperMapper extends BaseMapper<MarkPaper> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkProblemHistoryMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkProblemHistory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 问题卷历史表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkProblemHistoryMapper extends BaseMapper<MarkProblemHistory> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkQuestionMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkQuestion;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 小题信息表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkQuestionMapper extends BaseMapper<MarkQuestion> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkStudent;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 考试考生库 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkSubjectiveScoreMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 主观题得分明细表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkSubjectiveScoreMapper extends BaseMapper<MarkSubjectiveScore> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkTask;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 评卷任务表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkTaskMapper extends BaseMapper<MarkTask> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkTrackMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkTrack;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 轨迹给分表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkTrackMapper extends BaseMapper<MarkTrack> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkUserClassMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkUserClass;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 评卷员班级 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkUserClassMapper extends BaseMapper<MarkUserClass> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.MarkUserGroup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 评卷员表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkUserGroupMapper extends BaseMapper<MarkUserGroup> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanAnswerCardMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 题卡卡格式表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanAnswerCardMapper extends BaseMapper<ScanAnswerCard> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanAnswerCardSubjectMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.ScanAnswerCardSubject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 卡格式科目关联关系 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanAnswerCardSubjectMapper extends BaseMapper<ScanAnswerCardSubject> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanBatchMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.ScanBatch;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanBatchMapper extends BaseMapper<ScanBatch> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanBatchPaperMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.ScanBatchPaper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanBatchPaperMapper extends BaseMapper<ScanBatchPaper> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanFilePropertyMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.ScanFileProperty;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanFilePropertyMapper extends BaseMapper<ScanFileProperty> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanOmrTaskMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.ScanOmrTask;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanOmrTaskMapper extends BaseMapper<ScanOmrTask> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanPackageMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.ScanPackage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanPackageMapper extends BaseMapper<ScanPackage> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanPaperMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.ScanPaper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanPaperMapper extends BaseMapper<ScanPaper> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanPaperPageMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.ScanPaperPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanPaperPageMapper extends BaseMapper<ScanPaperPage> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanRefixBatchMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.ScanRefixBatch;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanRefixBatchMapper extends BaseMapper<ScanRefixBatch> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanStudentPaperMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.qmth.teachcloud.mark.entity.ScanStudentPaper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanStudentPaperMapper extends BaseMapper<ScanStudentPaper> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkArbitrateHistoryService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 仲裁记录表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkArbitrateHistoryService extends IService<MarkArbitrateHistory> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkGroup;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 评卷分组表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkGroupService extends IService<MarkGroup> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkGroupStudentService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkGroupStudent;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 考生分组状态表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkGroupStudentService extends IService<MarkGroupStudent> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkHeaderSubjectiveScoreService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkHeaderSubjectiveScore;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 主观题得分明细表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkHeaderSubjectiveScoreService extends IService<MarkHeaderSubjectiveScore> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkHeaderTrackService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkHeaderTrack;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 组长轨迹给分表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkHeaderTrackService extends IService<MarkHeaderTrack> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkPaperService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkPaper;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 考试科目表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkPaperService extends IService<MarkPaper> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkProblemHistoryService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkProblemHistory;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 问题卷历史表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkProblemHistoryService extends IService<MarkProblemHistory> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkQuestion;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 小题信息表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkQuestionService extends IService<MarkQuestion> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkStudent;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 考试考生库 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkStudentService extends IService<MarkStudent> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkSubjectiveScoreService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 主观题得分明细表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkSubjectiveScoreService extends IService<MarkSubjectiveScore> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkTask;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 评卷任务表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkTaskService extends IService<MarkTask> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkTrackService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkTrack;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 轨迹给分表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkTrackService extends IService<MarkTrack> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkUserClassService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkUserClass;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 评卷员班级 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkUserClassService extends IService<MarkUserClass> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.MarkUserGroup;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 评卷员表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface MarkUserGroupService extends IService<MarkUserGroup> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanAnswerCardService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 题卡卡格式表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanAnswerCardService extends IService<ScanAnswerCard> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanAnswerCardSubjectService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.ScanAnswerCardSubject;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 卡格式科目关联关系 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanAnswerCardSubjectService extends IService<ScanAnswerCardSubject> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanBatchPaperService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.ScanBatchPaper;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanBatchPaperService extends IService<ScanBatchPaper> {
+
+}

+ 16 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanBatchService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.qmth.teachcloud.mark.entity.ScanBatch;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+public interface ScanBatchService extends IService<ScanBatch> {
+
+}

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini