forked from gzzfw/backEnd/gz-dyh

xusd
2024-09-07 187de9d51f78100e80f2940420e995e647d00400
dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java
@@ -1,7 +1,7 @@
package cn.huge.module.file.controller.web;
import cn.huge.base.common.exception.ClientException;
import cn.huge.module.sys.dto.IdcardOcrResultDTO;
import cn.huge.module.file.domain.dto.IdFileDTO;
import cn.huge.module.utils.BaiduOcrUtils;
import cn.huge.base.common.utils.ContentTypeUtils;
import cn.huge.base.common.utils.ReturnFailUtils;
@@ -34,10 +34,10 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
 * @title: 附件信息表接口api-web端
@@ -64,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());
@@ -85,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)) {
@@ -101,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()));
                        }
@@ -112,7 +113,7 @@
                    }
                }
            }
            return ReturnSucUtils.getRepInfo( "上传成功!", files);
            return ReturnSucUtils.getRepInfo("上传成功!", files);
        } catch (Exception e) {
            return ReturnFailUtils.getRepInfo();
        }
@@ -120,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();
@@ -152,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());
@@ -179,54 +182,124 @@
            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识别文字
     *
     * @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();
            Iterator<String> itr = request.getFileNames();
            while (itr.hasNext()) {
                MultipartFile file = request.getFile(itr.next());
                try {
                    Map<String, Object> map = BaiduOcrUtils.ocrText(file.getBytes());
                    result.put("ocrResult", map);
                } catch (Exception e) {
                    log.error("Controller接口[FileInfoController.recognitionText]请求异常:" + e, e);
                    return ReturnFailUtils.getRepInfo("OCR失败!");
                }
            }
            return ReturnSucUtils.getRepInfo("识别成功", result);
        } 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")
    @DeleteMapping("/deleteFileByIds")
    public Object deleteFileByIds(@RequestParam(value = "ids") String ids) {
        try {
            String[] id = ids.split(",");
            for (String s : id) {
                service.deleteFileById(s);
            }
            return ReturnSucUtils.getRepInfo();
        } catch (Exception e) {
            return ReturnFailUtils.getRepInfo();
        }
    }
    @DeleteMapping("/deleteFileById")
    public Object deleteFileById(@RequestParam(value = "id") String id) {
        try {
            service.deleteFileById(id);
@@ -236,5 +309,30 @@
        }
    }
    /**
     * 根据多个所属编号查询附件并根据先根据ownerId再根据附件类型分组
     *
     * @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)) {
                ownerIds = "'" + ownerIds + "'";
            }
            if (StringUtils.isNotBlank(types)) {
                types = "'" + types + "'";
            }
            term.put("ownerIds", ownerIds);
            term.put("types", types);
            term.put("mainId", idFileDTO.getMainId());
            return ReturnSucUtils.getRepInfo(service.listIdTypeInfoByOwnerIdList(term));
        } catch (Exception e) {
            return ReturnFailUtils.getRepInfo();
        }
    }
}