فهرست منبع

增加异常数据标记和查询功能,增加全局学生搜索功能

xiaof 2 سال پیش
والد
کامیت
26bba3abd0
16فایلهای تغییر یافته به همراه291 افزوده شده و 20 حذف شده
  1. 11 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/bean/result/PaperLibraryResult.java
  2. 14 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/entity/PaperLibrary.java
  3. 5 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/mapper/PaperLibraryMapper.java
  4. 4 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperLibraryCommonService.java
  5. 10 2
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperLibraryService.java
  6. 33 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryCommonServiceImpl.java
  7. 78 8
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryServiceImpl.java
  8. 47 3
      paper-library-business/src/main/resources/mapper/PaperLibraryMapper.xml
  9. 14 0
      paper-library-common/src/main/java/com/qmth/paper/library/common/entity/SysSetting.java
  10. 3 0
      paper-library-common/src/main/java/com/qmth/paper/library/common/mapper/SysUserMapper.java
  11. 3 0
      paper-library-common/src/main/java/com/qmth/paper/library/common/service/SysUserService.java
  12. 1 0
      paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/SysSettingServiceImpl.java
  13. 6 0
      paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/SysUserServiceImpl.java
  14. 14 0
      paper-library-common/src/main/resources/mapper/SysUserMapper.xml
  15. 34 3
      paper-library/src/main/java/com/qmth/paper/library/api/PaperLibraryController.java
  16. 14 4
      sql/paper-library-v1.0.0.sql

+ 11 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/bean/result/PaperLibraryResult.java

@@ -41,6 +41,9 @@ public class PaperLibraryResult extends PaperLibrary implements Serializable {
     @ApiModelProperty(value = "扫描任务名称")
     private String paperScanTaskName;
 
+    @ApiModelProperty(value = "数据检查员账号")
+    private String loginName;
+
     public String getSemesterName() {
         return semesterName;
     }
@@ -120,4 +123,12 @@ public class PaperLibraryResult extends PaperLibrary implements Serializable {
     public void setPaperScanTaskName(String paperScanTaskName) {
         this.paperScanTaskName = paperScanTaskName;
     }
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
 }

+ 14 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/entity/PaperLibrary.java

@@ -52,6 +52,12 @@ public class PaperLibrary extends BaseEntity implements Serializable {
     @TableField("sequence")
     private Integer sequence;
 
+    /**
+     * 异常
+     */
+    @TableField("abnormal")
+    private Boolean abnormal;
+
     /**
      * OCR识别结果
      */
@@ -107,6 +113,14 @@ public class PaperLibrary extends BaseEntity implements Serializable {
         this.sequence = sequence;
     }
 
+    public Boolean getAbnormal() {
+        return abnormal;
+    }
+
+    public void setAbnormal(Boolean abnormal) {
+        this.abnormal = abnormal;
+    }
+
     public String getWordsResult() {
         return wordsResult;
     }

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

@@ -9,6 +9,7 @@ import com.qmth.paper.library.business.entity.PaperLibrary;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -25,6 +26,10 @@ public interface PaperLibraryMapper extends BaseMapper<PaperLibrary> {
 
     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);
+
+    int countAbnormalData(@Param("paperScanTaskId") Long paperScanTaskId);
+
     List<PaperLibrary> listUnBindData(@Param("schoolId") Long schoolId);
 
     List<PaperLibrary> selectBatchData(@Param("schoolId") Long schoolId, @Param("userId") Long userId);

+ 4 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperLibraryCommonService.java

@@ -11,7 +11,9 @@ import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @Description: 公共服务service
@@ -73,4 +75,6 @@ public interface PaperLibraryCommonService {
     String preViewPath(String path, String uploadType, String type, Boolean isExpire);
 
     File downloadFile(String rootPath, String path, String uploadType, String type) throws FileNotFoundException;
+
+    Set<Long> listSubOrgIds(Long orgId);
 }

+ 10 - 2
paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperLibraryService.java

@@ -21,11 +21,17 @@ public interface PaperLibraryService extends IService<PaperLibrary> {
 
     IPage<PaperLibraryResult> pageBindData(Long paperScanTaskId, Integer pageNumber, Integer pageSize);
 
+    int countBindData(Long paperScanTaskId);
+
+    IPage<PaperLibraryResult> pageAbnormalData(Long paperScanTaskId, Integer pageNumber, Integer pageSize);
+
+    int countAbnormalData(Long paperScanTaskId);
+
     boolean bind(Long paperLibraryId, Long paperScanTaskDetailId);
 
     List<PaperLibraryResult> listStudentPicture(Long paperScanTaskDetailId);
 
-    int countBindData(Long paperScanTaskId);
+    List<PaperLibraryResult> toAbnormalPaper(Long paperLibraryId);
 
     List<PaperLibraryResult> toBindPaper();
 
@@ -33,7 +39,9 @@ public interface PaperLibraryService extends IService<PaperLibrary> {
 
     int countScanCount(Long paperScanTaskId);
 
-    IPage<TaskStudentResult> pageStudent(Long paperScanTaskId, String param, Integer pageNumber, Integer pageSize);
+    IPage<TaskStudentResult> pageStudent(Long paperScanTaskId, String param, Boolean globalMatch, Integer pageNumber, Integer pageSize);
 
     List<String> ocr(Long paperLibraryId, Integer index, Integer x, Integer y, Integer width, Integer height, Integer rotate);
+
+    Boolean abnormal(Long paperLibraryId);
 }

+ 33 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryCommonServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.itextpdf.text.pdf.PdfReader;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.paper.library.business.service.PaperLibraryCommonService;
+import com.qmth.paper.library.common.bean.dto.OrgDto;
 import com.qmth.paper.library.common.config.DictionaryConfig;
 import com.qmth.paper.library.common.contant.SpringContextHolder;
 import com.qmth.paper.library.common.contant.SystemConstant;
@@ -394,6 +395,38 @@ public class PaperLibraryCommonServiceImpl implements PaperLibraryCommonService
         }
     }
 
+    @Override
+    public Set<Long> listSubOrgIds(Long id) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Long orgId;
+        if (id == null) {
+            orgId = sysUser.getOrgId();
+        } else {
+            orgId = id;
+        }
+        if (orgId == null) {
+            return null;
+        }
+        List<OrgDto> orgDtoList = sysOrgService.listOrgTree();
+        Set<Long> stringSet = new HashSet<>();
+        stringSet.add(orgId);
+        getOrgIds(stringSet, orgDtoList, orgId);
+        return stringSet;
+    }
+
+    private void getOrgIds(Set<Long> stringSet, List<OrgDto> orgDtoList, Long parentId) {
+        for (OrgDto orgDto : orgDtoList) {
+            Long tempParentId = orgDto.getParentId();
+            if (parentId.equals(tempParentId) && stringSet.contains(parentId)) {
+                stringSet.add(orgDto.getId());
+            }
+            if (orgDto.getChildren().isEmpty()) {
+                continue;
+            }
+            getOrgIds(stringSet, orgDto.getChildren(), orgDto.getId());
+        }
+    }
+
     /**
      * 截取文件名
      *

+ 78 - 8
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryServiceImpl.java

@@ -19,10 +19,13 @@ import com.qmth.paper.library.business.service.PaperScanTaskDetailService;
 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.entity.SysUser;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
+import com.qmth.paper.library.common.enums.RoleTypeEnum;
 import com.qmth.paper.library.common.enums.UploadFileEnum;
 import com.qmth.paper.library.common.lock.LockService;
 import com.qmth.paper.library.common.lock.LockType;
+import com.qmth.paper.library.common.service.SysUserService;
 import com.qmth.paper.library.common.util.ImageUtil;
 import com.qmth.paper.library.common.util.OcrUtil;
 import com.qmth.paper.library.common.util.ServletUtil;
@@ -41,6 +44,7 @@ import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 import java.util.StringJoiner;
 
 /**
@@ -66,6 +70,9 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
     @Resource
     PaperLibraryCommonService paperLibraryCommonService;
 
+    @Resource
+    SysUserService sysUserService;
+
     @Resource
     OcrUtil ocrUtil;
 
@@ -92,6 +99,19 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
         return this.baseMapper.countBindData(paperScanTaskId);
     }
 
+    @Override
+    public IPage<PaperLibraryResult> pageAbnormalData(Long paperScanTaskId, Integer pageNumber, Integer pageSize) {
+        Set<Long> listSubOrgIds = paperLibraryCommonService.listSubOrgIds(null);
+        Long userId = Long.valueOf(ServletUtil.getRequestHeaderUserId().toString());
+        boolean isMatch = sysUserService.checkRoleIsAppoint(RoleTypeEnum.DATA_CHECKER, userId);
+        return this.baseMapper.pageAbnormalData(new Page<>(pageNumber, pageSize), paperScanTaskId, listSubOrgIds, isMatch, userId);
+    }
+
+    @Override
+    public int countAbnormalData(Long paperScanTaskId) {
+        return this.baseMapper.countAbnormalData(paperScanTaskId);
+    }
+
     @Transactional
     @Override
     public boolean bind(Long paperLibraryId, Long paperScanTaskDetailId) {
@@ -159,6 +179,38 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
         return paperLibraryResultList;
     }
 
+    @Override
+    public List<PaperLibraryResult> toAbnormalPaper(Long paperLibraryId) {
+        Long userId = Long.valueOf(ServletUtil.getRequestHeaderUserId().toString());
+        Long schoolId = SystemConstant.convertIdToLong(String.valueOf(ServletUtil.getRequestHeaderSchoolId()));
+
+        List<PaperLibraryResult> paperLibraryResultList = new ArrayList<>();
+        PaperLibrary paperLibrary = this.getById(paperLibraryId);
+        PaperLibraryResult paperLibraryResult = new PaperLibraryResult();
+        BeanUtils.copyProperties(paperLibrary, paperLibraryResult);
+        String fileUrl = paperLibrary.getPath();
+        if (StringUtils.isBlank(fileUrl)) {
+            throw ExceptionResultEnum.ERROR.exception("未找到图片路径");
+        }
+        List<JSONObject> objectList = JSON.parseArray(fileUrl, JSONObject.class);
+        List<String> fileUrls = new ArrayList<>();
+        for (JSONObject jsonObject : objectList) {
+            fileUrls.add(paperLibraryCommonService.preViewPath(jsonObject.getString(SystemConstant.PATH), jsonObject.getString(SystemConstant.UPLOAD_TYPE), jsonObject.getString(SystemConstant.TYPE), false));
+        }
+        PaperScanTaskResult paperScanTaskResult = paperScanTaskService.getByPaperScanTaskId(paperLibrary.getPaperScanTaskId());
+        if (paperScanTaskResult != null) {
+            paperLibraryResult.setSemesterName(paperScanTaskResult.getSemesterName());
+            paperLibraryResult.setPaperArchivesName(paperScanTaskResult.getArchivesName());
+            paperLibraryResult.setPaperScanTaskName(paperScanTaskResult.getScanTaskName());
+            paperLibraryResult.setCourseName(paperScanTaskResult.getCourseName());
+            paperLibraryResult.setTeacherName(paperScanTaskResult.getTeacherName());
+            paperLibraryResult.setTeachClazzName(paperScanTaskResult.getTeachClazzName());
+        }
+        paperLibraryResult.setFileUrls(fileUrls);
+        paperLibraryResultList.add(paperLibraryResult);
+        return paperLibraryResultList;
+    }
+
     @Override
     public List<PaperLibraryResult> toBindPaper() {
         Long userId = Long.valueOf(ServletUtil.getRequestHeaderUserId().toString());
@@ -219,16 +271,22 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
     }
 
     @Override
-    public IPage<TaskStudentResult> pageStudent(Long paperScanTaskId, String param, Integer pageNumber, Integer pageSize) {
+    public IPage<TaskStudentResult> pageStudent(Long paperScanTaskId, String param, Boolean globalMatch, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        IPage<TaskStudentResult> taskStudentResultIPage = this.baseMapper.pageStudent(new Page<>(pageNumber, pageSize), schoolId, paperScanTaskId, param);
-        for (TaskStudentResult record : taskStudentResultIPage.getRecords()) {
-            QueryWrapper<PaperLibrary> queryWrapper = new QueryWrapper<>();
-            queryWrapper.lambda().eq(PaperLibrary::getPaperScanTaskDetailId, record.getPaperScanTaskDetailId());
-            int count = paperLibraryService.count(queryWrapper);
-            record.setBindCount(count);
+
+        // 全局匹配考生
+        if (globalMatch) {
+            return this.baseMapper.listByStudentCode(new Page<>(pageNumber, pageSize), schoolId, param);
+        } else {
+            IPage<TaskStudentResult> taskStudentResultIPage = this.baseMapper.pageStudent(new Page<>(pageNumber, pageSize), schoolId, paperScanTaskId, param);
+            for (TaskStudentResult record : taskStudentResultIPage.getRecords()) {
+                QueryWrapper<PaperLibrary> queryWrapper = new QueryWrapper<>();
+                queryWrapper.lambda().eq(PaperLibrary::getPaperScanTaskDetailId, record.getPaperScanTaskDetailId());
+                int count = paperLibraryService.count(queryWrapper);
+                record.setBindCount(count);
+            }
+            return taskStudentResultIPage;
         }
-        return taskStudentResultIPage;
     }
 
     @Override
@@ -313,6 +371,18 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
         return stringList;
     }
 
+    @Override
+    public Boolean abnormal(Long paperLibraryId) {
+        PaperLibrary paperLibrary = this.getById(paperLibraryId);
+        if (paperLibrary == null) {
+            throw ExceptionResultEnum.ERROR.exception("绑定对象有误,图片已删除,请刷新数据再试");
+        }
+
+        UpdateWrapper<PaperLibrary> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(PaperLibrary::getAbnormal, true).eq(PaperLibrary::getId, paperLibraryId);
+        return this.update(updateWrapper);
+    }
+
     private List<PaperLibrary> createBindData(Long userId, Long schoolId) {
         try {
             lockService.waitlock(LockType.BIND_PAPER_TASK, schoolId);

+ 47 - 3
paper-library-business/src/main/resources/mapper/PaperLibraryMapper.xml

@@ -8,7 +8,9 @@
         <result column="path" property="path"/>
         <result column="paper_scan_task_id" property="paperScanTaskId"/>
         <result column="paper_scan_task_detail_id" property="paperScanTaskDetailId"/>
+        <result column="user_id" property="userId"/>
         <result column="sequence" property="sequence"/>
+        <result column="abnormal" property="abnormal"/>
         <result column="create_id" property="createId"/>
         <result column="create_time" property="createTime"/>
         <result column="update_id" property="updateId"/>
@@ -17,13 +19,13 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        select id, school_id, `path`, paper_scan_task_id, paper_scan_task_detail_id, sequence,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>
 
     <select id="pageUnbindData" resultMap="BaseResultMap">
         <include refid="Base_Column_List"></include>
         <where>
-            paper_scan_task_detail_id is null
+            paper_scan_task_detail_id is null and abnormal = false
             <if test="paperScanTaskId != null">
                 and paper_scan_task_id = #{paperScanTaskId}
             </if>
@@ -32,7 +34,7 @@
     <select id="countUnbindData" resultType="java.lang.Integer">
         select count(1) from paper_library
         <where>
-            paper_scan_task_detail_id is null
+            paper_scan_task_detail_id is null and abnormal = false
             <if test="paperScanTaskId != null">
                 and paper_scan_task_id = #{paperScanTaskId}
             </if>
@@ -91,6 +93,47 @@
             </if>
         </where>
     </select>
+    <select id="pageAbnormalData" resultType="com.qmth.paper.library.business.bean.result.PaperLibraryResult">
+        select pl.id,
+            pl.school_id school_id,
+            pl.`path`,
+            pl.paper_scan_task_id paperScanTaskId,
+            pl.paper_scan_task_detail_id paperScanTaskDetailId,
+            pl.user_id userId,
+            pl.`sequence`,
+            pl.abnormal,
+            pl.create_id createId,
+            pl.create_time createTime,
+            pl.update_id updateId,
+            pl.update_time updateTime,
+            su.login_name loginName
+        from paper_library pl
+            left join sys_user su on pl.user_id = su.id
+        <where>
+            pl.paper_scan_task_detail_id is null and pl.abnormal = true
+            <if test="paperScanTaskId != null">
+                and pl.paper_scan_task_id = #{paperScanTaskId}
+            </if>
+            <if test="isMatch == true">
+                and pl.user_id = #{userId}
+            </if>
+            <if test="isMatch == false">
+                and su.org_id in
+                <foreach collection="listSubOrgIds" open="(" close=")" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
+    <select id="countAbnormalData" resultType="java.lang.Integer">
+        select count(1) from paper_library
+        <where>
+            paper_scan_task_detail_id is null and abnormal = true
+            <if test="paperScanTaskId != null">
+                and paper_scan_task_id = #{paperScanTaskId}
+            </if>
+        </where>
+    </select>
     <select id="listUnBindData" resultMap="BaseResultMap">
         <include refid="Base_Column_List"></include>
         <where>
@@ -105,6 +148,7 @@
             school_id = #{schoolId}
             AND user_id = #{userId}
             AND paper_scan_task_detail_id is null
+            AND abnormal = false
             limit 10
         </where>
     </select>

+ 14 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/entity/SysSetting.java

@@ -30,6 +30,12 @@ public class SysSetting extends BaseEntity implements Serializable {
     @TableField("open_ocr")
     private Boolean openOcr;
 
+    /**
+     * 是否开启全局匹配
+     */
+    @TableField("open_global_match")
+    private Boolean openGlobalMatch;
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -45,4 +51,12 @@ public class SysSetting extends BaseEntity implements Serializable {
     public void setOpenOcr(Boolean openOcr) {
         this.openOcr = openOcr;
     }
+
+    public Boolean getOpenGlobalMatch() {
+        return openGlobalMatch;
+    }
+
+    public void setOpenGlobalMatch(Boolean openGlobalMatch) {
+        this.openGlobalMatch = openGlobalMatch;
+    }
 }

+ 3 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/mapper/SysUserMapper.java

@@ -10,6 +10,7 @@ import com.qmth.paper.library.common.bean.params.ApproveUserResult;
 import com.qmth.paper.library.common.bean.result.SysUserResult;
 import com.qmth.paper.library.common.bean.result.UserRoleNameResult;
 import com.qmth.paper.library.common.entity.SysUser;
+import com.qmth.paper.library.common.entity.SysUserRole;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -113,4 +114,6 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @return
      */
     List<ApproveUserResult> findByRoldIdAndMemberName(@Param("roleId") Long roleId, @Param("name") String name, @Param("schoolId") Long schoolId);
+
+    List<SysUserRole> listByRoleTypeAndUserId(@Param("roleType") String roleType, @Param("userId") Long userId);
 }

+ 3 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/service/SysUserService.java

@@ -9,6 +9,7 @@ import com.qmth.paper.library.common.bean.result.LoginResult;
 import com.qmth.paper.library.common.bean.result.SysUserResult;
 import com.qmth.paper.library.common.bean.result.UserRoleNameResult;
 import com.qmth.paper.library.common.entity.SysUser;
+import com.qmth.paper.library.common.enums.RoleTypeEnum;
 import org.springframework.util.LinkedMultiValueMap;
 
 import java.security.NoSuchAlgorithmException;
@@ -141,4 +142,6 @@ public interface SysUserService extends IService<SysUser> {
     public List<ApproveUserResult> findByRoldIdAndMemberName(Long roleId, String name);
 
     boolean delete(List<Long> ids);
+
+    boolean checkRoleIsAppoint(RoleTypeEnum roleTypeEnum, Long userId);
 }

+ 1 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/SysSettingServiceImpl.java

@@ -58,6 +58,7 @@ public class SysSettingServiceImpl extends ServiceImpl<SysSettingMapper, SysSett
                 throw ExceptionResultEnum.ERROR.exception("查询数据学校与当前学校不一致");
             }
             oldSysSetting.setOpenOcr(sysSetting.getOpenOcr());
+            oldSysSetting.setOpenGlobalMatch(sysSetting.getOpenGlobalMatch());
             oldSysSetting.setUpdateId(userId);
             oldSysSetting.setUpdateTime(System.currentTimeMillis());
             return this.updateById(oldSysSetting);

+ 6 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/SysUserServiceImpl.java

@@ -612,6 +612,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return true;
     }
 
+    @Override
+    public boolean checkRoleIsAppoint(RoleTypeEnum roleTypeEnum, Long userId) {
+        List<SysUserRole> sysRoleList = this.baseMapper.listByRoleTypeAndUserId(roleTypeEnum.name(), userId);
+        return !sysRoleList.isEmpty();
+    }
+
     /**
      * 根据角色名称获取角色id集合
      *

+ 14 - 0
paper-library-common/src/main/resources/mapper/SysUserMapper.xml

@@ -350,4 +350,18 @@
             and srgm.enable = 1
         </where>
     </select>
+    <select id="listByRoleTypeAndUserId" resultMap="com.qmth.paper.library.common.mapper.SysUserRoleMapper.BaseResultMap">
+        SELECT
+            *
+        FROM
+            sys_user_role sur
+        WHERE
+            sur.user_id = #{userId}
+          AND EXISTS( SELECT
+                          1
+                      FROM
+                          sys_role sr
+                      WHERE
+                          sr.id = sur.role_id AND sr.type = #{roleType})
+    </select>
 </mapper>

+ 34 - 3
paper-library/src/main/java/com/qmth/paper/library/api/PaperLibraryController.java

@@ -63,6 +63,22 @@ public class PaperLibraryController {
         return ResultUtil.ok(paperLibraryService.countBindData(paperScanTaskId));
     }
 
+    @ApiOperation(value = "分页查询-异常")
+    @PostMapping("/page_abnormal")
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result pageAbnormal(@ApiParam(value = "任务") @RequestParam(required = false) Long paperScanTaskId,
+                             @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) {
+        return ResultUtil.ok(paperLibraryService.pageAbnormalData(paperScanTaskId, pageNumber, pageSize));
+    }
+
+    @ApiOperation(value = "分页查询-异常数量")
+    @PostMapping("/count_abnormal")
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result countAbnormal(@ApiParam(value = "任务") @RequestParam(required = false) Long paperScanTaskId) {
+        return ResultUtil.ok(paperLibraryService.countAbnormalData(paperScanTaskId));
+    }
+
     @ApiOperation(value = "查询考生图片集合")
     @PostMapping("/list_student_picture")
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
@@ -78,10 +94,24 @@ public class PaperLibraryController {
         return ResultUtil.ok(paperLibraryService.bind(paperLibraryId, paperScanTaskDetailId));
     }
 
+    @ApiOperation(value = "标记异常")
+    @PostMapping("/abnormal")
+    @ApiResponses({@ApiResponse(code = 200, message = "标记成功", response = EditResult.class)})
+    public Result abnormal(@ApiParam(value = "扫描图片ID") @RequestParam Long paperLibraryId) {
+        return ResultUtil.ok(paperLibraryService.abnormal(paperLibraryId));
+    }
+
+    @ApiOperation(value = "获取单条图片详情")
+    @PostMapping("/get_paper_data")
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result getAbnormalData(@ApiParam(value = "扫描图片ID") @RequestParam Long paperLibraryId) {
+        return ResultUtil.ok(paperLibraryService.toAbnormalPaper(paperLibraryId));
+    }
+
     @ApiOperation(value = "开始处理")
     @PostMapping("/get_bind_data")
-    @ApiResponses({@ApiResponse(code = 200, message = "确定成功", response = Result.class)})
-    public Result next() {
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result getBindData() {
         return ResultUtil.ok(paperLibraryService.toBindPaper());
     }
 
@@ -90,9 +120,10 @@ public class PaperLibraryController {
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     public Result pageStudent(@ApiParam(value = "扫描任务ID") @RequestParam Long paperScanTaskId,
                               @ApiParam(value = "模糊查询(学号/姓名)") @RequestParam(required = false) String param,
+                              @ApiParam(value = "是否开启全局匹配") @RequestParam(required = false) Boolean globalMatch,
                               @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) {
-        return ResultUtil.ok(paperLibraryService.pageStudent(paperScanTaskId, param, pageNumber, pageSize));
+        return ResultUtil.ok(paperLibraryService.pageStudent(paperScanTaskId, param, globalMatch, pageNumber, pageSize));
     }
 
     @ApiOperation(value = "根据学号查询所有任务下考生信息")

+ 14 - 4
sql/paper-library-v1.0.0.sql

@@ -222,6 +222,7 @@ CREATE TABLE `paper_library`  (
   `paper_scan_task_detail_id` bigint(20) NULL DEFAULT NULL COMMENT '扫描任务详情表id',
   `user_id` bigint(20) NULL DEFAULT NULL COMMENT '数据检验员id',
   `sequence` int(11) NULL DEFAULT NULL COMMENT '图片序号',
+  `abnormal` tinyint(1) NULL DEFAULT '0' COMMENT '异常,默认否(0)',
   `words_result` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'OCR识别结果',
   `create_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
   `create_time` bigint(20) NULL DEFAULT NULL COMMENT '创建时间',
@@ -362,8 +363,8 @@ INSERT INTO `sys_privilege` VALUES (17, '查看详情接口', '/api/admin/paper/
 INSERT INTO `sys_privilege` VALUES (18, '删除接口', '/api/admin/paper/archives/delete', 'URL', 9, 4, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (19, '数据检查', 'library', 'MENU', 1, 4, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (20, '数据检查', 'LibraryManage', 'MENU', 19, 1, NULL, NULL, 1, 0, 1);
-INSERT INTO `sys_privilege` VALUES (21, '列表', 'List', 'LIST', 20, 1, 'AUTH', '23,24,25,26,29,410', 1, 0, 1);
-INSERT INTO `sys_privilege` VALUES (22, '开始处理', 'Deal', 'BUTTON', 20, 2, 'AUTH', '27,28,34,35', 1, 0, 1);
+INSERT INTO `sys_privilege` VALUES (21, '列表', 'List', 'LIST', 20, 1, 'AUTH', '23,24,25,26,29,40,41,43,410', 1, 0, 1);
+INSERT INTO `sys_privilege` VALUES (22, '开始处理', 'Deal', 'BUTTON', 20, 2, 'AUTH', '27,28,34,35,42', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (23, '未处理接口', '/api/admin/paper/library/page_unbind', 'URL', 20, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (24, '未处理数量接口', '/api/admin/paper/library/count_unbind', 'URL', 20, 2, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (25, '已处理接口', '/api/admin/paper/library/page_bind', 'URL', 20, 3, 'AUTH', NULL, 1, 1, 1);
@@ -372,15 +373,19 @@ INSERT INTO `sys_privilege` VALUES (27, '绑定接口', '/api/admin/paper/librar
 INSERT INTO `sys_privilege` VALUES (28, '开始处理接口', '/api/admin/paper/library/get_bind_data', 'URL', 20, 6, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (29, '查询考生图片集合接口', '/api/admin/paper/library/list_student_picture', 'URL', 20, 7, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (30, '查询条件', 'Condition', 'CONDITION', 9, 3, 'AUTH', '15', 1, 0, 1);
-INSERT INTO `sys_privilege` VALUES (31, '查询条件', 'Condition', 'CONDITION', 20, 3, 'AUTH', '23,24,25,26', 1, 0, 1);
+INSERT INTO `sys_privilege` VALUES (31, '查询条件', 'Condition', 'CONDITION', 20, 3, 'AUTH', '23,24,25,26,40,41,43', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (32, '查询', 'Select', 'BUTTON', 9, 1, 'AUTH', '15', 1, 0, 1);
-INSERT INTO `sys_privilege` VALUES (33, '查询', 'Select', 'BUTTON', 20, 1, 'AUTH', '23,24,25,26', 1, 0, 1);
+INSERT INTO `sys_privilege` VALUES (33, '查询', 'Select', 'BUTTON', 20, 1, 'AUTH', '23,24,25,26,40,41,43', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (34, '根据扫描任务ID查询学生', '/api/admin/paper/library/page_student', 'URL', 20, 7, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (35, 'ocr识别', '/api/admin/paper/library/ocr', 'URL', 20, 8, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (36, '所有任务考生信息', 'AllData', 'BUTTON', 20, 3, 'AUTH', '37', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (37, '所有任务考生信息', '/api/admin/paper/library/list_by_student_code', 'URL', 20, 9, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (38, '批量下载', 'Download', 'BUTTON', 9, 6, 'AUTH', '39', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (39, '批量下载', '/api/admin/paper/archives/paper_download', 'URL', 9, 5, 'AUTH', NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` VALUES (40, '异常分页接口', '/api/admin/paper/library/page_abnormal', 'URL', 20, 10, 'AUTH', NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` VALUES (41, '异常数量接口', '/api/admin/paper/library/count_abnormal', 'URL', 20, 11, 'AUTH', NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` VALUES (42, '标记异常接口', '/api/admin/paper/library/abnormal', 'URL', 20, 12, 'AUTH', NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` VALUES (43, '获取单条图片详情', '/api/admin/paper/library/get_paper_data', 'URL', 20, 13, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (49, '查询条件-档案管理员', '/api/admin/common/manager_user/query', 'URL', 149, 10, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (50, '查询条件-学期', '/api/admin/common/semester/query', 'URL', 149, 8, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (51, '查询条件-档案', '/api/admin/common/archives/query', 'URL', 149, 8, 'SYS', NULL, 1, 1, 1);
@@ -633,6 +638,10 @@ INSERT INTO `sys_role_privilege` VALUES (1582980520072691713, 4, 27, 1);
 INSERT INTO `sys_role_privilege` VALUES (1582980520072691714, 4, 28, 1);
 INSERT INTO `sys_role_privilege` VALUES (1582980520072691715, 4, 29, 1);
 INSERT INTO `sys_role_privilege` VALUES (1582980520076886018, 4, 31, 1);
+INSERT INTO `sys_role_privilege` VALUES (1582980520068497412, 4, 40, 1);
+INSERT INTO `sys_role_privilege` VALUES (1582980520068497413, 4, 41, 1);
+INSERT INTO `sys_role_privilege` VALUES (1582980520068497414, 4, 42, 1);
+INSERT INTO `sys_role_privilege` VALUES (1582980520068497415, 4, 43, 1);
 INSERT INTO `sys_role_privilege` VALUES (1583366560558071809, 3, 200, 1);
 INSERT INTO `sys_role_privilege` VALUES (1583366560566460417, 3, 202, 1);
 INSERT INTO `sys_role_privilege` VALUES (1583366560566460418, 3, 203, 1);
@@ -669,6 +678,7 @@ CREATE TABLE `sys_setting`  (
   `id` bigint(20) NOT NULL,
   `school_id` bigint(20) NOT NULL COMMENT '学校Id',
   `open_ocr` tinyint(1) NULL DEFAULT 0 COMMENT '是否开启ocr识别,默认否(0)',
+  `open_global_match` tinyint(1) NULL DEFAULT 0 COMMENT '是否开启全局匹配,默认否(0)',
   `create_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
   `create_time` bigint(20) NULL DEFAULT NULL COMMENT '创建时间',
   `update_id` bigint(20) NULL DEFAULT NULL COMMENT '更新人',