Commit de20005a authored by alex yao's avatar alex yao

refactor(ai): 重构AI软件版权模块文档生成功能

- 移除FileUtilsTest中的冗余导入和测试代码
- 简化test_md方法,移除Redis相关操作和文件写入逻辑
- 更新pdf测试路径格式
- 添加MD2WordService服务类注释
- 在调度器中引入MD2WordService和相关实体类
- 修改文档创建方法返回URL而非字节数组
- 实现markdown转word并上传功能
- 优化临时文件处理和资源清理逻辑
parent 8e3164ec
...@@ -3,6 +3,7 @@ package cn.com.poc.ai_software_copyright.scheduler; ...@@ -3,6 +3,7 @@ package cn.com.poc.ai_software_copyright.scheduler;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -21,19 +22,24 @@ import cn.com.poc.ai_software_copyright.service.BizSoftwareCopyrightService; ...@@ -21,19 +22,24 @@ import cn.com.poc.ai_software_copyright.service.BizSoftwareCopyrightService;
import cn.com.poc.common.constant.CommonConstant; import cn.com.poc.common.constant.CommonConstant;
import cn.com.poc.common.service.BosConfigService; import cn.com.poc.common.service.BosConfigService;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.FileUtils;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.message.entity.SoftwareCopyRightMessage; import cn.com.poc.message.entity.SoftwareCopyRightMessage;
import cn.com.poc.message.service.SoftwareCopyRightProduceService; import cn.com.poc.message.service.SoftwareCopyRightProduceService;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.LegalService; import cn.com.poc.thirdparty.resource.demand.ai.aggregate.LegalService;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.MD2WordService;
import cn.com.poc.thirdparty.resource.demand.ai.entity.legal.Item; import cn.com.poc.thirdparty.resource.demand.ai.entity.legal.Item;
import cn.com.poc.thirdparty.resource.demand.ai.entity.legal.LegalFileResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.legal.LegalFileResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.legal.LegalFileResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.legal.LegalFileResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.md2word.Md2WordResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.md2word.Md2WordResult;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.TypeReference; import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.dexcoder.commons.utils.UUIDUtils;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -185,9 +191,7 @@ public class SoftwareCopyRightScheduler { ...@@ -185,9 +191,7 @@ public class SoftwareCopyRightScheduler {
JSONObject jsonObject = JSONObject.parseObject(obj.toString()); JSONObject jsonObject = JSONObject.parseObject(obj.toString());
JSONArray jsonArray = jsonObject.getJSONArray("result"); JSONArray jsonArray = jsonObject.getJSONArray("result");
if (jsonArray != null) { if (jsonArray != null) {
byte[] documentBytes = createSourceCodeDocument(jsonArray); String url = createSourceCodeDocument(jsonArray);
String url =
uploadDocument(documentBytes, "source_code_" + softwareCopyrightEntity.getId());
recordEntity.setSourceCode(url); recordEntity.setSourceCode(url);
isChange = true; isChange = true;
} }
...@@ -208,10 +212,7 @@ public class SoftwareCopyRightScheduler { ...@@ -208,10 +212,7 @@ public class SoftwareCopyRightScheduler {
JSONObject jsonObject = JSONObject.parseObject(obj.toString()); JSONObject jsonObject = JSONObject.parseObject(obj.toString());
String result = jsonObject.getString("result"); String result = jsonObject.getString("result");
if (result != null) { if (result != null) {
byte[] documentBytes = createSimpleDocument(result); String url = createSimpleDocument(result);
String url = uploadDocument(documentBytes,
AiSoftWareCopyRightEnum.DOC_TYPE.pc_operating_manual.name() + "_" +
softwareCopyrightEntity.getId());
recordEntity.setPcOperatingManual(url); recordEntity.setPcOperatingManual(url);
isChange = true; isChange = true;
} }
...@@ -233,10 +234,7 @@ public class SoftwareCopyRightScheduler { ...@@ -233,10 +234,7 @@ public class SoftwareCopyRightScheduler {
String result = jsonObject.getString("result"); String result = jsonObject.getString("result");
if (result != null) { if (result != null) {
byte[] documentBytes = createSimpleDocument(result); String url = createSimpleDocument(result);
String url = uploadDocument(documentBytes,
AiSoftWareCopyRightEnum.DOC_TYPE.ph_operating_manual.name() + "_" +
softwareCopyrightEntity.getId());
recordEntity.setPhOperatingManual(url); recordEntity.setPhOperatingManual(url);
isChange = true; isChange = true;
} }
...@@ -323,51 +321,51 @@ public class SoftwareCopyRightScheduler { ...@@ -323,51 +321,51 @@ public class SoftwareCopyRightScheduler {
} }
} }
@Resource
private MD2WordService md2WordService;
private byte[] createSourceCodeDocument(JSONArray jsonArray) throws Exception { private String createSourceCodeDocument(JSONArray jsonArray) throws Exception {
org.apache.poi.xwpf.usermodel.XWPFDocument document = StringBuilder stringBuilder = new StringBuilder();
new org.apache.poi.xwpf.usermodel.XWPFDocument(); for (int i = 0; i < jsonArray.size(); i++) {
try { String content = jsonArray.getString(i);
for (int i = 0; i < jsonArray.size(); i++) { stringBuilder.append(content);
String content = jsonArray.getString(i);
org.apache.poi.xwpf.usermodel.XWPFParagraph contentParagraph = document.createParagraph();
org.apache.poi.xwpf.usermodel.XWPFRun contentRun = contentParagraph.createRun();
String[] split = content.split("\n");
for (String line : split) {
contentRun.setText(line);
contentRun.addBreak();
}
}
java.io.ByteArrayOutputStream out = new java.io.ByteArrayOutputStream();
document.write(out);
return out.toByteArray();
} finally {
document.close();
} }
return createSimpleDocument(stringBuilder.toString());
} }
private byte[] createSimpleDocument(String content) throws Exception { private String createSimpleDocument(String content) throws Exception {
org.apache.poi.xwpf.usermodel.XWPFDocument document = return md2wordAndUploadURL(content);
new org.apache.poi.xwpf.usermodel.XWPFDocument(); }
private String md2wordAndUploadURL(String mdContent) throws Exception {
File file = null;
FileOutputStream fileOutputStream = null;
FileInputStream fileInputStream = null;
try { try {
org.apache.poi.xwpf.usermodel.XWPFParagraph contentParagraph = document.createParagraph(); file = File.createTempFile(UUIDUtils.getUUID8(), ".md");
org.apache.poi.xwpf.usermodel.XWPFRun contentRun = contentParagraph.createRun(); fileOutputStream = new FileOutputStream(file);
String[] split = content.split("\n"); fileOutputStream.write(mdContent.getBytes());
for (String line : split) { fileOutputStream.flush();
contentRun.setText(line);
contentRun.addBreak(); fileInputStream = new FileInputStream(file);
} byte[] bytes = new byte[fileInputStream.available()];
fileInputStream.read(bytes);
java.io.ByteArrayOutputStream out = new java.io.ByteArrayOutputStream();
document.write(out); String mdURL = uploadDocument(bytes, file.getName());
return out.toByteArray(); Md2WordResponse response = new Md2WordResponse();
response.setFilePath(mdURL);
Md2WordResult md2WordResult = md2WordService.md2Word(response);
return md2WordResult.getFilePath();
} finally { } finally {
document.close(); if (file != null || file.exists()) {
file.delete();
}
fileInputStream.close();
fileOutputStream.close();
} }
} }
private String uploadDocument(byte[] documentBytes, String fileName) throws Exception { private String uploadDocument(byte[] documentBytes, String fileName) throws Exception {
File tempFile = null; File tempFile = null;
try { try {
......
...@@ -4,6 +4,8 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.md2word.Md2WordResponse; ...@@ -4,6 +4,8 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.md2word.Md2WordResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.md2word.Md2WordResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.md2word.Md2WordResult;
/** /**
* markdown转word服务
*
* @author alex.yao * @author alex.yao
* @date 2025/7/28 * @date 2025/7/28
*/ */
......
package cn.com.poc.utils; package cn.com.poc.utils;
import cn.com.poc.ai_software_copyright.contant.AiSoftWareCopyRightRedisKey;
import cn.com.poc.common.service.BosConfigService; import cn.com.poc.common.service.BosConfigService;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.DocumentLoad; import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.FileUtils; import cn.com.poc.common.utils.FileUtils;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.common.utils.UUIDTool; import cn.com.poc.common.utils.UUIDTool;
import cn.com.yict.framemax.core.spring.SingleContextInitializer; import cn.com.yict.framemax.core.spring.SingleContextInitializer;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.crypto.digest.MD5; import cn.hutool.crypto.digest.MD5;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper; import org.apache.pdfbox.text.PDFTextStripper;
import org.junit.Test; import org.junit.Test;
...@@ -35,27 +31,11 @@ public class FileUtilsTest { ...@@ -35,27 +31,11 @@ public class FileUtilsTest {
private BosConfigService bosConfigService; private BosConfigService bosConfigService;
@Resource @Resource
private RedisService redisService; RedisService redisService;
@Test @Test
public void test_md() throws IOException { public void test_md(){
String result = redisService.get(AiSoftWareCopyRightRedisKey.CALL_BACK + "10:source_code").toString();
JSONObject jsonObject = JSONObject.parseObject(result.toString());
JSONArray jsonArray = jsonObject.getJSONArray("result");
System.out.println(jsonArray.toString());
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < jsonArray.size(); i++) {
String content = jsonArray.getString(i);
stringBuilder.append(content);
}
File file = new File("C:\\Users\\52747\\Desktop\\source_code.md");
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(stringBuilder.toString().getBytes());
fileOutputStream.flush();
fileOutputStream.close();
} }
...@@ -119,8 +99,7 @@ public class FileUtilsTest { ...@@ -119,8 +99,7 @@ public class FileUtilsTest {
@Test @Test
public void test_pdf() { public void test_pdf() {
File file = new File( File file = new File("D:\\项目\\【W-001】万讯\\【001】香港机场\\Sample Data_2025-10-17\\Sample Document\\WP Data\\WP057940\\1. Work Method Statement - 1.BCJV-3408-Z-00685C Method Statement for Installation of VDC Works(A.pdf");
"D:\\项目\\【W-001】万讯\\【001】香港机场\\Sample Data_2025-10-17\\Sample Document\\WP Data\\WP057940\\1. Work Method Statement - 1.BCJV-3408-Z-00685C Method Statement for Installation of VDC Works(A.pdf");
String pdfResult = DocumentLoad.documentToText(file); String pdfResult = DocumentLoad.documentToText(file);
System.out.println(pdfResult); System.out.println(pdfResult);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment