From b718daf58eec8845787de29eaeb25489ab0b6652 Mon Sep 17 00:00:00 2001
From: zhouxiantao <1026371446@qq.com>
Date: Sun, 08 Sep 2024 16:03:38 +0800
Subject: [PATCH] 小程序办件进度

---
 dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileInfoService.java |  252 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 252 insertions(+), 0 deletions(-)

diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileInfoService.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileInfoService.java
index 52b7bc8..ee9ce87 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileInfoService.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileInfoService.java
@@ -1,5 +1,6 @@
 package cn.huge.module.file.service;
 
+import cn.huge.base.common.constant.FileCatEnum;
 import cn.huge.base.common.exception.ServiceException;
 import cn.huge.base.common.utils.DateUtils;
 import cn.huge.base.common.utils.IdUtils;
@@ -11,10 +12,20 @@
 import cn.huge.module.file.domain.dto.FileForCatListDTO;
 import cn.huge.module.file.domain.dto.UploaderDTO;
 import cn.huge.module.file.domain.po.FileInfo;
+import cn.huge.module.sys.constant.FileOwnerTypeBaseEnum;
+import cn.huge.module.sys.dto.FileIdInfoBaseDTO;
+import cn.huge.module.sys.dto.FileIdTypeInfoBaseDTO;
+import cn.huge.module.sys.dto.FileInfoBaseDTO;
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
+import cn.huge.module.file.domain.po.FileRelate;
 import cn.huge.module.file.utils.FtpUtils;
 import cn.huge.module.file.utils.FtpMultipartFileWrapper;
 import cn.huge.module.sys.constant.FileOwnerTypeBaseEnum;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -26,6 +37,12 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.*;
+import javax.annotation.PostConstruct;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @title: 附件信息表业务逻辑处理
@@ -139,6 +156,157 @@
     }
 
     /**
+     * 根据多个所属编号查询附件并先根据ownerId再根据附件类型分组
+     * @param terms
+     * @return List
+     */
+    public List<FileIdTypeInfoBaseDTO> listIdTypeInfoByOwnerIdList(Map<String, Object> terms){
+        try {
+            List<FileIdTypeInfoBaseDTO> fileTypeInfoBaseDTOList = new ArrayList<>();
+
+            List<FileInfo> fileInfoList = mapper.listFile(terms);
+            if(CollectionUtils.isNotEmpty(fileInfoList)){
+                fileTypeInfoBaseDTOList = this.getIdFileTypeInfoBaseDTOList(fileInfoList);
+            }
+
+            return fileTypeInfoBaseDTOList;
+        }catch (Exception e){
+            log.error("[FileInfoService.listIdTypeInfoByOwnerIdList]调用失败,异常信息:"+e, e);
+            throw new ServiceException("FileInfoService.listIdTypeInfoByOwnerIdList", e);
+        }
+
+    }
+
+    /**
+     * 根据多个编号查询
+     * @param fileInfoList 附件列表
+     * @return List<FileTypeInfoBaseDTO>
+     */
+    private List<FileIdTypeInfoBaseDTO> getIdFileTypeInfoBaseDTOList(List<FileInfo> fileInfoList){
+        List<FileIdTypeInfoBaseDTO> fileIdTypeInfoBaseDTOList = new ArrayList<>();
+        //把Id过滤出来
+        Set<String> ownerIdSet = new HashSet<>();
+        for(FileInfo fileInfo: fileInfoList){
+            ownerIdSet.add(fileInfo.getOwnerId());
+        }
+        //把附件放入对应的OwnerId下
+        Map<String, List<FileInfo>> map = new HashMap<>();
+        for(String ownerId: ownerIdSet) {
+            List<FileInfo> fileInfoListByOwnerIdList = new ArrayList<>();
+            for (FileInfo fileInfo : fileInfoList) {
+                if(ownerId.equals(fileInfo.getOwnerId())){
+                    fileInfoListByOwnerIdList.add(fileInfo);
+                }
+            }
+            if(CollectionUtils.isNotEmpty(fileInfoListByOwnerIdList)){
+                map.put(ownerId, fileInfoListByOwnerIdList);
+            }
+
+        }
+        //根据OwnerId编号
+        for(String ownerId: ownerIdSet){
+            if(map.containsKey(ownerId)){
+                FileIdTypeInfoBaseDTO fileIdTypeInfoBaseDTO = new FileIdTypeInfoBaseDTO();
+                fileIdTypeInfoBaseDTO.setOwnerId(ownerId);
+                List<FileInfo> ownerIdFileInfoList = map.get(ownerId);
+                if (CollectionUtils.isNotEmpty(ownerIdFileInfoList)) {
+                    List<FileTypeInfoBaseDTO> fileTypeInfoBaseDTOList = new ArrayList<>();
+
+                    Set<String> setTmp = new HashSet<>();
+                    for (FileInfo fileInfo: ownerIdFileInfoList) {
+                        if (ObjectUtils.isNotEmpty(fileInfo.getOwnerType())) {
+                            setTmp.add(fileInfo.getOwnerType());
+                        }
+                    }
+                    //根据文件类型分类
+                    for(String ownerType: setTmp){
+                        FileTypeInfoBaseDTO fileTypeInfoBaseDTO = new FileTypeInfoBaseDTO();
+                        fileTypeInfoBaseDTO.setOwnerType(ownerType);
+                        fileTypeInfoBaseDTO.setOwnerTypeName(FileOwnerTypeBaseEnum.getDes(ownerType));
+                        fileTypeInfoBaseDTO.setSize(ownerIdFileInfoList.size());
+                        List<FileInfoBaseDTO> fileInfoBaseDTOList = new ArrayList<>();
+                        StringBuffer fileNames = new StringBuffer();
+                        for(FileInfo fileInfo: ownerIdFileInfoList){
+                            if(ownerType.equals(fileInfo.getOwnerType())){
+                                FileInfoBaseDTO fileInfoBaseDTO = new FileInfoBaseDTO();
+                                BeanUtils.copyProperties(fileInfo, fileInfoBaseDTO);
+                                fileInfoBaseDTO.setOwnerCatName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerCat()));
+                                fileInfoBaseDTO.setOwnerTypeName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerType()));
+                                fileInfoBaseDTOList.add(fileInfoBaseDTO);
+                                if(StringUtils.isNotBlank(fileNames)){
+                                    fileNames.append(fileInfo.getName());
+                                }else{
+                                    fileNames.append("、" + fileInfo.getName());
+                                }
+
+                            }
+                        }
+                        fileTypeInfoBaseDTO.setFileNames(fileNames.toString());
+                        fileTypeInfoBaseDTO.setFileList(fileInfoBaseDTOList);
+                        fileTypeInfoBaseDTOList.add(fileTypeInfoBaseDTO);
+                    }
+                    fileIdTypeInfoBaseDTO.setFileList(fileTypeInfoBaseDTOList);
+                    fileIdTypeInfoBaseDTOList.add(fileIdTypeInfoBaseDTO);
+                }
+            }
+        }
+        return fileIdTypeInfoBaseDTOList;
+    }
+
+    /**
+     * 根据多个所属编号查询附件
+     * @param terms
+     * @return List
+     */
+    public List<FileIdInfoBaseDTO> listInfoByOwnerIdList(Map<String, Object> terms) {
+        try {
+            List<FileIdInfoBaseDTO> fileIdInfoBaseDTOList = new ArrayList<>();
+            List<FileInfo> fileInfoList = mapper.listFile(terms);
+            if(CollectionUtils.isNotEmpty(fileInfoList)){
+                fileIdInfoBaseDTOList = this.getFileInfoBaseDTOList(fileInfoList);
+            }
+            return fileIdInfoBaseDTOList;
+        }catch (Exception e){
+            log.error("[FileInfoService.listInfoByOwnerIdList]调用失败,异常信息:"+e, e);
+            throw new ServiceException("FileInfoService.listInfoByOwnerIdList", e);
+        }
+
+    }
+
+    /**
+     * 根据多个所属编号查询附件并根据ownerId分组
+     * @param fileInfoList 附件列表
+     * @return List<FileTypeInfoBaseDTO>
+     */
+    private List<FileIdInfoBaseDTO> getFileInfoBaseDTOList(List<FileInfo> fileInfoList){
+        List<FileIdInfoBaseDTO> fileIdInfoBaseDTOList = new ArrayList<>();
+        //把Id过滤出来
+        Set<String> ownerIdSet = new HashSet<>();
+        for(FileInfo fileInfo: fileInfoList){
+            ownerIdSet.add(fileInfo.getOwnerId());
+        }
+
+        for(String ownerId: ownerIdSet){
+            FileIdInfoBaseDTO fileIdInfoBaseDTO = new FileIdInfoBaseDTO();
+            fileIdInfoBaseDTO.setOwnerId(ownerId);
+            List<FileInfoBaseDTO> fileInfoBaseDTOList = new ArrayList<>();
+            for (FileInfo fileInfo : fileInfoList) {
+                if (ownerId.equals(fileInfo.getOwnerId())) {
+                    FileInfoBaseDTO fileInfoBaseDTO = new FileInfoBaseDTO();
+                    BeanUtils.copyProperties(fileInfo, fileInfoBaseDTO);
+                    // TODO: 2022/3/31 简化
+                    fileInfoBaseDTO.setOwnerCatName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerCat()));
+                    fileInfoBaseDTO.setOwnerTypeName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerType()));
+                    fileInfoBaseDTOList.add(fileInfoBaseDTO);
+                }
+            }
+            fileIdInfoBaseDTO.setFileList(fileInfoBaseDTOList);
+            fileIdInfoBaseDTOList.add(fileIdInfoBaseDTO);
+        }
+        return fileIdInfoBaseDTOList;
+    }
+
+    /**
      * web端上传附件,保存附件信息和业务关系
      * @param file 附件
      * @param ownerId 所属业务编号
@@ -217,6 +385,42 @@
     }
 
     /**
+     * 上传附件,保存附件信息和业务关系
+     * @param file 附件
+     * @param ownerId 所属业务编号
+     * @param ownerType 所属业务名称
+     * @param fileCount 第几份附件
+     * @param uploaderDTO 上传人信息
+     * @return
+     */
+    public FileInfo uploadFile(MultipartFile file, String ownerId, String ownerType, int fileCount, UploaderDTO uploaderDTO) {
+        try {
+            String fileId = utilsClient.getNewTimeId();
+            // 创建附件信息
+            FileInfo fileInfo = new FtpMultipartFileWrapper(file).toWebFileInfo(fileId);
+            // 上传到ftp服务器
+            FtpUtils ftpUtils = new FtpUtils();
+            ftpUtils.upload(fileInfo.getPath(), fileInfo.getFileName(), file.getInputStream());
+            // 保存附件信息
+            fileInfo.setName(FileOwnerTypeBaseEnum.getDes(ownerType) + BaseConsts.UNDER + fileCount);
+            fileInfo.setOwnerId(ownerId);
+            fileInfo.setOwnerCat(FileOwnerTypeBaseEnum.getCat(ownerType));
+            fileInfo.setOwnerCatName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerCat()));
+            fileInfo.setOwnerType(ownerType);
+            fileInfo.setOwnerTypeName(FileOwnerTypeBaseEnum.getDes(ownerType));
+            fileInfo.setCustId(uploaderDTO.getCustId());
+            mapper.insert(fileInfo);
+            // 保存业务关系
+            fileRelateService.saveByFileInfo(fileInfo);
+            return fileInfo;
+        } catch (Exception e) {
+            log.error("service方法[FileInfoService.uploadFile]调用异常:"+e, e);
+            throw new ServiceException("FileInfoService.uploadFile", e);
+        }
+    }
+
+
+    /**
      * 查看附件组件-分类查询附件
      * @param terms
      * @return
@@ -252,4 +456,52 @@
         return fileForCatListDTOList;
     }
 
+    /**
+     * 根据编号删除附件
+     * @param id 附件编号
+     */
+    public void deleteFileById(String id) {
+        try{
+            // 删除关系表
+            QueryWrapper<FileRelate> fileRelateQueryWrapper = new QueryWrapper<>();
+            fileRelateQueryWrapper.eq("file_id", id);
+            fileRelateService.remove(fileRelateQueryWrapper);
+            // 删除附件信息表
+            mapper.deleteById(id);
+            // 删除ftp文件
+        }catch (Exception e){
+            log.error("service方法[FileInfoService.deleteFileById]调用失败,异常信息:"+e, e);
+            throw new ServiceException("FileInfoService.deleteFileById", e);
+        }
+    }
+
+    /**
+     * 根据多个所属编号查询附件
+     * @param mainId
+     * @return List
+     */
+    public List<FileInfoBaseDTO> listByMainId(String mainId){
+        try {
+            List<FileInfoBaseDTO> fileList = new ArrayList<>();
+            Map<String, Object> terms = new HashMap<>();
+            terms.put("mainId", mainId);
+            List<FileInfo> fileInfoList = mapper.listFile(terms);
+            if(CollectionUtils.isNotEmpty(fileInfoList)){
+                for (FileInfo fileInfo : fileInfoList) {
+                    FileInfoBaseDTO fileInfoBaseDTO = new FileInfoBaseDTO();
+                    BeanUtils.copyProperties(fileInfo, fileInfoBaseDTO);
+                    fileInfoBaseDTO.setOwnerCatName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerCat()));
+                    fileInfoBaseDTO.setOwnerTypeName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerType()));
+                    fileList.add(fileInfoBaseDTO);
+                }
+            }
+            return fileList;
+        }catch (Exception e){
+            log.error("[FileInfoService.listByMainId]调用失败,异常信息:"+e, e);
+            throw new ServiceException("FileInfoService.listByMainId", e);
+        }
+
+    }
+
+
 }

--
Gitblit v1.8.0