hejinbo 2 年前
父节点
当前提交
9807b13101

+ 71
- 54
ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CaseApplicationServiceImpl.java 查看文件

@@ -2856,16 +2856,16 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService {
2856 2856
             return AjaxResult.error("请选择要上传的文件");
2857 2857
         }
2858 2858
         UUID uuid = UUID.randomUUID();
2859
-        String targetPath = "\\home\\ruoyi\\uploadPath\\upload\\unzipFile\\";
2860
-        //String targetPath = "D:\\home\\unzip\\" + uuid + "\\";
2859
+        String targetPath = "/home/ruoyi/uploadPath/upload/unzipFile/"+uuid+ "/";
2860
+        //String targetPath = "D:/home/unzip/" + uuid + "/";
2861 2861
         File zipFile = null;
2862 2862
         InputStream ins = null;
2863 2863
         try {
2864 2864
             ins = file.getInputStream();
2865 2865
             //上传的压缩包保存的路径
2866
-            //String savePath = "D:\\develop\\java\\";
2867
-            String savePath = "\\home\\ruoyi\\uploadPath\\upload\\zipFile\\";
2868
-            String saveName = uuid + file.getOriginalFilename();
2866
+            String savePath = "/home/ruoyi/uploadPath/upload/zipFile/";
2867
+            //String savePath = "D:/home/zipFile/";
2868
+            String saveName = uuid + "_" + file.getOriginalFilename();
2869 2869
             zipFile = new File(savePath + saveName);
2870 2870
             inputChangeToFile(ins, zipFile);
2871 2871
         } catch (IOException e) {
@@ -2880,13 +2880,17 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService {
2880 2880
                 //遍历路径
2881 2881
                 for (String pdfUrl : andConvertPDF) {
2882 2882
                     //获取文件的页数
2883
+                    System.out.println("这是查到的符合条件的文件路径====="+pdfUrl);
2883 2884
                     int fileNumPage = getFileNumPage(pdfUrl);
2885
+                    //文件转成base64
2886
+                    String base64 = OCRUtils.pdfConvertBase64(pdfUrl);
2887
+                    if (base64 == null){
2888
+                        return AjaxResult.error("文件转base64编码有误,请检查");
2889
+                    }
2884 2890
                     StringBuilder stringBuilder = new StringBuilder(); // 创建一个StringBuilder对象
2885 2891
                     for (int i = 0; i < fileNumPage; i++) {
2886 2892
                         //对接腾讯云接口.识别里面的数据
2887
-                        //暂时写死
2888
-                        String pdfFilePath = "http://121.40.189.20:9000/API/uploadPath/upload/2023/11/14/ca2ca4697e5449ff9b9d23f95b221f58.pdf";
2889
-                        String text = OCRUtils.pdfIdentifyText(pdfUrl, i + 1);
2893
+                        String text = OCRUtils.pdfIdentifyText(base64, i + 1);
2890 2894
                         if (stringBuilder.length() > 0) {
2891 2895
                             stringBuilder.append(","); // 在已有内容的情况下添加逗号分隔符
2892 2896
                         }
@@ -2894,56 +2898,69 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService {
2894 2898
                     }
2895 2899
                     // 将字符串按逗号分隔符切割
2896 2900
                     String[] fields = stringBuilder.toString().split(",");
2897
-                    JSONObject jsonObject = new JSONObject(); // 创建一个空的JSON对象
2901
+                    Map<String, List<String>> map = new HashMap<>();
2898 2902
                     for (String field : fields) {
2899 2903
                         // 对于每个字段,再按冒号分隔符拆分出键和值
2900 2904
                         String[] keyValue = field.split(":");
2901
-                        if (keyValue.length == 2) { // 对于合法的键值对,将其添加到JSON对象中
2902
-                            jsonObject.put(keyValue[0], keyValue[1]);
2905
+                        if (keyValue.length >= 2) {
2906
+                            String key = keyValue[0];
2907
+                            String value = keyValue[1];
2908
+                            // 判断Map中是否已存在该键
2909
+                            if (map.containsKey(key)) {
2910
+                                // 如果已存在,获取该键对应的值,并将新的值添加到集合中
2911
+                                List<String> values = map.get(key);
2912
+                                values.add(value);
2913
+                            } else {
2914
+                                // 如果不存在,创建一个新的集合,并将值添加到集合中
2915
+                                List<String> values = new ArrayList<>();
2916
+                                values.add(value);
2917
+                                map.put(key, values);
2918
+                            }
2903 2919
                         }
2904 2920
                     }
2905
-                    //调用新增案件的接口
2906
-                    CaseApplication caseApplication = new CaseApplication();
2907
-
2908
-                    caseApplication.setApplicationOrganId(jsonObject.getString("统一社会信用代码"));
2909
-                    caseApplication.setCompLegalPerson(jsonObject.getString("法定代表人"));
2910
-                    caseApplication.setResidenAffiliAppli(jsonObject.getString("住所"));
2911
-                    caseApplication.setContactAddressAgent(jsonObject.getString("联系地址"));
2912
-                    caseApplication.setNameAgent(jsonObject.getString("委托代理人"));
2913
-                    caseApplication.setContactTelphoneAgent(jsonObject.getString("联系电话"));
2914
-                    caseApplication.setDebtorName(jsonObject.getString("被申请人"));
2915
-                    caseApplication.setDebtorIdentityNum(jsonObject.getString("居民身份证号码"));
2916
-                    caseApplication.setArbitratClaims(jsonObject.getString("仲裁请求"));
2917
-                    caseApplication.setCaseSubjectAmount(new BigDecimal(1));
2918
-                    List<CaseAffiliate> caseAffiliates = new ArrayList<>();
2919
-                    CaseAffiliate caseAffiliate = new CaseAffiliate();
2920
-                    caseAffiliate.setIdentityType(1);
2921
-                    caseAffiliate.setName(jsonObject.getString("申请人"));
2922
-                    caseAffiliate.setIdentityNum("");
2923
-                    caseAffiliate.setContactTelphone(jsonObject.getString("申请人联系电话"));
2924
-                    caseAffiliates.add(caseAffiliate);
2925
-                    CaseAffiliate caseAffiliate1 = new CaseAffiliate();
2926
-                    caseAffiliate1.setIdentityType(2);
2927
-                    caseAffiliate1.setName(jsonObject.getString("被申请人"));
2928
-                    caseAffiliate1.setIdentityNum("");
2929
-                    caseAffiliate1.setContactTelphone(jsonObject.getString("被申请人联系电话"));
2930
-                    caseAffiliates.add(caseAffiliate1);
2931
-                    caseApplication.setCaseAffiliates(caseAffiliates);
2932
-                    this.insertcaseApplication(caseApplication);
2933
-                    if (null != caseApplication.getId()) {
2934
-                        // 绑定案件与申请书
2935
-                        File file1 = new File(pdfUrl);
2936
-                        CaseAttach caseAttach = new CaseAttach();
2937
-                        caseAttach.setCaseAppliId(caseApplication.getId());
2938
-                        String saveName = "/profile/upload/" + file1.getName();
2939
-                        String savePath = "/home/ruoyi/uploadPath/upload";
2940
-                        caseAttach.setAnnexPath(savePath);
2941
-                        caseAttach.setAnnexName(saveName);
2942
-                        caseAttach.setAnnexType(1);
2943
-                        caseAttachMapper.save(caseAttach);
2921
+                    if (map.size()>0){
2922
+                        //调用新增案件的接口
2923
+                        CaseApplication caseApplication = new CaseApplication();
2924
+                        //默认案件标的
2925
+                        caseApplication.setCaseSubjectAmount(new BigDecimal(1));
2926
+                        caseApplication.setApplicationOrganId(map.get("统一社会信用代码").get(0));
2927
+                        caseApplication.setCompLegalPerson(map.get("负责人").get(0));
2928
+                        caseApplication.setNameAgent(map.get("委托代理人").get(0));
2929
+                        caseApplication.setArbitratClaims(map.get("仲裁请求").get(0));
2930
+                        List<CaseAffiliate> caseAffiliates = new ArrayList<>();
2931
+                        CaseAffiliate caseAffiliate = new CaseAffiliate();
2932
+                        caseAffiliate.setIdentityType(1);
2933
+                        caseAffiliate.setName(map.get("申请人").get(0));
2934
+                        caseAffiliate.setIdentityNum(map.get("统一社会信用代码").get(0));
2935
+                        caseAffiliate.setContactTelphone(map.get("联系电话").get(0));
2936
+                        caseAffiliate.setResidenAffili(map.get("住所").get(0));
2937
+                        caseAffiliate.setContactAddress(map.get("联系地址").get(0));
2938
+                        caseAffiliate.setSendEmail(map.get("电子邮件").get(0));
2939
+                        caseAffiliates.add(caseAffiliate);
2940
+                        CaseAffiliate caseAffiliate1 = new CaseAffiliate();
2941
+                        caseAffiliate1.setIdentityType(2);
2942
+                        caseAffiliate1.setName(map.get("被申请人").get(0));
2943
+                        caseAffiliate1.setIdentityNum(map.get("居民身份证号码").get(0));
2944
+                        caseAffiliate1.setContactTelphone(map.get("联系电话").get(1));
2945
+                        caseAffiliate1.setResidenAffili(map.get("住所").get(1));
2946
+                        caseAffiliates.add(caseAffiliate1);
2947
+                        caseApplication.setCaseAffiliates(caseAffiliates);
2948
+                        this.insertcaseApplication(caseApplication);
2949
+                        if (null != caseApplication.getId()) {
2950
+                            // 绑定案件与申请书
2951
+                            File file1 = new File(pdfUrl);
2952
+                            CaseAttach caseAttach = new CaseAttach();
2953
+                            caseAttach.setCaseAppliId(caseApplication.getId());
2954
+                            caseAttach.setAnnexPath(file1.getPath());
2955
+                            caseAttach.setAnnexName(file1.getName());
2956
+                            caseAttach.setAnnexType(1);
2957
+                            caseAttachMapper.save(caseAttach);
2958
+                            return AjaxResult.success("导入成功");
2959
+                        }
2960
+                    }else{
2961
+                        return AjaxResult.error("文件识别内容失败,请检查");
2944 2962
                     }
2945 2963
                 }
2946
-                return AjaxResult.success("导入成功");
2947 2964
             } else {
2948 2965
                 // 没有找到符合条件的文件
2949 2966
                 return AjaxResult.error("未找到符合条件的文件");
@@ -2952,7 +2969,7 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService {
2952 2969
             // 解压失败
2953 2970
             return AjaxResult.error("解压失败");
2954 2971
         }
2955
-
2972
+        return null;
2956 2973
     }
2957 2974
 
2958 2975
     public static List<String> findAndConvertPDF(File directory) {
@@ -3026,8 +3043,8 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService {
3026 3043
 
3027 3044
     private static String convertToPDF(File file) {
3028 3045
         String wordFilePath = file.getAbsolutePath();
3029
-       // String pdfSaveDirectory = "D:\\home\\unzip\\wordToPDF\\";
3030
-        String pdfSaveDirectory = "\\home\\ruoyi\\uploadPath\\upload\\wordToPDF\\";
3046
+        //String pdfSaveDirectory = "D:\\home\\unzip\\wordToPDF\\";
3047
+        String pdfSaveDirectory = "/home/ruoyi/uploadPath/upload/wordToPDF/";
3031 3048
         File directory = new File(pdfSaveDirectory);
3032 3049
         if (!directory.exists()) {
3033 3050
             directory.mkdirs();

+ 22
- 18
ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/utils/OCRUtils.java 查看文件

@@ -11,7 +11,11 @@ import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Response;
11 11
 import org.json.JSONArray;
12 12
 import org.json.JSONObject;
13 13
 
14
+import java.io.File;
15
+import java.io.FileInputStream;
16
+import java.io.IOException;
14 17
 import java.util.ArrayList;
18
+import java.util.Base64;
15 19
 import java.util.List;
16 20
 
17 21
 public class OCRUtils {
@@ -20,7 +24,7 @@ public class OCRUtils {
20 24
     //API的SecretKey
21 25
     private static final String SECRET_KEY = "QjphKo8zkHZigT8j9PVtFPJyfIvO3d6V";
22 26
 
23
-    public static String pdfIdentifyText(String ImageUrl, Integer PageNumber) {
27
+    public static String pdfIdentifyText(String imageBase64, Integer pageNumber) {
24 28
         try {
25 29
             // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
26 30
             // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
@@ -36,12 +40,11 @@ public class OCRUtils {
36 40
             OcrClient client = new OcrClient(cred, "ap-beijing", clientProfile);
37 41
             // 实例化一个请求对象,每个接口都会对应一个request对象
38 42
             SmartStructuralOCRV2Request req = new SmartStructuralOCRV2Request();
39
-            req.setImageUrl(ImageUrl);
43
+            req.setImageBase64(imageBase64);
40 44
             req.setIsPdf(true);
41
-            req.setPdfPageNumber(PageNumber.longValue());
42
-            String[] itemNames1 = {"申请人", "统一社会信用代码", "法定代表人", "住所", "联系地址", "委托代理人"
43
-                    , "联系电话", "电子邮件", "被申请人", "居民身份证号码", "住所", "联系电话", "电子邮件", "仲裁请求"
44
-                    , "事实和理由"};
45
+            req.setPdfPageNumber(pageNumber.longValue());
46
+            String[] itemNames1 = {"申请人", "统一社会信用代码", "负责人", "住所", "联系地址"
47
+                    , "委托代理人", "联系电话", "电子邮件", "被申请人", "居民身份证号码", "仲裁请求", "事实和理由"};
45 48
             req.setItemNames(itemNames1);
46 49
             // 返回的resp是一个SmartStructuralOCRV2Response的实例,与请求对象对应
47 50
             SmartStructuralOCRV2Response resp = client.SmartStructuralOCRV2(req);
@@ -78,18 +81,19 @@ public class OCRUtils {
78 81
         }
79 82
         return null;
80 83
     }
81
-
82
-    public static void main(String[] args) {
83
-        String input = "申请人:招商银行,住所:上海嘉定区,联系地址:上海徐汇区,法定代表人:招商法人,委托代理人:黄海龙,被申请人:白贵勇,住所:陕西,联系地址:陕西,仲裁请求:仲裁委主任依据《2022年版仲裁规则》第三十一条第(四)项、第三十二条的规定指定白贵勇仲裁员为仲裁庭的仲裁员。本案由白贵勇仲裁员成立仲裁庭进行审理。,事实和理由:(一)申请人的仲裁请求及事实和理由,申请人:债务纠纷";
84
-        String[] fields = input.split(",");
85
-        JSONObject jsonObject = new JSONObject(); // 创建一个空的JSON对象
86
-        for (String field : fields) {
87
-            // 对于每个字段,再按冒号分隔符拆分出键和值
88
-            String[] keyValue = field.split(":");
89
-            if (keyValue.length == 2) { // 对于合法的键值对,将其添加到JSON对象中
90
-                jsonObject.put(keyValue[0], keyValue[1]);
91
-            }
84
+    public static String pdfConvertBase64(String pathUrl){
85
+        try {
86
+            File file = new File(pathUrl);
87
+            FileInputStream fileInputStream = new FileInputStream(file);
88
+            byte[] fileBytes = new byte[(int) file.length()];
89
+            fileInputStream.read(fileBytes);
90
+            fileInputStream.close();
91
+            // 将字节数组转换为Base64值
92
+            return Base64.getEncoder().encodeToString(fileBytes);
93
+        } catch (IOException e) {
94
+            e.printStackTrace();
92 95
         }
93
-        System.out.println(jsonObject.toString());
96
+        return null;
94 97
     }
98
+
95 99
 }

+ 57
- 15
ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/utils/Tset.java 查看文件

@@ -19,8 +19,7 @@ import org.json.JSONObject;
19 19
 
20 20
 
21 21
 import java.io.*;
22
-import java.util.ArrayList;
23
-import java.util.List;
22
+import java.util.*;
24 23
 
25 24
 public class Tset {
26 25
     public static void main(String[] args) {
@@ -29,10 +28,15 @@ public class Tset {
29 28
         //API的SecretKey
30 29
          final String SECRET_KEY = "QjphKo8zkHZigT8j9PVtFPJyfIvO3d6V";
31 30
 
32
-        String pdfFilePath = "http://121.40.189.20:8000/API/uploadPath/upload/1.pdf";
33
-       // String pdfFilePath = "http://121.40.189.20:9000/API/uploadPath/upload/2023/11/14/ca2ca4697e5449ff9b9d23f95b221f58.pdf";
34
-
31
+       // String pdfFilePath = "http://121.40.189.20:9000/API/uploadPath/upload/ca2ca4697e5449ff9b9d23f95b221f58.pdf";
32
+      // String pdfFilePath = "http://121.40.189.20:9000/API/uploadPath/upload/2023/11/14/ca2ca4697e5449ff9b9d23f95b221f58.pdf";
33
+        String pdfFilePath ="D:/home/unzip/b92a7291-441e-4fad-95b4-7305f206eabd/仲裁材料/二、案件基本材料/2-1 仲裁申请书.pdf";
35 34
         try{
35
+            // 读取文件内容到字节数组
36
+            byte[] fileBytes = readFileToBytes(pdfFilePath);
37
+            // 将字节数组转换为Base64值
38
+            String base64String = encodeBytesToBase64(fileBytes);
39
+
36 40
             // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
37 41
             // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
38 42
             // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
@@ -47,22 +51,23 @@ public class Tset {
47 51
             OcrClient client = new OcrClient(cred, "ap-beijing", clientProfile);
48 52
             // 实例化一个请求对象,每个接口都会对应一个request对象
49 53
             SmartStructuralOCRV2Request req = new SmartStructuralOCRV2Request();
50
-            req.setImageUrl(pdfFilePath);
54
+            req.setImageBase64(base64String);
51 55
             req.setIsPdf(true);
52 56
             req.setPdfPageNumber(1L);
53
-            String[] itemNames1 = {"申请人", "住所"};
57
+            String[] itemNames1 = {"申请人", "统一社会信用代码", "负责人", "住所", "联系地址"
58
+                    , "委托代理人", "联系电话", "电子邮件", "被申请人", "居民身份证号码", "仲裁请求", "事实和理由"};
54 59
             req.setItemNames(itemNames1);
55 60
             // 返回的resp是一个SmartStructuralOCRV2Response的实例,与请求对象对应
56 61
             SmartStructuralOCRV2Response resp = client.SmartStructuralOCRV2(req);
57
-            // 输出json格式的字符串回包
58
-            System.out.println(SmartStructuralOCRV2Response.toJsonString(resp));
62
+
63
+
59 64
             //解析数据
60 65
             String s = SmartStructuralOCRV2Response.toJsonString(resp);
61 66
             // 解析JSON数据
62 67
             JSONObject jsonObject = new JSONObject(s);
63 68
             JSONArray structuralList = jsonObject.getJSONArray("StructuralList");
64 69
             // 遍历StructuralList中的Groups,获取Key对应的AutoName和Value对应的AutoContent
65
-            List<String> strings = new ArrayList<>();
70
+            StringBuilder stringBuilder = new StringBuilder(); // 创建一个StringBuilder对象
66 71
             for (int i = 0; i < structuralList.length(); i++) {
67 72
                 JSONArray groups = structuralList.getJSONObject(i).getJSONArray("Groups");
68 73
                 for (int j = 0; j < groups.length(); j++) {
@@ -73,16 +78,53 @@ public class Tset {
73 78
                         JSONObject value = line.getJSONObject("Value");
74 79
                         String autoName = key.getString("AutoName");
75 80
                         String autoContent = value.getString("AutoContent");
76
-                        String  text = autoName +":"+ autoContent;
77
-                        strings.add(text);
81
+                        String text = autoName + ":" + autoContent;
82
+                        if (stringBuilder.length() > 0) {
83
+                            stringBuilder.append(","); // 在已有内容的情况下添加逗号分隔符
84
+                        }
85
+                        stringBuilder.append(text); // 拼接当前的字符串
78 86
                     }
79 87
                 }
80 88
             }
81
-            System.out.println(strings);
82
-
83
-        } catch (TencentCloudSDKException e) {
89
+            System.out.println("stringBuilder======"+stringBuilder.toString());
90
+            // 将字符串按逗号分隔符切割
91
+            String[] fields = stringBuilder.toString().split(",");
92
+            Map<String, List<String>> map = new HashMap<>();
93
+            for (String field : fields) {
94
+                // 对于每个字段,再按冒号分隔符拆分出键和值
95
+                String[] keyValue = field.split(":");
96
+                if (keyValue.length == 2) { // 对于合法的键值对,将其添加到JSON对象中
97
+                    String key = keyValue[0];
98
+                    String value = keyValue[1];
99
+                    // 判断Map中是否已存在该键
100
+                    if (map.containsKey(key)) {
101
+                        // 如果已存在,获取该键对应的值,并将新的值添加到集合中
102
+                        List<String> values = map.get(key);
103
+                        values.add(value);
104
+                    } else {
105
+                        // 如果不存在,创建一个新的集合,并将值添加到集合中
106
+                        List<String> values = new ArrayList<>();
107
+                        values.add(value);
108
+                        map.put(key, values);
109
+                    }
110
+                }
111
+            }
112
+            System.out.println(map);
113
+        } catch (Exception e) {
84 114
             System.out.println(e.toString());
85 115
         }
86 116
 
87 117
     }
118
+    private static byte[] readFileToBytes(String filePath) throws IOException {
119
+        File file = new File(filePath);
120
+        FileInputStream fileInputStream = new FileInputStream(file);
121
+        byte[] fileBytes = new byte[(int) file.length()];
122
+        fileInputStream.read(fileBytes);
123
+        fileInputStream.close();
124
+        return fileBytes;
125
+    }
126
+
127
+    private static String encodeBytesToBase64(byte[] bytes) {
128
+        return Base64.getEncoder().encodeToString(bytes);
129
+    }
88 130
 }