From b4545739847bc368ab4f09e700905d7ef66b774d Mon Sep 17 00:00:00 2001 From: maojian <550076202@qq.com> Date: Fri, 30 Jan 2026 16:38:47 +0800 Subject: [PATCH] =?UTF-8?q?word=E8=BD=AC=E6=8D=A2pdf=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/bw/convert/entity/Constants.java | 3 +- .../service/impl/ConvertTaskServiceImpl.java | 323 +++++++++++---------- .../main/java/com/bw/opai/config/WebMvcConfig.java | 2 + 3 files changed, 175 insertions(+), 153 deletions(-) diff --git a/document-convert-service/src/main/java/com/bw/convert/entity/Constants.java b/document-convert-service/src/main/java/com/bw/convert/entity/Constants.java index ac780ff..b017e59 100644 --- a/document-convert-service/src/main/java/com/bw/convert/entity/Constants.java +++ b/document-convert-service/src/main/java/com/bw/convert/entity/Constants.java @@ -40,7 +40,8 @@ public class Constants { public static final String JOBID = "jobId"; public static final String PROGRESS = "Progress"; public static final String JOBDOCUMENTS = "JobDocuments"; - public static final String OutputDocuments = "OutputDocuments"; + public static final String OUTPUTDOCUMENTS = "OutputDocuments"; + public static final String INPUTFILES = "InputFiles"; public static final String FILES = "Files"; public static final String IDRENAME = "#id"; diff --git a/document-convert-service/src/main/java/com/bw/convert/service/impl/ConvertTaskServiceImpl.java b/document-convert-service/src/main/java/com/bw/convert/service/impl/ConvertTaskServiceImpl.java index cc3b836..6fe3c73 100644 --- a/document-convert-service/src/main/java/com/bw/convert/service/impl/ConvertTaskServiceImpl.java +++ b/document-convert-service/src/main/java/com/bw/convert/service/impl/ConvertTaskServiceImpl.java @@ -157,158 +157,7 @@ public class ConvertTaskServiceImpl implements ConvertTaskService { //识别中 -- 放回队列 ConfigCache.resultQueue.put(task); }else if (progress == 100) { - //文件类型 - String fileType = (String) task.get(Constants.DOC_TYPE); - //识别成功 -- 获取请求结果 - String lastQueryUrl = queryUrl; - lastQueryUrl = lastQueryUrl.replace(Constants.IDRENAME,jobId); - log.info("queryUrl:{}",lastQueryUrl); - String queryResStr = DownLoadUtil.doGet(lastQueryUrl); - Map queryRes = JSONObject.parseObject(queryResStr); - List> jobDocuments = (List>) queryRes.get(Constants.JOBDOCUMENTS); - List> outputDocuments = (List>) jobDocuments.get(0).get(Constants.OutputDocuments); - List> files = (List>) outputDocuments.get(0).get(Constants.FILES); - for (int i =0;i map = files.get(i); - String fileContents = (String) map.get(Constants.FILECONTENTS); - String fileName = (String) map.get(Constants.F_ILENAME); - if(fileType.contains(Constants.HTML)) { - /*******html********/ - //拆分文件名,一部分是文件夹名称,一部分是文件名 - String[] arr = fileName.split("\\\\"); - String lastConvertFilePathPrefix = convertFilePathPrefix + arr[0]; - boolean isInputFile = base64ToFile(fileContents, lastConvertFilePathPrefix, arr[1]); - if (isInputFile) { - log.info("html相关文件转换成功,fileName:{}",arr[1]); - if(i == files.size() -1 ) { - log.info("最后的文件转换成功,准备压缩文件夹,path={}", lastConvertFilePathPrefix); - try { - // 生成 zip 文件名 - String zipFileName = UUID.randomUUID().toString().replace("-", "") + ".zip"; - String zipFilePath = convertFilePathPrefix + zipFileName; - - // 压缩文件夹 - ZipUtil.zipDirectory(lastConvertFilePathPrefix, zipFilePath); - - log.info("文件夹压缩成功,zipPath={}", zipFilePath); - - // === 后续你如果要:上传 / 回传结果,可继续写 === - String responseBody = DownLoadUtil.upLoadFile(zipFilePath, gofastUrl); - //删除目录 - FileUtil.deleteDir(new File(lastConvertFilePathPrefix)); - //删除压缩包 - FileUtil.delFile(zipFilePath); - // 解析返回 JSON - JSONObject json = JSONObject.parseObject(responseBody); - // ⚠️ 根据你 GoFast 实际返回字段调整 - String path = json.getString(Constants.PATH); - String url = gofastAccessPrefix + path; - //成功 发送结果 - AppResultDoc entity = new AppResultDoc(); - entity.setInput(task); - entity.setTaskId((String)task.get(Constants.TASKID)); - entity.setAppId((Integer)task.get(Constants.ID)); - long now = System.currentTimeMillis(); - entity.setCreateTime(now); - Map result = new HashMap(16); - result.put(Constants.FILEURL, url); - result.put(Constants.FILENAME, zipFileName); - entity.setResult(result); - entity.setStatus(1); - entity.setDel(0); - //回传给api服务保存 - DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); - } catch (Exception e) { - log.error("HTML 文件夹压缩失败", e); - - // 压缩失败,按失败处理 - AppResultDoc entity = new AppResultDoc(); - entity.setInput(task); - entity.setTaskId((String) task.get(Constants.TASKID)); - entity.setAppId((Integer) task.get(Constants.ID)); - long now = System.currentTimeMillis(); - entity.setCreateTime(now); - - Map result = new HashMap<>(16); - result.put(Constants.ERROR, "HTML 文件夹压缩失败"); - entity.setResult(result); - entity.setStatus(2); - entity.setDel(0); - - DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); - } - } - }else { - //识别异常 - log.error("html文档转换异常:{}",resStr); - //发送失败结果 - AppResultDoc entity = new AppResultDoc(); - entity.setInput(task); - entity.setTaskId((String)task.get(Constants.TASKID)); - entity.setAppId((Integer)task.get(Constants.ID)); - long now = System.currentTimeMillis(); - entity.setCreateTime(now); - Map result = new HashMap(16); - result.put(Constants.ERROR, "转换失败"); - entity.setResult(result); - entity.setStatus(2); - entity.setDel(0); - //回传给api服务保存 - DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); - break; - } - - }else { - /******其他类型**********/ - //输出文件 - boolean isInputFile = base64ToFile(fileContents, convertFilePathPrefix, fileName); - if (isInputFile) { - //转换成功 --上传文件 - String fileAddr = convertFilePathPrefix+fileName; - //上传 - String responseBody = DownLoadUtil.upLoadFile(fileAddr, gofastUrl); - //删除源文件 - FileUtil.delFile(fileAddr); - // 解析返回 JSON - JSONObject json = JSONObject.parseObject(responseBody); - // ⚠️ 根据你 GoFast 实际返回字段调整 - String path = json.getString(Constants.PATH); - String url = gofastAccessPrefix + path; - //成功 发送结果 - AppResultDoc entity = new AppResultDoc(); - entity.setTaskId((String)task.get(Constants.TASKID)); - entity.setAppId((Integer)task.get(Constants.ID)); - long now = System.currentTimeMillis(); - entity.setCreateTime(now); - Map result = new HashMap(16); - result.put(Constants.FILEURL, url); - result.put(Constants.FILENAME, fileName); - entity.setResult(result); - entity.setStatus(1); - entity.setDel(0); - entity.setInput(task); - //回传给api服务保存 - DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); - }else { - //识别异常 - log.error("文档转换异常:{}",resStr); - //发送失败结果 - AppResultDoc entity = new AppResultDoc(); - entity.setInput(task); - entity.setTaskId((String)task.get(Constants.TASKID)); - entity.setAppId((Integer)task.get(Constants.ID)); - long now = System.currentTimeMillis(); - entity.setCreateTime(now); - Map result = new HashMap(16); - result.put(Constants.ERROR, "转换失败"); - entity.setResult(result); - entity.setStatus(2); - entity.setDel(0); - //回传给api服务保存 - DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); - } - } - } + parseOcrRes(task,jobId); }else { //识别异常 log.error("文档转换异常:{}",resStr); @@ -415,6 +264,176 @@ public class ConvertTaskServiceImpl implements ConvertTaskService { } + /** + * 解析查询结果 + * @param task + * @param jobId + */ + private void parseOcrRes(Map task,String jobId) { + //文件类型 + String fileType = (String) task.get(Constants.DOC_TYPE); + //识别成功 -- 获取请求结果 + String lastQueryUrl = queryUrl; + lastQueryUrl = lastQueryUrl.replace(Constants.IDRENAME,jobId); + log.info("queryUrl:{}",lastQueryUrl); + String queryResStr = DownLoadUtil.doGet(lastQueryUrl); + Map queryRes = JSONObject.parseObject(queryResStr); + List> jobDocuments = (List>) queryRes.get(Constants.JOBDOCUMENTS); + List> outputDocuments = null; + List> files = null; + if(jobDocuments != null && jobDocuments.size() > 0) { + outputDocuments = (List>) jobDocuments.get(0).get(Constants.OUTPUTDOCUMENTS); + files = (List>) outputDocuments.get(0).get(Constants.FILES); + }else { + List> InputFiles = (List>) queryRes.get(Constants.INPUTFILES); + outputDocuments = (List>)InputFiles.get(0).get(Constants.OUTPUTDOCUMENTS); + files = (List>) outputDocuments.get(outputDocuments.size() - 1).get(Constants.FILES); + } + + for (int i =0;i map = files.get(i); + String fileContents = (String) map.get(Constants.FILECONTENTS); + String fileName = (String) map.get(Constants.F_ILENAME); + if(fileType.contains(Constants.HTML)) { + /*******html********/ + //拆分文件名,一部分是文件夹名称,一部分是文件名 + String[] arr = fileName.split("\\\\"); + String lastConvertFilePathPrefix = convertFilePathPrefix + arr[0]; + boolean isInputFile = base64ToFile(fileContents, lastConvertFilePathPrefix, arr[1]); + if (isInputFile) { + log.info("html相关文件转换成功,fileName:{}",arr[1]); + if(i == files.size() -1 ) { + log.info("最后的文件转换成功,准备压缩文件夹,path={}", lastConvertFilePathPrefix); + try { + // 生成 zip 文件名 + String zipFileName = UUID.randomUUID().toString().replace("-", "") + ".zip"; + String zipFilePath = convertFilePathPrefix + zipFileName; + + // 压缩文件夹 + ZipUtil.zipDirectory(lastConvertFilePathPrefix, zipFilePath); + + log.info("文件夹压缩成功,zipPath={}", zipFilePath); + + // === 后续你如果要:上传 / 回传结果,可继续写 === + String responseBody = DownLoadUtil.upLoadFile(zipFilePath, gofastUrl); + //删除目录 + FileUtil.deleteDir(new File(lastConvertFilePathPrefix)); + //删除压缩包 + FileUtil.delFile(zipFilePath); + // 解析返回 JSON + JSONObject json = JSONObject.parseObject(responseBody); + // ⚠️ 根据你 GoFast 实际返回字段调整 + String path = json.getString(Constants.PATH); + String url = gofastAccessPrefix + path; + //成功 发送结果 + AppResultDoc entity = new AppResultDoc(); + entity.setInput(task); + entity.setTaskId((String)task.get(Constants.TASKID)); + entity.setAppId((Integer)task.get(Constants.ID)); + long now = System.currentTimeMillis(); + entity.setCreateTime(now); + Map result = new HashMap(16); + result.put(Constants.FILEURL, url); + result.put(Constants.FILENAME, zipFileName); + entity.setResult(result); + entity.setStatus(1); + entity.setDel(0); + //回传给api服务保存 + DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); + } catch (Exception e) { + log.error("HTML 文件夹压缩失败", e); + + // 压缩失败,按失败处理 + AppResultDoc entity = new AppResultDoc(); + entity.setInput(task); + entity.setTaskId((String) task.get(Constants.TASKID)); + entity.setAppId((Integer) task.get(Constants.ID)); + long now = System.currentTimeMillis(); + entity.setCreateTime(now); + + Map result = new HashMap<>(16); + result.put(Constants.ERROR, "HTML 文件夹压缩失败"); + entity.setResult(result); + entity.setStatus(2); + entity.setDel(0); + + DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); + } + } + }else { + //识别异常 + log.error("html文档转换异常:{}",queryResStr); + //发送失败结果 + AppResultDoc entity = new AppResultDoc(); + entity.setInput(task); + entity.setTaskId((String)task.get(Constants.TASKID)); + entity.setAppId((Integer)task.get(Constants.ID)); + long now = System.currentTimeMillis(); + entity.setCreateTime(now); + Map result = new HashMap(16); + result.put(Constants.ERROR, "转换失败"); + entity.setResult(result); + entity.setStatus(2); + entity.setDel(0); + //回传给api服务保存 + DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); + break; + } + + }else { + /******其他类型**********/ + //输出文件 + boolean isInputFile = base64ToFile(fileContents, convertFilePathPrefix, fileName); + if (isInputFile) { + //转换成功 --上传文件 + String fileAddr = convertFilePathPrefix+fileName; + //上传 + String responseBody = DownLoadUtil.upLoadFile(fileAddr, gofastUrl); + //删除源文件 + FileUtil.delFile(fileAddr); + // 解析返回 JSON + JSONObject json = JSONObject.parseObject(responseBody); + // ⚠️ 根据你 GoFast 实际返回字段调整 + String path = json.getString(Constants.PATH); + String url = gofastAccessPrefix + path; + //成功 发送结果 + AppResultDoc entity = new AppResultDoc(); + entity.setTaskId((String)task.get(Constants.TASKID)); + entity.setAppId((Integer)task.get(Constants.ID)); + long now = System.currentTimeMillis(); + entity.setCreateTime(now); + Map result = new HashMap(16); + result.put(Constants.FILEURL, url); + result.put(Constants.FILENAME, fileName); + entity.setResult(result); + entity.setStatus(1); + entity.setDel(0); + entity.setInput(task); + //回传给api服务保存 + DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); + }else { + //识别异常 + log.error("文档转换异常:{}",queryResStr); + //发送失败结果 + AppResultDoc entity = new AppResultDoc(); + entity.setInput(task); + entity.setTaskId((String)task.get(Constants.TASKID)); + entity.setAppId((Integer)task.get(Constants.ID)); + long now = System.currentTimeMillis(); + entity.setCreateTime(now); + Map result = new HashMap(16); + result.put(Constants.ERROR, "转换失败"); + entity.setResult(result); + entity.setStatus(2); + entity.setDel(0); + //回传给api服务保存 + DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); + } + } + } + + } + public static void main(String[] args) throws Exception { // OcrTaskServiceImpl ocrTaskServiceImpl = new OcrTaskServiceImpl(); // String base64Word = "77u/VGFibGUgMS4gRGlzdHJpYnV0aW9uIG9mIGNvbmZpcm1lZCBhbnRocmF4IGNhc2VzIGJ5IGNvdW50cnkgYW5kIHllYXIsIEVVL0VFQSwgMjAxNS0yMDE5DQpDb3VudHJ5CTIwMTUJMjAxNgkyMDE3CTIwMTgJMjAxOQ0KCU51bWJlcglOdW1iZXIJTnVtYmVyCU51bWJlcglOdW1iZXINCkF1c3RyaWEJMAkwCTAJMAkwDQpCZWxnaXVtCTAJMAkwCTAJMA0KQnVsZ2FyaWEJMgkwCTEJMAkwDQpDcm9hdGlhCTAJMAkwCTAJMA0KQ3lwcnVzCTAJMAkwCTAJMA0KQ3plY2hpYQkwCTAJMAkwCTANCkRlbm1hcmsJMAkwCTAJMAkwDQpFc3RvbmlhCTAJMAkwCTAJMA0KRmlubGFuZAkwCTAJMAkwCTANCkZyYW5jZQkwCTAJMAkwCTANCkdlcm1hbnkJMAkwCTAJMAkwDQpHcmVlY2UJMAkwCTAJMAkwDQpIdW5nYXJ5CTAJMAkwCTAJMQ0KSWNlbGFuZAkwCTAJMAkwCTANCklyZWxhbmQJMAkwCTAJMAkwDQpJdGFseQkwCTAJMAkwCTANCkxhdHZpYQkwCTAJMAkwCTANClVlY2h0ZW5zdGVpbgnigKIJ4oCiCeKAognigKIJ4oCiDQpVdGh1YW5pYQkwCTAJMAkwCTANCkx1eGVtYm91cmcJMAkwCTAJMAkwDQpNYWx0YQkwCTAJMAkwCTANCk5ldGhlcmxhbmRzCTAJMAkwCTEJMA=="; diff --git a/opai-api/src/main/java/com/bw/opai/config/WebMvcConfig.java b/opai-api/src/main/java/com/bw/opai/config/WebMvcConfig.java index 0aaff03..6af6a31 100644 --- a/opai-api/src/main/java/com/bw/opai/config/WebMvcConfig.java +++ b/opai-api/src/main/java/com/bw/opai/config/WebMvcConfig.java @@ -19,6 +19,8 @@ public class WebMvcConfig implements WebMvcConfigurer { registry.addInterceptor(authInterceptor) // 拦截所有业务接口 .addPathPatterns("/apps/**") + // 放行 datasave + .excludePathPatterns("/apps/datasave") // 放行登录注册接口(否则就死循环了) .excludePathPatterns("/auth/**") .excludePathPatterns("/static/**");