Browse Source

1.0.2,绑定功能优化

xiaofei 2 years ago
parent
commit
3f60ca9715
20 changed files with 570 additions and 217 deletions
  1. 2 28
      paper-library-business/src/main/java/com/qmth/paper/library/business/bean/params/PaperScanTaskParam.java
  2. 46 22
      paper-library-business/src/main/java/com/qmth/paper/library/business/bean/result/PaperScanTaskResult.java
  3. 52 28
      paper-library-business/src/main/java/com/qmth/paper/library/business/entity/PaperScanTask.java
  4. 3 3
      paper-library-business/src/main/java/com/qmth/paper/library/business/mapper/PaperLibraryMapper.java
  5. 12 4
      paper-library-business/src/main/java/com/qmth/paper/library/business/mapper/PaperScanTaskMapper.java
  6. 5 4
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperLibraryService.java
  7. 10 7
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperScanTaskService.java
  8. 1 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/BusinessCacheServiceImpl.java
  9. 18 14
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/ClientServiceImpl.java
  10. 46 18
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryServiceImpl.java
  11. 33 15
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperScanTaskServiceImpl.java
  12. 8 1
      paper-library-business/src/main/java/com/qmth/paper/library/business/templete/service/impl/TaskLogicServiceImpl.java
  13. 40 29
      paper-library-business/src/main/resources/mapper/PaperLibraryMapper.xml
  14. 69 23
      paper-library-business/src/main/resources/mapper/PaperScanTaskMapper.xml
  15. 1 1
      paper-library-common/src/main/java/com/qmth/paper/library/common/base/BaseEntity.java
  16. 17 15
      paper-library/src/main/java/com/qmth/paper/library/api/PaperLibraryController.java
  17. 7 3
      paper-library/src/main/java/com/qmth/paper/library/api/PaperScanTaskController.java
  18. 169 0
      paper-library/src/test/java/com/qmth/paper/library/CheckFileTest.java
  19. 24 0
      sql/1.0.2修改内容.txt
  20. 7 2
      sql/paper_library_db.sql

+ 2 - 28
paper-library-business/src/main/java/com/qmth/paper/library/business/bean/params/PaperScanTaskParam.java

@@ -27,8 +27,8 @@ public class PaperScanTaskParam implements Serializable {
 
 
     @ApiModelProperty(value = "档案id")
     @ApiModelProperty(value = "档案id")
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
-    @NotNull(message = "请输入档案id")
-    @Range(min = 1L, message = "请输入档案id")
+    @NotNull(message = "请选择档案")
+    @Range(min = 1L, message = "请选择档案")
     private Long paperArchivesId;
     private Long paperArchivesId;
 
 
     @ApiModelProperty(value = "课程代码")
     @ApiModelProperty(value = "课程代码")
@@ -41,16 +41,6 @@ public class PaperScanTaskParam implements Serializable {
     @Length(min = 1, message = "请输入课程名称")
     @Length(min = 1, message = "请输入课程名称")
     private String courseName;
     private String courseName;
 
 
-    @ApiModelProperty(value = "任课教师")
-    @NotNull(message = "请输入任课教师")
-    @Length(min = 1, message = "请输入任课教师")
-    private String teacherName;
-
-    @ApiModelProperty(value = "教学班")
-    @NotNull(message = "请输入教学班")
-    @Length(min = 1, message = "请输入教学班")
-    private String teachClazzName;
-
     @ApiModelProperty(value = "扫描员")
     @ApiModelProperty(value = "扫描员")
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     private Long scanUserId;
     private Long scanUserId;
@@ -98,22 +88,6 @@ public class PaperScanTaskParam implements Serializable {
         this.courseName = courseName;
         this.courseName = courseName;
     }
     }
 
 
-    public String getTeacherName() {
-        return teacherName;
-    }
-
-    public void setTeacherName(String teacherName) {
-        this.teacherName = teacherName;
-    }
-
-    public String getTeachClazzName() {
-        return teachClazzName;
-    }
-
-    public void setTeachClazzName(String teachClazzName) {
-        this.teachClazzName = teachClazzName;
-    }
-
     public Long getScanUserId() {
     public Long getScanUserId() {
         return scanUserId;
         return scanUserId;
     }
     }

+ 46 - 22
paper-library-business/src/main/java/com/qmth/paper/library/business/bean/result/PaperScanTaskResult.java

@@ -43,15 +43,15 @@ public class PaperScanTaskResult implements Serializable {
     @ApiModelProperty(value = "课程名称")
     @ApiModelProperty(value = "课程名称")
     private String courseName;
     private String courseName;
 
 
-//    @ApiModelProperty(value = "任课教师名称")
-//    private String teacherName;
-//
-//    @ApiModelProperty(value = "教学班名称")
-//    private String teachClazzName;
-
     @ApiModelProperty(value = "扫描量")
     @ApiModelProperty(value = "扫描量")
     private int scanCount;
     private int scanCount;
 
 
+    @ApiModelProperty(value = "已绑定数量")
+    private int bindCount;
+
+    @ApiModelProperty(value = "异常数量")
+    private int abnormalCount;
+
     @ApiModelProperty(value = "学生数")
     @ApiModelProperty(value = "学生数")
     private int studentCount;
     private int studentCount;
 
 
@@ -65,6 +65,13 @@ public class PaperScanTaskResult implements Serializable {
     @ApiModelProperty(value = "扫描员名称")
     @ApiModelProperty(value = "扫描员名称")
     private String scanUserName;
     private String scanUserName;
 
 
+    @ApiModelProperty(value = "校验员id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long checkUserId;
+
+    @ApiModelProperty(value = "校验员名称")
+    private String checkUserName;
+
     public Long getPaperScanTaskId() {
     public Long getPaperScanTaskId() {
         return paperScanTaskId;
         return paperScanTaskId;
     }
     }
@@ -137,22 +144,6 @@ public class PaperScanTaskResult implements Serializable {
         this.courseName = courseName;
         this.courseName = courseName;
     }
     }
 
 
-//    public String getTeacherName() {
-//        return teacherName;
-//    }
-//
-//    public void setTeacherName(String teacherName) {
-//        this.teacherName = teacherName;
-//    }
-//
-//    public String getTeachClazzName() {
-//        return teachClazzName;
-//    }
-//
-//    public void setTeachClazzName(String teachClazzName) {
-//        this.teachClazzName = teachClazzName;
-//    }
-
     public int getScanCount() {
     public int getScanCount() {
         return scanCount;
         return scanCount;
     }
     }
@@ -161,6 +152,22 @@ public class PaperScanTaskResult implements Serializable {
         this.scanCount = scanCount;
         this.scanCount = scanCount;
     }
     }
 
 
+    public int getBindCount() {
+        return bindCount;
+    }
+
+    public void setBindCount(int bindCount) {
+        this.bindCount = bindCount;
+    }
+
+    public int getAbnormalCount() {
+        return abnormalCount;
+    }
+
+    public void setAbnormalCount(int abnormalCount) {
+        this.abnormalCount = abnormalCount;
+    }
+
     public int getStudentCount() {
     public int getStudentCount() {
         return studentCount;
         return studentCount;
     }
     }
@@ -192,4 +199,21 @@ public class PaperScanTaskResult implements Serializable {
     public void setScanUserName(String scanUserName) {
     public void setScanUserName(String scanUserName) {
         this.scanUserName = scanUserName;
         this.scanUserName = scanUserName;
     }
     }
+
+    public Long getCheckUserId() {
+        return checkUserId;
+    }
+
+    public void setCheckUserId(Long checkUserId) {
+        this.checkUserId = checkUserId;
+    }
+
+    public String getCheckUserName() {
+        return checkUserName;
+    }
+
+    public void setCheckUserName(String checkUserName) {
+        this.checkUserName = checkUserName;
+    }
+
 }
 }

+ 52 - 28
paper-library-business/src/main/java/com/qmth/paper/library/business/entity/PaperScanTask.java

@@ -48,24 +48,17 @@ public class PaperScanTask extends BaseEntity implements Serializable {
     @TableField("course_name")
     @TableField("course_name")
     private String courseName;
     private String courseName;
 
 
-//    /**
-//     * 任课教师
-//     */
-//    @TableField("teacher_name")
-//    private String teacherName;
-//
-//    /**
-//     * 教学班名称
-//     */
-//    @TableField("teach_clazz_name")
-//    private String teachClazzName;
-
 
 
     @ApiModelProperty(value = "扫描员id")
     @ApiModelProperty(value = "扫描员id")
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     @TableField(value = "scan_user_id", updateStrategy = FieldStrategy.IGNORED)
     @TableField(value = "scan_user_id", updateStrategy = FieldStrategy.IGNORED)
     private Long scanUserId;
     private Long scanUserId;
 
 
+    @ApiModelProperty(value = "校验员id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(value = "check_user_id", updateStrategy = FieldStrategy.IGNORED)
+    private Long checkUserId;
+
     /**
     /**
      * 扫描量
      * 扫描量
      */
      */
@@ -78,6 +71,21 @@ public class PaperScanTask extends BaseEntity implements Serializable {
     @TableField(value = "scan_count", updateStrategy = FieldStrategy.IGNORED)
     @TableField(value = "scan_count", updateStrategy = FieldStrategy.IGNORED)
     private Integer scanCount;
     private Integer scanCount;
 
 
+    /**
+     * 已扫描数量
+     */
+    @TableField(value = "bind_count", updateStrategy = FieldStrategy.IGNORED)
+    private Integer bindCount;
+
+    /**
+     * 异常数量
+     */
+    @TableField(value = "abnormal_count", updateStrategy = FieldStrategy.IGNORED)
+    private Integer abnormalCount;
+
+    @TableField(value = "progress")
+    private Double progress;
+
     /**
     /**
      * 是否结束
      * 是否结束
      */
      */
@@ -127,22 +135,6 @@ public class PaperScanTask extends BaseEntity implements Serializable {
         this.courseName = courseName;
         this.courseName = courseName;
     }
     }
 
 
-//    public String getTeacherName() {
-//        return teacherName;
-//    }
-//
-//    public void setTeacherName(String teacherName) {
-//        this.teacherName = teacherName;
-//    }
-//
-//    public String getTeachClazzName() {
-//        return teachClazzName;
-//    }
-//
-//    public void setTeachClazzName(String teachClazzName) {
-//        this.teachClazzName = teachClazzName;
-//    }
-
     public Long getScanUserId() {
     public Long getScanUserId() {
         return scanUserId;
         return scanUserId;
     }
     }
@@ -151,6 +143,14 @@ public class PaperScanTask extends BaseEntity implements Serializable {
         this.scanUserId = scanUserId;
         this.scanUserId = scanUserId;
     }
     }
 
 
+    public Long getCheckUserId() {
+        return checkUserId;
+    }
+
+    public void setCheckUserId(Long checkUserId) {
+        this.checkUserId = checkUserId;
+    }
+
     public Integer getStudentCount() {
     public Integer getStudentCount() {
         return studentCount;
         return studentCount;
     }
     }
@@ -167,6 +167,22 @@ public class PaperScanTask extends BaseEntity implements Serializable {
         this.scanCount = scanCount;
         this.scanCount = scanCount;
     }
     }
 
 
+    public Integer getBindCount() {
+        return bindCount;
+    }
+
+    public void setBindCount(Integer bindCount) {
+        this.bindCount = bindCount;
+    }
+
+    public Integer getAbnormalCount() {
+        return abnormalCount;
+    }
+
+    public void setAbnormalCount(Integer abnormalCount) {
+        this.abnormalCount = abnormalCount;
+    }
+
     public Boolean getEnable() {
     public Boolean getEnable() {
         return enable;
         return enable;
     }
     }
@@ -175,6 +191,14 @@ public class PaperScanTask extends BaseEntity implements Serializable {
         this.enable = enable;
         this.enable = enable;
     }
     }
 
 
+    public Double getProgress() {
+        return progress;
+    }
+
+    public void setProgress(Double progress) {
+        this.progress = progress;
+    }
+
     public String getArchivesName() {
     public String getArchivesName() {
         return archivesName;
         return archivesName;
     }
     }

+ 3 - 3
paper-library-business/src/main/java/com/qmth/paper/library/business/mapper/PaperLibraryMapper.java

@@ -22,15 +22,15 @@ public interface PaperLibraryMapper extends BaseMapper<PaperLibrary> {
 
 
     int countUnbindData(@Param("paperScanTaskId") Long paperScanTaskId);
     int countUnbindData(@Param("paperScanTaskId") Long paperScanTaskId);
 
 
-    IPage<PaperLibraryResult> pageBindData(@Param("page") Page<PaperLibraryResult> page, @Param("paperScanTaskId") Long paperScanTaskId);
+    IPage<PaperLibraryResult> pageBindData(@Param("page") Page<PaperLibraryResult> page, @Param("semesterId") Long semesterId, @Param("paperArchivesId") Long paperArchivesId, @Param("courseCode") String courseCode, @Param("scanTaskName") String scanTaskName);
 
 
     int countBindData(@Param("paperScanTaskId") Long paperScanTaskId);
     int countBindData(@Param("paperScanTaskId") Long paperScanTaskId);
 
 
-    IPage<PaperLibraryResult> pageAbnormalData(@Param("page") Page<PaperLibraryResult> page, @Param("paperScanTaskId") Long paperScanTaskId, @Param("listSubOrgIds") Set<Long> listSubOrgIds, @Param("isMatch") boolean isMatch, @Param("userId") Long userId);
+    IPage<PaperLibraryResult> pageAbnormalData(@Param("page") Page<PaperLibraryResult> page, @Param("semesterId") Long semesterId, @Param("paperArchivesId") Long paperArchivesId, @Param("courseCode") String courseCode, @Param("scanTaskName") String scanTaskName, @Param("listSubOrgIds") Set<Long> listSubOrgIds, @Param("isMatch") boolean isMatch, @Param("userId") Long userId);
 
 
     int countAbnormalData(@Param("paperScanTaskId") Long paperScanTaskId);
     int countAbnormalData(@Param("paperScanTaskId") Long paperScanTaskId);
 
 
-    List<PaperLibrary> listUnBindData(@Param("schoolId") Long schoolId);
+    List<PaperLibrary> listUnBindData(@Param("paperScanTaskId") Long paperScanTaskId);
 
 
     List<PaperLibrary> selectBatchData(@Param("schoolId") Long schoolId, @Param("userId") Long userId);
     List<PaperLibrary> selectBatchData(@Param("schoolId") Long schoolId, @Param("userId") Long userId);
 
 

+ 12 - 4
paper-library-business/src/main/java/com/qmth/paper/library/business/mapper/PaperScanTaskMapper.java

@@ -25,8 +25,10 @@ public interface PaperScanTaskMapper extends BaseMapper<PaperScanTask> {
      *
      *
      * @param iPage           分页参数
      * @param iPage           分页参数
      * @param schoolId        学校id
      * @param schoolId        学校id
-     * @param courseName      课程名称
-     * @param teacherName     教师名称
+     * @param courseCode      课程代码
+     * @param scanTaskName    任务名称
+     * @param scanUser        扫描员
+     * @param checkUser       校验员
      * @param smallerProgress 进度阈值(小)
      * @param smallerProgress 进度阈值(小)
      * @param largerProgress  进度阈值(大)
      * @param largerProgress  进度阈值(大)
      * @param orgIds          数据权限
      * @param orgIds          数据权限
@@ -34,8 +36,12 @@ public interface PaperScanTaskMapper extends BaseMapper<PaperScanTask> {
      */
      */
     IPage<PaperScanTaskResult> findPaperScanTaskPage(@Param("iPage") Page<PaperScanTaskResult> iPage,
     IPage<PaperScanTaskResult> findPaperScanTaskPage(@Param("iPage") Page<PaperScanTaskResult> iPage,
                                                      @Param("schoolId") Long schoolId,
                                                      @Param("schoolId") Long schoolId,
-                                                     @Param("courseName") String courseName,
-                                                     @Param("teacherName") String teacherName,
+                                                     @Param("semesterId") Long semesterId,
+                                                     @Param("paperArchivesId") Long paperArchivesId,
+                                                     @Param("courseCode") String courseCode,
+                                                     @Param("scanTaskName") String scanTaskName,
+                                                     @Param("scanUser") String scanUser,
+                                                     @Param("checkUser") String checkUser,
                                                      @Param("smallerProgress") Integer smallerProgress,
                                                      @Param("smallerProgress") Integer smallerProgress,
                                                      @Param("largerProgress") Integer largerProgress,
                                                      @Param("largerProgress") Integer largerProgress,
                                                      @Param("orgIds") Set<Long> orgIds);
                                                      @Param("orgIds") Set<Long> orgIds);
@@ -68,4 +74,6 @@ public interface PaperScanTaskMapper extends BaseMapper<PaperScanTask> {
     List<SelectResult> queryDataTeachClazz(@Param("schoolId") Long schoolId, @Param("paperArchivesId") Long paperArchivesId, @Param("courseName") String courseName);
     List<SelectResult> queryDataTeachClazz(@Param("schoolId") Long schoolId, @Param("paperArchivesId") Long paperArchivesId, @Param("courseName") String courseName);
 
 
     PaperScanTaskResult getByPaperScanTaskId(@Param("paperScanTaskId") Long paperScanTaskId);
     PaperScanTaskResult getByPaperScanTaskId(@Param("paperScanTaskId") Long paperScanTaskId);
+
+    IPage<PaperScanTaskResult> pageUnbindData(@Param("iPage") Page<PaperScanTaskResult> iPage, @Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("paperArchivesId") Long paperArchivesId, @Param("courseCode") String courseCode, @Param("scanTaskName") String scanTaskName, @Param("userId") Long userId);
 }
 }

+ 5 - 4
paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperLibraryService.java

@@ -3,6 +3,7 @@ package com.qmth.paper.library.business.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.paper.library.business.bean.result.PaperLibraryResult;
 import com.qmth.paper.library.business.bean.result.PaperLibraryResult;
+import com.qmth.paper.library.business.bean.result.PaperScanTaskResult;
 import com.qmth.paper.library.business.bean.result.TaskStudentResult;
 import com.qmth.paper.library.business.bean.result.TaskStudentResult;
 import com.qmth.paper.library.business.entity.PaperLibrary;
 import com.qmth.paper.library.business.entity.PaperLibrary;
 import com.qmth.paper.library.business.entity.PaperScanTask;
 import com.qmth.paper.library.business.entity.PaperScanTask;
@@ -17,15 +18,15 @@ import java.util.List;
  */
  */
 public interface PaperLibraryService extends IService<PaperLibrary> {
 public interface PaperLibraryService extends IService<PaperLibrary> {
 
 
-    IPage<PaperLibraryResult> pageUnbindData(Long paperScanTaskId, Integer pageNumber, Integer pageSize);
+    IPage<PaperScanTaskResult> pageUnbindData(Long semesterId, Long paperArchivesId, String courseCode, String scanTaskName, Integer pageNumber, Integer pageSize);
 
 
     int countUnbindData(Long paperScanTaskId);
     int countUnbindData(Long paperScanTaskId);
 
 
-    IPage<PaperLibraryResult> pageBindData(Long paperScanTaskId, Integer pageNumber, Integer pageSize);
+    IPage<PaperLibraryResult> pageBindData(Long semesterId, Long paperArchivesId, String courseCode, String scanTaskName, Integer pageNumber, Integer pageSize);
 
 
     int countBindData(Long paperScanTaskId);
     int countBindData(Long paperScanTaskId);
 
 
-    IPage<PaperLibraryResult> pageAbnormalData(Long paperScanTaskId, Integer pageNumber, Integer pageSize);
+    IPage<PaperLibraryResult> pageAbnormalData(Long semesterId, Long paperArchivesId, String courseCode, String scanTaskName, Integer pageNumber, Integer pageSize);
 
 
     int countAbnormalData(Long paperScanTaskId);
     int countAbnormalData(Long paperScanTaskId);
 
 
@@ -35,7 +36,7 @@ public interface PaperLibraryService extends IService<PaperLibrary> {
 
 
     List<PaperLibraryResult> toAbnormalPaper(Long paperLibraryId);
     List<PaperLibraryResult> toAbnormalPaper(Long paperLibraryId);
 
 
-    List<PaperLibraryResult> toBindPaper();
+    List<PaperLibraryResult> toBindPaper(Long paperScanTaskId);
 
 
     IPage<TaskStudentResult> listByStudentCode(String studentCode, Integer pageNumber, Integer pageSize);
     IPage<TaskStudentResult> listByStudentCode(String studentCode, Integer pageNumber, Integer pageSize);
 
 

+ 10 - 7
paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperScanTaskService.java

@@ -1,12 +1,10 @@
 package com.qmth.paper.library.business.service;
 package com.qmth.paper.library.business.service;
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.paper.library.business.bean.params.PaperScanTaskParam;
 import com.qmth.paper.library.business.bean.params.PaperScanTaskParam;
-import com.qmth.paper.library.business.bean.result.BindDetailResult;
-import com.qmth.paper.library.business.bean.result.PaperScanTaskDetailResult;
-import com.qmth.paper.library.business.bean.result.PaperScanTaskResult;
-import com.qmth.paper.library.business.bean.result.SelectResult;
+import com.qmth.paper.library.business.bean.result.*;
 import com.qmth.paper.library.business.entity.PaperScanTask;
 import com.qmth.paper.library.business.entity.PaperScanTask;
 import com.qmth.paper.library.common.entity.SysUser;
 import com.qmth.paper.library.common.entity.SysUser;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
@@ -24,8 +22,9 @@ public interface PaperScanTaskService extends IService<PaperScanTask> {
     /**
     /**
      * 扫描任务分页查询
      * 扫描任务分页查询
      *
      *
-     * @param courseName      课程名称
-     * @param teacherName     任课教师
+     * @param paperArchivesId 档案ID
+     * @param courseCode      课程代码
+     * @param scanTaskName    任务名称
      * @param smallerProgress 进度阈值(小)
      * @param smallerProgress 进度阈值(小)
      * @param largerProgress  进度阈值(大)
      * @param largerProgress  进度阈值(大)
      * @param pageNumber      分页页数
      * @param pageNumber      分页页数
@@ -33,7 +32,7 @@ public interface PaperScanTaskService extends IService<PaperScanTask> {
      * @param requestUser     请求用户
      * @param requestUser     请求用户
      * @return 分页结果
      * @return 分页结果
      */
      */
-    IPage<PaperScanTaskResult> paperScanTaskPage(String courseName, String teacherName, Integer smallerProgress, Integer largerProgress, int pageNumber, int pageSize, SysUser requestUser);
+    IPage<PaperScanTaskResult> paperScanTaskPage(Long semesterId, Long paperArchivesId, String courseCode, String scanTaskName, String scanUser, String checkUser, Integer smallerProgress, Integer largerProgress, int pageNumber, int pageSize, SysUser requestUser);
 
 
     /**
     /**
      * 扫描任务编辑
      * 扫描任务编辑
@@ -118,4 +117,8 @@ public interface PaperScanTaskService extends IService<PaperScanTask> {
     void importStudent(Long paperScanTaskId, MultipartFile file) throws IOException;
     void importStudent(Long paperScanTaskId, MultipartFile file) throws IOException;
 
 
     List<PaperScanTask> getByPaperArchivesIdAndScanTaskName(Long schoolId, Long paperArchivesId, String scanTaskName);
     List<PaperScanTask> getByPaperArchivesIdAndScanTaskName(Long schoolId, Long paperArchivesId, String scanTaskName);
+
+    IPage<PaperScanTaskResult> pageUnbindData(Page<PaperScanTaskResult> iPage, Long semesterId, Long paperArchivesId, String courseCode, String scanTaskName);
+
+    void updateStudentCount(Long paperScanTaskId);
 }
 }

+ 1 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/BusinessCacheServiceImpl.java

@@ -64,6 +64,7 @@ public class BusinessCacheServiceImpl implements BusinessCacheService {
         try {
         try {
             lockService.waitlock(LockType.GET_SEQUENCE, paperScanTaskId);
             lockService.waitlock(LockType.GET_SEQUENCE, paperScanTaskId);
             if (!scanTaskSequenceMap.containsKey(paperScanTaskId)) {
             if (!scanTaskSequenceMap.containsKey(paperScanTaskId)) {
+                scanTaskSequenceMap.put(paperScanTaskId, 1);
                 return 1;
                 return 1;
             }
             }
             Integer integer = scanTaskSequenceMap.get(paperScanTaskId);
             Integer integer = scanTaskSequenceMap.get(paperScanTaskId);

+ 18 - 14
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/ClientServiceImpl.java

@@ -32,7 +32,9 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import java.awt.print.Paper;
 import java.io.IOException;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -202,23 +204,25 @@ public class ClientServiceImpl implements ClientService {
                     if (paperScanTaskDetail != null) {
                     if (paperScanTaskDetail != null) {
                         paperLibrary.setPaperScanTaskDetailId(paperScanTaskDetail.getId());
                         paperLibrary.setPaperScanTaskDetailId(paperScanTaskDetail.getId());
                         paperLibrary.setWordsResult(studentCode);
                         paperLibrary.setWordsResult(studentCode);
-                    } else {
-                        // 绑定失败,为异常数据
-                        paperLibrary.setAbnormal(true);
                     }
                     }
-                } else {
-                    // 绑定失败,为异常数据
-                    paperLibrary.setAbnormal(true);
                 }
                 }
+                // 绑定失败,不进异常数据,直接在未处理里,手工绑定
+            }
+            boolean save = paperLibraryService.save(paperLibrary);
+            if (save) {
+                // 统计扫描数量
+                int count = paperLibraryService.countScanCount(paperScanTaskId);
+                int bindCount = paperLibraryService.countBindData(paperScanTaskId);
+                // 总扫描数
+                Double progress = count == 0 ? 0D :
+                        new BigDecimal(bindCount * 100).divide(new BigDecimal(count), BigDecimal.ROUND_DOWN, 2).doubleValue();
+                UpdateWrapper<PaperScanTask> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.lambda().set(PaperScanTask::getScanCount, count)
+                        .set(PaperScanTask::getBindCount, bindCount)
+                        .set(PaperScanTask::getProgress, progress)
+                        .eq(PaperScanTask::getId, paperScanTaskId);
+                paperScanTaskService.update(updateWrapper);
             }
             }
-            paperLibraryService.save(paperLibrary);
-
-            // 统计扫描数量
-            int count = paperLibraryService.countScanCount(paperScanTaskId);
-            UpdateWrapper<PaperScanTask> updateWrapper = new UpdateWrapper<>();
-            updateWrapper.lambda().set(PaperScanTask::getScanCount, count)
-                    .eq(PaperScanTask::getId, paperScanTaskId);
-            paperScanTaskService.update(updateWrapper);
             return true;
             return true;
 
 
         } catch (IOException e) {
         } catch (IOException e) {

+ 46 - 18
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryServiceImpl.java

@@ -18,7 +18,6 @@ import com.qmth.paper.library.business.service.PaperLibraryCommonService;
 import com.qmth.paper.library.business.service.PaperLibraryService;
 import com.qmth.paper.library.business.service.PaperLibraryService;
 import com.qmth.paper.library.business.service.PaperScanTaskDetailService;
 import com.qmth.paper.library.business.service.PaperScanTaskDetailService;
 import com.qmth.paper.library.business.service.PaperScanTaskService;
 import com.qmth.paper.library.business.service.PaperScanTaskService;
-import com.qmth.paper.library.common.config.DictionaryConfig;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.enums.RecognitionTypeEnum;
 import com.qmth.paper.library.common.enums.RecognitionTypeEnum;
@@ -31,7 +30,6 @@ import com.qmth.paper.library.common.util.*;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.json.JSONArray;
 import org.json.JSONArray;
-import org.json.JSONException;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -40,6 +38,7 @@ import javax.annotation.Resource;
 import java.io.File;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Set;
 import java.util.Set;
@@ -52,9 +51,6 @@ import java.util.Set;
 @Service
 @Service
 public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, PaperLibrary> implements PaperLibraryService {
 public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, PaperLibrary> implements PaperLibraryService {
 
 
-    @Resource
-    private DictionaryConfig dictionaryConfig;
-
     @Resource
     @Resource
     PaperScanTaskService paperScanTaskService;
     PaperScanTaskService paperScanTaskService;
 
 
@@ -80,8 +76,9 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
     FileStoreUtil fileStoreUtil;
     FileStoreUtil fileStoreUtil;
 
 
     @Override
     @Override
-    public IPage<PaperLibraryResult> pageUnbindData(Long paperScanTaskId, Integer pageNumber, Integer pageSize) {
-        return this.baseMapper.pageUnbindData(new Page<>(pageNumber, pageSize), paperScanTaskId);
+    public IPage<PaperScanTaskResult> pageUnbindData(Long semesterId, Long paperArchivesId, String courseCode, String scanTaskName, Integer pageNumber, Integer pageSize) {
+//        return this.baseMapper.pageUnbindData(new Page<>(pageNumber, pageSize), paperScanTaskId);
+        return paperScanTaskService.pageUnbindData(new Page<>(pageNumber, pageSize), semesterId, paperArchivesId, courseCode, scanTaskName);
     }
     }
 
 
     @Override
     @Override
@@ -90,8 +87,8 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
     }
     }
 
 
     @Override
     @Override
-    public IPage<PaperLibraryResult> pageBindData(Long paperScanTaskId, Integer pageNumber, Integer pageSize) {
-        return this.baseMapper.pageBindData(new Page<>(pageNumber, pageSize), paperScanTaskId);
+    public IPage<PaperLibraryResult> pageBindData(Long semesterId, Long paperArchivesId, String courseCode, String scanTaskName, Integer pageNumber, Integer pageSize) {
+        return this.baseMapper.pageBindData(new Page<>(pageNumber, pageSize), semesterId, paperArchivesId, courseCode, scanTaskName);
     }
     }
 
 
     @Override
     @Override
@@ -100,11 +97,11 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
     }
     }
 
 
     @Override
     @Override
-    public IPage<PaperLibraryResult> pageAbnormalData(Long paperScanTaskId, Integer pageNumber, Integer pageSize) {
+    public IPage<PaperLibraryResult> pageAbnormalData(Long semesterId, Long paperArchivesId, String courseCode, String scanTaskName, Integer pageNumber, Integer pageSize) {
         Set<Long> listSubOrgIds = paperLibraryCommonService.listSubOrgIds(null);
         Set<Long> listSubOrgIds = paperLibraryCommonService.listSubOrgIds(null);
         Long userId = Long.valueOf(ServletUtil.getRequestHeaderUserId().toString());
         Long userId = Long.valueOf(ServletUtil.getRequestHeaderUserId().toString());
         boolean isMatch = sysUserService.checkRoleIsAppoint(RoleTypeEnum.DATA_CHECKER, userId);
         boolean isMatch = sysUserService.checkRoleIsAppoint(RoleTypeEnum.DATA_CHECKER, userId);
-        return this.baseMapper.pageAbnormalData(new Page<>(pageNumber, pageSize), paperScanTaskId, listSubOrgIds, isMatch, userId);
+        return this.baseMapper.pageAbnormalData(new Page<>(pageNumber, pageSize), semesterId, paperArchivesId, courseCode, scanTaskName, listSubOrgIds, isMatch, userId);
     }
     }
 
 
     @Override
     @Override
@@ -123,9 +120,10 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
         if (paperLibrary == null) {
         if (paperLibrary == null) {
             throw ExceptionResultEnum.ERROR.exception("绑定对象有误,图片已删除,请刷新数据再试");
             throw ExceptionResultEnum.ERROR.exception("绑定对象有误,图片已删除,请刷新数据再试");
         }
         }
-
+        Boolean abnormal = paperLibrary.getAbnormal();
         UpdateWrapper<PaperLibrary> updateWrapper = new UpdateWrapper<>();
         UpdateWrapper<PaperLibrary> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(PaperLibrary::getPaperScanTaskDetailId, paperScanTaskDetailId)
         updateWrapper.lambda().set(PaperLibrary::getPaperScanTaskDetailId, paperScanTaskDetailId)
+                .set(PaperLibrary::getAbnormal, false)
                 .eq(PaperLibrary::getId, paperLibraryId);
                 .eq(PaperLibrary::getId, paperLibraryId);
         this.update(updateWrapper);
         this.update(updateWrapper);
 
 
@@ -140,6 +138,20 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
         paperScanTaskDetail.setBind(true);
         paperScanTaskDetail.setBind(true);
         paperScanTaskDetailService.updateById(paperScanTaskDetail);
         paperScanTaskDetailService.updateById(paperScanTaskDetail);
 
 
+        // 任务下所有任务绑定完,更新状态
+        PaperScanTask paperScanTask = paperScanTaskService.getById(paperLibrary.getPaperScanTaskId());
+        int bindCount = this.baseMapper.countBindData(paperLibrary.getPaperScanTaskId());
+        // 总扫描数
+        int scanCount = paperScanTask.getScanCount();
+        Double progress = scanCount == 0 ? 0D :
+                new BigDecimal(bindCount * 100).divide(new BigDecimal(scanCount), BigDecimal.ROUND_DOWN, 2).doubleValue();
+        UpdateWrapper<PaperScanTask> taskUpdateWrapper = new UpdateWrapper<>();
+        taskUpdateWrapper.lambda().set(PaperScanTask::getBindCount, bindCount)
+                .set(PaperScanTask::getProgress, progress)
+                .set(PaperScanTask::getAbnormalCount, abnormal ? paperScanTask.getAbnormalCount() - 1 : paperScanTask.getAbnormalCount())
+                .eq(PaperScanTask::getId, paperLibrary.getPaperScanTaskId());
+        paperScanTaskService.update(taskUpdateWrapper);
+
         return true;
         return true;
     }
     }
 
 
@@ -212,14 +224,14 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
     }
     }
 
 
     @Override
     @Override
-    public List<PaperLibraryResult> toBindPaper() {
+    public List<PaperLibraryResult> toBindPaper(Long paperScanTaskId) {
         Long userId = Long.valueOf(ServletUtil.getRequestHeaderUserId().toString());
         Long userId = Long.valueOf(ServletUtil.getRequestHeaderUserId().toString());
         Long schoolId = SystemConstant.convertIdToLong(String.valueOf(ServletUtil.getRequestHeaderSchoolId()));
         Long schoolId = SystemConstant.convertIdToLong(String.valueOf(ServletUtil.getRequestHeaderSchoolId()));
 
 
         // 查询下一个待绑定任务
         // 查询下一个待绑定任务
         List<PaperLibrary> waitPaperLibraryList = this.baseMapper.selectBatchData(schoolId, userId);
         List<PaperLibrary> waitPaperLibraryList = this.baseMapper.selectBatchData(schoolId, userId);
         if (waitPaperLibraryList.isEmpty()) {
         if (waitPaperLibraryList.isEmpty()) {
-            waitPaperLibraryList = createBindData(userId, schoolId);
+            waitPaperLibraryList = createBindData(userId, schoolId, paperScanTaskId);
         }
         }
 
 
         List<PaperLibraryResult> paperLibraryResultList = new ArrayList<>();
         List<PaperLibraryResult> paperLibraryResultList = new ArrayList<>();
@@ -242,8 +254,6 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
                     paperLibraryResult.setPaperArchivesName(paperScanTaskResult.getArchivesName());
                     paperLibraryResult.setPaperArchivesName(paperScanTaskResult.getArchivesName());
                     paperLibraryResult.setPaperScanTaskName(paperScanTaskResult.getScanTaskName());
                     paperLibraryResult.setPaperScanTaskName(paperScanTaskResult.getScanTaskName());
                     paperLibraryResult.setCourseName(paperScanTaskResult.getCourseName());
                     paperLibraryResult.setCourseName(paperScanTaskResult.getCourseName());
-//                    paperLibraryResult.setTeacherName(paperScanTaskResult.getTeacherName());
-//                    paperLibraryResult.setTeachClazzName(paperScanTaskResult.getTeachClazzName());
                 }
                 }
                 paperLibraryResult.setFileUrls(fileUrls);
                 paperLibraryResult.setFileUrls(fileUrls);
                 paperLibraryResultList.add(paperLibraryResult);
                 paperLibraryResultList.add(paperLibraryResult);
@@ -389,6 +399,7 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
         return stringList;
         return stringList;
     }
     }
 
 
+    @Transactional
     @Override
     @Override
     public Boolean abnormal(Long paperLibraryId) {
     public Boolean abnormal(Long paperLibraryId) {
         PaperLibrary paperLibrary = this.getById(paperLibraryId);
         PaperLibrary paperLibrary = this.getById(paperLibraryId);
@@ -396,6 +407,13 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
             throw ExceptionResultEnum.ERROR.exception("绑定对象有误,图片已删除,请刷新数据再试");
             throw ExceptionResultEnum.ERROR.exception("绑定对象有误,图片已删除,请刷新数据再试");
         }
         }
 
 
+        Long paperScanTaskId = paperLibrary.getPaperScanTaskId();
+        PaperScanTask paperScanTask = paperScanTaskService.getById(paperScanTaskId);
+        UpdateWrapper<PaperScanTask> taskUpdateWrapper = new UpdateWrapper<>();
+        taskUpdateWrapper.lambda().set(PaperScanTask::getAbnormalCount, paperScanTask.getAbnormalCount() + 1)
+                .eq(PaperScanTask::getId, paperScanTaskId);
+        paperScanTaskService.update(taskUpdateWrapper);
+
         UpdateWrapper<PaperLibrary> updateWrapper = new UpdateWrapper<>();
         UpdateWrapper<PaperLibrary> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(PaperLibrary::getAbnormal, true).eq(PaperLibrary::getId, paperLibraryId);
         updateWrapper.lambda().set(PaperLibrary::getAbnormal, true).eq(PaperLibrary::getId, paperLibraryId);
         return this.update(updateWrapper);
         return this.update(updateWrapper);
@@ -406,10 +424,20 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
         return this.baseMapper.maxSequence(paperScanTaskId);
         return this.baseMapper.maxSequence(paperScanTaskId);
     }
     }
 
 
-    private List<PaperLibrary> createBindData(Long userId, Long schoolId) {
+    private List<PaperLibrary> createBindData(Long userId, Long schoolId, Long paperScanTaskId) {
         try {
         try {
             lockService.waitlock(LockType.BIND_PAPER_TASK, schoolId);
             lockService.waitlock(LockType.BIND_PAPER_TASK, schoolId);
-            List<PaperLibrary> paperLibraryList = this.baseMapper.listUnBindData(schoolId);
+            PaperScanTask paperScanTask = paperScanTaskService.getById(paperScanTaskId);
+            if (paperScanTask.getCheckUserId() != null && userId != paperScanTask.getCheckUserId()) {
+                throw ExceptionResultEnum.ERROR.exception("该任务已被其它人绑定,请刷新数据");
+            }
+
+            UpdateWrapper<PaperScanTask> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda().set(PaperScanTask::getCheckUserId, userId)
+                    .eq(PaperScanTask::getId, paperScanTaskId);
+            paperScanTaskService.update(updateWrapper);
+
+            List<PaperLibrary> paperLibraryList = this.baseMapper.listUnBindData(paperScanTaskId);
             if (!paperLibraryList.isEmpty()) {
             if (!paperLibraryList.isEmpty()) {
                 paperLibraryList.forEach(m -> m.setUserId(userId));
                 paperLibraryList.forEach(m -> m.setUserId(userId));
                 this.updateBatchById(paperLibraryList);
                 this.updateBatchById(paperLibraryList);

+ 33 - 15
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperScanTaskServiceImpl.java

@@ -64,11 +64,11 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
     private BasicStudentService basicStudentService;
     private BasicStudentService basicStudentService;
 
 
     @Override
     @Override
-    public IPage<PaperScanTaskResult> paperScanTaskPage(String courseName, String teacherName, Integer smallerProgress, Integer largerProgress, int pageNumber, int pageSize, SysUser requestUser) {
+    public IPage<PaperScanTaskResult> paperScanTaskPage(Long semesterId, Long paperArchivesId, String courseCode, String scanTaskName, String scanUser, String checkUser, Integer smallerProgress, Integer largerProgress, int pageNumber, int pageSize, SysUser requestUser) {
         Long schoolId = requestUser.getSchoolId();
         Long schoolId = requestUser.getSchoolId();
-        courseName = SystemConstant.strNotNull(courseName) ? SystemConstant.translateSpecificSign(courseName) : null;
-        teacherName = SystemConstant.strNotNull(teacherName) ? SystemConstant.translateSpecificSign(teacherName) : null;
-        return this.baseMapper.findPaperScanTaskPage(new Page<>(pageNumber, pageSize), schoolId, courseName, teacherName, smallerProgress, largerProgress, null);
+        courseCode = SystemConstant.strNotNull(courseCode) ? SystemConstant.translateSpecificSign(courseCode) : null;
+        scanTaskName = SystemConstant.strNotNull(scanTaskName) ? SystemConstant.translateSpecificSign(scanTaskName) : null;
+        return this.baseMapper.findPaperScanTaskPage(new Page<>(pageNumber, pageSize), schoolId, semesterId, paperArchivesId, courseCode, scanTaskName, scanUser, checkUser, smallerProgress, largerProgress, null);
     }
     }
 
 
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
@@ -372,7 +372,6 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
                 }
                 }
             }
             }
             if (!CollectionUtils.isEmpty(datasource)) {
             if (!CollectionUtils.isEmpty(datasource)) {
-                // 扫描任务唯一信息
                 Map<String, PaperScanTaskStudentImportDto> studentImportDtoMap = new HashMap<>();
                 Map<String, PaperScanTaskStudentImportDto> studentImportDtoMap = new HashMap<>();
                 for (PaperScanTaskStudentImportDto paperScanTaskStudentImportDto : datasource) {
                 for (PaperScanTaskStudentImportDto paperScanTaskStudentImportDto : datasource) {
                     String studentName = paperScanTaskStudentImportDto.getStudentName();
                     String studentName = paperScanTaskStudentImportDto.getStudentName();
@@ -405,9 +404,10 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
                 for (PaperScanTaskStudentImportDto e : datasource) {
                 for (PaperScanTaskStudentImportDto e : datasource) {
                     String studentName = e.getStudentName();
                     String studentName = e.getStudentName();
                     String studentCode = e.getStudentCode();
                     String studentCode = e.getStudentCode();
+                    String teacherName = e.getTeacherName();
                     String teachClazzName = e.getTeachClazzName();
                     String teachClazzName = e.getTeachClazzName();
                     List<BasicStudent> studentList = basicStudentDbList.stream().filter(s -> s.getStudentCode().equals(studentCode)).collect(Collectors.toList());
                     List<BasicStudent> studentList = basicStudentDbList.stream().filter(s -> s.getStudentCode().equals(studentCode)).collect(Collectors.toList());
-                    BasicStudent basicStudent = null;
+                    BasicStudent basicStudent;
                     if (studentList.isEmpty()) {
                     if (studentList.isEmpty()) {
                         basicStudent = new BasicStudent(schoolId, studentName, studentCode, true);
                         basicStudent = new BasicStudent(schoolId, studentName, studentCode, true);
                     } else if (studentList.size() == 1) {
                     } else if (studentList.size() == 1) {
@@ -421,29 +421,28 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
 
 
                     Long studentId = basicStudent.getId();
                     Long studentId = basicStudent.getId();
 
 
-                    PaperScanTaskDetail paperScanTaskDetail = paperScanTaskDetailDbList.stream().filter(p -> p.getStudentId().equals(studentId) && ((StringUtils.isBlank(teachClazzName) && StringUtils.isBlank(p.getTeachClazzName())) || (StringUtils.isNotBlank(teachClazzName) && teachClazzName.equals(p.getTeachClazzName())))).findFirst().orElse(null);
+                    PaperScanTaskDetail paperScanTaskDetail = paperScanTaskDetailDbList.stream().filter(p -> p.getStudentId().equals(studentId)).findFirst().orElse(null);
                     if (paperScanTaskDetail == null) {
                     if (paperScanTaskDetail == null) {
                         paperScanTaskDetail = new PaperScanTaskDetail();
                         paperScanTaskDetail = new PaperScanTaskDetail();
                         paperScanTaskDetail.setId(SystemConstant.getDbUuid());
                         paperScanTaskDetail.setId(SystemConstant.getDbUuid());
                         paperScanTaskDetail.setSchoolId(schoolId);
                         paperScanTaskDetail.setSchoolId(schoolId);
                         paperScanTaskDetail.setPaperScanTaskId(paperScanTaskId);
                         paperScanTaskDetail.setPaperScanTaskId(paperScanTaskId);
                         paperScanTaskDetail.setStudentId(studentId);
                         paperScanTaskDetail.setStudentId(studentId);
+                        paperScanTaskDetail.setTeacherName(teacherName);
+                        paperScanTaskDetail.setTeachClazzName(teachClazzName);
+
+                    } else {
+                        paperScanTaskDetail.setTeacherName(teacherName);
                         paperScanTaskDetail.setTeachClazzName(teachClazzName);
                         paperScanTaskDetail.setTeachClazzName(teachClazzName);
-                        paperScanTaskDetailList.add(paperScanTaskDetail);
                     }
                     }
+                    paperScanTaskDetailList.add(paperScanTaskDetail);
                 }
                 }
                 if (!CollectionUtils.isEmpty(paperScanTaskDetailList)) {
                 if (!CollectionUtils.isEmpty(paperScanTaskDetailList)) {
                     paperScanTaskDetailService.saveOrUpdateBatch(paperScanTaskDetailList);
                     paperScanTaskDetailService.saveOrUpdateBatch(paperScanTaskDetailList);
                 }
                 }
 
 
                 // 更新扫描任务冗余字段扫描份数(学生数量)
                 // 更新扫描任务冗余字段扫描份数(学生数量)
-                PaperScanTask paperScanTask = this.getById(paperScanTaskId);
-                int studentCount = paperScanTaskDetailService.count(new QueryWrapper<PaperScanTaskDetail>()
-                        .lambda()
-                        .eq(PaperScanTaskDetail::getPaperScanTaskId, paperScanTaskId));
-                paperScanTask.setStudentCount(studentCount);
-//                    paperScanTask.setEnable(false);
-                this.updateById(paperScanTask);
+                this.updateStudentCount(paperScanTaskId);
             }
             }
         } catch (IOException e) {
         } catch (IOException e) {
             throw new RuntimeException(e);
             throw new RuntimeException(e);
@@ -460,4 +459,23 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
                 .eq(PaperScanTask::getScanTaskName, scanTaskName);
                 .eq(PaperScanTask::getScanTaskName, scanTaskName);
         return this.list(queryWrapper);
         return this.list(queryWrapper);
     }
     }
+
+    @Override
+    public IPage<PaperScanTaskResult> pageUnbindData(Page<PaperScanTaskResult> iPage, Long semesterId, Long paperArchivesId, String courseCode, String scanTaskName) {
+        Long userId = Long.valueOf(ServletUtil.getRequestHeaderUserId().toString());
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        return this.baseMapper.pageUnbindData(iPage, schoolId, semesterId, paperArchivesId, courseCode, scanTaskName, userId);
+    }
+
+    @Override
+    public void updateStudentCount(Long paperScanTaskId) {
+        // 更新扫描任务冗余字段扫描份数(学生数量)
+        PaperScanTask paperScanTask = this.getById(paperScanTaskId);
+        int studentCount = paperScanTaskDetailService.count(new QueryWrapper<PaperScanTaskDetail>()
+                .lambda()
+                .eq(PaperScanTaskDetail::getPaperScanTaskId, paperScanTaskId));
+        paperScanTask.setStudentCount(studentCount);
+        paperScanTask.setEnable(false);
+        this.updateById(paperScanTask);
+    }
 }
 }

+ 8 - 1
paper-library-business/src/main/java/com/qmth/paper/library/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -3,6 +3,7 @@ package com.qmth.paper.library.business.templete.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.paper.library.business.bean.dto.excel.PaperScanTaskImportDto;
 import com.qmth.paper.library.business.bean.dto.excel.PaperScanTaskImportDto;
@@ -44,6 +45,7 @@ import org.springframework.util.LinkedMultiValueMap;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.io.*;
 import java.io.*;
 import java.util.*;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -304,7 +306,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                         .lambda()
                         .lambda()
                         .eq(PaperScanTaskDetail::getSchoolId, schoolId)
                         .eq(PaperScanTaskDetail::getSchoolId, schoolId)
                         .in(PaperScanTaskDetail::getPaperScanTaskId, paperScanTaskId));
                         .in(PaperScanTaskDetail::getPaperScanTaskId, paperScanTaskId));
-
+                AtomicInteger atomicInteger = new AtomicInteger(0);
                 for (PaperScanTaskImportDto scanTaskImportDto : importDtoList) {
                 for (PaperScanTaskImportDto scanTaskImportDto : importDtoList) {
                     String studentCode = scanTaskImportDto.getStudentCode();
                     String studentCode = scanTaskImportDto.getStudentCode();
                     String studentName = scanTaskImportDto.getStudentName();
                     String studentName = scanTaskImportDto.getStudentName();
@@ -336,6 +338,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     if (paperScanTaskDetail == null) {
                     if (paperScanTaskDetail == null) {
                         // 新增
                         // 新增
                         paperScanTaskDetail = new PaperScanTaskDetail();
                         paperScanTaskDetail = new PaperScanTaskDetail();
+                        paperScanTaskDetail.setSchoolId(schoolId);
                         paperScanTaskDetail.setPaperScanTaskId(paperScanTaskId);
                         paperScanTaskDetail.setPaperScanTaskId(paperScanTaskId);
                         paperScanTaskDetail.setStudentId(basicStudent.getId());
                         paperScanTaskDetail.setStudentId(basicStudent.getId());
                         paperScanTaskDetail.setTeacherName(teacherName);
                         paperScanTaskDetail.setTeacherName(teacherName);
@@ -347,8 +350,12 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                         paperScanTaskDetail.setTeachClazzName(teachClazzName);
                         paperScanTaskDetail.setTeachClazzName(teachClazzName);
                         paperScanTaskDetail.updateInfo(sysUser.getId());
                         paperScanTaskDetail.updateInfo(sysUser.getId());
                     }
                     }
+                    atomicInteger.getAndIncrement();
                     paperScanTaskDetailList.add(paperScanTaskDetail);
                     paperScanTaskDetailList.add(paperScanTaskDetail);
                 }
                 }
+
+                // 更新任务表的学生数量
+                paperScanTaskService.updateStudentCount(paperScanTaskId);
             }
             }
 
 
             // 批量保存
             // 批量保存

+ 40 - 29
paper-library-business/src/main/resources/mapper/PaperLibraryMapper.xml

@@ -19,7 +19,7 @@
 
 
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
-        select id, school_id, `path`, paper_scan_task_id, paper_scan_task_detail_id, user_id, sequence,abnormal,create_id, create_time, update_id, update_time from paper_library
+        select id, school_id, `path`, paper_scan_task_id, paper_scan_task_detail_id, user_id, `sequence`, abnormal,create_id, create_time, update_id, update_time from paper_library
     </sql>
     </sql>
 
 
     <select id="pageUnbindData" resultMap="BaseResultMap">
     <select id="pageUnbindData" resultMap="BaseResultMap">
@@ -66,11 +66,22 @@
             paper_scan_task pst ON pstd.school_id = pst.school_id
             paper_scan_task pst ON pstd.school_id = pst.school_id
                 AND pstd.paper_scan_task_id = pst.id
                 AND pstd.paper_scan_task_id = pst.id
                 LEFT JOIN
                 LEFT JOIN
+            paper_archives pa ON pst.paper_archives_id = pa.id
+                LEFT JOIN
             basic_student bs ON pstd.school_id = bs.school_id
             basic_student bs ON pstd.school_id = bs.school_id
                 AND pstd.student_id = bs.id
                 AND pstd.student_id = bs.id
         <where>
         <where>
-            <if test="paperScanTaskId != null">
-                and pstd.paper_scan_task_id = #{paperScanTaskId}
+            <if test="semesterId != null">
+                and pa.semester_id = #{semesterId}
+            </if>
+            <if test="paperArchivesId != null">
+                and pa.id = #{paperArchivesId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                and pst.course_code = #{courseCode}
+            </if>
+            <if test="scanTaskName != null and scanTaskName != ''">
+                and pst.scan_task_name like concat(#{scanTaskName}, '%')
             </if>
             </if>
         </where>
         </where>
     </select>
     </select>
@@ -78,21 +89,10 @@
         SELECT
         SELECT
             COUNT(1)
             COUNT(1)
         FROM
         FROM
-            (SELECT
-                 school_id, paper_scan_task_detail_id, COUNT(1) bind_count
-             FROM
-                 paper_library
-             WHERE
-                 paper_scan_task_detail_id IS NOT NULL
-             GROUP BY school_id , paper_scan_task_detail_id) pl
-                JOIN
-            paper_scan_task_detail pstd ON pl.school_id = pstd.school_id
-                AND pl.paper_scan_task_detail_id = pstd.id
-        <where>
-            <if test="paperScanTaskId != null">
-                AND pstd.paper_scan_task_id = #{paperScanTaskId}
-            </if>
-        </where>
+            paper_library pl
+        where pl.paper_scan_task_id = #{paperScanTaskId}
+            and pl.paper_scan_task_detail_id is not null
+            and pl.abnormal = false
     </select>
     </select>
     <select id="pageAbnormalData" resultType="com.qmth.paper.library.business.bean.result.PaperLibraryResult">
     <select id="pageAbnormalData" resultType="com.qmth.paper.library.business.bean.result.PaperLibraryResult">
         select pl.id,
         select pl.id,
@@ -112,9 +112,24 @@
             left join sys_user su on pl.user_id = su.id
             left join sys_user su on pl.user_id = su.id
         <where>
         <where>
             pl.paper_scan_task_detail_id is null and pl.abnormal = true
             pl.paper_scan_task_detail_id is null and pl.abnormal = true
-            <if test="paperScanTaskId != null">
-                and pl.paper_scan_task_id = #{paperScanTaskId}
-            </if>
+            and exists (
+                select 1 from paper_scan_task pst
+                    left join paper_archives pa on pst.paper_archives_id = pa.id
+                    <where>
+                        <if test="semesterId != null">
+                            and pa.semester_id = #{semesterId}
+                        </if>
+                        <if test="paperArchivesId != null">
+                            and pa.id = #{paperArchivesId}
+                        </if>
+                        <if test="courseCode != null and courseCode != ''">
+                            and pst.course_code = #{courseCode}
+                        </if>
+                        <if test="scanTaskName != null and scanTaskName != ''">
+                            and pst.scan_task_name like concat(#{scanTaskName}, '%')
+                        </if>
+                    </where>
+            )
             <if test="isMatch == true">
             <if test="isMatch == true">
                 and (pl.user_id is null or pl.user_id = #{userId})
                 and (pl.user_id is null or pl.user_id = #{userId})
             </if>
             </if>
@@ -129,19 +144,15 @@
     <select id="countAbnormalData" resultType="java.lang.Integer">
     <select id="countAbnormalData" resultType="java.lang.Integer">
         select count(1) from paper_library
         select count(1) from paper_library
         <where>
         <where>
-            paper_scan_task_detail_id is null and abnormal = true
-            <if test="paperScanTaskId != null">
-                and paper_scan_task_id = #{paperScanTaskId}
-            </if>
+            paper_scan_task_id = #{paperScanTaskId} and abnormal = true
         </where>
         </where>
     </select>
     </select>
     <select id="listUnBindData" resultMap="BaseResultMap">
     <select id="listUnBindData" resultMap="BaseResultMap">
         <include refid="Base_Column_List"></include>
         <include refid="Base_Column_List"></include>
         <where>
         <where>
-            school_id = #{schoolId}
-            AND user_id is null
+             paper_scan_task_id = #{paperScanTaskId}
         </where>
         </where>
-        ORDER BY paper_scan_task_id, create_time limit 10
+        ORDER BY paper_scan_task_id, sequence
     </select>
     </select>
     <select id="selectBatchData" resultMap="BaseResultMap">
     <select id="selectBatchData" resultMap="BaseResultMap">
         <include refid="Base_Column_List"></include>
         <include refid="Base_Column_List"></include>
@@ -151,7 +162,7 @@
             AND paper_scan_task_detail_id is null
             AND paper_scan_task_detail_id is null
             AND abnormal = false
             AND abnormal = false
             order by paper_scan_task_id, sequence
             order by paper_scan_task_id, sequence
-            limit 10
+            limit 1
         </where>
         </where>
     </select>
     </select>
     <select id="listByStudentCode" resultType="com.qmth.paper.library.business.bean.result.TaskStudentResult">
     <select id="listByStudentCode" resultType="com.qmth.paper.library.business.bean.result.TaskStudentResult">

+ 69 - 23
paper-library-business/src/main/resources/mapper/PaperScanTaskMapper.xml

@@ -9,45 +9,50 @@
             pst.scan_task_name AS scanTaskName,
             pst.scan_task_name AS scanTaskName,
             pst.course_code AS courseCode,
             pst.course_code AS courseCode,
             pst.course_name AS courseName,
             pst.course_name AS courseName,
---             pst.teacher_name AS teacherName,
---             pst.teach_clazz_name AS teachClazzName,
             pst.scan_user_id AS scanUserId,
             pst.scan_user_id AS scanUserId,
             pst.student_count AS studentCount,
             pst.student_count AS studentCount,
             pa.id AS paperArchivesId,
             pa.id AS paperArchivesId,
             pa.archives_name AS archivesName,
             pa.archives_name AS archivesName,
             pa.archives_code AS archivesCode,
             pa.archives_code AS archivesCode,
-            IFNULL(pl.scan_count, 0) AS scanCount,
-            IFNULL(ROUND((pl.bound / pl.scan_count) * 100, 2),0) AS bindProgress,
-            su.real_name AS scanUserName
+            pst.scan_count AS scanCount,
+            pst.progress AS bindProgress,
+            su.login_name AS scanUserName,
+            su1.login_name checkUserName
         FROM
         FROM
             paper_scan_task pst
             paper_scan_task pst
                 LEFT JOIN
                 LEFT JOIN
             paper_archives pa ON pst.paper_archives_id = pa.id
             paper_archives pa ON pst.paper_archives_id = pa.id
                 LEFT JOIN
                 LEFT JOIN
-            (SELECT
-                 paper_scan_task_id,
-                 COUNT(*) AS scan_count,
-                 SUM(IF(paper_scan_task_detail_id IS NULL, 0, 1)) AS bound
-             FROM
-                 paper_library
-             GROUP BY paper_scan_task_id) pl ON pst.id = pl.paper_scan_task_id
-                LEFT JOIN
             sys_user su ON pst.scan_user_id = su.id
             sys_user su ON pst.scan_user_id = su.id
+                LEFT JOIN
+            sys_user su1 ON pst.check_user_id = su1.id
         <where>
         <where>
-            <if test="schoolId != null and schoolId != ''">
+            <if test="schoolId != null">
                 AND pst.school_id = #{schoolId}
                 AND pst.school_id = #{schoolId}
             </if>
             </if>
-            <if test="courseName != null and courseName != ''">
-                AND pst.course_name like CONCAT('%',#{courseName},'%')
+            <if test="semesterId != null">
+                AND pa.semester_id = #{semesterId}
+            </if>
+            <if test="paperArchivesId != null">
+                AND pa.id = #{paperArchivesId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                AND pst.course_code = #{courseCode}
+            </if>
+            <if test="scanTaskName != null and scanTaskName != ''">
+                AND pst.scan_task_name like concat(#{scanTaskName},'%')
+            </if>
+            <if test="scanUser != null and scanUser != ''">
+                AND su.login_name like concat(#{scanUser},'%')
+            </if>
+            <if test="checkUser != null and checkUser != ''">
+                AND su1.login_name like concat(#{checkUser},'%')
             </if>
             </if>
-<!--            <if test="teacherName != null and teacherName != ''">-->
-<!--                AND pst.teacher_name like CONCAT('%',#{teacherName},'%')-->
-<!--            </if>-->
             <if test="smallerProgress != null">
             <if test="smallerProgress != null">
-                AND IFNULL(ROUND((pl.bound / pl.scan_count) * 100, 2),0) >= #{smallerProgress}
+                AND pst.progress >= #{smallerProgress}
             </if>
             </if>
             <if test="largerProgress != null">
             <if test="largerProgress != null">
-                AND #{largerProgress} >= IFNULL(ROUND((pl.bound / pl.scan_count) * 100, 2),0)
+                AND #{largerProgress} >= pst.progress
             </if>
             </if>
         </where>
         </where>
     </select>
     </select>
@@ -154,8 +159,6 @@
             pst.scan_task_name paperScanTaskName,
             pst.scan_task_name paperScanTaskName,
             pst.course_code courseCode,
             pst.course_code courseCode,
             pst.course_name courseName,
             pst.course_name courseName,
-            --pst.teacher_name teacherName,
-            --pst.teach_clazz_name teachClazzName,
             pa.archives_name paperArchivesName,
             pa.archives_name paperArchivesName,
             bs.name semesterName
             bs.name semesterName
         FROM
         FROM
@@ -166,4 +169,47 @@
             basic_semester bs ON pa.semester_id = bs.id
             basic_semester bs ON pa.semester_id = bs.id
         where pst.id = #{paperScanTaskId}
         where pst.id = #{paperScanTaskId}
     </select>
     </select>
+    <select id="pageUnbindData" resultType="com.qmth.paper.library.business.bean.result.PaperScanTaskResult">
+        SELECT
+        pst.id AS paperScanTaskId,
+        pst.school_id AS schoolId,
+        pst.scan_task_name AS scanTaskName,
+        pst.course_code AS courseCode,
+        pst.course_name AS courseName,
+        pst.check_user_id AS checkUserId,
+        pst.student_count AS studentCount,
+        pa.id AS paperArchivesId,
+        pa.archives_name AS archivesName,
+        pa.archives_code AS archivesCode,
+        IFNULL(pst.scan_count, 0) AS scanCount,
+        IFNULL(pst.bind_count, 0) AS bindCount,
+        IFNULL(pst.abnormal_count, 0) AS abnormalCount,
+        IFNULL(pst.progress, 0) AS bindProgress,
+        su.login_name checkUserName
+        FROM
+            paper_scan_task pst
+        LEFT JOIN
+            paper_archives pa ON pst.paper_archives_id = pa.id
+        LEFT JOIN
+            sys_user su ON pst.check_user_id = su.id
+        <where>
+            <if test="schoolId != null">
+                AND pst.school_id = #{schoolId}
+            </if>
+            <if test="semesterId != null">
+                AND pa.semester_id = #{semesterId}
+            </if>
+            <if test="paperArchivesId != null">
+                AND pa.id = #{paperArchivesId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                AND pst.course_code = #{courseCode}
+            </if>
+            <if test="scanTaskName != null and scanTaskName != ''">
+                AND pst.scan_task_name like concat(#{scanTaskName}, '%')
+            </if>
+            and (pst.check_user_id is null or (pst.check_user_id = #{userId} and pst.progress &lt; 100))
+        </where>
+        order by pst.check_user_id
+    </select>
 </mapper>
 </mapper>

+ 1 - 1
paper-library-common/src/main/java/com/qmth/paper/library/common/base/BaseEntity.java

@@ -39,7 +39,7 @@ public class BaseEntity implements Serializable {
     @ApiModelProperty(value = "修改人")
     @ApiModelProperty(value = "修改人")
     private Long updateId;
     private Long updateId;
 
 
-    @TableField(value = "update_Time", fill = FieldFill.INSERT_UPDATE) // 新增和更新执行
+    @TableField(value = "update_Time", fill = FieldFill.UPDATE) // 新增和更新执行
     @ApiModelProperty(value = "修改时间")
     @ApiModelProperty(value = "修改时间")
     private Long updateTime;
     private Long updateTime;
 
 

+ 17 - 15
paper-library/src/main/java/com/qmth/paper/library/api/PaperLibraryController.java

@@ -36,10 +36,13 @@ public class PaperLibraryController {
     @ApiOperation(value = "分页查询-未处理")
     @ApiOperation(value = "分页查询-未处理")
     @PostMapping("/page_unbind")
     @PostMapping("/page_unbind")
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result pageUnbind(@ApiParam(value = "任务") @RequestParam(required = false) Long paperScanTaskId,
+    public Result pageUnbind(@ApiParam(value = "档案所属学期") @RequestParam(required = false) Long semesterId,
+                             @ApiParam(value = "档案ID") @RequestParam(required = false) Long paperArchivesId,
+                             @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
+                             @ApiParam(value = "任务名称") @RequestParam(required = false) String scanTaskName,
                              @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                              @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                              @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
                              @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(paperLibraryService.pageUnbindData(paperScanTaskId, pageNumber, pageSize));
+        return ResultUtil.ok(paperLibraryService.pageUnbindData(semesterId, paperArchivesId, courseCode, scanTaskName, pageNumber, pageSize));
     }
     }
 
 
     @ApiOperation(value = "分页查询-未处理数量")
     @ApiOperation(value = "分页查询-未处理数量")
@@ -52,26 +55,25 @@ public class PaperLibraryController {
     @ApiOperation(value = "分页查询-已处理")
     @ApiOperation(value = "分页查询-已处理")
     @PostMapping("/page_bind")
     @PostMapping("/page_bind")
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result pageBind(@ApiParam(value = "任务") @RequestParam(required = false) Long paperScanTaskId,
+    public Result pageBind(@ApiParam(value = "档案所属学期") @RequestParam(required = false) Long semesterId,
+                           @ApiParam(value = "档案ID") @RequestParam(required = false) Long paperArchivesId,
+                           @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
+                           @ApiParam(value = "任务名称") @RequestParam(required = false) String scanTaskName,
                            @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                            @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                            @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
                            @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(paperLibraryService.pageBindData(paperScanTaskId, pageNumber, pageSize));
-    }
-
-    @ApiOperation(value = "分页查询-已处理数量")
-    @PostMapping("/count_bind")
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result countBind(@ApiParam(value = "任务") @RequestParam(required = false) Long paperScanTaskId) {
-        return ResultUtil.ok(paperLibraryService.countBindData(paperScanTaskId));
+        return ResultUtil.ok(paperLibraryService.pageBindData(semesterId, paperArchivesId, courseCode, scanTaskName, pageNumber, pageSize));
     }
     }
 
 
     @ApiOperation(value = "分页查询-异常")
     @ApiOperation(value = "分页查询-异常")
     @PostMapping("/page_abnormal")
     @PostMapping("/page_abnormal")
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result pageAbnormal(@ApiParam(value = "任务") @RequestParam(required = false) Long paperScanTaskId,
+    public Result pageAbnormal(@ApiParam(value = "档案所属学期") @RequestParam(required = false) Long semesterId,
+                               @ApiParam(value = "档案ID") @RequestParam(required = false) Long paperArchivesId,
+                               @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
+                               @ApiParam(value = "任务名称") @RequestParam(required = false) String scanTaskName,
                                @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
                                @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(paperLibraryService.pageAbnormalData(paperScanTaskId, pageNumber, pageSize));
+        return ResultUtil.ok(paperLibraryService.pageAbnormalData(semesterId, paperArchivesId, courseCode, scanTaskName, pageNumber, pageSize));
     }
     }
 
 
     @ApiOperation(value = "分页查询-异常数量")
     @ApiOperation(value = "分页查询-异常数量")
@@ -113,8 +115,8 @@ public class PaperLibraryController {
     @ApiOperation(value = "开始处理")
     @ApiOperation(value = "开始处理")
     @PostMapping("/get_bind_data")
     @PostMapping("/get_bind_data")
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result getBindData() {
-        return ResultUtil.ok(paperLibraryService.toBindPaper());
+    public Result getBindData(Long paperScanTaskId) {
+        return ResultUtil.ok(paperLibraryService.toBindPaper(paperScanTaskId));
     }
     }
 
 
     @ApiOperation(value = "根据扫描任务ID查询学生")
     @ApiOperation(value = "根据扫描任务ID查询学生")

+ 7 - 3
paper-library/src/main/java/com/qmth/paper/library/api/PaperScanTaskController.java

@@ -51,14 +51,18 @@ public class PaperScanTaskController {
     @ApiOperation(value = "扫描任务管理-查询")
     @ApiOperation(value = "扫描任务管理-查询")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
     @RequestMapping(value = "/query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result findPaperScanTaskPage(@ApiParam(value = "课程名称") @RequestParam(required = false) String courseName,
-                                        @ApiParam(value = "任课教师") @RequestParam(required = false) String teacherName,
+    public Result findPaperScanTaskPage(@ApiParam(value = "档案所属学期") @RequestParam(required = false) Long semesterId,
+                                        @ApiParam(value = "档案ID") @RequestParam(required = false) Long paperArchivesId,
+                                        @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
+                                        @ApiParam(value = "任务名称") @RequestParam(required = false) String scanTaskName,
+                                        @ApiParam(value = "扫描员") @RequestParam(required = false) String scanUser,
+                                        @ApiParam(value = "校验员") @RequestParam(required = false) String checkUser,
                                         @ApiParam(value = "进度阈值(小)") @RequestParam(required = false) @Min(0) @Max(100) Integer smallerProgress,
                                         @ApiParam(value = "进度阈值(小)") @RequestParam(required = false) @Min(0) @Max(100) Integer smallerProgress,
                                         @ApiParam(value = "进度阈值(大)") @RequestParam(required = false) @Min(0) @Max(100) Integer largerProgress,
                                         @ApiParam(value = "进度阈值(大)") @RequestParam(required = false) @Min(0) @Max(100) Integer largerProgress,
                                         @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                         @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                         @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
                                         @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(paperScanTaskService.paperScanTaskPage(courseName, teacherName, smallerProgress, largerProgress, pageNumber, pageSize, requestUser));
+        return ResultUtil.ok(paperScanTaskService.paperScanTaskPage(semesterId, paperArchivesId, courseCode, scanTaskName,scanUser, checkUser, smallerProgress, largerProgress, pageNumber, pageSize, requestUser));
     }
     }
 
 
     @ApiOperation(value = "扫描任务管理-新增/编辑")
     @ApiOperation(value = "扫描任务管理-新增/编辑")

+ 169 - 0
paper-library/src/test/java/com/qmth/paper/library/CheckFileTest.java

@@ -0,0 +1,169 @@
+package com.qmth.paper.library;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.paper.library.business.entity.PaperLibrary;
+import com.qmth.paper.library.business.service.PaperLibraryService;
+import com.qmth.paper.library.common.contant.SystemConstant;
+import com.qmth.paper.library.common.enums.UploadFileEnum;
+import com.qmth.paper.library.common.util.FileStoreUtil;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 短信工具测试类
+ */
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class CheckFileTest {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(CheckFileTest.class);
+
+    @Resource
+    PaperLibraryService paperLibraryService;
+
+    @Resource
+    FileStoreUtil fileStoreUtil;
+
+    // 根目录必须为学校ID那一层
+    String rootPath = "/Users/xiaofei/qmth/temporary/paperlibrary/jhut/image/10";
+
+    @Test
+    public void checkFile() {
+        Long schoolId = 10L;
+
+        File file = new File(rootPath);
+        File[] rootFiles = file.listFiles();
+        List<PaperLibrary> finalList = new ArrayList<>();
+        for (File file1 : rootFiles) {
+            if (file1.isDirectory()) {
+                // 第一级为档案ID
+                String paperArchivesId = file1.getName();
+                if (".DS_Store".equals(paperArchivesId)) {
+                    continue;
+                }
+                File[] archivesFiles = file1.listFiles();
+                for (File file2 : archivesFiles) {
+                    // 第二级为扫描任务ID
+                    String paperScanTaskId = file2.getName();
+                    if (".DS_Store".equals(paperScanTaskId)) {
+                        continue;
+                    }
+                    QueryWrapper<PaperLibrary> queryWrapper = new QueryWrapper<>();
+                    queryWrapper.lambda().eq(PaperLibrary::getPaperScanTaskId, paperScanTaskId);
+                    List<PaperLibrary> paperLibraryList = paperLibraryService.list(queryWrapper);
+                    File[] files = file2.listFiles();
+
+                    Map<String, PaperLibrary> map = new HashMap<>();
+
+                    List<String> txtList = new ArrayList<>();
+
+                    // 以下为图片
+                    for (File imageFile : files) {
+                        String name = imageFile.getName();
+                        if (".DS_Store".equals(name)) {
+                            continue;
+                        }
+                        // 后缀
+                        int suffixIndex = name.lastIndexOf(".");
+                        String suffix = name.substring(suffixIndex);
+
+                        // 序号
+                        int lastSlice = name.lastIndexOf("-");
+                        String newName = name.substring(0, lastSlice);
+
+                        if (map.containsKey(newName)) {
+                            continue;
+                        }
+
+
+                        int lastSlice2 = newName.lastIndexOf("-");
+                        String sequence = newName.substring(lastSlice2 + 1);
+
+                        Long createId = paperLibraryList.get(0).getCreateId();
+
+                        List<PaperLibrary> paperLibraryList1 = paperLibraryList.stream().filter(m -> m.getPath().indexOf(name) > 0).collect(Collectors.toList());
+                        if (paperLibraryList1.isEmpty()) {
+                            String format = String.format("任务编号:%s,文件名为:%s", paperScanTaskId, name);
+                            LOGGER.info("任务编号:{},文件名为:{}图片未保存", paperScanTaskId, name);
+                            txtList.add(format);
+
+                            String rootPath = fileStoreUtil.buildPath(schoolId, Long.valueOf(file.getName()), Long.valueOf(paperScanTaskId), UploadFileEnum.IMAGE, false);
+                            List<JSONObject> objects = new ArrayList<>();
+                            JSONObject jsonObject1 = new JSONObject();
+                            jsonObject1.put(SystemConstant.TYPE, SystemConstant.LOCAL);
+                            jsonObject1.put(SystemConstant.PATH, rootPath + "\\" + newName + "-1" + suffix);
+                            jsonObject1.put(SystemConstant.UPLOAD_TYPE, "IMAGE");
+                            objects.add(jsonObject1);
+
+                            JSONObject jsonObject2 = new JSONObject();
+                            jsonObject2.put(SystemConstant.TYPE, SystemConstant.LOCAL);
+                            jsonObject2.put(SystemConstant.PATH, rootPath + "\\" + newName + "-2" + suffix);
+                            jsonObject2.put(SystemConstant.UPLOAD_TYPE, "IMAGE");
+                            objects.add(jsonObject2);
+
+
+                            PaperLibrary paperLibrary = new PaperLibrary();
+                            paperLibrary.setId(SystemConstant.getDbUuid());
+                            paperLibrary.setSchoolId(schoolId);
+                            paperLibrary.setPaperScanTaskId(Long.valueOf(paperScanTaskId));
+                            paperLibrary.setPath(JSON.toJSONString(objects));
+                            paperLibrary.setSequence(Integer.valueOf(sequence));
+                            paperLibrary.setAbnormal(false);
+                            paperLibrary.setCreateId(createId);
+                            paperLibrary.setCreateTime(System.currentTimeMillis());
+                            finalList.add(paperLibrary);
+                            map.put(newName, paperLibrary);
+                        }
+                    }
+                    if (!txtList.isEmpty()) {
+                        txtList.sort(Comparator.comparing(s -> s));
+                        String fileName = paperArchivesId + "-" + paperScanTaskId + ".txt";
+                        this.writeTxtFile(fileName, txtList);
+                    }
+
+                }
+            }
+        }
+        // 按任务保存
+//            paperLibraryService.saveBatch(finalList);
+    }
+
+
+    private void writeTxtFile(String fileName, List<String> textList) {
+        try {
+            File file = new File(rootPath + File.separator + "txt", fileName);
+            if (file.exists()) {
+                file.delete();
+                file.createNewFile();
+            } else {
+                file.getParentFile().mkdirs();
+            }
+
+            FileWriter fileWriter = new FileWriter(file);
+            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
+            for (String text : textList) {
+                bufferedWriter.write(text);
+                bufferedWriter.newLine();
+            }
+
+            bufferedWriter.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+}

+ 24 - 0
sql/1.0.2修改内容.txt

@@ -22,3 +22,27 @@ 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 ('635', '刷新缓存', '/api/admin/common/flush_cache', 'URL', '149', '20', 'SYS', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('635', '刷新缓存', '/api/admin/common/flush_cache', 'URL', '149', '20', 'SYS', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`) VALUES ('414', '查询识别方式', '/api/admin/sys/setting/recognition_mode', 'URL', '409', '3', 'AUTH', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`) VALUES ('414', '查询识别方式', '/api/admin/sys/setting/recognition_mode', 'URL', '409', '3', 'AUTH', '1', '1');
 UPDATE `sys_privilege` SET `related` = '27,28,34,35,42,414' WHERE (`id` = '22');
 UPDATE `sys_privilege` SET `related` = '27,28,34,35,42,414' WHERE (`id` = '22');
+
+
+
+
+
+
+
+
+
+
+
+
+ALTER TABLE `paper_scan_task` ADD COLUMN `check_user_id` BIGINT(20) NULL COMMENT '数据校验员Id' AFTER `scan_user_id`;
+ALTER TABLE `paper_scan_task` ADD COLUMN `bind_count` INT NULL DEFAULT '0' COMMENT '已绑定数量' AFTER `scan_count`;
+ALTER TABLE `paper_scan_task` ADD COLUMN `progress` DOUBLE NULL DEFAULT '0' COMMENT '绑定进度' AFTER `bind_count`;
+UPDATE `sys_privilege` SET `type` = 'LINK' WHERE (`id` = '22');
+
+
+
+
+ALTER TABLE `paper_scan_task`
+ADD COLUMN `abnormal_count` INT NULL DEFAULT '0' COMMENT '异常数量' AFTER `bind_count`;
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('267', '新增', 'Add', 'BUTTON', '244', '13', 'AUTH', '245', '1', '0', '1');
+UPDATE `sys_privilege` SET `name` = '新增' WHERE (`id` = '245');

+ 7 - 2
sql/paper_library_db.sql

@@ -228,8 +228,12 @@ CREATE TABLE `paper_scan_task`  (
   `teacher_name` varchar(64) DEFAULT NULL COMMENT '任课教师',
   `teacher_name` varchar(64) DEFAULT NULL COMMENT '任课教师',
   `teach_clazz_name` varchar(64) DEFAULT NULL COMMENT '教学班名称',
   `teach_clazz_name` varchar(64) DEFAULT NULL COMMENT '教学班名称',
   `scan_user_id` bigint(20) DEFAULT NULL COMMENT '扫描员id',
   `scan_user_id` bigint(20) DEFAULT NULL COMMENT '扫描员id',
+  `check_user_id` BIGINT(20) NULL COMMENT '数据校验员Id',
   `student_count` int(11) DEFAULT 0 COMMENT '扫描量(份)',
   `student_count` int(11) DEFAULT 0 COMMENT '扫描量(份)',
   `scan_count` int(11) DEFAULT 0 COMMENT '扫描数量',
   `scan_count` int(11) DEFAULT 0 COMMENT '扫描数量',
+  `bind_count` INT(11) NULL DEFAULT 0 COMMENT '已绑定数量',
+  `abnormal_count` INT NULL DEFAULT '0' COMMENT '异常数量',
+  `progress` DOUBLE NULL DEFAULT 0 COMMENT '绑定进度',
   `enable` tinyint(1) DEFAULT 0 COMMENT '任务是否已关闭(1-是,0-否)',
   `enable` tinyint(1) DEFAULT 0 COMMENT '任务是否已关闭(1-是,0-否)',
   `create_id` bigint(20) DEFAULT NULL COMMENT '创建人',
   `create_id` bigint(20) DEFAULT NULL COMMENT '创建人',
   `create_time` bigint(20) DEFAULT NULL COMMENT '创建时间',
   `create_time` bigint(20) DEFAULT NULL COMMENT '创建时间',
@@ -320,7 +324,7 @@ 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 (19, '数据检查', 'library', 'MENU', 1, 4, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (19, '数据检查', 'library', 'MENU', 1, 4, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (20, '数据检查', 'LibraryManage', 'MENU', 19, 1, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (20, '数据检查', 'LibraryManage', 'MENU', 19, 1, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (21, '列表', 'List', 'LIST', 20, 1, 'AUTH', '23,24,25,26,29,40,41,43,410', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (21, '列表', 'List', 'LIST', 20, 1, 'AUTH', '23,24,25,26,29,40,41,43,410', 1, 0, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (22, '开始处理', 'Deal', 'BUTTON', 20, 2, 'AUTH', '27,28,34,35,42,414', 1, 0, 1);
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (22, '开始处理', 'Deal', 'LINK', 20, 2, 'AUTH', '27,28,34,35,42,414', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (23, '未处理接口', '/api/admin/paper/library/page_unbind', 'URL', 20, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (23, '未处理接口', '/api/admin/paper/library/page_unbind', 'URL', 20, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (24, '未处理数量接口', '/api/admin/paper/library/count_unbind', 'URL', 20, 2, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (24, '未处理数量接口', '/api/admin/paper/library/count_unbind', 'URL', 20, 2, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (25, '已处理接口', '/api/admin/paper/library/page_bind', 'URL', 20, 3, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (25, '已处理接口', '/api/admin/paper/library/page_bind', 'URL', 20, 3, 'AUTH', NULL, 1, 1, 1);
@@ -429,7 +433,7 @@ 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 (235, '查询条件', 'Condition', 'CONDITION', 6, 1, 'AUTH', '83', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (235, '查询条件', 'Condition', 'CONDITION', 6, 1, 'AUTH', '83', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (243, '批量导入', 'Export', 'BUTTON', 5, 3, 'AUTH', '81', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (243, '批量导入', 'Export', 'BUTTON', 5, 3, 'AUTH', '81', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (244, '扫描任务管理', 'ScanTaskManage', 'MENU', 111, 1, 'AUTH', NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (244, '扫描任务管理', 'ScanTaskManage', 'MENU', 111, 1, 'AUTH', NULL, 1, 0, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (245, '新增/编辑', '/api/admin/paper/scan_task/save', 'URL', 244, 1, 'AUTH', NULL, 1, 0, 1);
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (245, '新增', '/api/admin/paper/scan_task/save', 'URL', 244, 1, 'AUTH', NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (246, '查询', '/api/admin/paper/scan_task/query', 'URL', 244, 2, 'AUTH', NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (246, '查询', '/api/admin/paper/scan_task/query', 'URL', 244, 2, 'AUTH', NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (247, '批量删除(物理)', '/api/admin/paper/scan_task/delete_batch', 'URL', 244, 3, 'AUTH', NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (247, '批量删除(物理)', '/api/admin/paper/scan_task/delete_batch', 'URL', 244, 3, 'AUTH', NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (248, '批量导入(异步)', '/api/admin/paper/scan_task/scan_task_import', 'URL', 244, 4, 'AUTH', NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (248, '批量导入(异步)', '/api/admin/paper/scan_task/scan_task_import', 'URL', 244, 4, 'AUTH', NULL, 1, 0, 1);
@@ -450,6 +454,7 @@ 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 (264, '查询条件', 'Condition', 'CONDITION', 244, 11, 'AUTH', '246', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (264, '查询条件', 'Condition', 'CONDITION', 244, 11, 'AUTH', '246', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (265, '导入考生', 'Import', 'LINK', 244, 12, 'AUTH', '266', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (265, '导入考生', 'Import', 'LINK', 244, 12, 'AUTH', '266', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (266, '导入考生', '/api/admin/paper/scan_task/import_student', 'URL', 244, 10, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (266, '导入考生', '/api/admin/paper/scan_task/import_student', 'URL', 244, 10, 'AUTH', NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (267, '新增', 'Add', 'BUTTON', 244, 13, 'AUTH', 245, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (358, '学生管理', 'StudentManage', 'MENU', 2, 6, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (358, '学生管理', 'StudentManage', 'MENU', 2, 6, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (362, '查询', '/api/admin/basic/student/query', 'URL', 358, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (362, '查询', '/api/admin/basic/student/query', 'URL', 358, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (363, '增/编辑', '/api/admin/basic/student/save', 'URL', 358, 2, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (363, '增/编辑', '/api/admin/basic/student/save', 'URL', 358, 2, 'AUTH', NULL, 1, 1, 1);