forked from gzzfw/backEnd/gz-dyh

zhouxiantao
2024-09-08 b718daf58eec8845787de29eaeb25489ab0b6652
dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/wechat/FileInfoWechatController.java
@@ -8,14 +8,19 @@
import cn.huge.module.client.api.impl.CustClientImpl;
import cn.huge.module.constant.BaseConsts;
import cn.huge.module.cust.dto.CtUserDTO;
import cn.huge.module.cust.dto.PaUserDTO;
import cn.huge.module.file.domain.dto.UploaderDTO;
import cn.huge.module.file.domain.po.FileInfo;
import cn.huge.module.file.service.FileInfoService;
import cn.huge.module.file.service.FileRelateService;
import cn.huge.module.file.utils.FileUtils;
import cn.huge.module.file.utils.FtpUtils;
import cn.huge.module.sys.constant.FileBaseConsts;
import cn.huge.module.sys.constant.FileOwnerTypeBaseEnum;
import cn.huge.module.sys.dto.FileInfoBaseDTO;
import cn.huge.module.sys.dto.IdcardOcrResultDTO;
import cn.huge.module.utils.BaiduOcrUtils;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
@@ -33,6 +38,7 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 * @title: 附件信息表接口api-wechat端
@@ -59,19 +65,25 @@
    /**
     * 页面附件上传-文件流方式
     * @url {ctx}/api/wechat/fileInfo/upload/{ownerId}/{ownerType}
     * @url {ctx}/api/wechat/fileInfo/upload?mainId=&ownerId=&ownerType=
     * @param mainId 所属业务主体编号
     * @param ownerId 所属业务编号
     * @param ownerType 所属业务类型
     * @param request 请求头
     * @return Object
     */
    @PostMapping("/upload/{ownerId}/{ownerType}")
    public Object upload(@PathVariable(value = "ownerId") String ownerId, @PathVariable(value = "ownerType") String 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{
            CtUserDTO loginUser = custClient.clientGetUser(userId);
            PaUserDTO loginUser = custClient.paClientGetUserAll(userId);
            UploaderDTO uploaderDTO = new UploaderDTO();
            BeanUtils.copyProperties(loginUser, uploaderDTO);
            uploaderDTO.setUploaderId(loginUser.getId());
            uploaderDTO.setUploaderName(loginUser.getTrueName());
            uploaderDTO.setUploaderType(FileBaseConsts.UPLOADER_TYPE_1);
            uploaderDTO.setCustId(loginUser.getCustId());
            List<FileInfoBaseDTO> files = new ArrayList<>();
            Iterator<String> itr = request.getFileNames();
            int fileCount = fileRelateService.countByOwnerIdAndType(ownerId, ownerType)+1;
@@ -85,9 +97,15 @@
                        if (StringUtils.isEmpty(ownerType)) {
                            ownerType = FileOwnerTypeBaseEnum.OWNER_TYPE_000.getIndex();
                        }
                        FileInfo fileInfo = service.webPploadFile(file, ownerId, ownerType, fileCount, uploaderDTO);
                        FileInfo fileInfo = service.wechatUploadFile(file, mainId, ownerId, ownerType, fileCount, uploaderDTO);
                        FileInfoBaseDTO fileInfoBaseDTO = new FileInfoBaseDTO();
                        BeanUtils.copyProperties(fileInfo, fileInfoBaseDTO);
                        // 如果是身份证,就调用ocr识别
                        if (FileOwnerTypeBaseEnum.OWNER_TYPE_202.getIndex().equals(ownerType)){
                            fileInfoBaseDTO.setIdcardOcrResult(BaiduOcrUtils.ocrIdcard(file.getBytes()));
                        }
                        files.add(fileInfoBaseDTO);
                        fileCount++;
                    } else {
@@ -167,7 +185,110 @@
        }
    }
    /**
     * 删除附件
     * @url {ctx}/api/wechat/fileInfo/deleteFileById?id=
     * @param id 附件编号
     * @return Object
     */
    @GetMapping("/deleteFileById")
    public Object deleteFileById(@RequestParam(value = "id") String id) {
        try {
            service.deleteFileById(id);
            return ReturnSucUtils.getRepInfo();
        } catch (Exception e) {
            return ReturnFailUtils.getRepInfo();
        }
    }
    /**
     * 根据多个所属编号查询附件
     * @url {ctx}/api/wechat/fileInfo/listByMainId
     * @return Object
     */
    @GetMapping("/listByMainId")
    public Object listByMainId(@RequestParam(value = "mainId") String mainId) {
        try {
            return ReturnSucUtils.getRepInfo(service.listByMainId(mainId));
        } catch (Exception e) {
            return ReturnFailUtils.getRepInfo();
        }
    }
    /**
     * ocr识别身份证
     * @url {ctx}/api/wechat/fileInfo/wecatRecognition?ownerId=&ownerType=
     * @param request
     * @return Object
     */
    @PostMapping(value = "/wecatRecognition")
    public Object wecatRecognition(MultipartHttpServletRequest request, @CurrentUser String userId){
        try{
            // todo 判断是小程序还是PC
//            UploaderDTO uploaderDTO = new UploaderDTO();
//            PaUserDTO paUserDTO = custClient.paClientGetUserAll(userId);
//            BeanUtils.copyProperties(paUserDTO, uploaderDTO);
            Map<String , Object> result = Maps.newHashMap();
            Iterator<String> itr = request.getFileNames();
            while (itr.hasNext()) {
                MultipartFile file = request.getFile(itr.next());
//                try{
//                    String ownerId = request.getParameter("ownerId");
//                    if (StringUtils.isNotEmpty(ownerId)) {
//                        String ownerType = request.getParameter("ownerType");
//                        int fileCount = fileRelateService.countByOwnerIdAndType(ownerId, ownerType)+1;
//                        if(StringUtils.isEmpty(ownerType)){
//                            ownerType = FileOwnerTypeBaseEnum.OWNER_TYPE_000.getIndex();
//                        }
//                        FileInfo fileInfo = service.wechatUploadFile(file, ownerId,ownerId, ownerType, fileCount, uploaderDTO);
//                        FileInfoBaseDTO fileInfoBaseDTO = new FileInfoBaseDTO();
//                        BeanUtils.copyProperties(fileInfo, fileInfoBaseDTO);
//                        result.put("attachment", fileInfoBaseDTO);
//                    }
//                }catch (Exception e){
//                    log.error("Controller接口[FileInfoWechatController.wecatRecognition]请求异常:"+e, e);
//                }
                try{
                    IdcardOcrResultDTO map = BaiduOcrUtils.ocrIdcard(file.getBytes());
                    result.put("ocrResult", map);
                }catch (Exception e){
                    log.error("Controller接口[FileInfoWechatController.wecatRecognition]请求异常:"+e, e);
                    return ReturnFailUtils.getRepInfo("OCR失败失败!");
                }
            }
            return ReturnSucUtils.getRepInfo(result);
        }catch (Exception e){
            log.error("Controller接口[FileInfoWechatController.wecatRecognition]请求异常:"+e, e);
            return ReturnFailUtils.getRepInfo(e.getMessage());
        }
    }
    /**
     * ocr识别文字
     * @url {ctx}/api/wechat/fileInfo/recognitionText
     * @param request
     * @return Object
     */
    @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接口[FileInfoWechatController.recognitionText]请求异常:"+e, e);
                    return ReturnFailUtils.getRepInfo("OCR失败!");
                }
            }
            return ReturnSucUtils.getRepInfo("识别成功", result);
        }catch (Exception e){
            log.error("Controller接口[FileInfoWechatController.recognitionText]请求异常:"+e, e);
            return ReturnFailUtils.getRepInfo(e.getMessage());
        }
    }
}