Forráskód Böngészése

电签检查方法偏移参数调整

lvy 4 hete
szülő
commit
a58223d3ba

+ 235 - 0
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/ScrDataServiceImpl.java

@@ -391,4 +391,239 @@ public class ScrDataServiceImpl implements ScrDataService {
         return maps;
     }
 
+    public void sctTaskBatch3(ScrSignInfoVO taskApp) throws Exception {
+        int threshold = 5;
+
+        String fileUrl = CommonUtil.replaceOssUrl(taskApp.getEVisaPdfUrl());
+        String pdfUrl = taskApp.getEVisaPdfUrl();
+        InputStream inputStream = CommonUtil.getOSSInputStream(fileUrl);
+        InputStream inputStream2 = CommonUtil.getOSSInputStream(fileUrl);
+        //转换
+        byte[] pdfData = CommonUtil.InputStreamToBytes(inputStream);
+
+        try (PDDocument document = PDDocument.load(inputStream2);) {
+            SignKeyVO pdfSignIds = PdfAddimgUtil.getPdfSignIds(pdfUrl);
+            List<String> positions = pdfSignIds.getEVisaConfigList();
+            Map<String, String> dataMap = pdfSignIds.getDataMap();
+
+            List<String> sucessUser = new ArrayList<>();
+            List<String> sucessCompan = new ArrayList<>();
+            String ids = String.join(",", positions);
+            ids = ids.replaceAll("✹", "");
+            String remarkType = taskApp.getRemarkType();
+            List<Map<String, Object>> strategyListByDFZX = new ArrayList<>();
+            if (remarkType.equals("1")) {
+                strategyListByDFZX = getStrategyListByAXQ(taskApp, ids);
+            } else if (remarkType.equals("2") || remarkType.equals("3")) {
+                strategyListByDFZX = getStrategyListByDFZX(taskApp, ids);
+            }
+
+            if (strategyListByDFZX == null || strategyListByDFZX.size() == 0) {
+
+                String sql2 = "UPDATE u_information_query set chek_status=10 where id='" + taskApp.getId() + "'";
+                jdbcTemplate.execute(sql2);
+
+                RedisTemplate.delete("chek-" + taskApp.getId());
+                System.out.println(taskApp.getProcessInstanceId() + "-" + "总共:");
+                return;
+            }
+
+            positions = strategyListByDFZX.stream().map(map -> map.get("keyWord").toString()).collect(Collectors.toList());
+            String keyWord = String.join(",", positions);
+            List<PDFIndexInfo> pdfIndexInfo = PdfAddimgUtil.findKeywordPostions(pdfData, keyWord);
+
+            //根据id分组
+            List<Map<String, Object>> list2 = strategyListByDFZX.stream().collect(
+                    Collectors.collectingAndThen(
+                            Collectors.toCollection(
+                                    () -> new TreeSet<>(Comparator.comparing(m -> m.get("keyWord").toString()))
+                            ), ArrayList::new
+                    )
+            );
+
+            Map<String, List<Map<String, Object>>> newMap = list2.stream().collect(Collectors.groupingBy(b -> Func.toStr(b.get("keyWord"))));
+
+            Map<String, List<PDFIndexInfo>> groupBy = pdfIndexInfo.stream().collect(Collectors.groupingBy(da -> Func.toStr(da.getDataInfo()[0])));
+            for (int i = 0; i < document.getPages().getCount(); i++) {
+                PDPage page = document.getPage(i);
+                List<PDAnnotation> annotations = page.getAnnotations();
+                for (PDAnnotation annotation : annotations) {
+                    if (annotation instanceof PDAnnotationWidget) {
+                        PDRectangle rect = annotation.getRectangle();
+
+                        float imgW = rect.getWidth();
+                        float imgH = rect.getHeight();
+                        float imgX = rect.getLowerLeftX() + imgW / 2;
+                        float imgY = rect.getLowerLeftY() + imgH / 2;
+                        List<PDFIndexInfo> pdfIndexInfos = groupBy.get((i + 1) + ".0");
+                        if (pdfIndexInfos != null && pdfIndexInfos.size() > 0) {
+                            for (PDFIndexInfo pdfInfo : pdfIndexInfos) {
+                                String pkeyid = pdfInfo.getPkeyid();
+
+                                float[] dataInfo = pdfInfo.getDataInfo();
+
+                                float keyX = dataInfo[1];
+                                float keyY = dataInfo[2];
+                                float pageHeight = page.getMediaBox().getHeight();
+                                float pageWidth = page.getMediaBox().getWidth();
+
+                                float keyw = keyX * pageWidth;
+                                float keyh = pageHeight - keyY * pageHeight;
+
+                                List<Map<String, Object>> mapList = newMap.get(pkeyid);
+                                String keyData = dataMap.get(pkeyid);
+                                String type = "";
+                                if (mapList != null && mapList.size() >= 0) {
+                                    Map<String, Object> map = mapList.get(0);
+                                    Float pyzbx = Func.toFloat(map.get("pyzbx"));
+                                    Float pyzby = Func.toFloat(map.get("pyzby"));
+                                    type = map.get("type") + "";
+                                    if (taskApp.getRemarkType().equals("3")) { //东方中讯
+                                        if (type.equals("1")) { //个人签字
+                                            keyw = keyw + pyzbx + 10;
+                                            keyh = keyh + pyzby;
+                                            if (keyData.contains(pkeyid + "\r")) {
+                                                if (imgX - keyw >= 30 && imgX - keyw <= 35) {
+                                                    keyw += 30;
+                                                } else if (imgX - keyw >= -35 && imgX - keyw <= -30) {
+                                                    keyw = keyw - 30;
+                                                }
+                                            } else {
+                                                if (pyzbx != 0 && Math.abs(imgX - (keyw - pyzbx)) <= 5) {
+                                                    keyw = keyw - pyzbx;
+                                                }
+                                                if (keyData.contains("*✹") || keyData.contains("||")) {
+                                                    if (keyData.contains("\r") && !keyData.contains(pkeyid + "\r")) {
+                                                        keyw = keyw - 30;
+                                                    }
+                                                    if (Math.abs(keyh - imgY) <= 2) {
+                                                        if (keyw - imgX >= -10 && keyw - imgX <= -5) {
+                                                            keyw += 10;
+                                                        } else if (keyw - imgX <= 10 && keyw - imgX >= 5) {
+                                                            keyw -= 10;
+                                                        }
+                                                    }
+                                                }
+                                            }
+
+                                        } else if (type.equals("2")) {
+                                            keyw = keyw + pyzbx - 21;
+                                            keyh = keyh + pyzby - 16;
+                                            if (keyData.contains(pkeyid + "\r")) {
+                                                keyw = keyw + 10;
+                                            } else if (keyData.contains("\r") && keyData.contains("*✹")) {
+                                                keyw = keyw - 20;
+                                            }
+                                            if (keyData.contains("||")) {
+                                                keyw = keyw + 10;
+                                            }
+                                        }
+                                    } else if (taskApp.getRemarkType().equals("2")) { //东方中讯
+                                        if (imgH >= 100) { // 签章 120 120
+                                            keyw = keyw + pyzbx - 21;
+                                            keyh = keyh + pyzby - 15;
+                                            if (keyData.indexOf("||") > 0) {
+                                                int index = keyData.length() - keyData.indexOf(pkeyid) - pkeyid.length();
+                                                if (index > 0) {
+                                                    keyw = (float) (keyw + (keyData.indexOf(pkeyid) / 42) * 10.5);
+                                                } else if (index < 0) {
+                                                    keyw = (float) (keyw - (keyData.indexOf(pkeyid) / 42) * 9.5);
+                                                }
+                                                if (Math.abs(keyh - imgY) <= 3) {
+                                                    if (keyw - imgX >= -10 && keyw - imgX <= -5) {
+                                                        keyw += 10;
+                                                    } else if (keyw - imgX <= 10 && keyw - imgX >= 5) {
+                                                        keyw -= 10;
+                                                    }
+                                                }
+                                            }
+                                        } else {
+                                            //个人签字
+                                            keyw = keyw + pyzbx + 10;
+                                            keyh = keyh + pyzby;
+                                            if (keyData.indexOf("||") > 0) {
+                                                keyw += 10;
+                                                if (keyData.length() / 19 >= 4) {
+                                                    keyw += 10;
+                                                }
+                                                if (keyData.contains(pkeyid + "\r")) {
+                                                    keyw -= 10;
+                                                }
+                                            }
+                                            if (Math.abs(keyh - imgY) <= 2) {
+                                                if (keyw - imgX >= -11 && keyw - imgX <= -5) {
+                                                    keyw += 10;
+                                                } else if (keyw - imgX <= 11 && keyw - imgX >= 5) {
+                                                    keyw -= 10;
+                                                }
+                                            }
+                                        }
+                                    } else {
+                                        keyw = keyw + pyzbx + 5;
+                                        keyh = keyh + pyzby;
+                                    }
+                                }
+                                if (pkeyid.length() < 19) {
+                                    keyw = keyw - (float) (10 - pkeyid.length() / 2.0);
+                                }
+//                                System.out.println("page = " + (i + 1) + ", type = " + type + ", keyid = " + pkeyid + ", imgX : " + imgX + ", keyw : " + keyw + ", imgY : "
+//                                        + imgY + ", keyh : " + keyh + ", keyword =" + keyData.replace("\r", "\\r") + ", remarkType = " + taskApp.getRemarkType());
+                                if (Math.abs(imgX - keyw) <= threshold && Math.abs(imgY - keyh) <= threshold) {
+                                    if (type.equals("1")) { //个人
+                                        sucessUser.add(pkeyid);
+                                    }
+                                    if (type.equals("2")) { //企业章
+                                        sucessCompan.add(pkeyid);
+                                    }
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            boolean isSign = true;
+            //判断章是否签完
+            List<String> companList = strategyListByDFZX.stream().filter(item -> item.get("type").equals("2")).map(map -> map.get("keyWord").toString()).collect(Collectors.toList());
+            if (!companList.isEmpty()) {
+                Set<String> differentElements = new HashSet<>(companList);
+                sucessCompan.forEach(differentElements::remove);
+                if (!differentElements.isEmpty()) {
+                    isSign = false;
+                    StringBuilder sb = new StringBuilder();
+                    sb.append("id = ").append(taskApp.getId()).append(", 章总共:").append(companList.size()).append(", 剩下:").append(differentElements.size());
+                    for (String element : differentElements) {
+                        sb.append(", ").append(element);
+                    }
+                    System.err.println(sb);
+                }
+            }
+
+            boolean isSign1 = true;
+            //判断个人是否签完
+            List<String> userList = strategyListByDFZX.stream().filter(item -> item.get("type").equals("1")).map(map -> map.get("keyWord").toString()).collect(Collectors.toList());
+            if (!userList.isEmpty()) {
+                Set<String> differentElements = new HashSet<>(userList);
+                sucessUser.forEach(differentElements::remove);
+                if (!differentElements.isEmpty()) {
+                    isSign1 = false;
+                    StringBuilder sb = new StringBuilder();
+                    sb.append("id = ").append(taskApp.getId()).append(", 人总共:").append(userList.size()).append(", 剩下:").append(differentElements.size());
+                    for (String element : differentElements) {
+                        sb.append(", ").append(element);
+                    }
+                    System.err.println(sb);
+                }
+            }
+            if (isSign && isSign1) {
+                String sql2 = "UPDATE u_information_query set chek_status=2 where id='" + taskApp.getId() + "'";
+                jdbcTemplate.execute(sql2);
+            } else {
+                String sql2 = "UPDATE u_information_query set chek_status=3 where id='" + taskApp.getId() + "'";
+                jdbcTemplate.execute(sql2);
+            }
+            RedisTemplate.delete("chek-" + taskApp.getId());
+        }
+    }
 }