From 9807b13101b3fb4bee502e7fcce4abaf50720240 Mon Sep 17 00:00:00 2001 From: hejinbo Date: Tue, 28 Nov 2023 15:34:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CaseApplicationServiceImpl.java | 125 ++++++++++-------- .../ruoyi/wisdomarbitrate/utils/OCRUtils.java | 40 +++--- .../com/ruoyi/wisdomarbitrate/utils/Tset.java | 72 +++++++--- 3 files changed, 150 insertions(+), 87 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CaseApplicationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CaseApplicationServiceImpl.java index c7298dc..949ad6a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CaseApplicationServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CaseApplicationServiceImpl.java @@ -2856,16 +2856,16 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService { return AjaxResult.error("请选择要上传的文件"); } UUID uuid = UUID.randomUUID(); - String targetPath = "\\home\\ruoyi\\uploadPath\\upload\\unzipFile\\"; - //String targetPath = "D:\\home\\unzip\\" + uuid + "\\"; + String targetPath = "/home/ruoyi/uploadPath/upload/unzipFile/"+uuid+ "/"; + //String targetPath = "D:/home/unzip/" + uuid + "/"; File zipFile = null; InputStream ins = null; try { ins = file.getInputStream(); //上传的压缩包保存的路径 - //String savePath = "D:\\develop\\java\\"; - String savePath = "\\home\\ruoyi\\uploadPath\\upload\\zipFile\\"; - String saveName = uuid + file.getOriginalFilename(); + String savePath = "/home/ruoyi/uploadPath/upload/zipFile/"; + //String savePath = "D:/home/zipFile/"; + String saveName = uuid + "_" + file.getOriginalFilename(); zipFile = new File(savePath + saveName); inputChangeToFile(ins, zipFile); } catch (IOException e) { @@ -2880,13 +2880,17 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService { //遍历路径 for (String pdfUrl : andConvertPDF) { //获取文件的页数 + System.out.println("这是查到的符合条件的文件路径====="+pdfUrl); int fileNumPage = getFileNumPage(pdfUrl); + //文件转成base64 + String base64 = OCRUtils.pdfConvertBase64(pdfUrl); + if (base64 == null){ + return AjaxResult.error("文件转base64编码有误,请检查"); + } StringBuilder stringBuilder = new StringBuilder(); // 创建一个StringBuilder对象 for (int i = 0; i < fileNumPage; i++) { //对接腾讯云接口.识别里面的数据 - //暂时写死 - String pdfFilePath = "http://121.40.189.20:9000/API/uploadPath/upload/2023/11/14/ca2ca4697e5449ff9b9d23f95b221f58.pdf"; - String text = OCRUtils.pdfIdentifyText(pdfUrl, i + 1); + String text = OCRUtils.pdfIdentifyText(base64, i + 1); if (stringBuilder.length() > 0) { stringBuilder.append(","); // 在已有内容的情况下添加逗号分隔符 } @@ -2894,56 +2898,69 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService { } // 将字符串按逗号分隔符切割 String[] fields = stringBuilder.toString().split(","); - JSONObject jsonObject = new JSONObject(); // 创建一个空的JSON对象 + Map> map = new HashMap<>(); for (String field : fields) { // 对于每个字段,再按冒号分隔符拆分出键和值 String[] keyValue = field.split(":"); - if (keyValue.length == 2) { // 对于合法的键值对,将其添加到JSON对象中 - jsonObject.put(keyValue[0], keyValue[1]); + if (keyValue.length >= 2) { + String key = keyValue[0]; + String value = keyValue[1]; + // 判断Map中是否已存在该键 + if (map.containsKey(key)) { + // 如果已存在,获取该键对应的值,并将新的值添加到集合中 + List values = map.get(key); + values.add(value); + } else { + // 如果不存在,创建一个新的集合,并将值添加到集合中 + List values = new ArrayList<>(); + values.add(value); + map.put(key, values); + } } } - //调用新增案件的接口 - CaseApplication caseApplication = new CaseApplication(); - - caseApplication.setApplicationOrganId(jsonObject.getString("统一社会信用代码")); - caseApplication.setCompLegalPerson(jsonObject.getString("法定代表人")); - caseApplication.setResidenAffiliAppli(jsonObject.getString("住所")); - caseApplication.setContactAddressAgent(jsonObject.getString("联系地址")); - caseApplication.setNameAgent(jsonObject.getString("委托代理人")); - caseApplication.setContactTelphoneAgent(jsonObject.getString("联系电话")); - caseApplication.setDebtorName(jsonObject.getString("被申请人")); - caseApplication.setDebtorIdentityNum(jsonObject.getString("居民身份证号码")); - caseApplication.setArbitratClaims(jsonObject.getString("仲裁请求")); - caseApplication.setCaseSubjectAmount(new BigDecimal(1)); - List caseAffiliates = new ArrayList<>(); - CaseAffiliate caseAffiliate = new CaseAffiliate(); - caseAffiliate.setIdentityType(1); - caseAffiliate.setName(jsonObject.getString("申请人")); - caseAffiliate.setIdentityNum(""); - caseAffiliate.setContactTelphone(jsonObject.getString("申请人联系电话")); - caseAffiliates.add(caseAffiliate); - CaseAffiliate caseAffiliate1 = new CaseAffiliate(); - caseAffiliate1.setIdentityType(2); - caseAffiliate1.setName(jsonObject.getString("被申请人")); - caseAffiliate1.setIdentityNum(""); - caseAffiliate1.setContactTelphone(jsonObject.getString("被申请人联系电话")); - caseAffiliates.add(caseAffiliate1); - caseApplication.setCaseAffiliates(caseAffiliates); - this.insertcaseApplication(caseApplication); - if (null != caseApplication.getId()) { - // 绑定案件与申请书 - File file1 = new File(pdfUrl); - CaseAttach caseAttach = new CaseAttach(); - caseAttach.setCaseAppliId(caseApplication.getId()); - String saveName = "/profile/upload/" + file1.getName(); - String savePath = "/home/ruoyi/uploadPath/upload"; - caseAttach.setAnnexPath(savePath); - caseAttach.setAnnexName(saveName); - caseAttach.setAnnexType(1); - caseAttachMapper.save(caseAttach); + if (map.size()>0){ + //调用新增案件的接口 + CaseApplication caseApplication = new CaseApplication(); + //默认案件标的 + caseApplication.setCaseSubjectAmount(new BigDecimal(1)); + caseApplication.setApplicationOrganId(map.get("统一社会信用代码").get(0)); + caseApplication.setCompLegalPerson(map.get("负责人").get(0)); + caseApplication.setNameAgent(map.get("委托代理人").get(0)); + caseApplication.setArbitratClaims(map.get("仲裁请求").get(0)); + List caseAffiliates = new ArrayList<>(); + CaseAffiliate caseAffiliate = new CaseAffiliate(); + caseAffiliate.setIdentityType(1); + caseAffiliate.setName(map.get("申请人").get(0)); + caseAffiliate.setIdentityNum(map.get("统一社会信用代码").get(0)); + caseAffiliate.setContactTelphone(map.get("联系电话").get(0)); + caseAffiliate.setResidenAffili(map.get("住所").get(0)); + caseAffiliate.setContactAddress(map.get("联系地址").get(0)); + caseAffiliate.setSendEmail(map.get("电子邮件").get(0)); + caseAffiliates.add(caseAffiliate); + CaseAffiliate caseAffiliate1 = new CaseAffiliate(); + caseAffiliate1.setIdentityType(2); + caseAffiliate1.setName(map.get("被申请人").get(0)); + caseAffiliate1.setIdentityNum(map.get("居民身份证号码").get(0)); + caseAffiliate1.setContactTelphone(map.get("联系电话").get(1)); + caseAffiliate1.setResidenAffili(map.get("住所").get(1)); + caseAffiliates.add(caseAffiliate1); + caseApplication.setCaseAffiliates(caseAffiliates); + this.insertcaseApplication(caseApplication); + if (null != caseApplication.getId()) { + // 绑定案件与申请书 + File file1 = new File(pdfUrl); + CaseAttach caseAttach = new CaseAttach(); + caseAttach.setCaseAppliId(caseApplication.getId()); + caseAttach.setAnnexPath(file1.getPath()); + caseAttach.setAnnexName(file1.getName()); + caseAttach.setAnnexType(1); + caseAttachMapper.save(caseAttach); + return AjaxResult.success("导入成功"); + } + }else{ + return AjaxResult.error("文件识别内容失败,请检查"); } } - return AjaxResult.success("导入成功"); } else { // 没有找到符合条件的文件 return AjaxResult.error("未找到符合条件的文件"); @@ -2952,7 +2969,7 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService { // 解压失败 return AjaxResult.error("解压失败"); } - + return null; } public static List findAndConvertPDF(File directory) { @@ -3026,8 +3043,8 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService { private static String convertToPDF(File file) { String wordFilePath = file.getAbsolutePath(); - // String pdfSaveDirectory = "D:\\home\\unzip\\wordToPDF\\"; - String pdfSaveDirectory = "\\home\\ruoyi\\uploadPath\\upload\\wordToPDF\\"; + //String pdfSaveDirectory = "D:\\home\\unzip\\wordToPDF\\"; + String pdfSaveDirectory = "/home/ruoyi/uploadPath/upload/wordToPDF/"; File directory = new File(pdfSaveDirectory); if (!directory.exists()) { directory.mkdirs(); diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/utils/OCRUtils.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/utils/OCRUtils.java index 7b7c0e4..22a4830 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/utils/OCRUtils.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/utils/OCRUtils.java @@ -11,7 +11,11 @@ import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Response; import org.json.JSONArray; import org.json.JSONObject; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; import java.util.ArrayList; +import java.util.Base64; import java.util.List; public class OCRUtils { @@ -20,7 +24,7 @@ public class OCRUtils { //API的SecretKey private static final String SECRET_KEY = "QjphKo8zkHZigT8j9PVtFPJyfIvO3d6V"; - public static String pdfIdentifyText(String ImageUrl, Integer PageNumber) { + public static String pdfIdentifyText(String imageBase64, Integer pageNumber) { try { // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 @@ -36,12 +40,11 @@ public class OCRUtils { OcrClient client = new OcrClient(cred, "ap-beijing", clientProfile); // 实例化一个请求对象,每个接口都会对应一个request对象 SmartStructuralOCRV2Request req = new SmartStructuralOCRV2Request(); - req.setImageUrl(ImageUrl); + req.setImageBase64(imageBase64); req.setIsPdf(true); - req.setPdfPageNumber(PageNumber.longValue()); - String[] itemNames1 = {"申请人", "统一社会信用代码", "法定代表人", "住所", "联系地址", "委托代理人" - , "联系电话", "电子邮件", "被申请人", "居民身份证号码", "住所", "联系电话", "电子邮件", "仲裁请求" - , "事实和理由"}; + req.setPdfPageNumber(pageNumber.longValue()); + String[] itemNames1 = {"申请人", "统一社会信用代码", "负责人", "住所", "联系地址" + , "委托代理人", "联系电话", "电子邮件", "被申请人", "居民身份证号码", "仲裁请求", "事实和理由"}; req.setItemNames(itemNames1); // 返回的resp是一个SmartStructuralOCRV2Response的实例,与请求对象对应 SmartStructuralOCRV2Response resp = client.SmartStructuralOCRV2(req); @@ -78,18 +81,19 @@ public class OCRUtils { } return null; } - - public static void main(String[] args) { - String input = "申请人:招商银行,住所:上海嘉定区,联系地址:上海徐汇区,法定代表人:招商法人,委托代理人:黄海龙,被申请人:白贵勇,住所:陕西,联系地址:陕西,仲裁请求:仲裁委主任依据《2022年版仲裁规则》第三十一条第(四)项、第三十二条的规定指定白贵勇仲裁员为仲裁庭的仲裁员。本案由白贵勇仲裁员成立仲裁庭进行审理。,事实和理由:(一)申请人的仲裁请求及事实和理由,申请人:债务纠纷"; - String[] fields = input.split(","); - JSONObject jsonObject = new JSONObject(); // 创建一个空的JSON对象 - for (String field : fields) { - // 对于每个字段,再按冒号分隔符拆分出键和值 - String[] keyValue = field.split(":"); - if (keyValue.length == 2) { // 对于合法的键值对,将其添加到JSON对象中 - jsonObject.put(keyValue[0], keyValue[1]); - } + public static String pdfConvertBase64(String pathUrl){ + try { + File file = new File(pathUrl); + FileInputStream fileInputStream = new FileInputStream(file); + byte[] fileBytes = new byte[(int) file.length()]; + fileInputStream.read(fileBytes); + fileInputStream.close(); + // 将字节数组转换为Base64值 + return Base64.getEncoder().encodeToString(fileBytes); + } catch (IOException e) { + e.printStackTrace(); } - System.out.println(jsonObject.toString()); + return null; } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/utils/Tset.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/utils/Tset.java index cb75215..5859dd0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/utils/Tset.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/utils/Tset.java @@ -19,8 +19,7 @@ import org.json.JSONObject; import java.io.*; -import java.util.ArrayList; -import java.util.List; +import java.util.*; public class Tset { public static void main(String[] args) { @@ -29,10 +28,15 @@ public class Tset { //API的SecretKey final String SECRET_KEY = "QjphKo8zkHZigT8j9PVtFPJyfIvO3d6V"; - String pdfFilePath = "http://121.40.189.20:8000/API/uploadPath/upload/1.pdf"; - // String pdfFilePath = "http://121.40.189.20:9000/API/uploadPath/upload/2023/11/14/ca2ca4697e5449ff9b9d23f95b221f58.pdf"; - + // String pdfFilePath = "http://121.40.189.20:9000/API/uploadPath/upload/ca2ca4697e5449ff9b9d23f95b221f58.pdf"; + // String pdfFilePath = "http://121.40.189.20:9000/API/uploadPath/upload/2023/11/14/ca2ca4697e5449ff9b9d23f95b221f58.pdf"; + String pdfFilePath ="D:/home/unzip/b92a7291-441e-4fad-95b4-7305f206eabd/仲裁材料/二、案件基本材料/2-1 仲裁申请书.pdf"; try{ + // 读取文件内容到字节数组 + byte[] fileBytes = readFileToBytes(pdfFilePath); + // 将字节数组转换为Base64值 + String base64String = encodeBytesToBase64(fileBytes); + // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 @@ -47,22 +51,23 @@ public class Tset { OcrClient client = new OcrClient(cred, "ap-beijing", clientProfile); // 实例化一个请求对象,每个接口都会对应一个request对象 SmartStructuralOCRV2Request req = new SmartStructuralOCRV2Request(); - req.setImageUrl(pdfFilePath); + req.setImageBase64(base64String); req.setIsPdf(true); req.setPdfPageNumber(1L); - String[] itemNames1 = {"申请人", "住所"}; + String[] itemNames1 = {"申请人", "统一社会信用代码", "负责人", "住所", "联系地址" + , "委托代理人", "联系电话", "电子邮件", "被申请人", "居民身份证号码", "仲裁请求", "事实和理由"}; req.setItemNames(itemNames1); // 返回的resp是一个SmartStructuralOCRV2Response的实例,与请求对象对应 SmartStructuralOCRV2Response resp = client.SmartStructuralOCRV2(req); - // 输出json格式的字符串回包 - System.out.println(SmartStructuralOCRV2Response.toJsonString(resp)); + + //解析数据 String s = SmartStructuralOCRV2Response.toJsonString(resp); // 解析JSON数据 JSONObject jsonObject = new JSONObject(s); JSONArray structuralList = jsonObject.getJSONArray("StructuralList"); // 遍历StructuralList中的Groups,获取Key对应的AutoName和Value对应的AutoContent - List strings = new ArrayList<>(); + StringBuilder stringBuilder = new StringBuilder(); // 创建一个StringBuilder对象 for (int i = 0; i < structuralList.length(); i++) { JSONArray groups = structuralList.getJSONObject(i).getJSONArray("Groups"); for (int j = 0; j < groups.length(); j++) { @@ -73,16 +78,53 @@ public class Tset { JSONObject value = line.getJSONObject("Value"); String autoName = key.getString("AutoName"); String autoContent = value.getString("AutoContent"); - String text = autoName +":"+ autoContent; - strings.add(text); + String text = autoName + ":" + autoContent; + if (stringBuilder.length() > 0) { + stringBuilder.append(","); // 在已有内容的情况下添加逗号分隔符 + } + stringBuilder.append(text); // 拼接当前的字符串 } } } - System.out.println(strings); - - } catch (TencentCloudSDKException e) { + System.out.println("stringBuilder======"+stringBuilder.toString()); + // 将字符串按逗号分隔符切割 + String[] fields = stringBuilder.toString().split(","); + Map> map = new HashMap<>(); + for (String field : fields) { + // 对于每个字段,再按冒号分隔符拆分出键和值 + String[] keyValue = field.split(":"); + if (keyValue.length == 2) { // 对于合法的键值对,将其添加到JSON对象中 + String key = keyValue[0]; + String value = keyValue[1]; + // 判断Map中是否已存在该键 + if (map.containsKey(key)) { + // 如果已存在,获取该键对应的值,并将新的值添加到集合中 + List values = map.get(key); + values.add(value); + } else { + // 如果不存在,创建一个新的集合,并将值添加到集合中 + List values = new ArrayList<>(); + values.add(value); + map.put(key, values); + } + } + } + System.out.println(map); + } catch (Exception e) { System.out.println(e.toString()); } } + private static byte[] readFileToBytes(String filePath) throws IOException { + File file = new File(filePath); + FileInputStream fileInputStream = new FileInputStream(file); + byte[] fileBytes = new byte[(int) file.length()]; + fileInputStream.read(fileBytes); + fileInputStream.close(); + return fileBytes; + } + + private static String encodeBytesToBase64(byte[] bytes) { + return Base64.getEncoder().encodeToString(bytes); + } } \ No newline at end of file -- 2.54.0