Browse Source

扫描端接口

xiaof 2 years ago
parent
commit
f30e260a22
15 changed files with 300 additions and 374 deletions
  1. 0 76
      paper-library-business/src/main/java/com/qmth/paper/library/business/bean/result/ClientScanTaskResult.java
  2. 21 89
      paper-library-business/src/main/java/com/qmth/paper/library/business/entity/PaperLibrary.java
  3. 9 2
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/ClientService.java
  4. 2 3
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperLibraryCommonService.java
  5. 114 9
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/ClientServiceImpl.java
  6. 58 4
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryCommonServiceImpl.java
  7. 3 7
      paper-library-common/src/main/java/com/qmth/paper/library/common/enums/AppSourceEnum.java
  8. 2 15
      paper-library-common/src/main/java/com/qmth/paper/library/common/enums/UploadFileEnum.java
  9. 0 10
      paper-library-common/src/main/java/com/qmth/paper/library/common/service/BasicAttachmentService.java
  10. 0 16
      paper-library-common/src/main/java/com/qmth/paper/library/common/service/LibraryCommonService.java
  11. 0 43
      paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/BasicAttachmentServiceImpl.java
  12. 0 79
      paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/LibraryCommonServiceImpl.java
  13. 5 10
      paper-library-common/src/main/java/com/qmth/paper/library/common/util/ServletUtil.java
  14. 85 9
      paper-library/src/main/java/com/qmth/paper/library/api/ClientController.java
  15. 1 2
      paper-library/src/main/java/com/qmth/paper/library/api/SysController.java

+ 0 - 76
paper-library-business/src/main/java/com/qmth/paper/library/business/bean/result/ClientScanTaskResult.java

@@ -1,76 +0,0 @@
-package com.qmth.paper.library.business.bean.result;
-
-import io.swagger.annotations.ApiModelProperty;
-
-import java.io.Serializable;
-
-/**
- * 客户端任务查询
- */
-public class ClientScanTaskResult implements Serializable {
-    @ApiModelProperty(value = "扫描任务ID")
-    private String paperScanTaskId;
-
-    @ApiModelProperty(value = "扫描任务名称")
-    private String paperScanTaskName;
-
-    @ApiModelProperty(value = "课程")
-    private String courseName;
-
-    @ApiModelProperty(value = "教学班")
-    private String teachClazzName;
-
-    @ApiModelProperty(value = "扫描量(份)")
-    private int studentCount;
-
-    @ApiModelProperty(value = "扫描张数")
-    private int scanCount;
-
-    public String getPaperScanTaskId() {
-        return paperScanTaskId;
-    }
-
-    public void setPaperScanTaskId(String paperScanTaskId) {
-        this.paperScanTaskId = paperScanTaskId;
-    }
-
-    public String getPaperScanTaskName() {
-        return paperScanTaskName;
-    }
-
-    public void setPaperScanTaskName(String paperScanTaskName) {
-        this.paperScanTaskName = paperScanTaskName;
-    }
-
-    public String getCourseName() {
-        return courseName;
-    }
-
-    public void setCourseName(String courseName) {
-        this.courseName = courseName;
-    }
-
-    public String getTeachClazzName() {
-        return teachClazzName;
-    }
-
-    public void setTeachClazzName(String teachClazzName) {
-        this.teachClazzName = teachClazzName;
-    }
-
-    public int getStudentCount() {
-        return studentCount;
-    }
-
-    public void setStudentCount(int studentCount) {
-        this.studentCount = studentCount;
-    }
-
-    public int getScanCount() {
-        return scanCount;
-    }
-
-    public void setScanCount(int scanCount) {
-        this.scanCount = scanCount;
-    }
-}

+ 21 - 89
paper-library-business/src/main/java/com/qmth/paper/library/business/entity/PaperLibrary.java

@@ -24,34 +24,10 @@ public class PaperLibrary extends BaseEntity implements Serializable {
     @TableField("school_id")
     private Long schoolId;
 
-    @ApiModelProperty(value = "机构id")
+    @ApiModelProperty(value = "扫描任务表id")
     @JsonSerialize(using = ToStringSerializer.class)
-    @TableField("org_id")
-    private Long orgId;
-
-    /**
-     * 文件名
-     */
-    @TableField("name")
-    private String name;
-
-    /**
-     * 文件类型
-     */
-    @TableField("type")
-    private String type;
-
-    /**
-     * 单位(KB)
-     */
-    @TableField("size")
-    private Integer size;
-
-    /**
-     * 文件md5值
-     */
-    @TableField("md5")
-    private String md5;
+    @TableField("paper_scan_task_id")
+    private Long paperScanTaskId;
 
     /**
      * 存储路径
@@ -59,28 +35,24 @@ public class PaperLibrary extends BaseEntity implements Serializable {
     @TableField("path")
     private String path;
 
-    @ApiModelProperty(value = "数据检验员id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    @TableField("user_id")
-    private Long userId;
-
-    @ApiModelProperty(value = "扫描任务表id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    @TableField("paper_scan_task_id")
-    private Long paperScanTaskId;
-
 
     @ApiModelProperty(value = "扫描任务详情表id")
     @JsonSerialize(using = ToStringSerializer.class)
     @TableField("paper_scan_task_detail_id")
     private Long paperScanTaskDetailId;
 
+    @ApiModelProperty(value = "数据检验员id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField("user_id")
+    private Long userId;
+
     /**
      * 图片序号
      */
     @TableField("sequence")
     private Integer sequence;
 
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -89,44 +61,12 @@ public class PaperLibrary extends BaseEntity implements Serializable {
         this.schoolId = schoolId;
     }
 
-    public Long getOrgId() {
-        return orgId;
-    }
-
-    public void setOrgId(Long orgId) {
-        this.orgId = orgId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public Integer getSize() {
-        return size;
-    }
-
-    public void setSize(Integer size) {
-        this.size = size;
-    }
-
-    public String getMd5() {
-        return md5;
+    public Long getPaperScanTaskId() {
+        return paperScanTaskId;
     }
 
-    public void setMd5(String md5) {
-        this.md5 = md5;
+    public void setPaperScanTaskId(Long paperScanTaskId) {
+        this.paperScanTaskId = paperScanTaskId;
     }
 
     public String getPath() {
@@ -137,22 +77,6 @@ public class PaperLibrary extends BaseEntity implements Serializable {
         this.path = path;
     }
 
-    public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-
-    public Long getPaperScanTaskId() {
-        return paperScanTaskId;
-    }
-
-    public void setPaperScanTaskId(Long paperScanTaskId) {
-        this.paperScanTaskId = paperScanTaskId;
-    }
-
     public Long getPaperScanTaskDetailId() {
         return paperScanTaskDetailId;
     }
@@ -161,6 +85,14 @@ public class PaperLibrary extends BaseEntity implements Serializable {
         this.paperScanTaskDetailId = paperScanTaskDetailId;
     }
 
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
     public Integer getSequence() {
         return sequence;
     }

+ 9 - 2
paper-library-business/src/main/java/com/qmth/paper/library/business/service/ClientService.java

@@ -1,7 +1,8 @@
 package com.qmth.paper.library.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.qmth.paper.library.business.bean.result.ClientScanTaskResult;
+import com.qmth.paper.library.business.entity.PaperScanTask;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * <p>
@@ -10,5 +11,11 @@ import com.qmth.paper.library.business.bean.result.ClientScanTaskResult;
  */
 public interface ClientService {
 
-    IPage<ClientScanTaskResult> pageScanTask(Long paperArchivesId, String courseName, String clazzName, Boolean isScan, Integer pageNumber, Integer pageSize);
+    IPage<PaperScanTask> pageScanTask(Long paperArchivesId, String courseName, String teachClazzName, Boolean isMine, Integer pageNumber, Integer pageSize);
+
+    void checkPrivilege(Long userId);
+
+    boolean bindUser(Long paperScanTaskId, Long userId);
+
+    boolean pictureUpload(Long paperScanTaskId, MultipartFile frontFile, String frontMd5, MultipartFile versoFile, String versoMd5);
 }

+ 2 - 3
paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperLibraryCommonService.java

@@ -1,15 +1,12 @@
 package com.qmth.paper.library.business.service;
 
-import com.alibaba.fastjson.JSONObject;
 import com.qmth.paper.library.common.entity.BasicAttachment;
 import com.qmth.paper.library.common.entity.SysOrg;
 import com.qmth.paper.library.common.enums.TaskTypeEnum;
 import com.qmth.paper.library.common.enums.UploadFileEnum;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.ByteArrayOutputStream;
-import java.io.File;
 import java.io.IOException;
 import java.util.Map;
 
@@ -84,4 +81,6 @@ public interface PaperLibraryCommonService {
      * @return
      */
     public String saveTaskAttachment(ByteArrayOutputStream fos, boolean oss) throws IOException;
+
+    String saveLibraryFile(UploadFileEnum uploadFileEnum, MultipartFile... files);
 }

+ 114 - 9
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/ClientServiceImpl.java

@@ -1,19 +1,33 @@
 package com.qmth.paper.library.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.qmth.paper.library.business.bean.result.ClientScanTaskResult;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.paper.library.business.entity.PaperLibrary;
 import com.qmth.paper.library.business.entity.PaperScanTask;
-import com.qmth.paper.library.business.entity.PaperScanTaskDetail;
 import com.qmth.paper.library.business.service.ClientService;
+import com.qmth.paper.library.business.service.PaperLibraryCommonService;
 import com.qmth.paper.library.business.service.PaperLibraryService;
-import com.qmth.paper.library.business.service.PaperScanTaskDetailService;
 import com.qmth.paper.library.business.service.PaperScanTaskService;
 import com.qmth.paper.library.common.contant.SystemConstant;
+import com.qmth.paper.library.common.entity.SysPrivilege;
+import com.qmth.paper.library.common.entity.SysUser;
+import com.qmth.paper.library.common.enums.ExceptionResultEnum;
+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.SysPrivilegeService;
 import com.qmth.paper.library.common.util.ServletUtil;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * <p>
@@ -27,17 +41,108 @@ public class ClientServiceImpl implements ClientService {
     PaperScanTaskService paperScanTaskService;
 
     @Resource
-    PaperScanTaskDetailService paperScanTaskDetailService;
+    SysPrivilegeService sysPrivilegeService;
 
     @Resource
     PaperLibraryService paperLibraryService;
 
+    @Resource
+    PaperLibraryCommonService paperLibraryCommonService;
+
+    @Resource
+    LockService lockService;
+
     @Override
-    public IPage<ClientScanTaskResult> pageScanTask(Long paperArchivesId, String courseName, String clazzName, Boolean isScan, Integer pageNumber, Integer pageSize) {
-        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString()) ;
+    public IPage<PaperScanTask> pageScanTask(Long paperArchivesId, String courseName, String teachClazzName, Boolean isMine, Integer pageNumber, Integer pageSize) {
+        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         // 查询任务
-//        QueryWrapper<PaperScanTask> paperScanTaskQueryWrapper = new QueryWrapper<>();
-//        return paperScanTaskService.pageClientScanTask(paperArchivesId, courseName, clazzName, isScan, pageNumber, pageSize);
-        return null;
+        QueryWrapper<PaperScanTask> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(PaperScanTask::getSchoolId, schoolId);
+        if (paperArchivesId != null) {
+            queryWrapper.lambda().eq(PaperScanTask::getPaperArchivesId, paperArchivesId);
+        }
+        if (StringUtils.isNotBlank(courseName)) {
+            queryWrapper.lambda().eq(PaperScanTask::getCourseName, courseName);
+        }
+        if (StringUtils.isNotBlank(teachClazzName)) {
+            queryWrapper.lambda().eq(PaperScanTask::getTeachClazzName, teachClazzName);
+        }
+        if (isMine != null) {
+            // 我的任务
+            if (isMine) {
+                SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+                queryWrapper.lambda().eq(PaperScanTask::getScanUserId, sysUser.getId());
+            } else {
+                queryWrapper.lambda().isNull(PaperScanTask::getScanUserId);
+            }
+        }
+        return paperScanTaskService.page(new Page<>(pageNumber, pageSize), queryWrapper);
+    }
+
+    @Override
+    public void checkPrivilege(Long userId) {
+        List<SysPrivilege> sysPrivileges = sysPrivilegeService.getClientUrlByUserId(userId);
+        long count = sysPrivileges.stream().filter(m -> "客户端".equals(m.getName()) && "client".equals(m.getUrl())).count();
+        if (count == 0) {
+            throw ExceptionResultEnum.ERROR.exception("用户没有权限,无法登录");
+        }
+    }
+
+    @Override
+    public boolean bindUser(Long paperScanTaskId, Long userId) {
+        try {
+            lockService.waitlock(LockType.BIND_SCAN_USER, paperScanTaskId);
+            if (userId == null) {
+                SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+                userId = sysUser.getId();
+            }
+
+            UpdateWrapper<PaperScanTask> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda().set(PaperScanTask::getScanUserId, userId).eq(PaperScanTask::getId, paperScanTaskId);
+            return paperScanTaskService.update(updateWrapper);
+        } catch (Exception e) {
+            throw ExceptionResultEnum.ERROR.exception("绑定扫描员错误:" + e.getMessage());
+        } finally {
+            lockService.unlock(LockType.BIND_SCAN_USER, paperScanTaskId);
+        }
+    }
+
+    @Override
+    public boolean pictureUpload(Long paperScanTaskId, MultipartFile frontFile, String frontMd5, MultipartFile versoFile, String versoMd5) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+
+        if (Objects.isNull(frontFile) || frontFile.getSize() == 0) {
+            throw ExceptionResultEnum.ERROR.exception("frontFile为空");
+        }
+        if (Objects.isNull(versoFile) || versoFile.getSize() == 0) {
+            throw ExceptionResultEnum.ERROR.exception("versoFile为空");
+        }
+
+        try {
+            String frontFileMd5 = DigestUtils.md5Hex(frontFile.getBytes());
+            if (!Objects.equals(frontMd5, frontFileMd5)) {
+                throw ExceptionResultEnum.MD5_EQUALS_FALSE.exception();
+            }
+            String versoFileMd5 = DigestUtils.md5Hex(versoFile.getBytes());
+            if (!Objects.equals(versoMd5, versoFileMd5)) {
+                throw ExceptionResultEnum.MD5_EQUALS_FALSE.exception();
+            }
+
+            // 保存图片,生成路径
+            String path = paperLibraryCommonService.saveLibraryFile(UploadFileEnum.IMAGE, frontFile, versoFile);
+
+            PaperLibrary paperLibrary = new PaperLibrary();
+            paperLibrary.setId(SystemConstant.getDbUuid());
+            paperLibrary.setSchoolId(schoolId);
+            paperLibrary.setPaperScanTaskId(paperScanTaskId);
+            paperLibrary.setPath(path);
+            paperLibrary.setCreateId(sysUser.getId());
+            paperLibrary.setCreateTime(System.currentTimeMillis());
+            return paperLibraryService.save(paperLibrary);
+
+        } catch (IOException e) {
+            throw ExceptionResultEnum.ERROR.exception("上传图片失败:" + e.getMessage());
+        }
     }
 }

+ 58 - 4
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryCommonServiceImpl.java

@@ -1,13 +1,12 @@
 package com.qmth.paper.library.business.service.impl;
 
-import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.params.ArraysParams;
 import com.qmth.paper.library.common.config.DictionaryConfig;
 import com.qmth.paper.library.common.contant.SpringContextHolder;
 import com.qmth.paper.library.common.contant.SystemConstant;
@@ -15,9 +14,15 @@ import com.qmth.paper.library.common.entity.BasicAttachment;
 import com.qmth.paper.library.common.entity.SysOrg;
 import com.qmth.paper.library.common.entity.SysUser;
 import com.qmth.paper.library.common.entity.TBTask;
-import com.qmth.paper.library.common.enums.*;
+import com.qmth.paper.library.common.enums.ExceptionResultEnum;
+import com.qmth.paper.library.common.enums.LocalCatalogEnum;
+import com.qmth.paper.library.common.enums.TaskTypeEnum;
+import com.qmth.paper.library.common.enums.UploadFileEnum;
 import com.qmth.paper.library.common.service.*;
-import com.qmth.paper.library.common.util.*;
+import com.qmth.paper.library.common.util.FileStoreUtil;
+import com.qmth.paper.library.common.util.RedisUtil;
+import com.qmth.paper.library.common.util.ResultUtil;
+import com.qmth.paper.library.common.util.ServletUtil;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -340,4 +345,53 @@ public class PaperLibraryCommonServiceImpl implements PaperLibraryCommonService
         return Objects.nonNull(jsonObject) ? jsonObject.toJSONString() : null;
     }
 
+    @Override
+    public String saveLibraryFile(UploadFileEnum uploadFileEnum, MultipartFile... files) {
+        boolean oss = dictionaryConfig.sysDomain().isOss();
+        LocalDateTime nowTime = LocalDateTime.now();
+        StringJoiner stringJoiner = new StringJoiner(File.separator);
+        if (!oss) {
+            stringJoiner.add(dictionaryConfig.fssLocalFileDomain().getConfig());
+        }
+        stringJoiner.add(UploadFileEnum.IMAGE.getTitle())
+                .add(String.valueOf(nowTime.getYear()))
+                .add(String.format("%02d", nowTime.getMonthValue()))
+                .add(String.format("%02d", nowTime.getDayOfMonth()));
+        // 根目录
+        List<JSONObject> objects = new ArrayList<>();
+        try {
+            for (MultipartFile file : files) {
+                JSONObject jsonObject = new JSONObject();
+                String fileName = file.getOriginalFilename();
+                String suffix = fileName.substring(fileName.lastIndexOf("."));
+                stringJoiner.add(SystemConstant.getUuid() + suffix);
+
+                // 文件路径
+                String dirName = stringJoiner.toString().replaceAll("\\\\", "/");
+
+                //上传至oss
+                String md5Hex = DigestUtils.md5Hex(file.getBytes());
+                if (oss) {
+                    fileStoreUtil.ossUpload(dirName, file.getInputStream(), md5Hex, uploadFileEnum.getFssType());
+                    jsonObject.put(SystemConstant.TYPE, SystemConstant.OSS);
+                    jsonObject.put(SystemConstant.PATH, dirName);
+                } else {//上传至服务器
+                    fileStoreUtil.localUpload(dirName, file.getInputStream(), md5Hex, LocalCatalogEnum.LOCAL_FILE);
+                    jsonObject.put(SystemConstant.TYPE, SystemConstant.LOCAL);
+                    jsonObject.put(SystemConstant.PATH, dirName);
+                }
+                jsonObject.put(SystemConstant.UPLOAD_TYPE, uploadFileEnum);
+                objects.add(jsonObject);
+            }
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return JSON.toJSONString(objects);
+    }
+
 }

+ 3 - 7
paper-library-common/src/main/java/com/qmth/paper/library/common/enums/AppSourceEnum.java

@@ -3,19 +3,15 @@ package com.qmth.paper.library.common.enums;
 import java.util.Objects;
 
 /**
- * @Description: app应用来源
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2021/6/29
+ * app应用来源
  */
 public enum AppSourceEnum {
 
     SYSTEM("自身应用系统"),
 
-    WHU_THIRD("武汉大学"),
+    PAPER_LIBRARY("试卷电子化系统-后台"),
 
-    PRINT_THIRD("知学知考-分布式印刷");
+    PAPER_LIBRARY_CLIENT("试卷电子化系统-扫描端");
 
     private String title;
 

+ 2 - 15
paper-library-common/src/main/java/com/qmth/paper/library/common/enums/UploadFileEnum.java

@@ -10,22 +10,9 @@ import java.util.Objects;
  * @Date: 2020/7/15
  */
 public enum UploadFileEnum {
-    /**
-     * 客户端
-     */
-    PAPER("paper","private"),
-    /**
-     * 系统相关
-     */
-    UPLOAD("upload","private"),
-    /**
-     * 导入导出
-     */
-    FILE("file","public"),
-
-    PDF("pdf","private"),
+    FILE("file", "public"),
 
-    HTML("html","private");
+    IMAGE("image", "private");
 
     private String title;
     private String fssType;

+ 0 - 10
paper-library-common/src/main/java/com/qmth/paper/library/common/service/BasicAttachmentService.java

@@ -18,16 +18,6 @@ import java.util.List;
  */
 public interface BasicAttachmentService extends IService<BasicAttachment> {
 
-    /**
-     * 保存附件
-     *
-     * @param dirName
-     * @param userId
-     * @return
-     * @throws IOException
-     */
-    public BasicAttachment saveAttachmentPdf(String dirName, Long userId) throws IOException;
-
     /**
      * 删除附件
      *

+ 0 - 16
paper-library-common/src/main/java/com/qmth/paper/library/common/service/LibraryCommonService.java

@@ -133,22 +133,6 @@ public interface LibraryCommonService {
      */
     public String filePreviewByPathAndType(String path, String type, Boolean isExpire);
 
-    /**
-     * 文件预览
-     *
-     * @param attachmentId
-     * @return
-     */
-    public Map<String, String> filePreviewByAttachmentId(Long attachmentId, Boolean isExpire);
-
-    /**
-     * 题卡html文件上传,读取文件内容
-     *
-     * @param path
-     * @return
-     */
-    public String readFileContent(String path);
-
     /**
      * 获取文件
      *

+ 0 - 43
paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/BasicAttachmentServiceImpl.java

@@ -51,49 +51,6 @@ public class BasicAttachmentServiceImpl extends ServiceImpl<BasicAttachmentMappe
     @Autowired
     private DictionaryConfig dictionaryConfig;
 
-    /**
-     * 保存附件
-     *
-     * @param dirName
-     * @param userId
-     * @return
-     * @throws IOException
-     */
-    @Override
-    @Transactional
-    public BasicAttachment saveAttachmentPdf(String dirName, Long userId) throws IOException {
-        BasicAttachment basicAttachment = null;
-        try {
-            StringJoiner stringJoiner = new StringJoiner("").add(dictionaryConfig.fssLocalPdfDomain().getConfig()).add(File.separator);
-            File localPdfFile = new File(stringJoiner.toString() + File.separator + dirName);
-            if (!localPdfFile.getParentFile().exists()) {
-                localPdfFile.getParentFile().mkdirs();
-                localPdfFile.createNewFile();
-            }
-            boolean oss = dictionaryConfig.sysDomain().isOss();
-            JSONObject jsonPdf = new JSONObject();
-            if (oss) {
-                jsonPdf.put(SystemConstant.TYPE, SystemConstant.OSS);
-                jsonPdf.put(SystemConstant.PATH, dirName);
-            } else {
-                jsonPdf.put(SystemConstant.TYPE, SystemConstant.LOCAL);
-                jsonPdf.put(SystemConstant.PATH, localPdfFile);
-            }
-            jsonPdf.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.PDF);
-            basicAttachment = new BasicAttachment(jsonPdf.toJSONString(), localPdfFile.getName(), SystemConstant.PDF_PREFIX, new BigDecimal(localPdfFile.length()), DigestUtils.md5Hex(new FileInputStream(localPdfFile)), userId);
-            save(basicAttachment);
-        } catch (Exception e) {
-            log.error(SystemConstant.LOG_ERROR, e);
-            deleteAttachment(basicAttachment);
-            if (e instanceof ApiException) {
-                ResultUtil.error((ApiException) e, e.getMessage());
-            } else {
-                ResultUtil.error(e.getMessage());
-            }
-        }
-        return basicAttachment;
-    }
-
     /**
      * 删除附件
      *

+ 0 - 79
paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/LibraryCommonServiceImpl.java

@@ -488,85 +488,6 @@ public class LibraryCommonServiceImpl implements LibraryCommonService {
         return pathUrl;
     }
 
-    /**
-     * 文件预览
-     *
-     * @param attachmentId 附件路径
-     * @param isExpire     url是否带过期时间
-     * @return
-     */
-    @Override
-    public Map<String, String> filePreviewByAttachmentId(Long attachmentId, Boolean isExpire) {
-        BasicAttachment attachment = basicAttachmentService.getById(attachmentId);
-        if (attachment == null) {
-            return null;
-        }
-
-        Map<String, String> map = new HashMap<>();
-
-        String pathUrl;
-        JSONObject jsonObject = JSONObject.parseObject(attachment.getPath());
-        String attachmentType = (String) jsonObject.get(SystemConstant.TYPE);
-        String filePath = (String) jsonObject.get(SystemConstant.PATH);
-        UploadFileEnum uploadFileEnum = jsonObject.get(SystemConstant.UPLOAD_TYPE).toString().contains(UploadFileEnum.HTML.name()) ? UploadFileEnum.HTML : UploadFileEnum.valueOf((String) jsonObject.get(SystemConstant.UPLOAD_TYPE));
-
-        if (Objects.equals(attachmentType, SystemConstant.LOCAL)) {
-            String hostUrl = SystemConstant.getLocalFileHost(dictionaryConfig.fssLocalFileDomain().getServer());
-            filePath = SystemConstant.getLocalFilePath(hostUrl, filePath);
-            if (filePath.startsWith("/")) {
-                pathUrl = hostUrl + filePath;
-            } else {
-                pathUrl = hostUrl + File.separator + filePath;
-            }
-        } else {
-            pathUrl = fileStoreUtil.getPrivateUrl(filePath, uploadFileEnum.getFssType());
-        }
-        map.put("url", pathUrl);
-        if (attachment.getType().equals(".html")) {
-            String htmlMd5 = (String) jsonObject.get("htmlMd5");
-            map.put("md5", htmlMd5);
-        } else {
-            map.put("md5", attachment.getMd5());
-        }
-        return map;
-    }
-
-    @Override
-    public String readFileContent(String path) {
-        // 解析path
-        JSONObject object = JSONObject.parseObject(path);
-        String filePath = object.getString(SystemConstant.PATH);
-        String type = object.getString(SystemConstant.TYPE);
-        UploadFileEnum uploadType = Enum.valueOf(UploadFileEnum.class, (String) object.get(SystemConstant.UPLOAD_TYPE));
-
-        if (filePath.endsWith(SystemConstant.HTML_PREFIX) || filePath.endsWith(SystemConstant.FTL_PREFIX)) {
-            StringBuffer sb = new StringBuffer();
-            try {
-                InputStream fis;
-                if (type.equals(SystemConstant.OSS)) {
-                    fis = fileStoreUtil.ossDownloadIs(filePath, uploadType.getFssType());
-                } else {
-                    File file = new File(filePath);
-                    if (!file.exists()) {
-                        throw ExceptionResultEnum.ERROR.exception("附件文件不存在");
-                    }
-                    fis = new FileInputStream(file);
-                }
-                BufferedReader br = new BufferedReader(new InputStreamReader(fis));
-                String s;
-                while ((s = br.readLine()) != null) {
-                    sb.append(s).append("\n");
-                }
-            } catch (IOException e) {
-                throw ExceptionResultEnum.ERROR.exception("文件读取异常");
-            } catch (Exception e) {
-                log.error(SystemConstant.LOG_ERROR, e);
-            }
-            return sb.toString();
-        }
-        return null;
-    }
-
     /**
      * 获取文件
      *

+ 5 - 10
paper-library-common/src/main/java/com/qmth/paper/library/common/util/ServletUtil.java

@@ -2,7 +2,6 @@ package com.qmth.paper.library.common.util;
 
 import com.alibaba.fastjson.JSONObject;
 import com.qmth.boot.core.enums.Platform;
-import com.qmth.paper.library.common.entity.SysUser;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import org.slf4j.Logger;
@@ -153,15 +152,11 @@ public class ServletUtil {
      * @return
      */
     public static Object getRequestUser() {
-//        Object object = getRequest().getAttribute(SystemConstant.USER);
-//        if (Objects.isNull(object)) {
-//            throw ExceptionResultEnum.NOT_LOGIN.exception();
-//        }
-//        return object;
-        SysUser sysUser = new SysUser();
-        sysUser.setId(1L);
-        sysUser.setRealName("测试员");
-        return sysUser;
+        Object object = getRequest().getAttribute(SystemConstant.USER);
+        if (Objects.isNull(object)) {
+            throw ExceptionResultEnum.NOT_LOGIN.exception();
+        }
+        return object;
     }
 
     /**

+ 85 - 9
paper-library/src/main/java/com/qmth/paper/library/api/ClientController.java

@@ -1,23 +1,35 @@
 package com.qmth.paper.library.api;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.paper.library.business.bean.params.ClientLoginParam;
 import com.qmth.paper.library.business.service.ClientService;
+import com.qmth.paper.library.common.bean.result.LoginResult;
 import com.qmth.paper.library.common.contant.SystemConstant;
+import com.qmth.paper.library.common.entity.BasicSchool;
+import com.qmth.paper.library.common.entity.SysUser;
+import com.qmth.paper.library.common.enums.AppSourceEnum;
+import com.qmth.paper.library.common.enums.ExceptionResultEnum;
+import com.qmth.paper.library.common.service.CommonCacheService;
+import com.qmth.paper.library.common.service.LibraryCommonService;
+import com.qmth.paper.library.common.service.SysUserService;
 import com.qmth.paper.library.common.util.Result;
 import com.qmth.paper.library.common.util.ResultUtil;
 import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
+import java.security.NoSuchAlgorithmException;
+import java.util.Objects;
 
 /**
  * <p>
@@ -26,7 +38,7 @@ import javax.validation.constraints.Min;
  */
 @Api(tags = "扫描端Controller")
 @RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.client}/scan")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.client}")
 @Validated
 @Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
 public class ClientController {
@@ -34,16 +46,80 @@ public class ClientController {
     @Resource
     private ClientService clientService;
 
+    @Resource
+    SysUserService sysUserService;
+
+    @Resource
+    CommonCacheService commonCacheService;
+
+    @Resource
+    LibraryCommonService libraryCommonService;
+
+    /**
+     * 登录
+     *
+     * @param login 登录参数
+     */
+    @ApiOperation(value = "登录")
+    @PostMapping("/user/login")
+    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
+    @Aac(auth = BOOL.FALSE)
+    public Result login(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody ClientLoginParam login, BindingResult bindingResult) throws NoSuchAlgorithmException {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+
+        BasicSchool basicSchool = commonCacheService.schoolCache(login.getSchoolCode());
+        if (Objects.isNull(basicSchool)) {
+            throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
+        }
+
+        QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId()).eq(SysUser::getLoginName, login.getLoginName());
+        SysUser sysUser = sysUserService.getOne(wrapper);
+        // 用户不存在
+        if (Objects.isNull(sysUser)) {
+            throw ExceptionResultEnum.USER_NO_DATA.exception();
+        }
+        // 校验密码
+        if (!Objects.equals(sysUser.getPassword(), login.getPassword())) {
+            throw ExceptionResultEnum.PASSWORD_ERROR.exception();
+        }
+        // 是否有客户端权限
+        clientService.checkPrivilege(sysUser.getId());
+
+        return ResultUtil.ok(libraryCommonService.login(login.getPassword(), sysUser, AppSourceEnum.PAPER_LIBRARY_CLIENT));
+    }
+
     @ApiOperation(value = "任务查询")
-    @PostMapping("/page")
+    @PostMapping("/task/page")
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     public Result page(@ApiParam(value = "档案") @RequestParam(required = false) Long paperArchivesId,
                        @ApiParam(value = "课程") @RequestParam(required = false) String courseName,
-                       @ApiParam(value = "班级") @RequestParam(required = false) String clazzName,
-                       @ApiParam(value = "是否扫描") @RequestParam(required = false) Boolean isScan,
+                       @ApiParam(value = "班级") @RequestParam(required = false) String teachClazzName,
+                       @ApiParam(value = "是否我认领的任务") @RequestParam(required = false) Boolean isMine,
                        @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(clientService.pageScanTask(paperArchivesId, courseName, clazzName, isScan, pageNumber, pageSize));
+        return ResultUtil.ok(clientService.pageScanTask(paperArchivesId, courseName, teachClazzName, isMine, pageNumber, pageSize));
+    }
+
+    @ApiOperation(value = "绑定扫描员")
+    @PostMapping("/bind/user")
+    @ApiResponses({@ApiResponse(code = 200, message = "绑定成功", response = Result.class)})
+    public Result page(@ApiParam(value = "扫描任务ID") Long paperScanTaskId,
+                       @ApiParam(value = "扫描员ID") @RequestParam(required = false) Long userId) {
+        return ResultUtil.ok(clientService.bindUser(paperScanTaskId, userId));
+    }
+
+    @ApiOperation(value = "上传图片")
+    @PostMapping("/picture/upload")
+    @ApiResponses({@ApiResponse(code = 200, message = "保存图片成功", response = Result.class)})
+    public Result pictureUpload(@ApiParam(value = "上传文件", required = true) @RequestParam Long paperScanTaskId,
+                                @ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile frontFile,
+                                @ApiParam(value = "上传文件类型", required = true) @RequestParam String frontMd5,
+                                @ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile versoFile,
+                                @ApiParam(value = "上传文件类型", required = true) @RequestParam String versoMd5) {
+        return ResultUtil.ok(clientService.pictureUpload(paperScanTaskId, frontFile, frontMd5, versoFile, versoMd5));
     }
 
 }

+ 1 - 2
paper-library/src/main/java/com/qmth/paper/library/api/SysController.java

@@ -18,7 +18,6 @@ import com.qmth.paper.library.common.config.DictionaryConfig;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.entity.*;
 import com.qmth.paper.library.common.enums.*;
-import com.qmth.paper.library.common.enums.userPush.SpecialPrivilegeEnum;
 import com.qmth.paper.library.common.service.*;
 import com.qmth.paper.library.common.util.Result;
 import com.qmth.paper.library.common.util.ResultUtil;
@@ -190,7 +189,7 @@ public class SysController {
             });
         }
         SysUser sysUser = userList.get(0);
-        LoginResult loginResult = libraryCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM);
+        LoginResult loginResult = libraryCommonService.login(login.getPassword(), sysUser, AppSourceEnum.PAPER_LIBRARY);
 
         return ResultUtil.ok(loginResult);
     }