Procházet zdrojové kódy

功能:
1.向前兼容文件服务,实现部分接口:/work_order/upload,/work_order/get,/common/images_delete
2.按阿里规约调整部分代码

lijie před 3 roky
rodič
revize
487a617cbe
31 změnil soubory, kde provedl 460 přidání a 280 odebrání
  1. 5 24
      dmp-business/dmp-rwd-plus/src/main/java/com/persagy/dmp/rwd/qrcode/service/impl/QrCodeServiceImpl.java
  2. 0 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectTypeController.java
  3. 2 2
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/DigitalEquipClassRelServiceImpl.java
  4. 0 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java
  5. 5 5
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/calstrategy/SysBlockCalculateServiceImpl.java
  6. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectDigitalServiceImpl.java
  7. 0 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ProjectBusinessServiceImpl.java
  8. 3 3
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelationCalServiceImpl.java
  9. 0 2
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/controller/RelationReportController.java
  10. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/service/impl/EquipmentReportServiceImpl.java
  11. 0 3
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/context/OldFileAppContext.java
  12. 9 2
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/context/OldFileContext.java
  13. 58 24
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/CompatibleOldFileController.java
  14. 2 8
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/FileController.java
  15. 0 10
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/TestController.java
  16. 9 4
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/dao/FileMapper.java
  17. 5 4
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/handler/OldFileContextHandler.java
  18. 27 9
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/CompatibleOldFileService.java
  19. 9 20
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/IFileService.java
  20. 8 18
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/IFileStorageService.java
  21. 214 85
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/CompatibleOldFileServiceImpl.java
  22. 6 11
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/FileServiceImpl.java
  23. 7 5
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/HdfsStorageServiceImpl.java
  24. 37 9
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/MinioStorageServiceImpl.java
  25. 22 9
      dmp-cloud/dmp-file/src/main/resources/mapper/FileMapper.xml
  26. 1 1
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/impl/MailMessageSender.java
  27. 1 1
      dmp-common/src/main/java/com/persagy/dmp/common/utils/ExcelUtils.java
  28. 0 1
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/service/impl/AbstractAuthServiceImpl.java
  29. 0 1
      dmp-comp/dmp-auth/src/main/java/com/persagy/dmp/auth/service/impl/EmsAuthServiceImpl.java
  30. 0 4
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/utils/FileStorageHelper.java
  31. 28 10
      dmp-comp/dmp-mybatis/src/main/java/com/persagy/dmp/mybatis/config/MybatisPlusConfig.java

+ 5 - 24
dmp-business/dmp-rwd-plus/src/main/java/com/persagy/dmp/rwd/qrcode/service/impl/QrCodeServiceImpl.java

@@ -1,47 +1,26 @@
 package com.persagy.dmp.rwd.qrcode.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.IdUtil;
-import cn.hutool.crypto.SecureUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.extra.qrcode.QrConfig;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.MultiFormatWriter;
-import com.google.zxing.common.BitMatrix;
 import com.persagy.dmp.common.constant.CommonConstant;
 import com.persagy.dmp.common.context.AppContext;
-import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.digital.client.DigitalObjectFacade;
-import com.persagy.dmp.file.client.FileClientFacade;
 import com.persagy.dmp.file.model.FileInfo;
 import com.persagy.dmp.file.model.FileInfoCreator;
-import com.persagy.dmp.file.model.FileRequestData;
-import com.persagy.dmp.file.model.UploadMes;
 import com.persagy.dmp.file.utils.FileStorageHelper;
 import com.persagy.dmp.rwd.qrcode.service.QrCodeService;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.stereotype.Service;
-import org.springframework.util.IdGenerator;
 import org.springframework.util.StringUtils;
-import org.springframework.web.multipart.MultipartFile;
 
-import javax.imageio.ImageIO;
-import javax.imageio.stream.ImageOutputStream;
-import java.awt.*;
-import java.awt.image.BufferedImage;
 import java.io.*;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.List;
 
 /**
@@ -87,9 +66,9 @@ public class QrCodeServiceImpl implements QrCodeService {
         //设置二维码信息
         ObjectNode qrCodePic = JsonNodeFactory.instance.objectNode();
         qrCodePic.put("key", fileId);
-        qrCodePic.put("name",objectDigital.get("id"));
+        qrCodePic.putPOJO("name",objectDigital.get("id"));
         qrCodePic.put("type","image");
-        objectDigital.put(CommonConstant.QR_CODE_PIC_INFO,qrCodePic);
+        objectDigital.putPOJO(CommonConstant.QR_CODE_PIC_INFO,qrCodePic);
     }
 
     /**
@@ -120,6 +99,7 @@ public class QrCodeServiceImpl implements QrCodeService {
      * 生成对象二维码信息
      * @param digital
      */
+    @Override
     public void createObjectQrCode(String groupCode,String projectId,ObjectNode digital){
         //生成二维码图片并上传到文件服务器
         String fileId = uploadQrCode(groupCode,projectId,digital);
@@ -139,12 +119,13 @@ public class QrCodeServiceImpl implements QrCodeService {
      * 移除对象二维码信息点
      * @param digital
      */
+    @Override
     public void removeObjectQrCode(String groupCode,String projectId,ObjectNode digital){
         ObjectNode infos = JsonNodeFactory.instance.objectNode();
         //删除二维码信息点
         ArrayNode removeInfos = JsonNodeFactory.instance.arrayNode();
         removeInfos.add(CommonConstant.QR_CODE_PIC_INFO);
-        infos.put(CommonConstant.REMOVE_FIELD, removeInfos);
+        infos.putPOJO(CommonConstant.REMOVE_FIELD, removeInfos);
 
         List<ObjectNode> list = new ArrayList<>();
         list.add(digital);

+ 0 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectTypeController.java

@@ -14,7 +14,6 @@ import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.define.entity.ObjectTypeDefine;
 import com.persagy.dmp.mybatis.utils.ConditionUtil;
-import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.rwd.define.service.IObjectTypeService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;

+ 2 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/DigitalEquipClassRelServiceImpl.java

@@ -186,9 +186,9 @@ implements DigitalEquipClassRelService {
         Map<String, RelationDefine> defineMap = queryRelationDefineMapByRelNames(defineRequestData.getRelNames());
         LambdaQueryWrapper<DigitalEquipClassRel> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(DigitalEquipClassRel::getValid,true);
-        queryWrapper.eq(DigitalEquipClassRel::getGroupCode,AppContext.getContext().getGroupCode());
+        queryWrapper.eq(DigitalEquipClassRel::getGroupCode, AppContext.getContext().getGroupCode());
         if (StrUtil.isNotBlank(AppContext.getContext().getProjectId())){
-            queryWrapper.eq(DigitalEquipClassRel::getProjectId,AppContext.getContext().getProjectId());
+            queryWrapper.eq(DigitalEquipClassRel::getProjectId, AppContext.getContext().getProjectId());
         }
         Map<String, String> relNameMap = new HashMap<>(16);
         if (CollUtil.isNotEmpty(defineRequestData.getRelNames())){

+ 0 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java

@@ -27,7 +27,6 @@ import com.persagy.dmp.common.utils.ParamCheckUtil;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.digital.entity.ObjectRelation;
-import com.persagy.dmp.mybatis.utils.ConditionUtil;
 import com.persagy.dmp.rwd.basic.constant.DigitalObjectType;
 import com.persagy.dmp.rwd.basic.constant.DigitalRelCode;
 import com.persagy.dmp.rwd.digital.service.IObjectDigitalService;

+ 5 - 5
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/calstrategy/SysBlockCalculateServiceImpl.java

@@ -42,6 +42,10 @@ public class SysBlockCalculateServiceImpl implements CalculateService {
     private final ConnectedBlockSourceService connectedBlockSourceService;
     private final ConnectedBlockService connectedBlockService;
     private final DigitalEquipClassRelService digitalEquipClassRelService;
+    /**管道用途类型名称*/
+    private static final Set<String> USE_TYPES=CollUtil.newHashSet("补风管","空调送风风管","空调排风风管",
+            "通风送风风管","正压送风风管","新风风管","排烟风管","通风排风风管","送风兼消防补风风管","排风兼排烟管",
+            "排油烟管","回风风管");
 
     /***
      * Description: 空间连通关系计算
@@ -316,11 +320,7 @@ public class SysBlockCalculateServiceImpl implements CalculateService {
      * Update By lijie 2021/10/12 15:40
      */
     private String getClassCodeByUseType(String useType){
-        if (useType.equals("补风管") || useType.equals("空调送风风管") || useType.equals("空调排风风管")
-                || useType.equals("通风送风风管") || useType.equals("正压送风风管") || useType.equals("新风风管")
-                || useType.equals("排烟风管") || useType.equals("通风排风风管")
-                || useType.equals("送风兼消防补风风管") || useType.equals("排风兼排烟管") || useType.equals("排油烟管")
-                || useType.equals("回风风管")){
+        if (USE_TYPES.contains(useType)){
             return EquipmentTypeEnum.OTAAPL.name();
         }
         return EquipmentTypeEnum.OTLAPL.name();

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectDigitalServiceImpl.java

@@ -378,7 +378,7 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
                 .collect(Collectors.toSet());
         QueryWrapper<ObjectDigital> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(ObjectDigital.PROP_VALID,true);
-        queryWrapper.eq(StrUtil.toUnderlineCase(CommonConstant.QUERY_GROUPCODE),AppContext.getContext().getGroupCode());
+        queryWrapper.eq(StrUtil.toUnderlineCase(CommonConstant.QUERY_GROUPCODE), AppContext.getContext().getGroupCode());
         if (StrUtil.isNotBlank(requestData.getProjectId())){
             queryWrapper.eq(StrUtil.toUnderlineCase(CommonConstant.QUERY_PROJECTID),requestData.getProjectId());
         }

+ 0 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ProjectBusinessServiceImpl.java

@@ -16,7 +16,6 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 

+ 3 - 3
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelationCalServiceImpl.java

@@ -296,7 +296,7 @@ public class RelationCalServiceImpl implements RelationCalService {
     @Override
     public void updateComputeTimeByProjectAndGraphCodeAndRelCode(String graphCode,String relCode,Integer computationalState) {
         LambdaUpdateWrapper<ObjectRelationProjectCal> updateWrapper = new LambdaUpdateWrapper<>();
-        updateWrapper.eq(ObjectRelationProjectCal::getProjectId,AppContext.getContext().getProjectId());
+        updateWrapper.eq(ObjectRelationProjectCal::getProjectId, AppContext.getContext().getProjectId());
         updateWrapper.eq(ObjectRelationProjectCal::getGraphCode,graphCode);
         updateWrapper.eq(ObjectRelationProjectCal::getRelCode,relCode);
         ObjectRelationProjectCal relationProjectCal = new ObjectRelationProjectCal();
@@ -318,8 +318,8 @@ public class RelationCalServiceImpl implements RelationCalService {
     @Override
     public Boolean hasComputingState(String graphCode, String relCode) {
         LambdaQueryWrapper<ObjectRelationProjectCal> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(ObjectRelationProjectCal::getProjectId,AppContext.getContext().getProjectId());
-        queryWrapper.eq(ObjectRelationProjectCal::getGroupCode,AppContext.getContext().getGroupCode());
+        queryWrapper.eq(ObjectRelationProjectCal::getProjectId, AppContext.getContext().getProjectId());
+        queryWrapper.eq(ObjectRelationProjectCal::getGroupCode, AppContext.getContext().getGroupCode());
         queryWrapper.eq(ObjectRelationProjectCal::getGraphCode,graphCode);
         queryWrapper.eq(ObjectRelationProjectCal::getRelCode,relCode);
         queryWrapper.eq(ObjectRelationProjectCal::getComputationalState,ComputationalStateEnum.COMPUTING.getState());

+ 0 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/controller/RelationReportController.java

@@ -19,9 +19,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 /***
  * Description: 关系数据相关的统计

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/service/impl/EquipmentReportServiceImpl.java

@@ -103,7 +103,7 @@ public class EquipmentReportServiceImpl implements IEquipmentReportService {
      */
     @Override
     public List<Map<String, Object>> queryEquipComponentsByProjectId(String category, String equipmentId) {
-        return mapper.queryEquipComponentsByProjectId(category, AppContext.getContext().getProjectId(),equipmentId,AppContext.getContext().getGroupCode());
+        return mapper.queryEquipComponentsByProjectId(category, AppContext.getContext().getProjectId(),equipmentId, AppContext.getContext().getGroupCode());
     }
 
     /**

+ 0 - 3
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/context/OldFileAppContext.java

@@ -1,9 +1,6 @@
 package com.persagy.dmp.file.context;
 
-import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.helper.SpringHelper;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
 import org.springframework.stereotype.Component;
 
 /**

+ 9 - 2
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/context/OldFileContext.java

@@ -6,7 +6,6 @@ import lombok.EqualsAndHashCode;
 /***
  * Description: 旧文件服务使用的路径对象
  * @author : lijie
- * @date :2021/11/18 18:34
  * Update By lijie 2021/11/18 18:34
  */
 @Data
@@ -21,7 +20,11 @@ public class OldFileContext {
     public static final String SECRET = "secret";
     /** 文件key */
     public static final String KEY = "key";
-    /** 文件key */
+    /** 项目id */
+    public static final String PROJECT_ID = "projectId";
+    /** 工单id */
+    public static final String WORK_ORDER_ID = "workOrderId";
+    /** 是否覆盖 */
     public static final String OVERWRITE = "overwrite";
     /** 常用的systemId */
     public static final String DATA_PLATFORM = "dataPlatform";
@@ -36,5 +39,9 @@ public class OldFileContext {
     private String key;
     /** 是否覆盖,true-覆盖,false-非覆盖 */
     private Boolean overwrite=false;
+    /** 项目id */
+    private String projectId;
+    /** 是否覆盖,true-覆盖,false-非覆盖 */
+    private String workOrderId;
 
 }

+ 58 - 24
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/CompatibleOldFileController.java

@@ -2,11 +2,11 @@ package com.persagy.dmp.file.controller;
 
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.persagy.dmp.common.utils.ResourceUtil;
-import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.file.service.CompatibleOldFileService;
-import com.persagy.dmp.file.utils.FileStorageHelper;
 import lombok.RequiredArgsConstructor;
 import org.springframework.core.io.Resource;
 import org.springframework.stereotype.Controller;
@@ -14,15 +14,15 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.core.MediaType;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 /***
  * Description: 兼容旧的文件服务接口
  * @author : lijie
- * @date :2021/11/18 10:06
  * Update By lijie 2021/11/18 10:06
  */
 @Controller
@@ -39,9 +39,7 @@ public class CompatibleOldFileController {
     /***
      * Description: 获取接口文档
      * @param response : 响应体
-     * @return : void
      * @author : lijie
-     * @date :2021/11/19 9:57
      * Update By lijie 2021/11/19 9:57
      */
     @GetMapping(value = "/doc",produces = {"text/html;charset=UTF-8"})
@@ -64,63 +62,77 @@ public class CompatibleOldFileController {
                 .write(StrUtil.replace(tempStr, "#replaceMePlease#", docContentStr));
     }
     /***
+     * Description: 工单文件上传
+     * @return : void
+     * @author : lijie
+     * Update By lijie 2021/11/19 9:58
+     */
+    @PostMapping(value = "/work_order/upload",consumes = {"image/jpg"})
+    @ResponseBody
+    public String workOrderFileUpload(HttpServletRequest request) throws IOException {
+        return compatibleOldFileService.uploadWorkOrderFile(request.getInputStream());
+    }
+    /***
+     * Description: 文件上传
+     * @author : lijie
+     * Update By lijie 2021/11/19 9:58
+     */
+    @GetMapping(value = "/work_order/get",produces = {"image/jpg"})
+    public void workOrderFileGet(HttpServletResponse response) {
+        compatibleOldFileService.getWorkOrderFile(response);
+    }
+
+    /***
      * Description: 文件上传
      * @return : void
      * @author : lijie
-     * @date :2021/11/19 9:58
      * Update By lijie 2021/11/19 9:58
      */
     @PostMapping(value = "/common/file_upload")
     @ResponseBody
-    public String fileUpload(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        return compatibleOldFileService.uploadFile(request.getInputStream(),response);
+    public String fileUpload(HttpServletRequest request) throws IOException {
+        return compatibleOldFileService.uploadFile(request.getInputStream());
     }
     /***
      * Description: 图片上传
      * @return : void
      * @author : lijie
-     * @date :2021/11/19 9:58
      * Update By lijie 2021/11/19 9:58
      */
     @PostMapping(value = "/common/image_upload",consumes = {"image/jpg"})
     @ResponseBody
-    public String imageUpload(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        return compatibleOldFileService.uploadFile(request.getInputStream(),response);
+    public String imageUpload(HttpServletRequest request) throws IOException {
+        return compatibleOldFileService.uploadFile(request.getInputStream());
     }
     /***
      * Description: 图片下载
-     * @return : void
      * @author : lijie
-     * @date :2021/11/19 9:58
      * Update By lijie 2021/11/19 9:58
      */
     @GetMapping(value = "/common/image_get")
-    public void imageGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        compatibleOldFileService.getFile(request,response);
+    public void imageGet(HttpServletResponse response) {
+        compatibleOldFileService.getFile(response);
         response.setContentType("image/jpg");
     }
     /***
      * Description: 图片下载
-     * @return : void
      * @author : lijie
-     * @date :2021/11/19 9:58
      * Update By lijie 2021/11/19 9:58
      */
     @GetMapping(value = "/common/svg_get")
-    public void imageSvgGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        compatibleOldFileService.getFile(request,response);
+    public void imageSvgGet(HttpServletResponse response) {
+        compatibleOldFileService.getFile(response);
         response.setContentType("image/svg+xml");
     }
     /***
      * Description: 图片下载
      * @return : void
      * @author : lijie
-     * @date :2021/11/19 9:58
      * Update By lijie 2021/11/19 9:58
      */
     @PostMapping(value = "/common/images_list")
     @ResponseBody
-    public JSONObject imagesList(@RequestBody(required = false) JSONObject param) throws IOException {
+    public JSONObject imagesList(@RequestBody(required = false) JSONObject param) {
         List<String> fileIds = compatibleOldFileService.listFiles(param);
         JSONObject result = new JSONObject();
         result.put("result", "success");
@@ -129,8 +141,30 @@ public class CompatibleOldFileController {
         result.put("ResultMsg", "");
         return result;
     }
-
-
+    /***
+     * Description: 图片删除
+     * @return : void
+     * @author : lijie
+     * Update By lijie 2021/11/19 9:58
+     */
+    @PostMapping(value = "/common/images_delete")
+    @ResponseBody
+    public JSONObject imageDelete(@RequestBody(required = false) JSONObject param){
+        JSONObject result = new JSONObject();
+        result.put("result", "success");
+        result.put("Count", 0L);
+        result.put("Content", new ArrayList<>());
+        result.put("ResultMsg", "");
+        JSONArray keys = param.getJSONArray("keys");
+        if (null==keys || keys.size()<=0){
+            return result;
+        }
+        List<String> deleteKeys = JSONArray.parseArray(JSON.toJSONString(keys), String.class);
+        Set<String> fileIds = compatibleOldFileService.deleteFileByIds(deleteKeys);
+        result.put("Count",fileIds.size());
+        result.put("Content",fileIds);
+        return result;
+    }
 
 
 

+ 2 - 8
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/FileController.java

@@ -1,5 +1,6 @@
 package com.persagy.dmp.file.controller;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.constant.ValidEnum;
@@ -21,7 +22,6 @@ import java.util.List;
 /**
  * 文件管理Controller
  * @author Charlie Yu
- * @date 2021-05-15
  */
 @RestController
 @RequestMapping("/file")
@@ -93,7 +93,7 @@ public class FileController {
         if(StrUtil.isBlank(fileMd5)) {
             throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
         }
-        List<FileInfo> voList = fileService.queryByFileMd5(fileMd5);
+        List<FileInfo> voList = fileService.queryByFileMd5s(CollUtil.newHashSet(fileMd5));
         return ResultHelper.multi(voList);
     }
 
@@ -102,7 +102,6 @@ public class FileController {
      * @param requestData : 请求参数
      * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.FileInfo>
      * @author : lijie
-     * @date :2021/10/9 20:12
      * Update By lijie 2021/10/9 20:12
      */
     @PostMapping("/initChunkUpload")
@@ -126,7 +125,6 @@ public class FileController {
      * @param requestData : 请求参数
      * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.FileInfo>
      * @author : lijie
-     * @date :2021/10/9 20:12
      * Update By lijie 2021/10/9 20:12
      */
     @PostMapping("/composeFile")
@@ -150,7 +148,6 @@ public class FileController {
      * @param requestData : 请求参数
      * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.FileInfo>
      * @author : lijie
-     * @date :2021/10/9 20:12
      * Update By lijie 2021/10/9 20:12
      */
     @PostMapping("/initSingleUpload")
@@ -174,7 +171,6 @@ public class FileController {
      * @param requestData : 请求参数
      * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.FileInfo>
      * @author : lijie
-     * @date :2021/10/9 20:12
      * Update By lijie 2021/10/9 20:12
      */
     @PostMapping("/initFileDownload")
@@ -189,9 +185,7 @@ public class FileController {
     /***
      * Description: 填充一下集团编码
      * @param requestData : 请求参数
-     * @return : void
      * @author : lijie
-     * @date :2021/10/21 20:14
      * Update By lijie 2021/10/21 20:14
      */
     private void fillGroupCode(FileRequestData requestData) {

+ 0 - 10
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/TestController.java

@@ -1,7 +1,5 @@
 package com.persagy.dmp.file.controller;
 
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.lang.PsDateTime;
@@ -13,19 +11,11 @@ import com.persagy.dmp.file.model.FileInfoCreator;
 import com.persagy.dmp.file.model.FileRequestData;
 import com.persagy.dmp.file.model.UploadMes;
 import io.minio.MinioClient;
-import io.minio.PostPolicy;
-import okhttp3.MultipartBody;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.Response;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.File;
 import java.io.IOException;
-import java.time.ZonedDateTime;
-import java.util.Map;
 
 /**
  * 文件管理Controller

+ 9 - 4
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/dao/FileMapper.java

@@ -7,11 +7,11 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 文件Dao
  * @author Charlie Yu
- * @date 2021-05-15
  */
 @Mapper
 public interface FileMapper extends BaseMapper<FileInfo> {
@@ -20,7 +20,6 @@ public interface FileMapper extends BaseMapper<FileInfo> {
      * @param fileId : 文件id
      * @return : com.persagy.dmp.file.model.FileInfo
      * @author : lijie
-     * @date :2021/10/23 13:20
      * Update By lijie 2021/10/23 13:20
      */
     FileInfo getFileInfoById(@Param("fileId") String fileId);
@@ -31,7 +30,6 @@ public interface FileMapper extends BaseMapper<FileInfo> {
      * @param size : 分页数
      * @return : java.lang.Integer
      * @author : lijie
-     * @date :2021/12/8 20:48
      * Update By lijie 2021/12/8 20:48
      */
     Integer getPageSizeByPrefixAndFrom(@Param("prefix") String prefix,@Param("from") String from,@Param("bucket") String bucket,@Param("size") int size);
@@ -40,8 +38,15 @@ public interface FileMapper extends BaseMapper<FileInfo> {
      * @param prefix : 筛选条件
      * @return : java.lang.Integer
      * @author : lijie
-     * @date :2021/12/8 20:48
      * Update By lijie 2021/12/8 20:48
      */
     List<FileInfo> queryListByPrefixAndFrom(Page<FileInfo> page, @Param("prefix") String prefix, @Param("bucket") String bucket);
+    /***
+     * Description: 根据文件id查询文件信息
+     * @param fileIds : 文件id集合
+     * @return : com.persagy.dmp.file.model.FileInfo
+     * @author : lijie
+     * Update By lijie 2021/10/23 13:20
+     */
+    List<FileInfo> getFileInfoByIds(@Param("fileIds") Set<String> fileIds);
 }

+ 5 - 4
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/handler/OldFileContextHandler.java

@@ -15,24 +15,25 @@ public class OldFileContextHandler implements HandlerInterceptor {
 
 
     @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
         OldFileContext context = OldFileAppContext.getContext();
         context.setSystemId(request.getParameter(OldFileContext.SYSTEM_ID));
         context.setSecret(request.getParameter(OldFileContext.SECRET));
         context.setKey(request.getParameter(OldFileContext.KEY));
+        context.setWorkOrderId(request.getParameter(OldFileContext.WORK_ORDER_ID));
+        context.setProjectId(request.getParameter(OldFileContext.PROJECT_ID));
         context.setOverwrite(BooleanUtil.toBoolean(request.getParameter(OldFileContext.OVERWRITE)));
         return true;
     }
 
     @Override
     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
-                           ModelAndView modelAndView) throws Exception {
+                           ModelAndView modelAndView) {
         OldFileAppContext.unloadContext();
     }
 
     @Override
-    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
-            throws Exception {
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
         OldFileAppContext.unloadContext();
     }
 

+ 27 - 9
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/CompatibleOldFileService.java

@@ -2,45 +2,63 @@ package com.persagy.dmp.file.service;
 
 import com.alibaba.fastjson.JSONObject;
 
+import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
 import java.util.List;
+import java.util.Set;
 
 /***
  * Description: 向前兼容文件服务接口
  * @author : lijie
- * @date :2021/12/8 14:27
  * Update By lijie 2021/12/8 14:27
  */
 public interface CompatibleOldFileService {
     /***
      * Description: 上传文件
      * @param inputStream : 文件流
-     * @param response : 响应对象
      * @return : void
      * @author : lijie
-     * @date :2021/12/8 14:29
      * Update By lijie 2021/12/8 14:29
      */
-    String uploadFile(InputStream inputStream, HttpServletResponse response);
+    String uploadFile(InputStream inputStream);
     /***
      * Description: 下载文件
-     * @param request : 请求参数
      * @param response : 响应参数
-     * @return : void
      * @author : lijie
-     * @date :2021/12/8 17:06
      * Update By lijie 2021/12/8 17:06
      */
-    void getFile(HttpServletRequest request, HttpServletResponse response);
+    void getFile(HttpServletResponse response);
     /***
      * Description: 列出文件key
      * @param param : 请求参数
      * @return : void
      * @author : lijie
-     * @date :2021/12/8 18:22
      * Update By lijie 2021/12/8 18:22
      */
     List<String> listFiles(JSONObject param);
+    /***
+     * Description: 上传工单的文件
+     * @param inputStream : 文件流
+     * @return : java.lang.String
+     * @author : lijie
+     * Update By lijie 2021/12/9 10:07
+     */
+    String uploadWorkOrderFile(InputStream inputStream);
+    /***
+     * Description: 下载工单文件
+     * @param response : 响应体
+     * @author : lijie
+     * Update By lijie 2021/12/9 11:06
+     */
+    void getWorkOrderFile(HttpServletResponse response);
+    /***
+     * Description: 根据key删除文件
+     * @param deleteKeys : 删除key
+     * @return : java.util.List<java.lang.String>
+     * @author : lijie
+     * Update By lijie 2021/12/9 11:31
+     */
+    Set<String> deleteFileByIds(List<String> deleteKeys);
 }

+ 9 - 20
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/IFileService.java

@@ -6,52 +6,47 @@ import com.persagy.dmp.file.model.FileRequestData;
 import com.persagy.dmp.file.model.UploadMes;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 文件管理接口
  * @author Charlie Yu
- * @date 2021-05-15
  */
 public interface IFileService {
 
     /**
      * 保存
-     * @param vo
-     * @return
+     * @param vo:文件信息
      */
     FileInfo insertFile(FileInfo vo);
 
     /**
      * 保存
-     * @param vo
-     * @return
+     * @param vo:文件信息
      */
     FileInfo updateFile(FileInfo vo);
 
     /**
      * 批量保存
-     * @param voList
-     * @return
+     * @param voList:文件信息列表
      */
     List<FileInfo> batchInsert(List<FileInfo> voList);
 
     /**
      * 删除
-     * @param vo
+     * @param vo:文件信息
      */
     void deleteFile(FileInfo vo);
 
     /**
      * 通过id查询
-     * @param id
-     * @return
+     * @param id:文件信息id
      */
     FileInfo load(String id);
 
     /**
      * 通过业务ID查询
-     * @param businessId
-     * @return
+     * @param businessId:业务数据id
      */
     List<FileInfo> queryByBusinessId(String businessId);
 
@@ -60,7 +55,6 @@ public interface IFileService {
      * @param requestData : 请求参数
      * @return : java.util.List<com.persagy.dmp.file.model.FileInfo>
      * @author : lijie
-     * @date :2021/10/9 20:27
      * Update By lijie 2021/10/9 20:27
      */
     UploadMes initChunkUpload(FileRequestData requestData);
@@ -69,7 +63,6 @@ public interface IFileService {
      * @param requestData : 请求参数
      * @return : com.persagy.dmp.file.model.FileInfo
      * @author : lijie
-     * @date :2021/10/20 21:57
      * Update By lijie 2021/10/20 21:57
      */
     FileInfo composeFile(FileRequestData requestData);
@@ -78,25 +71,22 @@ public interface IFileService {
      * @param requestData : 请求参数
      * @return : com.persagy.dmp.file.domain.UploadMes
      * @author : lijie
-     * @date :2021/10/22 19:29
      * Update By lijie 2021/10/22 19:29
      */
     UploadMes initSingleUpload(FileRequestData requestData);
     /***
      * Description: 根据Md5查询文件信息
-     * @param fileMd5 : 文件md5值
+     * @param fileMd5s : 文件md5值集合
      * @return : java.util.List<com.persagy.dmp.file.model.FileInfo>
      * @author : lijie
-     * @date :2021/10/22 22:36
      * Update By lijie 2021/10/22 22:36
      */
-    List<FileInfo> queryByFileMd5(String fileMd5);
+    List<FileInfo> queryByFileMd5s(Set<String> fileMd5s);
     /***
      * Description: 初始化文件下载
      * @param requestData : 请求参数
      * @return : com.persagy.dmp.file.model.FileInfo
      * @author : lijie
-     * @date :2021/10/23 13:18
      * Update By lijie 2021/10/23 13:18
      */
     FileInfo initFileDownload(FileRequestData requestData);
@@ -108,7 +98,6 @@ public interface IFileService {
      * @param expireDate : 过期时间
      * @return : com.persagy.dmp.file.domain.FileView
      * @author : lijie
-     * @date :2021/10/22 10:03
      * Update By lijie 2021/10/22 10:03
      */
     UploadMes secondTransmission(String fileName, String groupCode,

+ 8 - 18
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/IFileStorageService.java

@@ -7,11 +7,11 @@ import java.io.InputStream;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * 文件存储服务接口
  * @author Charlie Yu
- * @date 2021-05-15
  */
 public interface IFileStorageService {
 
@@ -27,7 +27,6 @@ public interface IFileStorageService {
      * 文件下载
      * @param bucketName 桶名
      * @param fileName 文件名
-     * @return
      */
     InputStream download(String bucketName, String fileName);
 
@@ -35,7 +34,6 @@ public interface IFileStorageService {
      * 获取下载Url
      * @param bucketName 桶名
      * @param fileName 文件名
-     * @return
      */
     String fetchUrl(String bucketName, String fileName);
 
@@ -43,7 +41,6 @@ public interface IFileStorageService {
      * 文件是否存在
      * @param bucketName 桶名
      * @param fileName 文件名
-     * @return
      */
     boolean exists(String bucketName, String fileName);
 
@@ -65,7 +62,6 @@ public interface IFileStorageService {
      * @param bucketName: 存储桶名称
      * @return true/false
      * @author : lijie
-     * @date :2021/10/16 14:35
      * Update By lijie 2021/10/16 14:35
      */
     boolean isBucketExist(String bucketName);
@@ -75,7 +71,6 @@ public interface IFileStorageService {
      * @param bucketName : 存储桶名称
      * @return : true/false
      * @author : lijie
-     * @date :2021/10/16 14:35
      * Update By lijie 2021/10/16 14:35
      */
     boolean createBucket(String bucketName);
@@ -87,7 +82,6 @@ public interface IFileStorageService {
      * @param expiry : 过期时间(分钟) 最大为7天 超过7天则默认最大值
      * @return : viewUrl
      * @author : lijie
-     * @date :2021/10/16 14:41
      * Update By lijie 2021/10/16 14:41
      */
     String getObjectUrl(String bucketName, String objectName, Integer expiry);
@@ -99,7 +93,6 @@ public interface IFileStorageService {
      * @param expiry : 过期时间(分钟) 最大为7天 超过7天则默认最大值
      * @return : uploadUrl
      * @author : lijie
-     * @date :2021/10/16 14:41
      * Update By lijie 2021/10/16 14:41
      */
     String createUploadUrl(String bucketName, String objectName, Integer expiry);
@@ -110,7 +103,6 @@ public interface IFileStorageService {
      * @param objectName : 欲上传文件对象的名称
      * @return : java.lang.String
      * @author : lijie
-     * @date :2021/10/16 14:42
      * Update By lijie 2021/10/16 14:42
      */
     String createUploadUrl(String bucketName, String objectName);
@@ -121,7 +113,6 @@ public interface IFileStorageService {
      * @param chunkCount : 分片数量
      * @return : uploadChunkUrls
      * @author : lijie
-     * @date :2021/10/16 14:43
      * Update By lijie 2021/10/16 14:43
      */
     List<String> createUploadChunkUrlList(String bucketName, String objectMD5, Integer chunkCount);
@@ -133,7 +124,6 @@ public interface IFileStorageService {
      * @param partNumber : 分片序号
      * @return : uploadChunkUrl
      * @author : lijie
-     * @date :2021/10/16 14:44
      * Update By lijie 2021/10/16 14:44
      */
     String createUploadChunkUrl(String bucketName, String objectMD5, Integer partNumber);
@@ -145,7 +135,6 @@ public interface IFileStorageService {
      * @param sort : 是否排序(升序)
      * @return : objectNames
      * @author : lijie
-     * @date :2021/10/16 14:45
      * Update By lijie 2021/10/16 14:45
      */
     List<String> listObjectNames(String bucketName, String prefix, Boolean sort);
@@ -156,7 +145,6 @@ public interface IFileStorageService {
      * @param prefix : 对象名称前缀
      * @return : objectNames
      * @author : lijie
-     * @date :2021/10/16 14:47
      * Update By lijie 2021/10/16 14:47
      */
     List<String> listObjectNames(String bucketName, String prefix);
@@ -167,7 +155,6 @@ public interface IFileStorageService {
      * @param ObjectMd5 : 对象Md5
      * @return : objectChunkNames
      * @author : lijie
-     * @date :2021/10/16 14:48
      * Update By lijie 2021/10/16 14:48
      */
     List<String> listChunkObjectNames(String bucketName, String ObjectMd5);
@@ -178,7 +165,6 @@ public interface IFileStorageService {
      * @param ObjectMd5 : 对象Md5
      * @return : objectChunkNameMap
      * @author : lijie
-     * @date :2021/10/16 14:49
      * Update By lijie 2021/10/16 14:49
      */
     Map<Integer, String> mapChunkObjectNames(String bucketName, String ObjectMd5);
@@ -191,7 +177,6 @@ public interface IFileStorageService {
      * @param objectName : 合并后的对象文件名称
      * @return : boolean
      * @author : lijie
-     * @date :2021/10/16 14:50
      * Update By lijie 2021/10/16 14:50
      */
     boolean composeObject(String chunkBucKetName, String composeBucketName, List<String> chunkNames, String objectName);
@@ -203,7 +188,6 @@ public interface IFileStorageService {
      * @param objectName : 合并后的对象文件名称
      * @return : true/false
      * @author : lijie
-     * @date :2021/10/16 14:51
      * Update By lijie 2021/10/16 14:51
      */
     boolean composeObject(String bucketName, List<String> chunkNames, String objectName);
@@ -212,11 +196,17 @@ public interface IFileStorageService {
      * @param bucketName : 传入的bucketName
      * @return : java.lang.String
      * @author : lijie
-     * @date :2021/10/21 10:39
      * Update By lijie 2021/10/21 10:39
      */
     String getChuckBucketName(String bucketName);
 
     @SneakyThrows
     Long getObjectSize(String bucketName, String objectName);
+    /***
+     * Description: 批量删除
+     * @param deleteFileMap : {bucketName:[fileName1,fileName2...]}
+     * @author : lijie
+     * Update By lijie 2021/12/9 14:33
+     */
+    void batchDelete(Map<String, Set<String>> deleteFileMap);
 }

+ 214 - 85
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/CompatibleOldFileServiceImpl.java

@@ -7,10 +7,13 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dmp.common.constant.CommonConstant;
 import com.persagy.dmp.common.helper.SpringHelper;
 import com.persagy.dmp.common.lang.PsDateTime;
+import com.persagy.dmp.file.client.FileClientFacade;
+import com.persagy.dmp.file.client.FileMd5ClientFacade;
 import com.persagy.dmp.file.constant.FileCommonConst;
 import com.persagy.dmp.file.context.OldFileAppContext;
 import com.persagy.dmp.file.dao.FileMapper;
@@ -21,18 +24,16 @@ import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /***
  * Description: 向前兼容旧的文件服务
  * @author : lijie
- * @date :2021/12/8 15:17
  * Update By lijie 2021/12/8 15:17
  */
 @Service
@@ -52,108 +53,32 @@ public class CompatibleOldFileServiceImpl implements CompatibleOldFileService {
      * @param inputStream : 文件流
      * @return : void
      * @author : lijie
-     * @date :2021/12/8 15:20
      * Update By lijie 2021/12/8 15:20
      */
     @Override
-    public String uploadFile(InputStream inputStream, HttpServletResponse response) {
+    public String uploadFile(InputStream inputStream) {
         if(StrUtil.isBlank(OldFileAppContext.getContext().getKey())){
             return "Incorrect parameters inputted.";
         }
-        // 1.如果非覆盖且文件信息已存在则直接返回文件已存在
-        if (!OldFileAppContext.getContext().getOverwrite() &&
-            null!=fileService.load(OldFileAppContext.getContext().getKey())){
-            return "File existed.";
-        }
-        IFileStorageService service = FileStorageFactory.getService();
-        // 1.获得文件大小
-        byte[] streamBytes = FileStorageHelper.getStreamBytes(inputStream);
-        String fileMd5Str = DigestUtil.md5Hex(streamBytes);
-        // 1.根据文件md5值查询数据库
-        FileMd5 fileMd5 = fileMd5Service.queryFileMd5ByFileMd5(fileMd5Str);
-        // 2.历史已上传但未上传完成
-        if (ObjectUtil.isNotNull(fileMd5)
-                && FileCommonConst.UPLOAD_PART.equals(fileMd5.getUploadStatus())) {
-            // 2.1 补充文件md5值
-            fileMd5.setFileBucket(OldFileAppContext.getContext().getSystemId());
-            fileMd5.setUploadStatus(FileCommonConst.UPLOAD_SUCCESS);
-            fileMd5.setFileSize((long)streamBytes.length);
-            fileMd5.setCreationTime(new PsDateTime());
-            fileMd5Service.ensureFilePath(fileMd5,OldFileAppContext.getContext().getKey());
-            // 2.2 上传文件
-            service.upload(fileMd5.getFileBucket(),fileMd5.getFilePath(), IoUtil.toStream(streamBytes));
-            // 2.3 更新文件md5信息
-            fileMd5Service.updateById(fileMd5);
-            // 2.4 创建文件信息
-            fileService.secondTransmission(OldFileAppContext.getContext().getKey(), CommonConstant.DEFAULT_ID,
-                    null, null, fileMd5.getFileMd5(), OldFileAppContext.getContext().getKey());
-            return FileStorageHelper.oldSuccessResultCreate("");
-        }
-        // 3.历史已上传且已完成上传
-        if (ObjectUtil.isNotNull(fileMd5)
-                && FileCommonConst.UPLOAD_SUCCESS.equals(fileMd5.getUploadStatus())
-                && service.exists(fileMd5.getFileBucket(),fileMd5.getFilePath())){
-            // 秒传
-            fileService.secondTransmission(OldFileAppContext.getContext().getKey(),CommonConstant.DEFAULT_ID,
-                    null, null,fileMd5.getFileMd5(),OldFileAppContext.getContext().getKey());
-            return FileStorageHelper.oldSuccessResultCreate("");
-        }
-        // 4.历史已上传且未完成上传
-        if (ObjectUtil.isNotNull(fileMd5)
-                && FileCommonConst.UPLOAD_SUCCESS.equals(fileMd5.getUploadStatus())){
-            // 4.1 上传文件
-            service.upload(fileMd5.getFileBucket(),fileMd5.getFilePath(), IoUtil.toStream(streamBytes));
-            // 4.2 秒传
-            fileService.secondTransmission(OldFileAppContext.getContext().getKey(),CommonConstant.DEFAULT_ID,
-                    null, null,fileMd5.getFileMd5(),OldFileAppContext.getContext().getKey());
-            return FileStorageHelper.oldSuccessResultCreate("");
-        }
-        // 5.新上传文件
-        fileMd5 = FileMd5Creator.of(OldFileAppContext.getContext().getSystemId(), fileMd5Str, FileCommonConst.UPLOAD_SUCCESS);
-        fileMd5.setFileSize((long)streamBytes.length);
-        fileMd5.setCreationTime(new PsDateTime());
-        fileMd5Service.ensureFilePath(fileMd5,OldFileAppContext.getContext().getKey());
-        // 5.1 上传文件
-        service.upload(fileMd5.getFileBucket(),fileMd5.getFilePath(), IoUtil.toStream(streamBytes));
-        // 5.2 保存md5信息
-        fileMd5Service.save(fileMd5);
-        // 5.3 保存文件信息
-        fileService.secondTransmission(OldFileAppContext.getContext().getKey(),CommonConstant.DEFAULT_ID,
-                null, null,fileMd5.getFileMd5(),OldFileAppContext.getContext().getKey());
-        return FileStorageHelper.oldSuccessResultCreate("");
+        return commonUploadFile(inputStream,OldFileAppContext.getContext().getSystemId(),null);
     }
 
     /***
      * Description: 下载文件
-     * @param request : 请求参数
      * @param response : 响应参数
-     * @return : void
      * @author : lijie
-     * @date :2021/12/8 17:06
      * Update By lijie 2021/12/8 17:06
      */
     @SneakyThrows
     @Override
-    public void getFile(HttpServletRequest request, HttpServletResponse response) {
+    public void getFile(HttpServletResponse response) {
         // 1.必填参数是否存在
         if (StrUtil.isBlank(OldFileAppContext.getContext().getSystemId())
             || StrUtil.isBlank(OldFileAppContext.getContext().getKey())){
             IoUtil.writeUtf8(response.getOutputStream(),Boolean.FALSE,"Incorrect parameters inputted.");
             return;
         }
-        // 2.文件是否存在
-        IFileStorageService service = FileStorageFactory.getService();
-        FileInfo fileInfo = fileMapper.getFileInfoById(OldFileAppContext.getContext().getKey());
-        if (null==fileInfo
-                || StrUtil.isBlank(fileInfo.getFileBucket())
-                || StrUtil.isBlank(fileInfo.getFilePath())
-                || !FileCommonConst.UPLOAD_SUCCESS.equals(fileInfo.getUploadStatus())
-                || !service.exists(fileInfo.getFileBucket(),fileInfo.getFilePath())){
-            IoUtil.writeUtf8(response.getOutputStream(),Boolean.FALSE,"file not existed");
-            return;
-        }
-        // 3.下载文件
-        IoUtil.copy(service.download(fileInfo.getFileBucket(),fileInfo.getFilePath()),response.getOutputStream());
+        commonGetFile(response);
     }
 
     /***
@@ -161,7 +86,6 @@ public class CompatibleOldFileServiceImpl implements CompatibleOldFileService {
      * @param param : 请求参数
      * @return : void
      * @author : lijie
-     * @date :2021/12/8 18:22
      * Update By lijie 2021/12/8 18:22
      */
     @Override
@@ -194,4 +118,209 @@ public class CompatibleOldFileServiceImpl implements CompatibleOldFileService {
         }
         return fileInfos.stream().map(FileInfo::getId).collect(Collectors.toList());
     }
+    /***
+     * Description: 上传工单的文件
+     * @param inputStream : 文件流
+     * @return : java.lang.String
+     * @author : lijie
+     * Update By lijie 2021/12/9 10:07
+     */
+    @Override
+    public String uploadWorkOrderFile(InputStream inputStream) {
+        if(StrUtil.isBlank(OldFileAppContext.getContext().getKey())
+            || StrUtil.isBlank(OldFileAppContext.getContext().getProjectId())
+            || StrUtil.isBlank(OldFileAppContext.getContext().getWorkOrderId())
+            || OldFileAppContext.getContext().getProjectId().length()<=2){
+            return "Incorrect parameters inputted.";
+        }
+        return commonUploadFile(inputStream,OldFileAppContext.getContext().getProjectId().substring(2),
+                OldFileAppContext.getContext().getWorkOrderId());
+    }
+    /***
+     * Description: 下载工单文件
+     * @param response : 响应体
+     * @author : lijie
+     * Update By lijie 2021/12/9 11:06
+     */
+    @SneakyThrows
+    @Override
+    public void getWorkOrderFile(HttpServletResponse response) {
+        if(StrUtil.isBlank(OldFileAppContext.getContext().getKey())
+                || StrUtil.isBlank(OldFileAppContext.getContext().getProjectId())
+                || StrUtil.isBlank(OldFileAppContext.getContext().getWorkOrderId())
+                || OldFileAppContext.getContext().getProjectId().length()<=2){
+            IoUtil.writeUtf8(response.getOutputStream(),Boolean.FALSE,"Incorrect parameters inputted.");
+            return;
+        }
+        commonGetFile(response);
+    }
+    /***
+     * Description: 根据key删除文件
+     * @param deleteKeys : 删除key
+     * @return : java.util.List<java.lang.String>
+     * @author : lijie
+     * Update By lijie 2021/12/9 11:31
+     */
+    @Override
+    public Set<String> deleteFileByIds(List<String> deleteKeys) {
+        if (CollUtil.isEmpty(deleteKeys)){
+            return new HashSet<>();
+        }
+        // 1.根据要删除的key查询文件信息
+        List<FileInfo> fileInfoList = fileMapper.getFileInfoByIds(CollUtil.newHashSet(deleteKeys));
+        if (CollUtil.isEmpty(fileInfoList)){
+            return new HashSet<>();
+        }
+        // 2.根据文件md5查询所有关联的文件信息
+        List<FileInfo> allMatchMd5FileInfos = fileService.queryByFileMd5s(fileInfoList.stream()
+                .filter(fileInfo -> StrUtil.isNotBlank(fileInfo.getFileMd5()))
+                .map(FileInfo::getFileMd5)
+                .collect(Collectors.toSet()));
+        Map<String, Set<String>> fileMd5Map = fileInfoList.stream()
+                .filter(fileInfo -> StrUtil.isNotBlank(fileInfo.getFileMd5()))
+                .collect(Collectors.groupingBy(FileInfo::getFileMd5, Collectors.mapping(FileInfo::getId, Collectors.toSet())));
+        Map<String, Set<String>> allMatchFileMd5Map = allMatchMd5FileInfos.stream()
+                .filter(fileInfo -> StrUtil.isNotBlank(fileInfo.getFileMd5()))
+                .collect(Collectors.groupingBy(FileInfo::getFileMd5, Collectors.mapping(FileInfo::getId, Collectors.toSet())));
+        // 3.处理查询出来的文件信息
+        Set<String> deleteFileInfoIds = new HashSet<>();
+        Set<String> deleteFileMd5s = new HashSet<>();
+        List<FileInfo> deleteFiles = new ArrayList<>();
+        for (FileInfo fileInfo : fileInfoList) {
+            deleteFileInfoIds.add(fileInfo.getId());
+            // 3.1 文件md5为空
+            if (StrUtil.isBlank(fileInfo.getFileMd5())){
+                continue;
+            }
+            // 3.2 文件md5不为空但关联的文件未全部删除
+            Set<String> currentFileIds = fileMd5Map.getOrDefault(fileInfo.getFileMd5(), new HashSet<>());
+            Set<String> allFileIds = allMatchFileMd5Map.getOrDefault(fileInfo.getFileMd5(), new HashSet<>());
+            if (CollUtil.isNotEmpty(CollUtil.subtract(allFileIds,currentFileIds))){
+                continue;
+            }
+            deleteFileMd5s.add(fileInfo.getFileMd5());
+            // 3.3 文件未完全上传
+            if (!FileCommonConst.UPLOAD_SUCCESS.equals(fileInfo.getUploadStatus())){
+                continue;
+            }
+            deleteFiles.add(fileInfo);
+        }
+        // 4.删除文件信息
+        if (CollUtil.isNotEmpty(deleteFileInfoIds)){
+            FileInfo fileInfo = new FileInfo();
+            fileInfo.setValid(0);
+            LambdaQueryWrapper<FileInfo> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(FileInfo::getId,deleteFileInfoIds);
+            fileMapper.update(fileInfo,queryWrapper);
+        }
+        // 5.删除文件MD5信息
+        if (CollUtil.isNotEmpty(deleteFileMd5s)){
+            FileMd5 fileMd5 = new FileMd5();
+            fileMd5.setValid(0);
+            LambdaQueryWrapper<FileMd5> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(FileMd5::getFileMd5,deleteFileMd5s);
+            fileMd5Service.update(fileMd5,queryWrapper);
+        }
+        // 6.根据bucket和文件名批量删除
+        Map<String, Set<String>> deleteFileMap = deleteFiles.stream()
+                .filter(fileInfo -> StrUtil.isNotBlank(fileInfo.getFileBucket()) && StrUtil.isNotBlank(fileInfo.getFilePath()))
+                .collect(Collectors.groupingBy(FileInfo::getFileBucket, Collectors.mapping(FileInfo::getFilePath, Collectors.toSet())));
+        IFileStorageService service = FileStorageFactory.getService();
+        service.batchDelete(deleteFileMap);
+        return deleteFileInfoIds;
+    }
+
+    /***
+     * Description: 通用下载文件逻辑
+     * @param response : 响应体
+     * @author : lijie
+     * Update By lijie 2021/12/9 11:06
+     */
+    @SneakyThrows
+    private void commonGetFile(HttpServletResponse response){
+        // 2.文件是否存在
+        IFileStorageService service = FileStorageFactory.getService();
+        FileInfo fileInfo = fileMapper.getFileInfoById(OldFileAppContext.getContext().getKey());
+        if (null==fileInfo
+                || StrUtil.isBlank(fileInfo.getFileBucket())
+                || StrUtil.isBlank(fileInfo.getFilePath())
+                || !FileCommonConst.UPLOAD_SUCCESS.equals(fileInfo.getUploadStatus())
+                || !service.exists(fileInfo.getFileBucket(),fileInfo.getFilePath())){
+            IoUtil.writeUtf8(response.getOutputStream(),Boolean.FALSE,"file not existed");
+            return;
+        }
+        // 3.下载文件
+        IoUtil.copy(service.download(fileInfo.getFileBucket(),fileInfo.getFilePath()),response.getOutputStream());
+    }
+
+    /***
+     * Description: 通用的文件删除逻辑
+     * @param inputStream : 文件流
+     * @return : java.lang.String
+     * @author : lijie
+     * Update By lijie 2021/12/9 10:17
+     */
+    private String commonUploadFile(InputStream inputStream,String bucketName,String businessId) {
+        // 1.如果非覆盖且文件信息已存在则直接返回文件已存在
+        if (!OldFileAppContext.getContext().getOverwrite() &&
+                null!=fileService.load(OldFileAppContext.getContext().getKey())){
+            return "File existed.";
+        }
+        IFileStorageService service = FileStorageFactory.getService();
+        // 1.获得文件大小
+        byte[] streamBytes = FileStorageHelper.getStreamBytes(inputStream);
+        String fileMd5Str = DigestUtil.md5Hex(streamBytes);
+        // 1.根据文件md5值查询数据库
+        FileMd5 fileMd5 = fileMd5Service.queryFileMd5ByFileMd5(fileMd5Str);
+        // 2.历史已上传但未上传完成
+        if (ObjectUtil.isNotNull(fileMd5)
+                && FileCommonConst.UPLOAD_PART.equals(fileMd5.getUploadStatus())) {
+            // 2.1 补充文件md5值
+            fileMd5.setFileBucket(bucketName);
+            fileMd5.setUploadStatus(FileCommonConst.UPLOAD_SUCCESS);
+            fileMd5.setFileSize((long)streamBytes.length);
+            fileMd5.setCreationTime(new PsDateTime());
+            fileMd5Service.ensureFilePath(fileMd5,OldFileAppContext.getContext().getKey());
+            // 2.2 上传文件
+            service.upload(fileMd5.getFileBucket(),fileMd5.getFilePath(), IoUtil.toStream(streamBytes));
+            // 2.3 更新文件md5信息
+            fileMd5Service.updateById(fileMd5);
+            // 2.4 创建文件信息
+            fileService.secondTransmission(OldFileAppContext.getContext().getKey(), CommonConstant.DEFAULT_ID,
+                    businessId, null, fileMd5.getFileMd5(), OldFileAppContext.getContext().getKey());
+            return FileStorageHelper.oldSuccessResultCreate("");
+        }
+        // 3.历史已上传且已完成上传
+        if (ObjectUtil.isNotNull(fileMd5)
+                && FileCommonConst.UPLOAD_SUCCESS.equals(fileMd5.getUploadStatus())
+                && service.exists(fileMd5.getFileBucket(),fileMd5.getFilePath())){
+            // 秒传
+            fileService.secondTransmission(OldFileAppContext.getContext().getKey(),CommonConstant.DEFAULT_ID,
+                    businessId, null,fileMd5.getFileMd5(),OldFileAppContext.getContext().getKey());
+            return FileStorageHelper.oldSuccessResultCreate("");
+        }
+        // 4.历史已上传且未完成上传
+        if (ObjectUtil.isNotNull(fileMd5)
+                && FileCommonConst.UPLOAD_SUCCESS.equals(fileMd5.getUploadStatus())){
+            // 4.1 上传文件
+            service.upload(fileMd5.getFileBucket(),fileMd5.getFilePath(), IoUtil.toStream(streamBytes));
+            // 4.2 秒传
+            fileService.secondTransmission(OldFileAppContext.getContext().getKey(),CommonConstant.DEFAULT_ID,
+                    businessId, null,fileMd5.getFileMd5(),OldFileAppContext.getContext().getKey());
+            return FileStorageHelper.oldSuccessResultCreate("");
+        }
+        // 5.新上传文件
+        fileMd5 = FileMd5Creator.of(bucketName, fileMd5Str, FileCommonConst.UPLOAD_SUCCESS);
+        fileMd5.setFileSize((long)streamBytes.length);
+        fileMd5.setCreationTime(new PsDateTime());
+        fileMd5Service.ensureFilePath(fileMd5,OldFileAppContext.getContext().getKey());
+        // 5.1 上传文件
+        service.upload(fileMd5.getFileBucket(),fileMd5.getFilePath(), IoUtil.toStream(streamBytes));
+        // 5.2 保存md5信息
+        fileMd5Service.save(fileMd5);
+        // 5.3 保存文件信息
+        fileService.secondTransmission(OldFileAppContext.getContext().getKey(),CommonConstant.DEFAULT_ID,
+                businessId, null,fileMd5.getFileMd5(),OldFileAppContext.getContext().getKey());
+        return FileStorageHelper.oldSuccessResultCreate("");
+    }
 }

+ 6 - 11
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/FileServiceImpl.java

@@ -26,11 +26,11 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * 文件服务实现类
  * @author Charlie Yu
- * @date 2021-05-15
  */
 @Service
 @Transactional(rollbackFor = Exception.class)
@@ -91,7 +91,6 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileInfo> implement
      * @param requestData : 请求参数
      * @return : java.util.List<com.persagy.dmp.file.model.FileInfo>
      * @author : lijie
-     * @date :2021/10/9 20:27
      * Update By lijie 2021/10/9 20:27
      */
     @Override
@@ -148,7 +147,6 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileInfo> implement
      * @param requestData : 请求参数
      * @return : com.persagy.dmp.file.model.FileInfo
      * @author : lijie
-     * @date :2021/10/20 21:57
      * Update By lijie 2021/10/20 21:57
      */
     @Override
@@ -187,7 +185,6 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileInfo> implement
      * @param requestData :
      * @return : com.persagy.dmp.file.domain.UploadMes
      * @author : lijie
-     * @date :2021/10/22 19:29
      * Update By lijie 2021/10/22 19:29
      */
     @Override
@@ -247,16 +244,17 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileInfo> implement
 
     /***
      * Description: 根据Md5查询文件信息
-     * @param fileMd5 : 文件md5值
+     * @param fileMd5s : 文件md5值
      * @return : java.util.List<com.persagy.dmp.file.model.FileInfo>
      * @author : lijie
-     * @date :2021/10/22 22:36
      * Update By lijie 2021/10/22 22:36
      */
     @Override
-    public List<FileInfo> queryByFileMd5(String fileMd5) {
+    public List<FileInfo> queryByFileMd5s(Set<String> fileMd5s) {
         LambdaQueryWrapper<FileInfo> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(FileInfo::getFileMd5,fileMd5);
+        if (CollUtil.isNotEmpty(fileMd5s)){
+            queryWrapper.in(FileInfo::getFileMd5,fileMd5s);
+        }
         queryWrapper.eq(FileInfo::getValid,true);
         return this.list(queryWrapper);
     }
@@ -265,7 +263,6 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileInfo> implement
      * @param requestData : 请求参数
      * @return : com.persagy.dmp.file.model.FileInfo
      * @author : lijie
-     * @date :2021/10/23 13:18
      * Update By lijie 2021/10/23 13:18
      */
     @Override
@@ -288,7 +285,6 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileInfo> implement
      * @param expireDate : 过期时间
      * @return : com.persagy.dmp.file.domain.FileView
      * @author : lijie
-     * @date :2021/10/22 10:03
      * Update By lijie 2021/10/22 10:03
      */
     @Override
@@ -314,7 +310,6 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileInfo> implement
      * @param requestData :
      * @return : java.util.List<com.persagy.dmp.file.model.FileInfo>
      * @author : lijie
-     * @date :2021/10/9 20:36
      * Update By lijie 2021/10/9 20:36
      */
     private UploadMes firstInitChunkUploadInternal(FileRequestData requestData) {

+ 7 - 5
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/HdfsStorageServiceImpl.java

@@ -17,11 +17,11 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * MinIO存储服务实现类
  * @author Charlie Yu
- * @date 2021-05-15
  */
 @Slf4j
 @RequiredArgsConstructor
@@ -61,7 +61,6 @@ public class HdfsStorageServiceImpl implements IFileStorageService {
      * 文件下载
      * @param bucketName 桶名
      * @param fileName 文件名
-     * @return
      */
     @Override
     public InputStream download(String bucketName, String fileName) {
@@ -94,7 +93,6 @@ public class HdfsStorageServiceImpl implements IFileStorageService {
      * 文件是否存在
      * @param bucketName 桶名
      * @param fileName 文件名
-     * @return
      */
     @Override
     public boolean exists(String bucketName, String fileName) {
@@ -162,7 +160,6 @@ public class HdfsStorageServiceImpl implements IFileStorageService {
      * @param fileName : 文件名称
      * @return : org.apache.hadoop.fs.Path
      * @author : lijie
-     * @date :2021/9/9 0:11
      * Update By lijie 2021/9/9 0:11
      */
     private Path getFilePath(String bucketName, String fileName) {
@@ -174,7 +171,7 @@ public class HdfsStorageServiceImpl implements IFileStorageService {
 
     /**
      * 获取文件key对应的hash散列结果值
-     * @param key
+     * @param key:文件key
      * @return 0-1024之间的数字字符串
      */
     private String getHashFilePath(String key) {
@@ -261,4 +258,9 @@ public class HdfsStorageServiceImpl implements IFileStorageService {
     public Long getObjectSize(String bucketName, String objectName) {
         return 0L;
     }
+
+    @Override
+    public void batchDelete(Map<String, Set<String>> deleteFileMap) {
+
+    }
 }

+ 37 - 9
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/MinioStorageServiceImpl.java

@@ -1,6 +1,7 @@
 package com.persagy.dmp.file.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.file.config.FileExceptionHandler;
@@ -9,6 +10,8 @@ import com.persagy.dmp.file.service.IFileStorageService;
 import io.minio.*;
 import io.minio.errors.ErrorResponseException;
 import io.minio.http.Method;
+import io.minio.messages.DeleteError;
+import io.minio.messages.DeleteObject;
 import io.minio.messages.Item;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
@@ -23,7 +26,6 @@ import java.util.stream.Collectors;
 /**
  * MinIO存储服务实现类
  * @author Charlie Yu
- * @date 2021-05-15
  */
 @Slf4j
 @RequiredArgsConstructor
@@ -42,7 +44,7 @@ public class MinioStorageServiceImpl implements IFileStorageService, Initializin
     private final static Integer DEFAULT_EXPIRY = 60;
 
     @Override
-    public void afterPropertiesSet() throws Exception {
+    public void afterPropertiesSet() {
         //方便管理分片文件,则单独创建一个分片文件的存储桶
         if (!isBucketExist(chunkBucKet)){
             createBucket(chunkBucKet);
@@ -169,20 +171,19 @@ public class MinioStorageServiceImpl implements IFileStorageService, Initializin
      * 桶ensure
      * @param bucketName 桶名
      * @return 确认后的桶名
-     * @throws Exception
      */
-    private String ensureBucket(String bucketName) throws Exception{
+    private String ensureBucket(String bucketName){
         // 桶名为空时,使用默认桶
         if(StrUtil.isBlank(bucketName)) {
             bucketName = FileCommonConst.DEFAULT_BUCKET;
         }
-        log.info("开始检查桶名:[{0}]是否存在", bucketName);
+        log.info("开始检查桶名:[{}]是否存在", bucketName);
         if(isBucketExist(bucketName)) {
-            log.info("桶名:[{0}]已存在", bucketName);
+            log.info("桶名:[{}]已存在", bucketName);
             return bucketName;
         }
         createBucket(bucketName);
-        log.info("桶名:[{0}]不存在,创建成功", bucketName);
+        log.info("桶名:[{}]不存在,创建成功", bucketName);
         return bucketName;
     }
 
@@ -474,7 +475,6 @@ public class MinioStorageServiceImpl implements IFileStorageService, Initializin
      * @param bucketName : 传入的bucketName
      * @return : java.lang.String
      * @author : lijie
-     * @date :2021/10/21 10:39
      * Update By lijie 2021/10/21 10:39
      */
     @Override
@@ -491,7 +491,6 @@ public class MinioStorageServiceImpl implements IFileStorageService, Initializin
      * @param objectName : 对象名称
      * @return : java.lang.Long
      * @author : lijie
-     * @date :2021/10/22 18:42
      * Update By lijie 2021/10/22 18:42
      */
     @Override
@@ -501,6 +500,35 @@ public class MinioStorageServiceImpl implements IFileStorageService, Initializin
                 .statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
         return statObject.size();
     }
+    /***
+     * Description: 批量删除
+     * @param deleteFileMap : {bucketName:[fileName1,fileName2...]}
+     * @author : lijie
+     * Update By lijie 2021/12/9 14:33
+     */
+    @SneakyThrows
+    @Override
+    public void batchDelete(Map<String, Set<String>> deleteFileMap) {
+        if (MapUtil.isEmpty(deleteFileMap)){
+            return;
+        }
+        Set<Map.Entry<String, Set<String>>> entries = deleteFileMap.entrySet();
+        for (Map.Entry<String, Set<String>> entry : entries) {
+            String k = entry.getKey();
+            Set<String> set = entry.getValue();
+            if (CollUtil.isEmpty(set) || StrUtil.isBlank(k)){
+                continue;
+            }
+            List<DeleteObject> objects = new LinkedList<>();
+            set.forEach(fileName->objects.add(new DeleteObject(fileName)));
+            Iterable<Result<DeleteError>> results =
+                    minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(k).objects(objects).build());
+            for (Result<DeleteError> result : results) {
+                DeleteError error = result.get();
+                log.error("Error in deleting object " + error.objectName() + "; " + error.message());
+            }
+        }
+    }
 
     /***
      * Description: 将分钟数转换为秒数

+ 22 - 9
dmp-cloud/dmp-file/src/main/resources/mapper/FileMapper.xml

@@ -20,33 +20,46 @@
         <result column="file_size" property="fileSize"/>
         <result column="upload_status" property="uploadStatus"/>
     </resultMap>
+    <sql id="selectPart">
+        SELECT dt_file_info.*,dt_file_md5.file_bucket,dt_file_md5.file_path,dt_file_md5.file_size,dt_file_md5.file_type,dt_file_md5.upload_status
+    </sql>
+    <sql id="fromPart">
+        FROM dt_file_info INNER JOIN dt_file_md5 ON (dt_file_info.file_md5 = dt_file_md5.file_md5 AND dt_file_info.valid = TRUE AND dt_file_md5.valid = TRUE)
+    </sql>
     <select id="getFileInfoById" resultMap="FileMap">
-        SELECT dfi.*,dfm.file_bucket,dfm.file_path,dfm.file_size,dfm.file_type,dfm.upload_status FROM dt_file_info dfi
-        INNER JOIN dt_file_md5 dfm ON ( dfi.file_md5 = dfm.file_md5 ) WHERE dfi.id = #{fileId} AND dfi.valid = TRUE
-        AND dfm.valid = TRUE;
+        <include refid="selectPart"/>
+        <include refid="fromPart"/>
+        WHERE dt_file_info.id = #{fileId};
     </select>
 
     <sql id="selectList">
-        FROM dt_file_info dfi INNER JOIN dt_file_md5 dfm ON (dfi.valid = TRUE AND dfm.valid = TRUE AND dfi.file_md5 = dfm.file_md5
-        AND dfm.upload_status = 0 AND dfm.file_bucket = #{bucket}
+        FROM dt_file_info INNER JOIN dt_file_md5 ON (dt_file_info.valid = TRUE AND dt_file_md5.valid = TRUE AND dt_file_info.file_md5 = dt_file_md5.file_md5
+        AND dt_file_md5.upload_status = 0 AND dt_file_md5.file_bucket = #{bucket}
         <if test="null!=prefix and prefix.length>0">
-            AND dfm.file_path LIKE CONCAT('%',#{prefix},'%')
-        </if>) ORDER BY dfi.creation_time DESC
+            AND dt_file_md5.file_path LIKE CONCAT('%',#{prefix},'%')
+        </if>) ORDER BY dt_file_info.creation_time DESC
     </sql>
     <select id="getPageSizeByPrefixAndFrom" resultType="java.lang.Integer">
         SET @rowNum = 0;
-        SELECT FLOOR((@rowNum := @rowNum + 1)/ #{size}) AS rowNum FROM (SELECT dfi.id AS id
+        SELECT FLOOR((@rowNum := @rowNum + 1)/ #{size}) AS rowNum FROM (SELECT dt_file_info.id AS id
         <include refid="selectList">
             <property name="bucket" value="#{bucket}"/>
             <property name="prefix" value="#{prefix}"/>
         </include>) AS df GROUP BY df.id HAVING df.id = #{from}
     </select>
     <select id="queryListByPrefixAndFrom" resultMap="FileMap">
-        SELECT dfi.*,dfm.file_bucket,dfm.file_path,dfm.file_size,dfm.file_type,dfm.upload_status
+        <include refid="selectPart"/>
         <include refid="selectList">
             <property name="bucket" value="#{bucket}"/>
             <property name="prefix" value="#{prefix}"/>
         </include>
     </select>
+    <select id="getFileInfoByIds" resultMap="FileMap">
+        <include refid="selectPart"/>
+        <include refid="fromPart"/>
+        <foreach collection="fileIds" separator="," open="WHERE dt_file_info.id IN(" close=")" item="fileId">
+            #{fileId}
+        </foreach>
+    </select>
 </mapper>
 

+ 1 - 1
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/impl/MailMessageSender.java

@@ -128,7 +128,7 @@ public class MailMessageSender implements IMessageSender {
     private void checkParam(MessageVO messageVO) throws Exception{
         //校验邮箱发送时间是否超时
         long creationTime = messageVO.getCreationTime().getDate().getTime();
-        long nowDate = new Date().getTime();
+        long nowDate = System.currentTimeMillis();
         if(nowDate - creationTime > 1000*60*10){
             throw new BusinessException("请求超时");
         }

+ 1 - 1
dmp-common/src/main/java/com/persagy/dmp/common/utils/ExcelUtils.java

@@ -209,7 +209,7 @@ public class ExcelUtils {
             return "";
         }
         String value;
-        switch (cell.getCellTypeEnum()) {
+        switch (cell.getCellType()) {
             case STRING:
                 value = cell.getStringCellValue();
                 break;

+ 0 - 1
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/service/impl/AbstractAuthServiceImpl.java

@@ -4,7 +4,6 @@ import cn.hutool.core.util.StrUtil;
 import com.persagy.dmp.auth.service.AuthService;
 import com.persagy.dmp.common.constant.CommonConstant;
 import com.persagy.dmp.common.context.AppContext;
-import com.persagy.dmp.common.helper.SpringHelper;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;

+ 0 - 1
dmp-comp/dmp-auth/src/main/java/com/persagy/dmp/auth/service/impl/EmsAuthServiceImpl.java

@@ -15,7 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;

+ 0 - 4
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/utils/FileStorageHelper.java

@@ -6,18 +6,14 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
-import cn.hutool.http.HttpStatus;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.persagy.dmp.common.constant.CommonConstant;
 import com.persagy.dmp.common.constant.ResponseCode;
-import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.exception.BusinessException;
-import com.persagy.dmp.common.helper.SpringHelper;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.file.client.FileClientFacade;
 import com.persagy.dmp.file.client.FileMd5ClientFacade;
-import com.persagy.dmp.file.constant.FileCommonConst;
 import com.persagy.dmp.file.constant.UploadCodeEnum;
 import com.persagy.dmp.file.model.*;
 import lombok.extern.slf4j.Slf4j;

+ 28 - 10
dmp-comp/dmp-mybatis/src/main/java/com/persagy/dmp/mybatis/config/MybatisPlusConfig.java

@@ -1,12 +1,11 @@
 package com.persagy.dmp.mybatis.config;
 
-import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
 import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer;
 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import org.apache.ibatis.type.JdbcType;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.CommandLineRunner;
@@ -38,19 +37,38 @@ public class MybatisPlusConfig implements CommandLineRunner {
         JacksonTypeHandler.setObjectMapper(objectMapper);
     }
 
-    /**
-     * 注册分页插件
-     * 使用示例: IPage<Member> memberPage = new Page<>(1, 2,false) true查询总记录数量
-     */
     @Bean
     public PaginationInterceptor paginationInterceptor() {
-        PaginationInterceptor interceptor = new PaginationInterceptor();
+        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
         // 设置每页查询记录上限,默认500(与mp相同)
-        interceptor.setLimit(sqlLimit);
-        return interceptor;
+        paginationInterceptor.setLimit(sqlLimit);
+        return paginationInterceptor;
     }
 
     /**
+     * 注册Mybatis分页插件
+     * 使用示例: IPage<Member> memberPage = new Page<>(1, 2,false) true查询总记录数量
+     */
+//    @Bean
+//    public PaginationInnerInterceptor paginationInnerInterceptor() {
+//        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
+//        // 设置每页查询记录上限,默认500(与mp相同)
+//        paginationInnerInterceptor.setMaxLimit(sqlLimit);
+//        return paginationInnerInterceptor;
+//    }
+    /**
+     * 注册Mybatis插件
+     * 使用示例: IPage<Member> memberPage = new Page<>(1, 2,false) true查询总记录数量
+     */
+//    @Bean
+//    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+//        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
+//        // 添加分页插件
+//        mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor());
+//        return mybatisPlusInterceptor;
+//    }
+
+    /**
      * 自动扫描typeHandlers
      * @return
      */