From 37effab37e2e4721dd8c9513da590b57597ad099 Mon Sep 17 00:00:00 2001
From: xusd <hugeinfo123>
Date: Sat, 07 Sep 2024 14:39:43 +0800
Subject: [PATCH] 下载、删除接口优化

---
 dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java |  125 +++++++++++++++++++++++++++--------------
 1 files changed, 82 insertions(+), 43 deletions(-)

diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java
index 8820dc0..308faea 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java
@@ -36,6 +36,8 @@
 import java.net.URLEncoder;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
 
 /**
  * @title: 附件信息表接口api-web端
@@ -62,19 +64,20 @@
 
     /**
      * 页面附件上传-文件流方式
-     * @url {ctx}/api/web/fileInfo/upload?mainId=&ownerId=&ownerType=
-     * @param mainId 所属业务主体编号
-     * @param ownerId 所属业务编号
+     *
+     * @param mainId    所属业务主体编号
+     * @param ownerId   所属业务编号
      * @param ownerType 所属业务类型
-     * @param request 请求头
+     * @param request   请求头
      * @return Object
+     * @url {ctx}/api/web/fileInfo/upload?mainId=&ownerId=&ownerType=
      */
     @PostMapping("/upload")
     public Object upload(@RequestParam(value = "mainId") String mainId,
                          @RequestParam(value = "ownerId") String ownerId,
                          @RequestParam(value = "ownerType") String ownerType,
                          @CurrentUser String userId, MultipartHttpServletRequest request) {
-        try{
+        try {
             CtUserDTO loginUser = custClient.clientGetUser(userId);
             UploaderDTO uploaderDTO = new UploaderDTO();
             uploaderDTO.setUploaderId(loginUser.getId());
@@ -83,12 +86,12 @@
             uploaderDTO.setCustId(loginUser.getCustId());
             List<FileInfoBaseDTO> files = new ArrayList<>();
             Iterator<String> itr = request.getFileNames();
-            int fileCount = fileRelateService.countByOwnerIdAndType(ownerId, ownerType)+1;
+            int fileCount = fileRelateService.countByOwnerIdAndType(ownerId, ownerType) + 1;
             while (itr.hasNext()) {
                 MultipartFile file = request.getFile(itr.next());
-                if(file.getSize() > 30000000){
+                if (file.getSize() > 30000000) {
                     return ReturnFailUtils.getRepInfo("您上传的文件已超过30M大小限制!");
-                }else {
+                } else {
                     String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
                     if (FileUtils.checkFileSuffix(fileSuffix)) {
                         if (StringUtils.isEmpty(ownerType)) {
@@ -99,7 +102,7 @@
                         BeanUtils.copyProperties(fileInfo, fileInfoBaseDTO);
 
                         // 如果是身份证,就调用ocr识别
-                        if (FileOwnerTypeBaseEnum.OWNER_TYPE_202.getIndex().equals(ownerType)){
+                        if (FileOwnerTypeBaseEnum.OWNER_TYPE_202.getIndex().equals(ownerType)) {
                             fileInfoBaseDTO.setIdcardOcrResult(BaiduOcrUtils.ocrIdcard(file.getBytes()));
                         }
 
@@ -110,7 +113,7 @@
                     }
                 }
             }
-            return ReturnSucUtils.getRepInfo( "上传成功!", files);
+            return ReturnSucUtils.getRepInfo("上传成功!", files);
         } catch (Exception e) {
             return ReturnFailUtils.getRepInfo();
         }
@@ -118,13 +121,14 @@
 
     /**
      * 在线查附件-文件流方式
-     * @url {ctx}/api/web/fileInfo/show/{id}
-     * @param id 附件编号
+     *
+     * @param id       附件编号
      * @param response 响应头
      * @throws Exception
+     * @url {ctx}/api/web/fileInfo/show/{id}
      */
     @GetMapping("/show/{id}")
-    public void show(@PathVariable(value = "id") String id, HttpServletResponse response){
+    public void show(@PathVariable(value = "id") String id, HttpServletResponse response) {
         try {
             FileInfo fileInfo = service.getById(id);
             response.reset();
@@ -150,19 +154,20 @@
             IOUtils.closeQuietly(inputStream);
             IOUtils.closeQuietly(outputStream);
         } catch (Exception e) {
-            log.error("controller接口[FileInfoWebController.show]请求失败,异常信息:"+e, e);
+            log.error("controller接口[FileInfoWebController.show]请求失败,异常信息:" + e, e);
             throw new ClientException("FileInfoWebController.show", e);
         }
     }
 
     /**
      * 在线下载附件-文件流方式
-     * @url {ctx}/api/web/fileInfo/down/{id}
-     * @param id 附件编号
+     *
+     * @param id       附件编号
      * @param response 响应头
+     * @url {ctx}/api/web/fileInfo/down/{id}
      */
     @GetMapping("/down/{id}")
-    public void down(@PathVariable(value = "id") String id, HttpServletResponse response){
+    public void down(@PathVariable(value = "id") String id, HttpServletResponse response) {
         try {
             FileInfo fileInfo = service.getById(id);
             String contentType = ContentTypeUtils.getContentType(fileInfo.getSuffix());
@@ -177,84 +182,117 @@
             IOUtils.closeQuietly(inputStream);
             IOUtils.closeQuietly(outputStream);
         } catch (Exception e) {
-            log.error("controller接口[FileInfoWebController.down]请求失败,异常信息:"+e, e);
+            log.error("controller接口[FileInfoWebController.down]请求失败,异常信息:" + e, e);
+            throw new ClientException("FileInfoWebController.down", e);
+        }
+    }
+
+    @GetMapping("/down/batch")
+    public void downBatch(@RequestParam(value = "ids") String ids, HttpServletResponse response) {
+        try {
+            String[] id = ids.split(",");
+            // 设置ZIP文件响应类型
+            response.setContentType("application/zip");
+            response.setHeader("Content-Disposition", "attachment;filename=files.zip");
+
+            ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream());
+            for (String s : id) {
+                FileInfo fileInfo = service.getById(s);
+                FtpUtils ftpUtil = new FtpUtils();
+                InputStream inputStream = ftpUtil.retrieveFileStream(fileInfo.getFullPath());
+
+                // 每个文件写入到ZIP包中
+                zipOutputStream.putNextEntry(new ZipEntry(fileInfo.getName() + BaseConsts.DOT + fileInfo.getSuffix()));
+                IOUtils.copy(inputStream, zipOutputStream);
+                zipOutputStream.closeEntry();
+                IOUtils.closeQuietly(inputStream);
+            }
+            IOUtils.closeQuietly(zipOutputStream);
+        } catch (Exception e) {
+            log.error("controller接口[FileInfoWebController.down]请求失败,异常信息:" + e, e);
             throw new ClientException("FileInfoWebController.down", e);
         }
     }
 
     /**
      * ocr识别文字
-     * @url {ctx}/api/web/fileInfo/recognitionText?ownerId=&ownerType=
+     *
      * @param request
      * @return Object
+     * @url {ctx}/api/web/fileInfo/recognitionText?ownerId=&ownerType=
      */
     @PostMapping(value = "/recognitionText")
-    public Object recognitionText(MultipartHttpServletRequest request){
-        try{
-            Map<String , Object> result = Maps.newHashMap();
+    public Object recognitionText(MultipartHttpServletRequest request) {
+        try {
+            Map<String, Object> result = Maps.newHashMap();
             Iterator<String> itr = request.getFileNames();
             while (itr.hasNext()) {
                 MultipartFile file = request.getFile(itr.next());
-                try{
-                    Map<String , Object> map = BaiduOcrUtils.ocrText(file.getBytes());
+                try {
+                    Map<String, Object> map = BaiduOcrUtils.ocrText(file.getBytes());
                     result.put("ocrResult", map);
-                }catch (Exception e){
-                    log.error("Controller接口[FileInfoController.recognitionText]请求异常:"+e, e);
+                } catch (Exception e) {
+                    log.error("Controller接口[FileInfoController.recognitionText]请求异常:" + e, e);
                     return ReturnFailUtils.getRepInfo("OCR失败!");
                 }
             }
             return ReturnSucUtils.getRepInfo("识别成功", result);
-        }catch (Exception e){
+        } catch (Exception e) {
             return ReturnFailUtils.getRepInfo(e.getMessage());
         }
     }
 
     /**
      * 查看附件组件-分类查询附件
-     * @url {ctx}/api/web/fileInfo/listFileByCat
+     *
      * @param mainId 所属业务主体编号
      * @return Object
+     * @url {ctx}/api/web/fileInfo/listFileByCat
      */
     @GetMapping("/listFileByCat")
     public Object listFileByCat(@RequestParam(value = "mainId") String mainId, @CurrentUser String userId) {
-        try{
+        try {
             Map<String, Object> terms = Maps.newHashMap();
             // 材料大类
             String fileOwnerCat = request.getParameter("fileOwnerCat");
-            if (StringUtils.isNotBlank(fileOwnerCat)){
+            if (StringUtils.isNotBlank(fileOwnerCat)) {
                 terms.put("ownerCat", fileOwnerCat);
             }
             // 上传时间区间
             String createStart = request.getParameter("createStart");
             String createEnd = request.getParameter("createEnd");
-            if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
+            if (StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
                 terms.put("createStart", createStart);
                 terms.put("createEnd", createEnd);
             }
             // 上传人类型
             String uploaderType = request.getParameter("uploaderType");
-            if (StringUtils.isNotBlank(uploaderType)){
+            if (StringUtils.isNotBlank(uploaderType)) {
                 terms.put("uploaderType", uploaderType);
             }
             // 所属主体编号
             terms.put("mainId", mainId);
             return ReturnSucUtils.getRepInfo(service.webListFileByCat(terms));
         } catch (Exception e) {
-            log.error("service方法[FileInfoWebController.listFileByCat]请求失败,异常信息:"+e, e);
+            log.error("service方法[FileInfoWebController.listFileByCat]请求失败,异常信息:" + e, e);
             return ReturnFailUtils.getRepInfo();
         }
     }
 
     /**
      * 删除附件
-     * @url {ctx}/api/web/fileInfo/deleteFileById?id=
-     * @param id 附件编号
+     *
+     * @param ids 附件编号集合
      * @return Object
+     * @url {ctx}/api/web/fileInfo/deleteFileById?id=
      */
-    @GetMapping("/deleteFileById")
-    public Object deleteFileById(@RequestParam(value = "id") String id) {
+    @DeleteMapping("/deleteFileById")
+    public Object deleteFileById(@RequestParam(value = "ids") String ids) {
         try {
-            service.deleteFileById(id);
+            String[] id = ids.split(",");
+            for (String s : id) {
+                service.deleteFileById(s);
+            }
             return ReturnSucUtils.getRepInfo();
         } catch (Exception e) {
             return ReturnFailUtils.getRepInfo();
@@ -263,19 +301,20 @@
 
     /**
      * 根据多个所属编号查询附件并根据先根据ownerId再根据附件类型分组
-     * @url {ctx}/api/web/fileInfo/listIdTypeInfo
+     *
      * @return Object
+     * @url {ctx}/api/web/fileInfo/listIdTypeInfo
      */
     @PostMapping("/listIdTypeInfo")
     public Object listIdTypeInfo(@RequestBody IdFileDTO idFileDTO) {
         try {
             Map<String, Object> term = new HashMap<>();
-            String ownerIds = idFileDTO.getOwnerIdList().stream().map(String:: valueOf).collect(Collectors.joining("','"));
-            String types = idFileDTO.getTypeList().stream().map(String:: valueOf).collect(Collectors.joining("','"));
-            if(StringUtils.isNotBlank(ownerIds)){
+            String ownerIds = idFileDTO.getOwnerIdList().stream().map(String::valueOf).collect(Collectors.joining("','"));
+            String types = idFileDTO.getTypeList().stream().map(String::valueOf).collect(Collectors.joining("','"));
+            if (StringUtils.isNotBlank(ownerIds)) {
                 ownerIds = "'" + ownerIds + "'";
             }
-            if(StringUtils.isNotBlank(types)){
+            if (StringUtils.isNotBlank(types)) {
                 types = "'" + types + "'";
             }
             term.put("ownerIds", ownerIds);

--
Gitblit v1.8.0