|
@@ -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());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|