Explorar el Código

Merge branch 'dev' of http://219.151.181.73:3000/zhuwei/bladex into dev

lvy hace 3 meses
padre
commit
ccd7038514
Se han modificado 34 ficheros con 1406 adiciones y 793 borrados
  1. 1 0
      blade-common/pom.xml
  2. 1 1
      blade-common/src/main/java/org/springblade/common/utils/AsyncConfigurer.java
  3. 4 4
      blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  4. 1 1
      blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/IOSSClient.java
  5. 4 1
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AmazonS3OssBuilder.java
  6. 1 0
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
  7. 528 0
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/ossre/S3Template2.java
  8. 6 3
      blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/LargeFileEndpoint.java
  9. 3 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ScrSignInfoVO.java
  10. 7 1
      blade-service/blade-business/pom.xml
  11. 438 0
      blade-service/blade-business/src/main/java/org/springblade/business/chekPdf/PdfAddimgUtil.java
  12. 152 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/ChekSignData.java
  13. 4 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  14. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  15. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java
  16. 3 3
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  17. 32 0
      blade-service/blade-e-visa/pom.xml
  18. 151 0
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/Chek.java
  19. 3 8
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/ChekSignData.java
  20. 4 5
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVController.java
  21. 0 227
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVisaController.java
  22. 0 203
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVisaController2.java
  23. 0 130
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVisaController4.java
  24. 0 150
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/synDataController.java
  25. 12 10
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVDataServiceImpl.java
  26. 5 10
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java
  27. 15 4
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/ScrDataServiceImpl.java
  28. 1 1
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/FileUtils.java
  29. 11 7
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/PDFUtils.java
  30. 2 2
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/SignFtpUtil.java
  31. 8 3
      blade-service/blade-manager/pom.xml
  32. 1 15
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  33. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/SignPfxFilePreServiceImpl.java
  34. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/utils/FileUtils.java

+ 1 - 0
blade-common/pom.xml

@@ -75,6 +75,7 @@
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <configuration>
+                    <fork>true</fork>
                     <skip>true</skip>
                     <finalName>${project.name}</finalName>
                 </configuration>

+ 1 - 1
blade-common/src/main/java/org/springblade/common/utils/AsyncConfigurer.java

@@ -15,7 +15,7 @@ public class AsyncConfigurer {
     /**
      * cpu 核心数量
      */
-    public static final int cpuNum = 1 ;//Runtime.getRuntime().availableProcessors();
+    public static final int cpuNum = 5 ;//Runtime.getRuntime().availableProcessors();
 
     /**
      * 线程池配置

+ 4 - 4
blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java

@@ -576,9 +576,9 @@ public class CommonUtil {
         String formatName = "JPEG";
         ByteArrayInputStream bais = new ByteArrayInputStream(imageData);
         BufferedImage originalImage = ImageIO.read(bais);
-        long sizeLimit = 1024*1024*5; //5M
-        int width = 768;
-        int height = 1024;
+        long sizeLimit = 1024*1024*5; //5M 1920 ×1080
+        int width = 1080;
+        int height = 1920;
         Image scaledImage = originalImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
         BufferedImage resizedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
         resizedImage.getGraphics().drawImage(scaledImage, 0, 0, null);
@@ -612,7 +612,7 @@ public class CommonUtil {
 
             ImageWriteParam writeParam = writer.getDefaultWriteParam();
             writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
-            writeParam.setCompressionQuality(quality);
+            writeParam.setCompressionQuality(1);
 
             writer.setOutput(ImageIO.createImageOutputStream(baos));
             writer.write(null, new IIOImage(compressedImage, null, null), writeParam);

+ 1 - 1
blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/IOSSClient.java

@@ -48,7 +48,7 @@ public interface IOSSClient {
      * @return R
      */
     @PostMapping(value = SEND_MESSAGE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
-    R<BladeFile> addFileInfo(@RequestPart MultipartFile file);
+    R<BladeFile> addFileInfo(@RequestPart("file") MultipartFile file);
 
     /**
      * // 根据文件路径,获取当前路径下所有文件的大小

+ 4 - 1
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AmazonS3OssBuilder.java

@@ -31,6 +31,7 @@ import org.springblade.core.oss.S3Template;
 import org.springblade.core.oss.props.OssProperties;
 import org.springblade.core.oss.rule.OssRule;
 import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.resource.builder.ossre.S3Template2;
 import org.springblade.resource.entity.Oss;
 
 /**
@@ -62,7 +63,9 @@ public class AmazonS3OssBuilder {
 			.withClientConfiguration(clientConfiguration)
 			.withCredentials(new AWSStaticCredentialsProvider(credentials))
 			.build();
-		return new S3Template(amazonS3, ossRule, ossProperties);
+
+
+		return new S3Template2(amazonS3, ossRule, ossProperties);
 
 	}
 

+ 1 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java

@@ -98,6 +98,7 @@ public class OssBuilder {
                 oss.setEndpoint("https://xinan1.zos.ctyun.cn");
             }
         }
+		System.out.println("oss111="+oss.getEndpoint());
 		Oss ossCached = ossPool.get(tenantId);
 		OssTemplate template = templatePool.get(tenantId);
 		// 若为空或者不一致,则重新加载

+ 528 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/ossre/S3Template2.java

@@ -0,0 +1,528 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.resource.builder.ossre;
+
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.model.*;
+import lombok.AllArgsConstructor;
+import lombok.SneakyThrows;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.enums.PolicyType;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.oss.model.OssFile;
+import org.springblade.core.oss.props.OssProperties;
+import org.springblade.core.oss.rule.OssRule;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * S3Template
+ *
+ * @author fanjia2
+ * @version 1.0.0
+ * @ClassName S3Template.java
+ * @Description Aws {@link S3Template2 的代码实现}
+ * @createTime 2022年07月04日 11:17:00
+ */
+@AllArgsConstructor
+public class S3Template2 implements OssTemplate {
+
+
+	/**
+	 * S3客户端
+	 */
+	private final AmazonS3 client;
+
+	/**
+	 * 存储桶命名规则
+	 */
+	private final OssRule ossRule;
+
+	/**
+	 * 配置类
+	 */
+	private final OssProperties ossProperties;
+
+	/**
+	 * 创建 存储桶
+	 *
+	 * @param bucketName 存储桶名称
+	 */
+	@Override
+	public void makeBucket(String bucketName) {
+		if (
+			!client.doesBucketExistV2(
+				getBucketName(bucketName)
+			)
+		) {
+			client.createBucket(
+				getBucketName(bucketName));
+			client.setBucketPolicy(new SetBucketPolicyRequest(getBucketName(bucketName), getPolicyType(getBucketName(bucketName), PolicyType.READ)));
+		}
+	}
+
+	@SneakyThrows
+	public Bucket getBucket() {
+		return getBucket(getBucketName());
+	}
+
+	@SneakyThrows
+	public Bucket getBucket(String bucketName) {
+		Optional<Bucket> bucketOptional = client.listBuckets().stream().filter(bucket -> bucket.getName().equals(getBucketName(bucketName))).findFirst();
+		return bucketOptional.orElse(null);
+	}
+
+	@SneakyThrows
+	public List<Bucket> listBuckets() {
+		return client.listBuckets();
+	}
+
+	/**
+	 * 删除 存储桶
+	 *
+	 * @param bucketName 存储桶名称
+	 */
+	@Override
+	public void removeBucket(String bucketName) {
+		client.deleteBucket(new DeleteBucketRequest(getBucketName(bucketName)));
+	}
+
+	/**
+	 * 存储桶是否存在
+	 *
+	 * @param bucketName 存储桶名称
+	 * @return boolean
+	 */
+	@Override
+	public boolean bucketExists(String bucketName) {
+		return client.doesBucketExistV2(
+			getBucketName(bucketName));
+	}
+
+	/**
+	 * 拷贝文件
+	 *
+	 * @param bucketName     存储桶名称
+	 * @param fileName       存储桶文件名称
+	 * @param destBucketName 目标存储桶名称
+	 */
+	@Override
+	public void copyFile(String bucketName, String fileName, String destBucketName) {
+		copyFile(bucketName, fileName, destBucketName, fileName);
+
+	}
+
+	/**
+	 * 拷贝文件
+	 *
+	 * @param bucketName     存储桶名称
+	 * @param fileName       存储桶文件名称
+	 * @param destBucketName 目标存储桶名称
+	 * @param destFileName   目标存储桶文件名称
+	 */
+	@Override
+	public void copyFile(String bucketName, String fileName, String destBucketName, String destFileName) {
+
+		client.copyObject(new CopyObjectRequest(getBucketName(bucketName), fileName, getBucketName(destBucketName), destFileName));
+
+	}
+
+	/**
+	 * 获取文件信息
+	 *
+	 * @param fileName 存储桶文件名称
+	 * @return InputStream
+	 */
+	@Override
+	public OssFile statFile(String fileName) {
+		return statFile(ossProperties.getBucketName(), fileName);
+	}
+
+	/**
+	 * 获取文件信息
+	 *
+	 * @param bucketName 存储桶名称
+	 * @param fileName   存储桶文件名称
+	 * @return InputStream
+	 */
+	@Override
+	public OssFile statFile(String bucketName, String fileName) {
+		S3Object stat = client.getObject(new GetObjectRequest(getBucketName(bucketName), fileName));
+		OssFile ossFile = new OssFile();
+		ossFile.setName(Func.isEmpty(stat.getKey()) ? fileName : stat.getKey());
+		ossFile.setLink(fileLink(ossFile.getName()));
+		ossFile.setHash(String.valueOf(stat.hashCode()));
+		ossFile.setLength(stat.getObjectMetadata().getContentLength());
+		ossFile.setPutTime(stat.getObjectMetadata().getLastModified());
+		ossFile.setContentType(stat.getObjectMetadata().getContentType());
+		return ossFile;
+	}
+
+	/**
+	 * 获取文件信息
+	 *
+	 * @param fileName 存储桶文件名称
+	 * @return InputStream
+	 */
+	@Override
+	public InputStream statFileStream(String fileName) {
+		return statFileStream(getBucketName(), fileName);
+	}
+
+	/**
+	 * 获取文件信息
+	 *
+	 * @param bucketName 存储桶名称
+	 * @param fileName   存储桶文件名称
+	 * @return InputStream
+	 */
+	@Override
+	public InputStream statFileStream(String bucketName, String fileName) {
+		return client.getObject(new GetObjectRequest(getBucketName(bucketName), fileName)).getObjectContent();
+	}
+
+	/**
+	 * 获取文件相对路径
+	 *
+	 * @param fileName 存储桶对象名称
+	 * @return String
+	 */
+	@Override
+	public String filePath(String fileName) {
+		return getBucketName().concat(StringPool.SLASH).concat(fileName);
+	}
+
+	/**
+	 * 获取文件相对路径
+	 *
+	 * @param bucketName 存储桶名称
+	 * @param fileName   存储桶对象名称
+	 * @return String
+	 */
+	@Override
+	public String filePath(String bucketName, String fileName) {
+		return getBucketName(bucketName).concat(StringPool.SLASH).concat(fileName);
+	}
+
+	/**
+	 * 获取文件地址
+	 *
+	 * @param fileName 存储桶对象名称
+	 * @return String
+	 */
+	@Override
+	@SneakyThrows
+	public String fileLink(String fileName) {
+		String url = ossProperties.getEndpoint().concat(StringPool.SLASH).concat(getBucketName()).concat(StringPool.SLASH).concat(fileName);
+		if(url.indexOf("100.86.2.1:80/blade-oss-chongqing/")>=0){
+			url = url.replace("http://100.86.2.1:80/blade-oss-chongqing/","https://xinan1.zos.ctyun.cn/blade-oss-chongqing/");
+			System.out.println("123123123==2==转化结束");
+		}
+		return url;
+	}
+
+	/**
+	 * 获取文件地址
+	 *
+	 * @param bucketName 存储桶名称
+	 * @param fileName   存储桶对象名称
+	 * @return String
+	 */
+	@Override
+	@SneakyThrows
+	public String fileLink(String bucketName, String fileName) {
+		String url = ossProperties.getEndpoint().concat(StringPool.SLASH).concat(getBucketName(bucketName)).concat(StringPool.SLASH).concat(fileName);
+		if(url.indexOf("100.86.2.1:80/blade-oss-chongqing/")>=0){
+			url = url.replace("http://100.86.2.1:80/blade-oss-chongqing/","https://xinan1.zos.ctyun.cn/blade-oss-chongqing/");
+			System.out.println("123123123==1==转化结束");
+		}
+		return url;
+	}
+
+	/**
+	 * 上传文件
+	 *
+	 * @param file 上传文件类
+	 * @return BladeFile
+	 */
+	@Override
+	@SneakyThrows
+	public BladeFile putFile(MultipartFile file) {
+		return putFile(ossProperties.getBucketName(), file.getOriginalFilename(), file);
+	}
+
+	/**
+	 * 上传文件
+	 *
+	 * @param fileName 上传文件名
+	 * @param file     上传文件类
+	 * @return BladeFile
+	 */
+	@Override
+	@SneakyThrows
+	public BladeFile putFile(String fileName, MultipartFile file) {
+		return putFile(ossProperties.getBucketName(), fileName, file);
+	}
+
+	/**
+	 * 上传文件
+	 *
+	 * @param bucketName 存储桶名称
+	 * @param fileName   上传文件名
+	 * @param file       上传文件类
+	 * @return BladeFile
+	 */
+	@Override
+	@SneakyThrows
+	public BladeFile putFile(String bucketName, String fileName, MultipartFile file) {
+		return putFile(bucketName, file.getOriginalFilename(), file.getInputStream());
+	}
+
+	/**
+	 * 上传文件
+	 *
+	 * @param fileName 存储桶对象名称
+	 * @param stream   文件流
+	 * @return BladeFile
+	 */
+	@Override
+	public BladeFile putFile(String fileName, InputStream stream) {
+		return putFile(ossProperties.getBucketName(), fileName, stream);
+	}
+
+	/**
+	 * 上传文件
+	 *
+	 * @param bucketName 存储桶名称
+	 * @param fileName   存储桶对象名称
+	 * @param stream     文件流
+	 * @return BladeFile
+	 */
+	@Override
+	public BladeFile putFile(String bucketName, String fileName, InputStream stream) {
+		return putFile(bucketName, fileName, stream, "application/octet-stream");
+
+	}
+
+	@SneakyThrows
+	public BladeFile putFile(String bucketName, String fileName, InputStream stream, String contentType) {
+		makeBucket(bucketName);
+		String originalName = fileName;
+		ObjectMetadata objectMetadata = new ObjectMetadata();
+		objectMetadata.setContentType(contentType);
+		fileName = getFileName(fileName);
+		PutObjectRequest putObst = new PutObjectRequest(getBucketName(bucketName), fileName, stream, objectMetadata);
+
+		putObst.setCannedAcl(CannedAccessControlList.PublicReadWrite);
+		putObst.getRequestClientOptions().setReadLimit(1024 * 1024 * 1000);
+
+		client.putObject(putObst);
+		BladeFile file = new BladeFile();
+		file.setOriginalName(originalName);
+		file.setName(fileName);
+		file.setDomain(getOssHost(bucketName));
+		file.setLink(fileLink(bucketName, fileName));
+		return file;
+	}
+
+	/**
+	 * 删除文件
+	 *
+	 * @param fileName 存储桶对象名称
+	 */
+	@Override
+	public void removeFile(String fileName) {
+
+		removeFile(ossProperties.getBucketName(), fileName);
+	}
+
+	/**
+	 * 删除文件
+	 *
+	 * @param bucketName 存储桶名称
+	 * @param fileName   存储桶对象名称
+	 */
+	@Override
+	public void removeFile(String bucketName, String fileName) {
+		client.deleteObject(bucketName, fileName);
+	}
+
+	/**
+	 * 批量删除文件
+	 *
+	 * @param fileNames 存储桶对象名称集合
+	 */
+	@Override
+	public void removeFiles(List<String> fileNames) {
+
+		removeFiles(ossProperties.getBucketName(), fileNames);
+	}
+
+	/**
+	 * 批量删除文件
+	 *
+	 * @param bucketName 存储桶名称
+	 * @param fileNames  存储桶对象名称集合
+	 */
+	@Override
+	public void removeFiles(String bucketName, List<String> fileNames) {
+		List<DeleteObjectsRequest.KeyVersion> keyVersions = fileNames.stream().map(DeleteObjectsRequest.KeyVersion::new).collect(Collectors.toList());
+		DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(getBucketName());
+		client.deleteObjects(deleteObjectsRequest.withKeys(keyVersions));
+	}
+
+	/**
+	 * 根据规则生成存储桶名称规则
+	 *
+	 * @return String
+	 */
+	private String getBucketName() {
+		return getBucketName(ossProperties.getBucketName());
+	}
+
+	/**
+	 * 根据规则生成存储桶名称规则
+	 *
+	 * @param bucketName 存储桶名称
+	 * @return String
+	 */
+	private String getBucketName(String bucketName) {
+		return ossRule.bucketName(bucketName);
+	}
+
+	/**
+	 * 根据规则生成文件名称规则
+	 *
+	 * @param originalFilename 原始文件名
+	 * @return string
+	 */
+	private String getFileName(String originalFilename) {
+		return ossRule.fileName(originalFilename);
+	}
+
+	/**
+	 * 获取存储桶策略
+	 *
+	 * @param bucketName 存储桶名称
+	 * @param policyType 策略枚举
+	 * @return String
+	 */
+	public static String getPolicyType(String bucketName, PolicyType policyType) {
+		StringBuilder builder = new StringBuilder();
+		builder.append("{\n");
+		builder.append("    \"Statement\": [\n");
+		builder.append("        {\n");
+		builder.append("            \"Action\": [\n");
+
+		switch (policyType) {
+			case WRITE:
+				builder.append("                \"s3:GetBucketLocation\",\n");
+				builder.append("                \"s3:ListBucketMultipartUploads\"\n");
+				break;
+			case READ_WRITE:
+				builder.append("                \"s3:GetBucketLocation\",\n");
+				builder.append("                \"s3:ListBucket\",\n");
+				builder.append("                \"s3:ListBucketMultipartUploads\"\n");
+				break;
+			default:
+				builder.append("                \"s3:GetBucketLocation\"\n");
+				break;
+		}
+
+		builder.append("            ],\n");
+		builder.append("            \"Effect\": \"Allow\",\n");
+		builder.append("            \"Principal\": \"*\",\n");
+		builder.append("            \"Resource\": \"arn:aws:s3:::");
+		builder.append(bucketName);
+		builder.append("\"\n");
+		builder.append("        },\n");
+		if (PolicyType.READ.equals(policyType)) {
+			builder.append("        {\n");
+			builder.append("            \"Action\": [\n");
+			builder.append("                \"s3:ListBucket\"\n");
+			builder.append("            ],\n");
+			builder.append("            \"Effect\": \"Deny\",\n");
+			builder.append("            \"Principal\": \"*\",\n");
+			builder.append("            \"Resource\": \"arn:aws:s3:::");
+			builder.append(bucketName);
+			builder.append("\"\n");
+			builder.append("        },\n");
+
+		}
+		builder.append("        {\n");
+		builder.append("            \"Action\": ");
+
+		switch (policyType) {
+			case WRITE:
+				builder.append("[\n");
+				builder.append("                \"s3:AbortMultipartUpload\",\n");
+				builder.append("                \"s3:DeleteObject\",\n");
+				builder.append("                \"s3:ListMultipartUploadParts\",\n");
+				builder.append("                \"s3:PutObject\"\n");
+				builder.append("            ],\n");
+				break;
+			case READ_WRITE:
+				builder.append("[\n");
+				builder.append("                \"s3:AbortMultipartUpload\",\n");
+				builder.append("                \"s3:DeleteObject\",\n");
+				builder.append("                \"s3:GetObject\",\n");
+				builder.append("                \"s3:ListMultipartUploadParts\",\n");
+				builder.append("                \"s3:PutObject\"\n");
+				builder.append("            ],\n");
+				break;
+			default:
+				builder.append("\"s3:GetObject\",\n");
+				break;
+		}
+
+		builder.append("            \"Effect\": \"Allow\",\n");
+		builder.append("            \"Principal\": \"*\",\n");
+		builder.append("            \"Resource\": \"arn:aws:s3:::");
+		builder.append(bucketName);
+		builder.append("/*\"\n");
+		builder.append("        }\n");
+		builder.append("    ],\n");
+		builder.append("    \"Version\": \"2012-10-17\"\n");
+		builder.append("}\n");
+		return builder.toString();
+	}
+
+	/**
+	 * 获取域名
+	 *
+	 * @param bucketName 存储桶名称
+	 * @return String
+	 */
+	public String getOssHost(String bucketName) {
+		return ossProperties.getEndpoint() + StringPool.SLASH + getBucketName(bucketName);
+	}
+
+	/**
+	 * 获取域名
+	 *
+	 * @return String
+	 */
+	public String getOssHost() {
+		return getOssHost(ossProperties.getBucketName());
+	}
+}

+ 6 - 3
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/LargeFileEndpoint.java

@@ -283,10 +283,10 @@ public class LargeFileEndpoint {
             BladeFile bladeFile = ossBuilder.template().putFile(param.getFilename(), inputStream);
 //            File file1 = new File(filePath + param.getFilename());
             File file1 = new File(path);
-            MultipartFile multipartFile = getMultipartFile(file1);
+
             if (param.getFilename().contains("pdf") || param.getFilename().contains("PDF")) {
                 try {
-                    PdfReader pdfReader = new PdfReader(multipartFile.getInputStream());
+                    PdfReader pdfReader = new PdfReader(inputStream);
                     int pages = pdfReader.getNumberOfPages();
                     //获取文件页数
                     newBladeFile.setPage(pages);
@@ -296,14 +296,17 @@ public class LargeFileEndpoint {
                 //pdf的路径就是文件上传的路径
                 newBladeFile.setPdfUrl(bladeFile.getLink());
             } else if (param.getFilename().contains("xlsx") || param.getFilename().contains("xls")) {
+                MultipartFile multipartFile = getMultipartFile(file1);
                 newBladeFile = this.commonFileClient.excelToPdf(multipartFile);
             } else if (param.getFilename().contains("docx")) {
+                MultipartFile multipartFile = getMultipartFile(file1);
                 newBladeFile = this.commonFileClient.wordToPdf(multipartFile);
             } else if (param.getFilename().contains("png") || param.getFilename().contains("jpg")) {
+                MultipartFile multipartFile = getMultipartFile(file1);
                 newBladeFile = this.commonFileClient.pngOrJpgToPdf(multipartFile);
             }
             BeanUtils.copyProperties(bladeFile, newBladeFile);
-            newBladeFile.setFileSize(multipartFile.getSize() / 1024);
+            newBladeFile.setFileSize(file1.length() / 1024);
             //删除本地文件
             file1.delete();
             iLargeFileService.updateLargeFileDeleted(param.getIdentifier());

+ 3 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ScrSignInfoVO.java

@@ -39,4 +39,7 @@ public class ScrSignInfoVO implements Serializable {
     @ApiModelProperty("电签状态 1待审批 2已审批 3废除")
     private String status;
 
+    @ApiModelProperty("电签状态 1待审批 2已审批 3废除")
+    private String taskId;
+
 }

+ 7 - 1
blade-service/blade-business/pom.xml

@@ -175,6 +175,12 @@
             <version>2.9.1.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>pdfbox</artifactId>
+            <version>2.0.24</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -188,7 +194,7 @@
                     <target>${java.version}</target>
                     <encoding>${project.build.sourceEncoding}</encoding>
                     <compilerArguments>
-                        <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar;${java.home}/lib/jsse.jar
+                        <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar:${java.home}/lib/jsse.jar
                         </bootclasspath>
                     </compilerArguments>
                 </configuration>

+ 438 - 0
blade-service/blade-business/src/main/java/org/springblade/business/chekPdf/PdfAddimgUtil.java

@@ -0,0 +1,438 @@
+package org.springblade.business.chekPdf;
+
+import com.itextpdf.text.BaseColor;
+import com.itextpdf.text.Element;
+import com.itextpdf.text.Image;
+import com.itextpdf.text.Rectangle;
+import com.itextpdf.text.pdf.*;
+import com.itextpdf.text.pdf.parser.*;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.text.PDFTextStripper;
+import org.springblade.common.constant.CommonConstant;
+import org.springblade.common.utils.CommonUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.evisa.vo.SignKeyVO;
+import org.springblade.manager.vo.PDFIndexInfo;
+import org.springblade.system.cache.ParamCache;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class PdfAddimgUtil {
+
+    public static void pdfAddImgInfo(String pdfUrl, List<Map<String, Object>> data) throws Exception {
+        File pdfFile = new File(pdfUrl);
+        byte[] pdfData = new byte[(int) pdfFile.length()];
+        FileInputStream inputStream = null;
+        try {
+            inputStream = new FileInputStream(pdfFile);
+            inputStream.read(pdfData);
+        } catch (IOException e) {
+            throw e;
+        } finally {
+            if (inputStream != null) {
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    inputStream.close();
+                }
+            }
+        }
+
+        String keyword = data.stream().map(map -> map.get("id")+"").collect(Collectors.joining(","));
+        //根据map中的key分组
+        Map<Object, List<Map<String, Object>>> map = data.stream().collect(Collectors.groupingBy(item -> item.get("id")));
+
+        List<PDFIndexInfo> positions = findKeywordPostions(pdfData, keyword);
+
+        System.out.println("total:" + positions.size());
+        if (positions != null && positions.size() > 0) {
+
+            for (int i = 0; i < positions.size(); i++) {
+                PDFIndexInfo pdfIndexInfo = positions.get(i);
+                float[] position = pdfIndexInfo.getDataInfo();
+                List<Map<String, Object>> textdictInfo= map.get(Func.toLong(pdfIndexInfo.getPkeyid()));
+                float pyzbx = 0;
+                float pyzby = 0;
+                String type ="2";
+                String signImg = "";
+                if(textdictInfo!=null){
+                    pyzbx = Func.toFloat(textdictInfo.get(0).get("pyzbx"));
+                    pyzby = Func.toFloat(textdictInfo.get(0).get("pyzby"));
+                    signImg = textdictInfo.get(0).get("signature_file_url")+"";
+                }
+                gaizhang(pdfFile, new File(pdfUrl), (int) position[0], position[1], position[2], signImg,pyzbx,pyzby,type);
+            }
+        }
+    }
+
+    public static void gaizhang(File src, File dest, int page, float x, float y, String imagePath,float pyzbx,float pyzby,String type) throws Exception {
+        // 读取模板文件
+        InputStream input = new FileInputStream(src);
+        PdfReader reader = new PdfReader(input);
+        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
+        Rectangle pageSize = reader.getPageSize(page);
+        float height = pageSize.getHeight();
+        float width = pageSize.getWidth();
+        if(type.equals("6")){
+            x = width * x - 27+pyzbx;
+            y = height - height * y - 30+pyzby;
+            imagePath = "/Users/hongchuangyanfa/Desktop/print/ht1234567890.png";
+        }else{
+            x = width * x - 33+pyzbx;
+            y = height - height * y - 12+pyzby;
+        }
+
+        // 读图片
+        Image image = Image.getInstance(imagePath);
+
+        // 获取操作的页面
+        PdfContentByte under = stamper.getOverContent(page);
+        // 添加图片
+
+        // 设置图片的新宽度和高度
+        float newWidth = 75f; // 新的宽度
+        float newHeight = image.getScaledHeight() * (newWidth / image.getScaledWidth()); // 根据宽度计算高度
+        image.scaleAbsolute(newWidth, newHeight); // 设置图片的新尺寸
+        //调整图片尺寸
+        image.setAbsolutePosition(x, y);
+        under.addImage(image);
+        // 假设的under.addImage方法,需要传入图片路径和大小参数
+        stamper.close();
+        reader.close();
+    }
+
+    /**
+     * 【功能描述:添加图片和文字水印】 【功能详细描述:功能详细描述】
+     *
+     * @param srcFile    待加水印文件
+     * @param destFile   加水印后存放地址
+     * @param text       加水印的文本内容
+     * @param textWidth  文字横坐标
+     * @param textHeight 文字纵坐标
+     * @throws Exception
+     */
+    public void addWaterMark(String srcFile, String destFile, String text,
+                             int textWidth, int textHeight) throws Exception {
+        // 待加水印的文件
+        PdfReader reader = new PdfReader(srcFile);
+        // 加完水印的文件
+        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
+                destFile));
+        int total = reader.getNumberOfPages() + 1;
+        PdfContentByte content;
+        // 设置字体
+        BaseFont font = BaseFont.createFont();
+        // 循环对每页插入水印
+        for (int i = 1; i < total; i++) {
+            // 水印的起始
+            content = stamper.getUnderContent(i);
+            // 开始
+            content.beginText();
+            // 设置颜色 默认为蓝色
+            content.setColorFill(BaseColor.BLUE);
+            // content.setColorFill(Color.GRAY);
+            // 设置字体及字号
+            content.setFontAndSize(font, 38);
+            // 设置起始位置
+            // content.setTextMatrix(400, 880);
+            content.setTextMatrix(textWidth, textHeight);
+            // 开始写入水印
+            content.showTextAligned(Element.ALIGN_LEFT, text, textWidth,
+                    textHeight, 45);
+            content.endText();
+        }
+        stamper.close();
+    }
+
+    /**
+     * findKeywordPostions
+     *
+     * @param pdfData
+     * @param keyword
+     * @return List<float [ ]> : float[0]:pageNum float[1]:x float[2]:y
+     * @throws IOException
+     */
+    public static List<PDFIndexInfo> findKeywordPostions(byte[] pdfData,
+                                                    String keyword) throws IOException {
+        List<PDFIndexInfo> result = new ArrayList<PDFIndexInfo>();
+        List<PdfPageContentPositions> pdfPageContentPositions = getPdfContentPostionsList(pdfData);
+
+        for (PdfPageContentPositions pdfPageContentPosition : pdfPageContentPositions) {
+            List<PDFIndexInfo> charPositions = findPositions(keyword,
+                    pdfPageContentPosition);
+            if (charPositions == null || charPositions.size() < 1) {
+                continue;
+            }
+            result.addAll(charPositions);
+        }
+        return result;
+    }
+
+
+    /**
+     * findKeywordPostions
+     *
+     * @param pdfData
+     * @return List<float [ ]> : float[0]:pageNum float[1]:x float[2]:y
+     * @throws IOException
+     */
+    public static List<PDFIndexInfo> findAllwordPostions(byte[] pdfData) throws IOException {
+        List<PDFIndexInfo> result = new ArrayList<PDFIndexInfo>();
+        List<PdfPageContentPositions> pdfPageContentPositions = getPdfContentPostionsList(pdfData);
+
+        for (PdfPageContentPositions pdfPageContentPosition : pdfPageContentPositions) {
+            PDFIndexInfo pdfIndexInfo = new PDFIndexInfo();
+            pdfIndexInfo.setListData(pdfPageContentPosition.getPositions());
+            pdfIndexInfo.setPkeyid(pdfPageContentPosition.getContent());
+            result.add(pdfIndexInfo);
+        }
+        return result;
+    }
+
+
+    static List<PdfPageContentPositions> getPdfContentPostionsList(
+            byte[] pdfData) throws IOException {
+        PdfReader reader = new PdfReader(pdfData);
+
+        List<PdfPageContentPositions> result = new ArrayList<PdfPageContentPositions>();
+
+        int pages = reader.getNumberOfPages();
+        for (int pageNum = 1; pageNum <= pages; pageNum++) {
+            float width = reader.getPageSize(pageNum).getWidth();
+            float height = reader.getPageSize(pageNum).getHeight();
+
+            PdfRenderListener pdfRenderListener = new PdfRenderListener(
+                    pageNum, width, height);
+
+            // 解析pdf,定位位置
+            PdfContentStreamProcessor processor = new PdfContentStreamProcessor(
+                    pdfRenderListener);
+            PdfDictionary pageDic = reader.getPageN(pageNum);
+            PdfDictionary resourcesDic = pageDic.getAsDict(PdfName.RESOURCES);
+            try {
+                processor.processContent(ContentByteUtils
+                        .getContentBytesForPage(reader, pageNum), resourcesDic);
+            } catch (IOException e) {
+                reader.close();
+                throw e;
+            }
+
+            String content = pdfRenderListener.getContent();
+            List<CharPosition> charPositions = pdfRenderListener
+                    .getcharPositions();
+
+            List<float[]> positionsList = new ArrayList<float[]>();
+            for (CharPosition charPosition : charPositions) {
+                float[] positions = new float[]{charPosition.getPageNum(),
+                        charPosition.getX(), charPosition.getY()};
+                positionsList.add(positions);
+            }
+
+            PdfPageContentPositions pdfPageContentPositions = new PdfPageContentPositions();
+            pdfPageContentPositions.setContent(content);
+            pdfPageContentPositions.setPostions(positionsList);
+
+            result.add(pdfPageContentPositions);
+        }
+        reader.close();
+        return result;
+    }
+
+
+    private static List<PDFIndexInfo> findPositions(String keyword,
+                                                    PdfPageContentPositions pdfPageContentPositions) {
+
+        List<PDFIndexInfo> result =new ArrayList<>();
+        String content = pdfPageContentPositions.getContent();
+        List<float[]> charPositions = pdfPageContentPositions.getPositions();
+
+        List<String> strList = Func.toStrList(keyword);
+        for (String text : strList) {
+            for (int pos = 0; pos < content.length(); ) {
+                PDFIndexInfo data= new PDFIndexInfo();
+                int positionIndex = content.indexOf(text, pos);
+                if (positionIndex == -1) {
+                    break;
+                }
+
+                float[] postions = charPositions.get(positionIndex);
+                data.setDataInfo(postions);
+                data.setPkeyid(text);
+                result.add(data);
+                pos = positionIndex + 1;
+            }
+        }
+        return result;
+    }
+
+
+    private static class PdfPageContentPositions {
+        private String content;
+        private List<float[]> positions;
+
+        public String getContent() {
+            return content;
+        }
+
+        public void setContent(String content) {
+            this.content = content;
+        }
+
+        public List<float[]> getPositions() {
+            return positions;
+        }
+
+        public void setPostions(List<float[]> positions) {
+            this.positions = positions;
+        }
+    }
+
+    private static class PdfRenderListener implements RenderListener {
+        private int pageNum;
+        private float pageWidth;
+        private float pageHeight;
+        private StringBuilder contentBuilder = new StringBuilder();
+        private List<CharPosition> charPositions = new ArrayList<CharPosition>();
+
+        public PdfRenderListener(int pageNum, float pageWidth, float pageHeight) {
+            this.pageNum = pageNum;
+            this.pageWidth = pageWidth;
+            this.pageHeight = pageHeight;
+        }
+
+        @Override
+        public void beginTextBlock() {
+
+        }
+
+        @Override
+        public void renderText(TextRenderInfo renderInfo) {
+            List<TextRenderInfo> characterRenderInfos = renderInfo
+                    .getCharacterRenderInfos();
+            for (TextRenderInfo textRenderInfo : characterRenderInfos) {
+                String word = textRenderInfo.getText();
+                if (word.length() > 1) {
+                    word = word.substring(word.length() - 1, word.length());
+                }
+                com.itextpdf.awt.geom.Rectangle2D.Float rectangle = textRenderInfo.getAscentLine()
+                        .getBoundingRectange();
+                double x = rectangle.getMinX();
+                double y = rectangle.getMaxY();
+
+                float xPercent = Math.round(x / pageWidth * 10000) / 10000f;
+                float yPercent = Math.round((1 - y / pageHeight) * 10000) / 10000f;//
+
+                CharPosition charPosition = new CharPosition(pageNum, xPercent,
+                        yPercent);
+                charPositions.add(charPosition);
+                contentBuilder.append(word);
+            }
+        }
+
+        @Override
+        public void endTextBlock() {
+
+        }
+
+        @Override
+        public void renderImage(ImageRenderInfo renderInfo) {
+
+        }
+
+        public String getContent() {
+            return contentBuilder.toString();
+        }
+
+        public List<CharPosition> getcharPositions() {
+            return charPositions;
+        }
+    }
+
+    private static class CharPosition {
+        private int pageNum = 0;
+        private float x = 0;
+        private float y = 0;
+
+        public CharPosition(int pageNum, float x, float y) {
+            this.pageNum = pageNum;
+            this.x = x;
+            this.y = y;
+        }
+
+        public int getPageNum() {
+            return pageNum;
+        }
+
+        public float getX() {
+            return x;
+        }
+
+        public float getY() {
+            return y;
+        }
+
+        @Override
+        public String toString() {
+            return "[pageNum=" + this.pageNum + ",x=" + this.x + ",y=" + this.y
+                    + "]";
+        }
+    }
+
+    public static String getNetUrl(String fileUrl){
+        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        String sys_file_net_url = ParamCache.getValue(CommonConstant.SYS_FILE_NET_URL);
+        String path = sys_file_net_url + fileUrl.replaceAll("//", "/").replaceAll(file_path, "");
+        return path;
+    }
+
+
+    public static SignKeyVO getPdfSignIds(String pdfUrl) {
+        SignKeyVO signKeyVO = new SignKeyVO();
+        List<String> eVisaConfigList = new ArrayList<>();
+        Map<String,String> dataMap = new HashMap<>();
+        InputStream inputStream;
+        try  {
+            if(pdfUrl.indexOf("http")>=0){
+                inputStream = CommonUtil.getOSSInputStream(pdfUrl);
+            }else{
+                inputStream = new FileInputStream(new File(pdfUrl));
+            }
+            PDDocument document = PDDocument.load(inputStream);
+            PDFTextStripper stripper = new PDFTextStripper();
+            String text = stripper.getText(document);
+            String[] lines = text.split("[ \\n]+");
+            for(int k=0;k<lines.length;k++){
+                String textStr = lines[k];
+                if(textStr.indexOf("*")>=0){
+                    textStr = textStr.substring(textStr.lastIndexOf("*")+1,textStr.length());
+                }
+                String[] textS = Func.toStrArray("\\|\\|",textStr);
+                for(String txt : textS){
+                    for (int i = 0; i < txt.length(); i++) {
+                        if (!Character.isDigit(txt.charAt(i))) {
+                            txt=txt.substring(0,i);
+                        }
+                    }
+                    if (txt.length() >= 15 && Func.isNumeric(txt)) {
+                        eVisaConfigList.add(txt);
+                        dataMap.put(txt,textStr);
+                    }
+                }
+            }
+
+            List<String> unique = eVisaConfigList.stream().distinct().collect(Collectors.toList());
+            document.close();
+            signKeyVO.setEVisaConfigList(unique);
+            signKeyVO.setDataMap(dataMap);
+            return signKeyVO;
+        }catch (Exception e){
+            e.printStackTrace();
+            return null;
+        }
+    }
+}

+ 152 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/ChekSignData.java

@@ -0,0 +1,152 @@
+package org.springblade.business.controller;
+
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.business.chekPdf.PdfAddimgUtil;
+import org.springblade.business.service.ITaskService;
+import org.springblade.business.vo.ScrSignInfoVO;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.evisa.vo.SignKeyVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * 清表基础数据表 控制器
+ *
+ * @author BladeX
+ * @since 2022-05-18
+ */
+@RestController
+@AllArgsConstructor
+@Api(value = "电签类", tags = "电签类接口")
+@RequestMapping("/archiveFile12312")
+@Slf4j
+public class ChekSignData {
+
+    @Autowired
+    StringRedisTemplate RedisTemplate;
+    // jdbc
+    private final JdbcTemplate jdbcTemplate;
+
+    // 线程池
+    @Resource(name = "taskExecutor1")
+    private ThreadPoolExecutor executor;
+
+    private final ITaskService taskService;
+
+   // @Scheduled(cron = "0/10 * * * * ?")
+    public void SignInfo() {
+        // 质检SQL
+        String sql = "SELECT a.id ,a.e_visa_pdf_url,b.process_instance_id,a.contract_id,a.project_id,c.remark_type,b.id as taskId from u_information_query a ,u_task b ,m_project_info c where a.project_id=1792760669353865218 and b.approval_type=1 and c.id=a.project_id  and a.`status` in(1,2) and a.is_deleted=0 and a.e_visa_pdf_url is not null  and b.form_data_id = a.id and b.`status` in(2) ";
+
+        List<ScrSignInfoVO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ScrSignInfoVO.class));
+        if (query != null && query.size() >= 1 ) {
+            for (ScrSignInfoVO dataInfo : query) {
+                if (executor.getQueue().size()<=6 ) {
+                    Long nodeId = dataInfo.getId();
+                    Boolean aBoolean = RedisTemplate.hasKey("sign-" + nodeId);
+
+                    if (!aBoolean) {
+                        RedisTemplate.opsForValue().set("sign-" + nodeId, "1",3600, TimeUnit.SECONDS);
+                        CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
+                            try {
+                                /*===============执行批量任务===============*/
+                                sctTaskBatch2(dataInfo);
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                        }, executor);
+                    }
+                }
+            }
+        }
+        System.out.println("队列数量" + executor.getQueue().size());
+        System.out.println("活跃数量" + executor.getActiveCount());
+        System.out.println("总共数量" + executor.getTaskCount());
+        System.out.println("完成数量" + executor.getCompletedTaskCount());
+    }
+
+
+    public void sctTaskBatch2(ScrSignInfoVO taskApp) throws Exception {
+
+
+        String pdfUrl = taskApp.getEVisaPdfUrl();
+        SignKeyVO pdfSignIds = PdfAddimgUtil.getPdfSignIds(pdfUrl);
+        List<String> positions = pdfSignIds.getEVisaConfigList();
+
+        String ids = String.join(",", positions);
+        List<Map<String, Object>> strategyListByDFZX = getStrategyListByDFZX(taskApp, ids);
+
+    }
+
+
+    public List<Map<String, Object>> getStrategyListByDFZX(ScrSignInfoVO taskApp, String ids) {
+        List<Map<String, Object>> maps = new ArrayList<>();
+        List<Map<String, Object>> maps2 = new ArrayList<>();
+        String sql = "select * from u_task_parallel where process_instance_id = '" + taskApp.getProcessInstanceId() + "' and initiative=2 and status=2";
+        List<Map<String, Object>> mapList = jdbcTemplate.queryForList(sql);
+        if (mapList != null && mapList.size() > 0) {
+            for (Map<String, Object> task : mapList) {
+                String taskUserId = Func.toStr(task.get("task_user"));
+                String sqlinfo = " SELECT * from ( SELECT a.id as keyWord,a.project_id,a.pyzbx ,a.pyzby,(SELECT acc_code from blade_user where id='" + taskUserId + "' and is_deleted=0  ) as sealId from m_textdict_info a where  a.type =2 and a.id in (" + ids + ")  and sig_role_id in (SELECT DISTINCT c.role_id from m_project_assignment_user c  where c.contract_id=" + taskApp.getContractId() + " and user_id=" + taskUserId + " and c.is_deleted=0 ) ) x where x.sealId is not null ";
+                System.out.println("扫描-签字-sql=" + sqlinfo);
+                List<Map<String, Object>> maps3 = jdbcTemplate.queryForList(sqlinfo);
+                maps2.addAll(maps3);
+            }
+        }
+        // 添加章
+      //  if (taskApp.getStatus().equals("2")) {
+            String sqlinfo = "SELECT a.id as keyWord,a.pyzbx,a.pyzby,b.certificate_number as sealId from m_textdict_info a ,m_sign_pfx_file b where a.sig_role_id = b.pfx_type and b.project_contract_role like '%" + taskApp.getContractId() + "%' and a.is_deleted=0 and b.is_deleted=0 and a.type=6 and a.id in(" + ids + ") ";
+            System.out.println("扫描-签章-sql=" + sqlinfo);
+            List<Map<String, Object>> maps3 = jdbcTemplate.queryForList(sqlinfo);
+            if (mapList != null && mapList.size() > 0) {
+                maps2.addAll(maps3);
+            }
+      //  }
+        Map<String, List<Map<String, Object>>> peopleByAge = maps2.stream()
+                .collect(Collectors.groupingBy(hada -> (Func.toStr(hada.get("keyWord")))));
+        for (String keyId : peopleByAge.keySet()) {
+            int exId = 0;
+            List<Map<String, Object>> keyList = peopleByAge.get(keyId);
+            if (keyList != null && keyList.size() == 1) {
+                maps.addAll(keyList);
+                exId = 1;
+            } else if (keyList != null && keyList.size() >= 2) {
+                for (Map<String, Object> datax : keyList) {
+                    if ((datax.get("project_id") + "").equals(taskApp.getProjectId())) {
+                        maps.add(datax);
+                        exId = 1;
+                    }
+                }
+            }
+            if (exId == 0) {
+                maps.add(keyList.get(0));
+            }
+        }
+
+        if(maps!=null & maps.size()==0 && mapList.size()>=4 ){
+
+            String header = "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiIwMDAwMDAiLCJ1c2VyX25hbWUiOiJ6aHV3ZWkiLCJyZWFsX25hbWUiOiLnpZ3ngpwiLCJhdmF0YXIiOiIiLCJhdXRob3JpdGllcyI6WyJhZG1pbmlzdHJhdG9yIl0sImNsaWVudF9pZCI6ImNsaWVudCIsInJvbGVfbmFtZSI6ImFkbWluaXN0cmF0b3IiLCJsaWNlbnNlIjoicG93ZXJlZCBieSBibGFkZXgiLCJwb3N0X2lkIjoiIiwidXNlcl9pZCI6IjE3Mzk5NDQ2MTMyNjUxODY4MTgiLCJyb2xlX2lkIjoiMTEyMzU5ODgxNjczODY3NTIwMSIsInBob25lIjoiMTg5ODI4Nzc2MDciLCJzY29wZSI6WyJhbGwiXSwibmlja19uYW1lIjoi56Wd54KcIiwib2F1dGhfaWQiOiIiLCJkZXRhaWwiOnsidHlwZSI6IndlYiJ9LCJleHAiOjE3NDU1OTU2MDksImRlcHRfaWQiOiIxNTkyMzk0MTMxMTc3ODczNDEwIiwianRpIjoiZTMzN2QyNGMtNzkzZC00OTIwLTliMzEtZTU3MDYyNTIyZTBlIiwiYWNjb3VudCI6InpodXdlaSJ9.jihRZbcZrrCArbMcp6ON9H-1uCDn07juxlXPcHLU07A";
+            taskService.reSigningEVisa("1", taskApp.getTaskId(), taskApp.getContractId(), taskApp.getProjectId(), 1, header);
+            String sql2 = "update u_task set batch=10 where id="+taskApp.getTaskId();
+            jdbcTemplate.execute(sql2);
+        }
+
+        return maps;
+    }
+}

+ 4 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -3441,6 +3441,9 @@ public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo) {
                 List<Long> lowNodeIds = selectedNodeList.stream().filter(f -> f.getLow() == 0).map(WbsTreePrivateAddVO::getId).collect(Collectors.toList()); //最底层节点id
                 List<WbsTreePrivateAddVO> childList = new ArrayList<>();
                 if (lowNodeIds.size() > 0) {
+                    if("3".equals(vo.getSaveType())){
+                        lowNodeIds=selectedNodeList.stream().filter(f -> f.getLow() == 0&&(f.getNodeType()==6||1==f.getMajorDataType()||2==f.getMajorDataType()||3==f.getMajorDataType()||4==f.getMajorDataType())).map(WbsTreePrivateAddVO::getId).collect(Collectors.toList());
+                    }
                     //只取原始表
                     this.foreachQueryChild(lowNodeIds, childList, treeContract);
                     //将表格数据设置
@@ -3452,6 +3455,7 @@ public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo) {
                     Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(WbsTreePrivate::getId))),
                     ArrayList::new
                 ));
+
             }
             //处理半选
             this.disposeHalfSelectList(treeContract, halfSelectedNodeList, selectedNodeList, query);

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -2004,7 +2004,7 @@ public class TaskController extends BladeController {
             return R.fail("请选择一条记录");
         }
         String header = request.getHeader("Blade-Auth");
-        taskService.reSigningEVisa(dto.getClassifyType(), dto.getTaskIds(), dto.getContractId(), dto.getProjectId(), dto.getType(), header,request);
+      //  taskService.reSigningEVisa(dto.getClassifyType(), dto.getTaskIds(), dto.getContractId(), dto.getProjectId(), dto.getType(), header,request);
         return R.success("任务已经成功提交重签,请耐心等待!");
     }
 

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java

@@ -101,8 +101,8 @@ public interface ITaskService extends BaseService<Task> {
      */
     void delArchiveFileBusinessData(Long projectId, Long wbsId);
 
-    @Async
-    void reSigningEVisa(String classify, String taskIds, String contractId, String projectId,Integer type, String header,HttpServletRequest request);
+
+    void reSigningEVisa(String classify, String taskIds, String contractId, String projectId,Integer type, String header);
 
     /**
      * 根据数据源id查询任务

+ 3 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -1922,7 +1922,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
     }
 
     @Override
-    public void reSigningEVisa(String classify, String taskIds, String contractId, String projectId, Integer type, String header , HttpServletRequest request) {
+    public void reSigningEVisa(String classify, String taskIds, String contractId, String projectId, Integer type, String header ) {
         //查询任务信息
         List<Task> taskList = jdbcTemplate.query("select * from u_task where id in(" + taskIds + ")", new BeanPropertyRowMapper<>(Task.class));
         if (taskList.size() > 0) {
@@ -2048,8 +2048,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     }
                 }
                 //获取当前操作人
-                Long userId = AuthUtil.getUserId(request);
-                String userName = AuthUtil.getNickName(request);
+                Long userId = 1777156889464066049L ;//AuthUtil.getUserId(request);
+                String userName = "wangbn";//AuthUtil.getNickName(request);
                 //判断是否是超级管理员并且是泓创智诚下的部门
                 if(judgeRoleIdAndDeptId(userId)){
                     //满足去除当前填报人的条件 去除当前任务的填报人中当前操作人的信息

+ 32 - 0
blade-service/blade-e-visa/pom.xml

@@ -275,6 +275,38 @@
             <artifactId>jsoup</artifactId>
         </dependency>
 
+            <!-- Apache POI for Excel -->
+            <dependency>
+                <groupId>org.apache.poi</groupId>
+                <artifactId>poi</artifactId>
+                <version>5.2.3</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.poi</groupId>
+                <artifactId>poi-ooxml</artifactId>
+                <version>5.2.3</version>
+            </dependency>
+
+        <!-- Apache POI 依赖 -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>5.2.3</version>
+        </dependency>
+
+        <!-- Apache Commons IO 依赖 -->
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.11.0</version>
+        </dependency>
+
+            <!-- iText for PDF -->
+            <dependency>
+                <groupId>com.itextpdf</groupId>
+                <artifactId>itextpdf</artifactId>
+                <version>5.5.13.3</version>
+            </dependency>
         <!-- 电签相关 end -->
     </dependencies>
     <build>

+ 151 - 0
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/Chek.java

@@ -0,0 +1,151 @@
+package org.springblade.evisa.controller;
+
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.business.vo.ScrSignInfoVO;
+import org.springblade.business.vo.TaskSignInfoVO;
+import org.springblade.common.utils.CommonUtil;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.evisa.service.ScrDataService;
+import org.springblade.evisa.utils.FileUtils;
+import org.springblade.resource.feign.NewIOSSClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.io.ByteArrayInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 清表基础数据表 控制器
+ *
+ * @author BladeX
+ * @since 2022-05-18
+ */
+@RestController
+@AllArgsConstructor
+@Api(value = "电签类", tags = "电签类接口")
+@Slf4j
+public class  Chek {
+
+    @Autowired
+    StringRedisTemplate RedisTemplate;
+    // jdbc
+    private final JdbcTemplate jdbcTemplate;
+    private final NewIOSSClient newIOSSClient;
+    // 线程池
+    @Resource(name = "taskExecutor1")
+    private ThreadPoolExecutor executor;
+
+
+
+    @Scheduled(cron = "0/10 * * * * ?")
+    public void SignInfo() {
+        // 质检SQL
+       // String sql = "select id,file_url as eVisaPdfUrl from u_archive_file where length(file_url)!=char_length(file_url) and file_name not in('封面.pdf','封面1.pdf','卷内目录.pdf','卷内目录1.pdf','背脊.pdf','背脊1.pdf','备考表.pdf','备考表1.pdf') and is_deleted<>10  and  contract_id in(1890322575534399490,1890328157624541186,1887771910584999937) and file_url is not null and file_url like '%.pdf%' LIMIT 30  ";
+        String sql = "select id,file_url as eVisaPdfUrl from u_archive_file where file_url like '%//卷内目录.pdf' and  file_url is not null and file_url like '%.pdf%' LIMIT 30  ";
+
+        List<ScrSignInfoVO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ScrSignInfoVO.class));
+        if (query != null && query.size() >= 1 ) {
+            for (ScrSignInfoVO dataInfo : query) {
+                if (executor.getQueue().size()<=60 ) {
+                    Long nodeId = dataInfo.getId();
+                    Boolean aBoolean = RedisTemplate.hasKey("sign-" + nodeId);
+
+                    if (!aBoolean) {
+                        RedisTemplate.opsForValue().set("sign-" + nodeId, "1",3600, TimeUnit.SECONDS);
+                        CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
+                            try {
+                                /*===============执行批量任务===============*/
+                                signTaskBatch(dataInfo);
+                            } catch (Exception e) {
+                                String dsql = "update u_archive_file set is_deleted=9  where id="+nodeId;
+                                jdbcTemplate.execute(dsql);
+                                RedisTemplate.delete("sign-" +nodeId);
+                                e.printStackTrace();
+                            }
+                        }, executor);
+                    }
+                }
+            }
+        }
+        System.out.println("队列数量" + executor.getQueue().size());
+        System.out.println("活跃数量" + executor.getActiveCount());
+        System.out.println("总共数量" + executor.getTaskCount());
+        System.out.println("完成数量" + executor.getCompletedTaskCount());
+    }
+
+
+
+    public void signTaskBatch(ScrSignInfoVO taskApp) throws Exception {
+
+        String pdfurl  =taskApp.getEVisaPdfUrl();
+        Long id  =taskApp.getId();
+
+        InputStream inputStre =getOSSInputStream2(pdfurl);
+        String sysLocalFileUrl = FileUtils.getSysLocalFileUrl();
+        String filecode = SnowFlakeUtil.getId() + "";
+        String dataFileUrl = sysLocalFileUrl + "/pdf/" + filecode + ".pdf";
+
+
+        FileOutputStream fout = new FileOutputStream(dataFileUrl);
+        int bytesRead = 0;
+        byte[] buffer = new byte[8192];
+        while ((bytesRead = inputStre.read(buffer, 0, 8192)) != -1) {
+            fout.write(buffer, 0, bytesRead);
+        }
+        fout.close();
+
+        BladeFile bladeFile = this.newIOSSClient.uploadFile(SnowFlakeUtil.getId() + ".pdf", dataFileUrl);
+
+        if (bladeFile != null && Func.isNotEmpty(bladeFile.getLink())) {
+           String dsql = "update u_archive_file set file_url='"+bladeFile.getLink()+"' ,is_deleted=10  where id="+id;
+           jdbcTemplate.execute(dsql);
+            System.out.println("成功");
+            System.out.println(dsql);
+        }
+        RedisTemplate.delete("sign-" + taskApp.getId());
+    }
+
+    public static InputStream getOSSInputStream2(String urlStr) {
+        try {
+            //获取OSS文件流
+         //  String encodedUrl = URLEncoder.encode(urlStr, StandardCharsets.UTF_8.toString());
+
+            URL url = new URL(urlStr);
+            URLConnection conn = url.openConnection();
+            conn.setRequestProperty("User-Agent", "Mozilla/5.0");
+          //  conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+            return conn.getInputStream();
+        } catch (Exception e) {
+            System.out.println("zw-----------");
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+
+/*    public static void main(String[] args) throws UnsupportedEncodingException {
+        String data ="https://xinan1.zos.ctyun.cn/huazheng2021/archivedFile/cover/6eae7ee55e6ca24a2cc819534715//卷内目录.pdf";
+
+        getOSSInputStream2(data);
+    }*/
+
+}

+ 3 - 8
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/ScrController.java → blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/ChekSignData.java

@@ -1,13 +1,9 @@
 package org.springblade.evisa.controller;
 
-import com.alibaba.fastjson.JSON;
 import io.swagger.annotations.Api;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.business.vo.ScrSignInfoVO;
-import org.springblade.business.vo.TaskSignInfoVO;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.evisa.service.EVDataService;
 import org.springblade.evisa.service.ScrDataService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -18,7 +14,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
@@ -33,7 +28,7 @@ import java.util.concurrent.TimeUnit;
 @AllArgsConstructor
 @Api(value = "电签类", tags = "电签类接口")
 @Slf4j
-public class ScrController {
+public class ChekSignData {
 
     @Autowired
     StringRedisTemplate RedisTemplate;
@@ -45,10 +40,10 @@ public class ScrController {
     @Resource(name = "taskExecutor1")
     private ThreadPoolExecutor executor;
 
-    //@Scheduled(cron = "0/10 * * * * ?")
+  //  @Scheduled(cron = "0/10 * * * * ?")
     public void SignInfo() {
         // 质检SQL
-        String sql = "SELECT a.id ,a.e_visa_pdf_url,b.process_instance_id,a.contract_id,a.project_id,c.remark_type,b.status  from u_information_query a ,u_task b ,m_project_info c where a.id=1878990827573747714 and c.id=a.project_id  and a.`status` in(1,2) and a.is_deleted=0 and a.e_visa_pdf_url is not null  and b.form_data_id = a.id and b.`status` in(1,2) ";
+        String sql = "SELECT a.id ,a.e_visa_pdf_url,b.process_instance_id,a.contract_id,a.project_id,c.remark_type from u_information_query a ,u_task b ,m_project_info c where b.id=1903019571036553216 and c.id=a.project_id  and a.`status` in(1,2) and a.is_deleted=0 and a.e_visa_pdf_url is not null  and b.form_data_id = a.id and b.`status` in(2) ";
 
         List<ScrSignInfoVO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ScrSignInfoVO.class));
         if (query != null && query.size() >= 1 ) {

+ 4 - 5
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVController.java

@@ -58,7 +58,7 @@ public class EVController {
     @Resource(name = "taskExecutor1")
     private ThreadPoolExecutor executor;
 
-   // @Scheduled(cron = "0/10 * * * * ?")
+  //  @Scheduled(cron = "0/10 * * * * ?")
     public void SignInfo() {
         //执行代码
 
@@ -72,13 +72,12 @@ public class EVController {
                 "GROUP_CONCAT(create_user) as userId," +
                 "GROUP_CONCAT(nick_name) as nickName," +
                 "sign_type as sigType" +
-                " from u_task_batch where is_deleted=0 GROUP BY JSON_EXTRACT(json_data, '$.formDataId'),sign_type ORDER BY sign_type ASC ";
-                //and JSON_UNQUOTE(JSON_EXTRACT(json_data,'$.taskId')) in(SELECT id from u_task where project_id =1792760669353865218 and is_deleted =0 and approval_type=1 )
-        List<TaskSignInfoVO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TaskSignInfoVO.class));
+                " from u_task_batch where is_deleted=0 GROUP BY JSON_EXTRACT(json_data, '$.formDataId'),sign_type ORDER BY sign_type ASC LIMIT 50";
 
+        List<TaskSignInfoVO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TaskSignInfoVO.class));
         if (query != null && query.size() >= 1) {
             for (TaskSignInfoVO dataInfo : query) {
-                if (executor.getQueue().size() <= 10) {
+                if (executor.getQueue().size() <= 30) {
                     Boolean aBoolean = RedisTemplate.hasKey("sign-" + dataInfo.getFormDataId());
                     if (!aBoolean) {
                         if (dataInfo.getSigType() == 2) {

+ 0 - 227
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVisaController.java

@@ -1,227 +0,0 @@
-package org.springblade.evisa.controller;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import io.swagger.annotations.Api;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.StringUtils;
-import org.springblade.business.entity.Task;
-import org.springblade.business.feign.MessageWarningClient;
-import org.springblade.business.feign.TaskClient;
-import org.springblade.business.vo.TaskApprovalVO;
-import org.springblade.common.utils.SystemUtils;
-import org.springblade.evisa.service.EVisaService;
-import org.springblade.evisa.vo.EVisaTaskApprovalVO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import java.io.FileNotFoundException;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-/**
- * 清表基础数据表 控制器
- *
- * @author BladeX
- * @since 2022-05-18
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("/evisaInfo")
-@Api(value = "电签类", tags = "电签类接口")
-@Slf4j
-public class EVisaController {
-
-    @Autowired
-    StringRedisTemplate RedisTemplate;
-
-    // jdbc
-    private final JdbcTemplate jdbcTemplate;
-
-    //电签服务类
-    private final EVisaService eVisaService;
-
-    // 线程池
-    @Resource(name = "taskExecutor1")
-    private ThreadPoolExecutor executor;
-
-    private final TaskClient taskClient;
-
-    private final MessageWarningClient messageWarningClient;
-
-
-    // 电签主类
-
-   // @Scheduled(cron = "0/10 * * * * ?")
-    public void SignInfo() {
-        //执行代码
-        log.info("扫描开始");
-        String sql = "SELECT * from u_task_batch where is_deleted=0  and id in(SELECT max(id) as id from u_task_batch where is_deleted=0 GROUP BY JSON_EXTRACT(json_data, '$.formDataId')) LIMIT 10 ";
-        //String sql = "SELECT * from u_task_batch where is_deleted=5 and `status`=2";
-        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
-        if (maps != null && maps.size() >= 1 && SystemUtils.isLinux()) {//&& SystemUtils.isLinux()
-            for (Map<String, Object> dataInfo : maps) {
-                if (executor.getQueue().size()<=40 ) {
-                    String jsonData = dataInfo.get("json_data") + "";
-                    TaskApprovalVO taskApprovalVO = JSON.parseObject(jsonData, TaskApprovalVO.class);
-                    String taskBatchId = dataInfo.get("id").toString();
-                    Long userId = Long.valueOf(dataInfo.get("create_user") + "");
-                    String nickName = dataInfo.get("nick_name") + "";
-                    Boolean aBoolean = RedisTemplate.hasKey("sign-" + taskApprovalVO.getFormDataId());
-                    taskApprovalVO.setId(taskBatchId);
-                    taskApprovalVO.setUserId(userId);
-                    taskApprovalVO.setNickName(nickName);
-
-                    if (!aBoolean) {
-                        RedisTemplate.opsForValue().set("sign-" + taskApprovalVO.getFormDataId(), "1",900, TimeUnit.SECONDS);
-                        CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
-                            try {
-                                /*===============执行批量任务===============*/
-                                this.checkIsExsitTaskBatch(taskApprovalVO);
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            }
-                        }, executor);
-                    }
-                }
-            }
-        }
-        System.out.println("队列数量" + executor.getQueue().size());
-        System.out.println("活跃数量" + executor.getActiveCount());
-        System.out.println("总共数量" + executor.getTaskCount());
-        System.out.println("完成数量" + executor.getCompletedTaskCount());
-    }
-
-    @Transactional
-    public void checkIsExsitTaskBatch(TaskApprovalVO taskApprovalVO){
-        if ("OK".equals(taskApprovalVO.getFlag())) { // 同意
-            // 调用电签接口
-            String eVisaStatus = eVisaService.eVisa(JSONObject.parseObject(JSONObject.toJSONString(taskApprovalVO), EVisaTaskApprovalVO.class));
-
-            if (eVisaStatus == null || StringUtils.isEmpty(eVisaStatus)) {
-                //状态改为 == 4 --
-            } else if ("notpdfsgin".equals(eVisaStatus) || eVisaStatus.contains("notpdfsgin")) { //没有找到关键字Id
-               //状态改为 == 4 --
-                String up_task = "update u_task_batch set is_deleted=5 where id="+taskApprovalVO.getId();
-                jdbcTemplate.execute(up_task);
-                String up_task_par = "update u_task_parallel set e_visa_status=99,e_visa_content='pdf关键字与数据库中id不匹配' ,update_time=SYSDATE() where parallel_process_instance_id='"+taskApprovalVO.getParallelProcessInstanceId()+"'";
-                jdbcTemplate.execute(up_task_par);
-
-            } else if ("success".equals(eVisaStatus) || eVisaStatus.contains("success")) { //成功操作
-                //将 状态改为
-                String up_task_par = "update u_task_parallel set status=2, e_visa_status=1,e_visa_content='电签成功' ,update_time=SYSDATE() where parallel_process_instance_id='"+taskApprovalVO.getParallelProcessInstanceId()+"'";
-                jdbcTemplate.execute(up_task_par);
-
-                //获取状态为1(待审批)的分支流程
-                List<Task> tasks = taskClient.queryTaskListByFormDataId(taskApprovalVO.getFormDataId());
-                Task masterTask = tasks.get(0);
-
-                String  sql = "SELECT a.* from u_task_parallel a where a.process_instance_id=(SELECT process_instance_id from u_task_parallel b where  b.parallel_process_instance_id='"+taskApprovalVO.getParallelProcessInstanceId()+"') and is_deleted=0 and `status`=1 and sort not in(SELECT fixed_flow_branch_sort from u_fixed_flow_link where fixed_flow_id ="+masterTask.getFixedFlowId()+" and  flow_task_type=2 ) ";
-                List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
-                if (maps == null || maps.size() == 0 ) {
-                    // 最后修改计量数据
-                    //说明都审批完成,将主表状态更改为已完成
-                    String finalPdfUrl = null;
-                    if (eVisaStatus.contains("@@@@")) {
-                        finalPdfUrl = eVisaStatus.split("@@@@")[1];
-                    }
-                    //todo ===================== 执行合同章
-                    try {
-                        //执行合同章,返回的是盖有合同章的PDF路径
-                        finalPdfUrl = this.eVisaService.eVisaContractSeal(JSONObject.parseObject(JSONObject.toJSONString(taskApprovalVO), EVisaTaskApprovalVO.class), finalPdfUrl);
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                    //修改主流程状态为已完成
-                    String up_task = "update u_task set status=2,update_time=SYSDATE() where is_deleted=0 and id="+taskApprovalVO.getTaskId();
-                    jdbcTemplate.execute(up_task);
-                    //修改对应的业务数据状态为已审批
-                    int approvalType = taskApprovalVO.getApprovalType();
-
-                    if(approvalType<=4){ //质检 修改queryinfo 数据信息
-                        taskClient.updateBusinessDataByFormDataId(masterTask, 2, finalPdfUrl, taskApprovalVO.getUserId());
-                        //返回电签成功的pdf路径,给试验用
-                        try {
-                            taskClient.trialSelfTaskRelated(taskApprovalVO, finalPdfUrl, taskApprovalVO.getId());
-                        } catch (FileNotFoundException e) {
-                            throw new RuntimeException(e);
-                        }
-                    }else{
-                        UpMeterSignDataInfo(taskApprovalVO,finalPdfUrl,2);
-                    }
-                }else {
-                    //只更新PDF路径
-                    taskClient.updateBusinessDataByFormDataId(masterTask, 1, eVisaStatus.contains("@@@@") ? eVisaStatus.split("@@@@")[1] : null, taskApprovalVO.getUserId());
-                    String finalPdfUrl = eVisaStatus.contains("@@@@") ? eVisaStatus.split("@@@@")[1] : null;
-                    int approvalType = taskApprovalVO.getApprovalType();
-                    if(approvalType<=4){
-                        try {
-                            taskClient.trialSelfTaskRelated(taskApprovalVO, finalPdfUrl, taskApprovalVO.getId());
-                        } catch (FileNotFoundException e) {
-                            throw new RuntimeException(e);
-                        }
-                    }else{
-                        UpMeterSignDataInfo(taskApprovalVO,finalPdfUrl,1);
-                    }
-                }
-            }else if("eContractError".equals(eVisaStatus) || eVisaStatus.contains("eContractError")){ //合同段信息出错
-                this.jdbcTemplate.execute("delete from u_task_batch where id="+taskApprovalVO.getId());
-            }else if ("eVisaError".equals(eVisaStatus) || eVisaStatus.contains("eVisaError")) {
-                // 修改 主 任务 u_task 表 状态改为3
-                String up_task_par = "update u_task_parallel set status=2 ,e_visa_status=99 ,e_visa_content='"+eVisaStatus.split("####")[1]+"' where parallel_process_instance_id='"+taskApprovalVO.getParallelProcessInstanceId()+"'";
-                this.jdbcTemplate.execute("delete from u_task_batch where id="+taskApprovalVO.getId());
-                jdbcTemplate.execute(up_task_par);
-            }else {
-
-            }
-            RedisTemplate.delete("sign-" + taskApprovalVO.getFormDataId());
-        }else{ //废除
-            // 修改 主 任务 u_task 表 状态改为3
-            String up_task_par = "update u_task_parallel set status=3 where parallel_process_instance_id='"+taskApprovalVO.getParallelProcessInstanceId()+"'";
-            String up_task = "update u_task set status=3 where id='"+taskApprovalVO.getTaskId()+"'";
-            this.jdbcTemplate.execute("delete from u_task_batch where id="+taskApprovalVO.getId());
-            jdbcTemplate.execute(up_task_par);
-            jdbcTemplate.execute(up_task);
-
-            if(taskApprovalVO.getApprovalType() == 3){
-                jdbcTemplate.execute("update u_contract_log set status=0 where id='"+taskApprovalVO.getFormDataId()+"'");
-            }else if (taskApprovalVO.getApprovalType()==8) {
-                this.jdbcTemplate.execute("update u_entrust_info set status=1 where id=(SELECT wbs_id from u_information_query where id='"+taskApprovalVO.getFormDataId()+"')");
-            }else {
-                jdbcTemplate.execute("update u_information_query set e_visa_pdf_url='',status=0 where id='"+taskApprovalVO.getFormDataId()+"'");
-            }
-            RedisTemplate.delete("sign-" + taskApprovalVO.getFormDataId());
-        }
-    }
-
-    // 电签成功状态修改---计量系统
-    public void UpMeterSignDataInfo(TaskApprovalVO taskApprovalVO,String finalPdfUrl,int type){
-        if (taskApprovalVO.getApprovalType()==5) { //计量 -
-            this.jdbcTemplate.execute("update s_interim_pay_certificate set raw_url='"+finalPdfUrl+"' where contract_period_id = " + taskApprovalVO.getFormDataId());
-            this.jdbcTemplate.execute("delete from u_task_batch where id="+taskApprovalVO.getId());
-            RedisTemplate.delete("sign-" + taskApprovalVO.getFormDataId());
-        } else if (taskApprovalVO.getApprovalType()==6 || taskApprovalVO.getApprovalType()==7) { //计量 --材料 ,中间
-            this.jdbcTemplate.execute("update s_material_start_statement set raw_url='"+finalPdfUrl+"' where meter_period_id = " + taskApprovalVO.getFormDataId());
-            this.jdbcTemplate.execute("delete from u_task_batch where id="+taskApprovalVO.getId());
-            RedisTemplate.delete("sign-" + taskApprovalVO.getFormDataId());
-        } else if (taskApprovalVO.getApprovalType()==8) { // 委托单
-           if(type == 2){
-               this.jdbcTemplate.execute("update u_entrust_info set sample_status=2,status="+(type+1)+",entrust_e_pdf='"+finalPdfUrl+"' where id=(SELECT wbs_id from u_information_query where id='"+taskApprovalVO.getFormDataId()+"')");
-           }
-            jdbcTemplate.execute("update u_information_query set e_visa_pdf_url='"+finalPdfUrl+"',status="+type+" where id='"+taskApprovalVO.getFormDataId()+"'");
-
-            this.jdbcTemplate.execute("delete from u_task_batch where id="+taskApprovalVO.getId());
-            RedisTemplate.delete("sign-" + taskApprovalVO.getFormDataId());
-        }
-    }
-}

+ 0 - 203
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVisaController2.java

@@ -1,203 +0,0 @@
-package org.springblade.evisa.controller;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import io.swagger.annotations.Api;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import net.logstash.logback.encoder.org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang.StringUtils;
-import org.springblade.business.entity.Task;
-import org.springblade.business.entity.TaskParallel;
-import org.springblade.business.feign.TaskClient;
-import org.springblade.business.vo.TaskApprovalVO;
-import org.springblade.common.constant.CommonConstant;
-import org.springblade.common.utils.CommonUtil;
-import org.springblade.common.utils.SystemUtils;
-import org.springblade.core.oss.model.BladeFile;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.evisa.service.EVisaService;
-import org.springblade.evisa.utils.FileUtils;
-import org.springblade.evisa.utils.PDFUtils;
-import org.springblade.evisa.utils.PdfAddimgUtil;
-import org.springblade.evisa.vo.EVisaTaskApprovalVO;
-import org.springblade.resource.feign.NewIOSSClient;
-import org.springblade.system.cache.ParamCache;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.jdbc.core.BeanPropertyRowMapper;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-
-
-/**
- * 清表基础数据表 控制器
- *
- * @author BladeX
- * @since 2022-05-18
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("/evisaInfo")
-@Api(value = "电签类", tags = "电签类接口")
-@Slf4j
-public class EVisaController2 {
-
-    @Autowired
-    StringRedisTemplate RedisTemplate;
-
-    // jdbc
-    private final JdbcTemplate jdbcTemplate;
-
-    //电签服务类
-    private final EVisaService eVisaService;
-
-    // 线程池
-    @Resource(name = "taskExecutor1")
-    private ThreadPoolExecutor executor;
-
-    private final TaskClient taskClient;
-
-    private final NewIOSSClient newIOSSClient;
-
-    // 电签主类
-   // @Scheduled(cron = "0/10 * * * * ?")
-    public void SignInfo() {
-        //执行代码
-        log.info("扫描开始");
-       // String sql = "SELECT c.* from (SELECT a.id,b.id as reportId,(SELECT COUNT(1) from u_task_parallel v where v.process_instance_id=a.process_instance_id and v.`status`=2) as count2  from u_task a , s_interim_pay_certificate b where a.meter_task_type=1 and a.is_deleted=0 and a.status=1 and a.form_data_id=b.contract_period_id and b.is_deleted=0 and b.pre_pdf_url is null) c where c.count2>=1 ";
-        //String sql = "SELECT * from u_task_batch where is_deleted=5 and `status`=2";
-        List<Map<String, Object>> maps = new ArrayList<>();//jdbcTemplate.queryForList(sql);
-
-        Map<String, Object> task = new HashMap<>();//taskClient.getTaskBatchList();
-        task.put("id","1869535635736363008");
-        task.put("reportId","1864482462625693696");
-
-        Map<String, Object> task1 = new HashMap<>();//taskClient.getTaskBatchList();
-        task.put("id","1871012255089295360");
-        task.put("reportId","1866674550960410625");
-
-        maps.add(task);
-      //  maps.add(task1);
-
-        if (maps != null && maps.size() >= 1) {//&& SystemUtils.isLinux()
-            for (Map<String, Object> dataInfo : maps) {
-                if (executor.getQueue().size()<=2 ) {
-                    String id = dataInfo.get("id") + "";
-                    String dataId = dataInfo.get("reportId") + "";
-
-                    Boolean aBoolean = RedisTemplate.hasKey("sign-" + dataId);
-
-                    if (!aBoolean) {
-                        RedisTemplate.opsForValue().set("sign-" + dataId, "1",900, TimeUnit.SECONDS);
-                        CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
-                            try {
-                                /*===============执行批量任务===============*/
-                                this.taskMeterPdfInfo2(id,dataId,0);
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            }
-                        }, executor);
-                    }
-                }
-            }
-        }
-        System.out.println("队列数量" + executor.getQueue().size());
-        System.out.println("活跃数量" + executor.getActiveCount());
-        System.out.println("总共数量" + executor.getTaskCount());
-        System.out.println("完成数量" + executor.getCompletedTaskCount());
-    }
-
-    @Async
-    public void taskMeterPdfInfo2(@RequestParam String taskId, @RequestParam String reportId, @RequestParam Integer type) {
-        try {
-            Task task = jdbcTemplate.query("SELECT * FROM u_task WHERE id = ?", new Object[]{taskId}, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
-
-            String sql = "";
-            if (type == 0) {
-                sql = "select raw_url from s_interim_pay_certificate where id = ?";
-            } else {
-                sql = "select raw_url from s_material_start_statement where id = ?";
-            }
-            String pdfUrl = jdbcTemplate.queryForObject(sql, String.class, reportId);
-            if (StringUtils.isBlank(pdfUrl)) {
-            } else {
-                List<String> pdfSignIds = PDFUtils.getPdfSignIds(pdfUrl);
-                if (pdfSignIds.size() > 0) {
-                    String ids = String.join(",", pdfSignIds);
-                    String sqlp = "SELECT * from u_task_parallel WHERE process_instance_id = '" + task.getProcessInstanceId() + "' and `status`=2 and is_deleted=0";
-                    List<TaskParallel> taskParallels = jdbcTemplate.query(sqlp, new BeanPropertyRowMapper<>(TaskParallel.class));
-                    List<Map<String, Object>> maps = new ArrayList<>();
-                    for (TaskParallel parallel : taskParallels) {
-                        String sqlinfo = "SELECT * from ( SELECT DISTINCT a.id,a.pyzbx ,a.pyzby,a.project_id,(SELECT signature_file_url from m_sign_pfx_file where is_register=1 and certificate_user_id='" + parallel.getTaskUser() + "' and is_deleted=0  ) as signature_file_url,a.type from m_textdict_info a where  a.type =2 and a.id in (" + ids + ")  and sig_role_id in (SELECT DISTINCT c.role_id from m_project_assignment_user c  where c.contract_id=" + task.getContractId() + " and user_id=" + parallel.getTaskUser() + " and c.is_deleted=0 ) ) x where x.signature_file_url is not null ";
-                        List<Map<String, Object>> maps2 = jdbcTemplate.queryForList(sqlinfo);
-                        Map<String, List<Map<String, Object>>> peopleByAge = maps2.stream()
-                                .collect(Collectors.groupingBy(hada -> (Func.toStr(hada.get("id")))));
-
-                        for (String keyId : peopleByAge.keySet()) {
-                            int exId = 0;
-                            List<Map<String, Object>> keyList = peopleByAge.get(keyId);
-                            if (keyList != null && keyList.size() == 1) {
-                                maps.addAll(keyList);
-                                exId = 1;
-                            } else if (keyList != null && keyList.size() >= 2) {
-                                for (Map<String, Object> datax : keyList) {
-                                    if ((datax.get("project_id") + "").equals(task.getProjectId())) {
-                                        maps.add(datax);
-                                        exId = 1;
-                                    }
-                                }
-                            }
-                            if (exId == 0) {
-                                maps.add(keyList.get(0));
-                            }
-                        }
-                    }
-
-                    if (Func.isNotEmpty(maps) || maps.size() >= 1) {
-                        InputStream ossInputStream = CommonUtil.getOSSInputStream(pdfUrl);
-                        String localPdfPath = FileUtils.getSysLocalFileUrl() + "/pdf//" + task.getId() + ".pdf";
-                        CommonUtil.convert(ossInputStream, localPdfPath);
-                        PdfAddimgUtil.pdfAddImgInfo(localPdfPath, maps);
-                        String sys_isonline = ParamCache.getValue(CommonConstant.SYS_ISONLINE);
-
-                            BladeFile bladeFile = this.newIOSSClient.uploadFile(task.getId() + ".pdf", localPdfPath);
-                            if (bladeFile != null && ObjectUtils.isNotEmpty(bladeFile.getLink())) {
-                                if (type == 0) {
-                                    jdbcTemplate.update("update s_interim_pay_certificate set pre_pdf_url ='"+bladeFile.getLink()+"' where id="+reportId);
-                                } else {
-                                    jdbcTemplate.update("update s_material_start_statement set pre_pdf_url ='"+bladeFile.getLink()+"' where id="+reportId);
-                                }
-                            }
-
-                    } else {
-                        System.out.println("没有签字Key");
-                    }
-
-                } else {
-                    System.out.println("没有签字Id");
-                }
-            }
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-}

+ 0 - 130
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVisaController4.java

@@ -1,130 +0,0 @@
-package org.springblade.evisa.controller;
-
-import io.swagger.annotations.Api;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import net.logstash.logback.encoder.org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
-import org.springblade.business.entity.Task;
-import org.springblade.business.entity.TaskParallel;
-import org.springblade.business.feign.TaskClient;
-import org.springblade.common.constant.CommonConstant;
-import org.springblade.common.utils.CommonUtil;
-import org.springblade.common.utils.SnowFlakeUtil;
-import org.springblade.core.oss.model.BladeFile;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.evisa.service.EVisaService;
-import org.springblade.evisa.utils.FileUtils;
-import org.springblade.evisa.utils.PDFUtils;
-import org.springblade.evisa.utils.PdfAddimgUtil;
-import org.springblade.resource.feign.NewIOSSClient;
-import org.springblade.system.cache.ParamCache;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.jdbc.core.BeanPropertyRowMapper;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.mock.web.MockMultipartFile;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.annotation.Resource;
-import java.io.ByteArrayInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-
-
-/**
- * 清表基础数据表 控制器
- *
- * @author BladeX
- * @since 2022-05-18
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("/evisaInfo")
-@Api(value = "电签类", tags = "电签类接口")
-@Slf4j
-public class EVisaController4 {
-
-    @Autowired
-    StringRedisTemplate RedisTemplate;
-
-    // jdbc
-    private final JdbcTemplate jdbcTemplate;
-
-    // 线程池
-    @Resource(name = "taskExecutor1")
-    private ThreadPoolExecutor executor;
-
-
-    private final NewIOSSClient newIOSSClient;
-
-    // 电签主类
-   // @Scheduled(cron = "0/10 * * * * ?")
-    public void SignInfo() {
-        //执行代码
-        log.info("扫描开始");
-        String sql = "SELECT * from u_archive_file where file_url LIKE '%//卷%' and LENGTH(id)<=10 ";
-        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
-
-        if (maps != null && maps.size() >= 1) {//&& SystemUtils.isLinux()
-            for (Map<String, Object> dataInfo : maps) {
-                if (executor.getQueue().size()<=100 ) {
-                    String id = dataInfo.get("id") + "";
-                    String fileUrl = dataInfo.get("file_url") + "";
-
-                    Boolean aBoolean = RedisTemplate.hasKey("sign-" + id);
-
-                    if (!aBoolean) {
-                        RedisTemplate.opsForValue().set("sign-" + id, "1",900, TimeUnit.SECONDS);
-                        CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
-                            try {
-                                /*===============执行批量任务===============*/
-                                this.taskMeterPdfInfo2(id,fileUrl);
-
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            }
-                        }, executor);
-                    }
-                }
-            }
-        }
-        System.out.println("队列数量" + executor.getQueue().size());
-        System.out.println("活跃数量" + executor.getActiveCount());
-        System.out.println("总共数量" + executor.getTaskCount());
-        System.out.println("完成数量" + executor.getCompletedTaskCount());
-    }
-
-    @Async
-    public void taskMeterPdfInfo2(@RequestParam String id, @RequestParam String fileUrl) throws Exception {
-        InputStream inputStreamByUrl = CommonUtil.getOSSInputStreamTow(fileUrl);
-        byte[] result = IOUtils.toByteArray(inputStreamByUrl);
-        String dataFileUrl = FileUtils.getSysLocalFileUrl() + "/privateUrl/" + id + ".pdf";
-        if (result != null) {
-            MultipartFile files = new MockMultipartFile("file", SnowFlakeUtil.getId() + ".pdf", "text/plain", IOUtils.toByteArray(new ByteArrayInputStream(result)));
-            //重新上传
-            BladeFile bladeFile = this.newIOSSClient.uploadFileByInputStream(files);
-            if (bladeFile != null) {
-                 String sql = "update u_archive_file set file_url='"+bladeFile.getLink()+"' , pdf_file_url='"+bladeFile.getLink()+"' where id="+id;
-                 jdbcTemplate.execute(sql);
-                System.out.println("11--"+bladeFile.getLink());
-            } else {
-                System.out.println("---四百--");
-            }
-        }
-    }
-}

+ 0 - 150
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/synDataController.java

@@ -1,150 +0,0 @@
-package org.springblade.evisa.controller;
-
-
-import io.swagger.annotations.Api;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
-import org.jsoup.nodes.Element;
-import org.jsoup.select.Elements;
-import org.springblade.core.tool.utils.FileUtil;
-import org.springblade.core.tool.utils.IoUtil;
-import org.springblade.evisa.utils.SignFtpUtilBy210;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-/**
- * 清表基础数据表 控制器
- *
- * @author BladeX
- * @since 2022-05-18
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("/evisaInfo")
-@Api(value = "电签类", tags = "电签类接口")
-@Slf4j
-public class synDataController {
-
-    @Autowired
-    StringRedisTemplate RedisTemplate;
-
-    // jdbc
-    private final JdbcTemplate jdbcTemplate;
-
-
-    // 线程池
-    @Resource(name = "taskExecutor1")
-    private ThreadPoolExecutor executor;
-
-
-
-    // 默认值定时器操作
-    //@Scheduled(cron = "0/10 * * * * ?")
-    public void SignInfo() {
-        //执行代码
-        log.info("扫描开始");
-        String sql = "SELECT MAX(p_key_id) as p_key_id,html_url from m_wbs_tree_private22 where type=2 and is_deleted=0 and wbs_type=1 and html_url is not null  GROUP BY html_url LIMIT 30";
-        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
-        if (maps != null && maps.size() >= 1) {//&& SystemUtils.isLinux()
-            for (Map<String, Object> dataInfo : maps) {
-                if (executor.getQueue().size()<=40 ) {
-                    String pKeyId = dataInfo.get("p_key_id").toString();
-                    String htmlUrl = dataInfo.get("html_url") + "";
-                    Boolean aBoolean = RedisTemplate.hasKey("sign-" + pKeyId);
-
-                    if (!aBoolean) {
-                        RedisTemplate.opsForValue().set("sign-" + pKeyId, "1",100, TimeUnit.SECONDS);
-                        CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
-                            try {
-                                /*===============执行批量任务===============*/
-                                this.checkIsExsitTaskBatch(pKeyId,htmlUrl );
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            }
-                        }, executor);
-                    }
-                }
-            }
-        }
-        System.out.println("队列数量" + executor.getQueue().size());
-        System.out.println("活跃数量" + executor.getActiveCount());
-        System.out.println("总共数量" + executor.getTaskCount());
-        System.out.println("完成数量" + executor.getCompletedTaskCount());
-    }
-
-    // 逻辑处理
-    private void checkIsExsitTaskBatch(String pKeyId, String htmlUrl) throws FileNotFoundException {
-        String textSql  = "SELECT * from m_textdict_info where tab_id='"+pKeyId+"' and type=4";
-        List<Map<String, Object>> mapList = jdbcTemplate.queryForList(textSql);
-        if(mapList.size()>=1){
-            String reHtml = "";
-            String htmlName = "";
-            if(htmlUrl.indexOf("hongchuangyanfa/Desktop")>=0){
-                reHtml = htmlUrl.substring(htmlUrl.lastIndexOf("hongchuangyanfa/Desktop/")+24,htmlUrl.length());
-            }
-            htmlName = htmlUrl.substring(htmlUrl.lastIndexOf("/")+1,htmlUrl.length());
-            String localUrl = "/Users/hongchuangyanfa/Desktop/pdf/"+htmlName;
-            SignFtpUtilBy210.downloadFile(localUrl, reHtml);
-
-            //读取html页面信息
-            InputStream inputStreamByUrl = new FileInputStream(new File(localUrl));
-            String htmlString = IoUtil.readToString(inputStreamByUrl);
-
-            //样式集合
-            Document doc = Jsoup.parse(htmlString);
-            //解析
-            Element table = doc.select("table").first();
-            if(table!=null) {
-                Elements trs = table.select("tr");
-                for (Map<String, Object> dataText : mapList) {
-                    String trindex = dataText.get("col_key") + "";
-                    String sigRoleName = dataText.get("sig_role_name") + "";
-
-                    Elements elementsByAttribute = table.getElementsByAttributeValue("keyname", trindex);
-                    if (elementsByAttribute.size() >= 1) {
-                        for (Element element : elementsByAttribute) {
-                            if (element.html().indexOf("el-input") >= 0) {
-                                if (!element.hasAttr("defText")) {
-                                    element.children().removeAttr("defText");
-                                    element.children().attr("defText", sigRoleName);
-                                }
-
-                            } else {
-                                if (!element.hasAttr("defText")) {
-                                    element.children().removeAttr("defText");
-                                    element.attr("defText", sigRoleName);
-                                }
-                            }
-                            File writeFile = new File(localUrl);
-                            FileUtil.writeToFile(writeFile, doc.html(), Boolean.parseBoolean("UTF-8"));
-                        }
-                    }
-                }
-                SignFtpUtilBy210.uploadFile(localUrl,reHtml);
-            }
-        }
-        String upSql  = "update m_wbs_tree_private22 set is_deleted=10 where p_key_id='"+pKeyId+"'";
-        jdbcTemplate.execute(upSql);
-        RedisTemplate.delete("sign-" + pKeyId);
-    }
-
-}

+ 12 - 10
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVDataServiceImpl.java

@@ -86,9 +86,7 @@ public class EVDataServiceImpl implements EVDataService {
             this.addSignatureTaskBatch(taskApp);
             //for循环 pdfUrl分割
             String fileUrl = CommonUtil.replaceOssUrl(taskApp.getSignPdfUrl());
-            System.out.println("s1231312"+fileUrl);
             List<String> eVisaConfigList = PDFUtils.getPdfSignIds(fileUrl, taskApp);
-            System.out.println("安心签关键字个数" + eVisaConfigList.size());
             if (eVisaConfigList == null || eVisaConfigList.size() == 0) {
                 //没有电签配置,默认当前任务为不签字审批,返回成功
                 taskApp.setSigState(2);
@@ -99,10 +97,8 @@ public class EVDataServiceImpl implements EVDataService {
             // 获取pdf上的电签Ids
             String ids = String.join(",", eVisaConfigList);
             if (taskApp.getRemarkType().equals("1")) { //安心签
-                System.out.println("进入安心签");
                 //添加电签策略
                 List<SealStrategyVO> strategyListByAXQ = getStrategyListByAXQ(taskApp, ids);
-                System.out.println("安心签策略个数" + strategyListByAXQ.size());
                 if (strategyListByAXQ == null || Func.isEmpty(strategyListByAXQ) || strategyListByAXQ.size() == 0) {
                     List<Map<String, Object>> mapList = jdbcTemplate.queryForList("SELECT * from m_textdict_info where type=6  and is_deleted=0 and id in(" + ids + ")");
                     if (mapList != null && mapList.size() > 0) {
@@ -123,7 +119,6 @@ public class EVDataServiceImpl implements EVDataService {
                 }
 
                 //调用签字逻辑
-                System.out.println("安心签完毕开始签字" );
                 signTaskBatchByAXQZ(strategyListByAXQ, taskApp);
                 if (taskApp.getSigState() != 1) {
                     return;
@@ -167,12 +162,14 @@ public class EVDataServiceImpl implements EVDataService {
             }
             RedisTemplate.delete("sign-" + taskApp.getFormDataId());
             // 添加废除通知
-            //messageWarningClient.
         }
         //循环结束
     }
 
 
+
+
+
     public void addSignatureTaskBatch(TaskSignInfoVO taskApp) {
         // 添加签字任务
         if (taskApp.getSigType() == 1) {
@@ -198,6 +195,7 @@ public class EVDataServiceImpl implements EVDataService {
     }
 
     // 获取pdf 文件
+
     @Transactional
     public void SignBackPdfInfo(TaskSignInfoVO taskApp) {
         Integer totalCount = this.jdbcTemplate.queryForObject("select min(exe_count) as exe_count from u_task_parallel where parallel_process_instance_id in(" + taskApp.getParallelProcessInstanceId() + ")", Integer.class);
@@ -318,6 +316,9 @@ public class EVDataServiceImpl implements EVDataService {
                         }
                     }
                     updateSql = "update u_information_query set pdf_trial_url_position='" + pdfTrialUrlPosition + "',business_time='" + taskApp.getPdfDate() + "',node_pdf_url='" + nodePdfUrl + "',e_visa_pdf_page=" + pdfPage + ",e_visa_pdf_size=" + pdfSize + ",e_visa_pdf_url='" + taskApp.getLastFilePdfUrl() + "',status='" + taskApp.getSigType() + "',update_time=SYSDATE() where id='" + taskApp.getFormDataId() + "' ";
+                    //修改 计量 需要引用的 附件信息
+                    String updataFile = "update s_attachment_form set file_url='"+taskApp.getLastFilePdfUrl()+"' ,file_pdf_url='"+taskApp.getLastFilePdfUrl()+"' where select_id='"+taskApp.getFormDataId()+"' and contr";
+                    jdbcTemplate.execute(updataFile);
                 } else if (taskApp.getApprovalType() == 2) {
                     updateSql = "update u_archive_file set e_visa_file='" + taskApp.getLastFilePdfUrl() + "',status='" + taskApp.getSigType() + "',update_time=SYSDATE() where id='" + taskApp.getFormDataId() + "' ";
                 } else if (taskApp.getApprovalType() == 3) { // 日志
@@ -346,7 +347,9 @@ public class EVDataServiceImpl implements EVDataService {
                 }
             }
             RedisTemplate.delete("sign-" + taskApp.getFormDataId());
+            Thread.sleep(1000);
         } catch (Exception e) {
+            RedisTemplate.delete("sign-" + taskApp.getFormDataId());
             taskApp.setSigState(2);
             taskApp.setSignSmg("修改业务数据异常-请联系开发人员");
             e.printStackTrace();
@@ -489,7 +492,6 @@ public class EVDataServiceImpl implements EVDataService {
 
     // 添加电签策略 -- 东方中讯
     public List<Map<String, Object>> getStrategyListByDFZX(TaskSignInfoVO task, String ids) {
-
         String[] strArray = Func.toStrArray(task.getUserId());
         String[] userNames = Func.toStrArray(task.getNickName());
         List<Map<String, Object>> maps = new ArrayList<>();
@@ -715,8 +717,8 @@ public class EVDataServiceImpl implements EVDataService {
         Object[] result = null;
         String fileUrl = pdfUrl;
         if (list.size() >= 10 || fileByte.length > 10 * 1000 * 1000) {
-            String inUrl = "/inp/" + DateUtil.today();
-            String outUrl = "/out/" + DateUtil.today();
+            String inUrl = "inp/" + DateUtil.today();
+            String outUrl = "out/" + DateUtil.today();
             SignFtpUtil.FTPCreateDir(inUrl);
             SignFtpUtil.FTPCreateDir(outUrl);
             String locPdfUrl = inUrl + "/" + filecode + ".pdf";
@@ -763,7 +765,7 @@ public class EVDataServiceImpl implements EVDataService {
             }
         }
 
-        if (fileUrl.indexOf("aliyuncs.com") >= 0 || fileUrl.indexOf("183.247.216.148") >= 0 || fileUrl.indexOf("152.168.2.15") >= 0) {
+        if (fileUrl.indexOf("xinan1.zos.ctyun.cn") >= 0 || fileUrl.indexOf("aliyuncs.com") >= 0 || fileUrl.indexOf("183.247.216.148") >= 0 || fileUrl.indexOf("152.168.2.15") >= 0) {
             taskApp.setSigState(2);
             taskApp.setSignSmg("电签后-无法读取本地文件");
             SignBackPdfInfo(taskApp);

+ 5 - 10
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java

@@ -467,7 +467,7 @@ public class EVisaServiceImpl implements EVisaService {
 
                 if (taskFile.getRemarkType().equals("2")) {
                     // 查询任务下所有
-                    String sqlinfo = " SELECT * from ( SELECT a.id as keyWord,a.project_id,a.pyzbx ,a.pyzby,(SELECT acc_code from blade_user where id='" + task.getUserId() + "' and is_deleted=0  ) as sealId from m_textdict_info a where  a.type =2 and a.id in (" + ids + ")  and sig_role_id in (SELECT DISTINCT c.role_id from m_project_assignment_user c  where c.contract_id=" + contractId + " and user_id=" + task.getUserId() + " and c.is_deleted=0 ) ) x where x.sealId is not null and project_id='"+projectId+"' ";
+                    String sqlinfo = " SELECT * from ( SELECT a.id as keyWord,a.project_id,a.pyzbx ,a.pyzby,(SELECT acc_code from blade_user where id='" + task.getUserId() + "' and is_deleted=0  ) as sealId from m_textdict_info a where  a.type =2 and a.id in (" + ids + ")  and sig_role_id in (SELECT DISTINCT c.role_id from m_project_assignment_user c  where c.contract_id=" + contractId + " and user_id=" + task.getUserId() + " and c.is_deleted=0 ) ) x where x.sealId is not null and project_id='" + projectId + "' ";
                     System.out.println("东方中讯-个人-user-id" + task.getUserId() + "--SQL=" + sqlinfo);
                     List<Map<String, Object>> maps2 = jdbcTemplate.queryForList(sqlinfo);
                     List<Map<String, Object>> maps = new ArrayList<>();
@@ -786,7 +786,6 @@ public class EVisaServiceImpl implements EVisaService {
 
     /**
      * 东方 中讯
-     *
      * @throws Exception
      */
     public String signPdfByDFZX(HashMap<String, Object> request) {
@@ -822,7 +821,7 @@ public class EVisaServiceImpl implements EVisaService {
             converterList.add(1, converter);
 
             HashMap<String, Object> retData = restTemplate.postForObject(url, request, HashMap.class);
-            System.out.println("东方中讯uRL"+url);
+            System.out.println("东方中讯uRL" + url);
             String code = retData.get("code").toString();
             String msg = retData.get("msg").toString();
 
@@ -854,7 +853,6 @@ public class EVisaServiceImpl implements EVisaService {
             if ("20".equals(sys_isonline) || SystemUtils.isWindows() || SystemUtils.isMacOs()) {
                 SIGN_HOST = "113.250.191.113";
             }
-            SIGN_HOST = "113.250.191.113";
             System.out.println("电签Ip===:" + SIGN_HOST);
             PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 24000000, 81000000);
             System.out.println("paperlessClient创建成功");
@@ -893,7 +891,6 @@ public class EVisaServiceImpl implements EVisaService {
 
             requestBody.setPdfBeans(pdfBeans);
             //***********************构造机构章策略 ********************************
-            System.out.println("【电签模块】10" + pdfVO.getStrategyVoList().size());
             List<SealStrategy> sealStrategies = this.generateSealStrategies(pdfVO.getStrategyVoList());
             if (null == sealStrategies || sealStrategies.size() <= 0) {
                 logger.info("【电签模块】{}", "签章策略为空");
@@ -901,7 +898,6 @@ public class EVisaServiceImpl implements EVisaService {
             }
             requestBody.setSealStrategies(sealStrategies);
 
-            System.out.println("【电签模块】11" + sealStrategies.size());
             //签章后文件保存地址,不为空时,直接将签章文件保存在此地址,不再返回签章后文档数据;ftp:auto
             requestBody.setOutputFilepath("");
 
@@ -909,7 +905,6 @@ public class EVisaServiceImpl implements EVisaService {
             requestBody.setTimestampChannel(BaseConstants.TIME_STAMP_CHANNEL_CFCA);
             //获取场景证书的方式默认值为0;0:实时从CFCA CA服务申请下载场景证书;1:使用从CFCA CA服务预先申请下载并存储在本地的场景证书;
             requestBody.setSceneCertChannel(BaseConstants.SCEND_CERT_CHANNEL_REAL);
-            System.out.println("【电签模块】12" + sealStrategies.size());
             compoundSealPdfListDetachedRequest.setBody(requestBody);
             //****************************** 请求服务端进行签章 *********************************************
             System.out.println("-----------------------" + new Date().toString() + "开始" + transactionNo + "----------------------------");
@@ -1220,7 +1215,7 @@ public class EVisaServiceImpl implements EVisaService {
 
                 if (vo.getSealType().equals("2")) {
                     //设置PDF坐标原点,签章图片定位点,默认为PDF左下角,签章图片定位为左下角
-                   if (StringUtils.isNotEmpty(vo.getIsCenterCoordinate())) {
+                    if (StringUtils.isNotEmpty(vo.getIsCenterCoordinate())) {
                         sealStrategy.setIsCenterCoordinate(vo.getIsCenterCoordinate());
                     }
 
@@ -1708,7 +1703,7 @@ public class EVisaServiceImpl implements EVisaService {
             List<PdfBean> pdfBeans = new ArrayList<>();
             PdfBean pdfBean = new PdfBean();
             pdfBean.setBizSerialNo(GUIDUtil.generateId());
-            pdfBean.setInputSource("/data/sdc/signInfo" + loPdfurl);
+            pdfBean.setInputSource("/data/sdc/signInfo/" + loPdfurl);
             pdfBean.setInputType(BaseConstants.INPUT_TYPE_FILEPATH);
             pdfBeans.add(pdfBean);
             requestBody.setPdfBeans(pdfBeans);
@@ -1721,7 +1716,7 @@ public class EVisaServiceImpl implements EVisaService {
             requestBody.setSealStrategies(sealStrategies);
 
             //签章后文件保存地址,不为空时,直接将签章文件保存在此地址,不再返回签章后文档数据;ftp:auto
-            requestBody.setOutputFilepath("/data/sdc/signInfo" + outPdfUrl);
+            requestBody.setOutputFilepath("/data/sdc/signInfo/" + outPdfUrl);
 
             //时间戳方式,默认为0;0:实时访问CFCA 时间戳服务;1:使用从CFCA购置并在本地部署的时间戳服务器产品;
             requestBody.setTimestampChannel(BaseConstants.TIME_STAMP_CHANNEL_CFCA);

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

@@ -33,6 +33,10 @@ public class ScrDataServiceImpl implements ScrDataService {
         this.sctTaskBatch2(taskApp);
     }
 
+
+
+
+
     /**
      * 电签检查
      */
@@ -55,11 +59,12 @@ public class ScrDataServiceImpl implements ScrDataService {
         String ids = String.join(",", positions);
         List<Map<String, Object>> strategyListByDFZX = getStrategyListByDFZX(taskApp, ids);
         if(strategyListByDFZX==null || strategyListByDFZX.size()==0){
+
             System.out.println("为获取到签字的关键字");
             return;
         }
 
-        positions = strategyListByDFZX.stream().map(map -> map.get("keyWord").toString()).collect(Collectors.toList());
+ /*       positions = strategyListByDFZX.stream().map(map -> map.get("keyWord").toString()).collect(Collectors.toList());
         String keyWord = String.join(",", positions);
         List<PDFIndexInfo> pdfIndexInfo = PdfAddimgUtil.findKeywordPostions(pdfData, keyWord);
 
@@ -139,7 +144,7 @@ public class ScrDataServiceImpl implements ScrDataService {
         // 使用retainAll方法来移除两个集合中相同的元素,留下不同的元素
         differentElements.removeAll(sucess);
 
-        System.out.println(taskApp.getId() +"-"+"总共:" + positions.size() + "-剩下-" + differentElements.size());
+        System.out.println(taskApp.getId() +"-"+"总共:" + positions.size() + "-剩下-" + differentElements.size());*/
     }
 
 
@@ -152,7 +157,7 @@ public class ScrDataServiceImpl implements ScrDataService {
         if (mapList != null && mapList.size() > 0) {
             for (Map<String, Object> task : mapList) {
                 String taskUserId = Func.toStr(task.get("task_user"));
-                String sqlinfo = " SELECT * from ( SELECT a.id as keyWord,a.project_id,a.pyzbx ,a.pyzby,(SELECT acc_code from blade_user where id='" + taskUserId + "' and is_deleted=0  ) as sealId from m_textdict_info a where  a.type =2 and a.id in (" + ids + ")  and sig_role_id in (SELECT DISTINCT c.role_id from m_project_assignment_user c  where c.contract_id=" + taskApp.getContractId() + " and user_id=" + taskUserId + " and c.is_deleted=0 ) ) x where x.sealId is not null and x.project_id='" + taskApp.getProjectId() + "'";
+                String sqlinfo = " SELECT * from ( SELECT a.id as keyWord,a.project_id,a.pyzbx ,a.pyzby,(SELECT acc_code from blade_user where id='" + taskUserId + "' and is_deleted=0  ) as sealId from m_textdict_info a where  a.type =2 and a.id in (" + ids + ")  and sig_role_id in (SELECT DISTINCT c.role_id from m_project_assignment_user c  where c.contract_id=" + taskApp.getContractId() + " and user_id=" + taskUserId + " and c.is_deleted=0 ) ) x where x.sealId is not null ";
                 System.out.println("扫描-签字-sql=" + sqlinfo);
                 List<Map<String, Object>> maps3 = jdbcTemplate.queryForList(sqlinfo);
                 maps2.addAll(maps3);
@@ -160,7 +165,7 @@ public class ScrDataServiceImpl implements ScrDataService {
         }
         // 添加章
         if (taskApp.getStatus().equals("2")) {
-            String sqlinfo = "SELECT a.id as keyWord,a.pyzbx,a.pyzby,b.certificate_number as sealId from m_textdict_info a ,m_sign_pfx_file b where a.sig_role_id = b.pfx_type and b.project_contract_role like '%" + taskApp.getContractId() + "%' and a.is_deleted=0 and b.is_deleted=0 and a.type=6 and a.id in(" + ids + ") and a.project_id=" + taskApp.getProjectId() + "";
+            String sqlinfo = "SELECT a.id as keyWord,a.pyzbx,a.pyzby,b.certificate_number as sealId from m_textdict_info a ,m_sign_pfx_file b where a.sig_role_id = b.pfx_type and b.project_contract_role like '%" + taskApp.getContractId() + "%' and a.is_deleted=0 and b.is_deleted=0 and a.type=6 and a.id in(" + ids + ")";
             System.out.println("扫描-签章-sql=" + sqlinfo);
             List<Map<String, Object>> maps3 = jdbcTemplate.queryForList(sqlinfo);
             if (mapList != null && mapList.size() > 0) {
@@ -187,6 +192,12 @@ public class ScrDataServiceImpl implements ScrDataService {
                 maps.add(keyList.get(0));
             }
         }
+
+        if(maps!=null & maps.size()==0 && mapList.size()>=4 ){
+            System.out.println("123");
+        }
+
+
         return maps;
     }
 

+ 1 - 1
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/FileUtils.java

@@ -117,7 +117,7 @@ public class FileUtils {
         } catch (Exception e) {
             e.printStackTrace();
         }
-        return "";
+        return "0";
     }
 
 }

+ 11 - 7
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/PDFUtils.java

@@ -71,19 +71,21 @@ public class PDFUtils {
         }
     }
 
-    public static void main1(String[] args) {
-        String pdfUrl = "/Users/hongchuangyanfa/Downloads/bacb5814950ae9268f67904912c571d0.pdf";
+    public static void mai123n(String[] args) {
+        String pdfUrl = "/Users/hongchuangyanfa/Desktop/22222/1278页.pdf";
         getPdfSignIds(pdfUrl);
     }
 
-    public static List<String>  getPdfSignIds(String pdfUrl) {
+    public static List<String>  getPdfSignIds(String pdfUr) {
         List<String> eVisaConfigList = new ArrayList<>();
         try  {
-            InputStream inputStream = new FileInputStream(new File(pdfUrl));//CommonUtil.getOSSInputStream(pdfUrl);
+            InputStream inputStream = new FileInputStream(new File(pdfUr));
             PDDocument document = PDDocument.load(inputStream);
             PDFTextStripper stripper = new PDFTextStripper();
             String text = stripper.getText(document);
             String[] lines = text.split("[ \\n]+");
+            String regex = "^\\d{4}年\\d{2}月\\d{2}日$";
+
             for(int k=0;k<lines.length;k++){
                 String textStr = lines[k];
                 if(textStr.indexOf("*")>=0){
@@ -98,11 +100,11 @@ public class PDFUtils {
                         }
                     }
                     if (txt.length() >= 15 && Func.isNumeric(txt)) {
-                        System.out.println(txt);
                         eVisaConfigList.add(txt);
                     }
                 }
-                //
+
+                // 特殊处理
                 if(textStr.indexOf("1")>=0){
                     String txt = textStr.substring(textStr.indexOf("1"));
                     if (txt.length() >= 15 && Func.isNumeric(txt)) {
@@ -112,12 +114,14 @@ public class PDFUtils {
                 }
             }
 
+
             List<String> unique = eVisaConfigList.stream().distinct().collect(Collectors.toList());
             document.close();
             return unique;
         }catch (Exception e){
             e.printStackTrace();
-            return null;
+            System.out.println("pdf大小为0");
+            return eVisaConfigList;
         }
     }
 

+ 2 - 2
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/SignFtpUtil.java

@@ -16,8 +16,8 @@ public class SignFtpUtil {
     private static final int PORT = 6233 ;
     private static final String USER = "signAdmin";
     private static final String PASS = "123456";
-    private static final int CONNECT_TIMEOUT = 9000000; // 30秒
-    private static final int DATA_TIMEOUT = 900000; // 30秒
+    private static final int CONNECT_TIMEOUT = 900000; // 30秒
+    private static final int DATA_TIMEOUT = 90000; // 30秒
 
     /**
      *  获取ftp 客户端

+ 8 - 3
blade-service/blade-manager/pom.xml

@@ -202,7 +202,12 @@
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>io</artifactId>
+            <version>7.2.4</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
     <build>
         <plugins>
@@ -229,11 +234,11 @@
                     <target>${java.version}</target>
                     <encoding>${project.build.sourceEncoding}</encoding>
                     <compilerArguments>
-                        <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar;${java.home}/lib/jsse.jar
+                        <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar:${java.home}/lib/jsse.jar
                         </bootclasspath>
                     </compilerArguments>
                 </configuration>
             </plugin>
         </plugins>
     </build>
-</project>
+</project>

+ 1 - 15
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -2199,7 +2199,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                     } else {
                                         byte[] byteNew = IOUtils.toByteArray(imageIn);
                                         bytes = CommonUtil.compressImage(byteNew);
-                                      //  bytes = IOUtils.toByteArray(imageIn);
+                                       // bytes = IOUtils.toByteArray(imageIn);
                                     }
                                     // 这里根据实际需求选择图片类型
                                     int pictureIdx = workbook.addPicture(bytes, 6);
@@ -2288,20 +2288,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     if (row != null) {
                         Cell cell = row.getCell(x1 - 1);
                         if (cell != null || ObjectUtils.isNotEmpty(cell)) {
-//                            short fontIndex = cell.getCellStyle().getFontIndex();
-//                            Font oldfontAt = workbook.getFontAt(fontIndex);
-//                            Font redFont = workbook.createFont();
-//                            redFont.setColor(IndexedColors.WHITE.getIndex()); //设置字体颜色
-//                            redFont.setFontHeightInPoints(Short.valueOf("1"));//设置字体大小
-//                            redFont.setFontName(oldfontAt.getFontName());//设置字体
-//                            String CellValue = cell.getStringCellValue().trim();
-//
-//                            CellStyle newStyle = workbook.createCellStyle(); //创建单元格样式
-//                            newStyle.cloneStyleFrom(cell.getCellStyle());
-//                            newStyle.setFont(redFont);
-//                            newStyle.setShrinkToFit(true);
-//                            cell.setCellStyle(newStyle);
-//                            cell.setCellValue(dqid);
                              // 获取单元格的现有值
                             String existingValue = cell.getStringCellValue();
                             // 获取单元格的现有富文本字符串

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/SignPfxFilePreServiceImpl.java

@@ -41,7 +41,7 @@ public class SignPfxFilePreServiceImpl implements ISignPfxFilePreService {
     @Autowired
     private SignPfxFilePreMapper signPfxFilePreMapper;
 
-    private final String excelTabFileUrl = "https://blade-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20240731/cf9534fd3ac688df5f9d7a802ba754c0.xlsx";
+    private final String excelTabFileUrl = "https://xinan1.zos.ctyun.cn/blade-oss-chongqing/upload/20240731/cf9534fd3ac688df5f9d7a802ba754c0.xlsx";
     private final String wbsHtmlUrl = "privateUrl/1771066158930198528.html";
     @Autowired
     private BeanUtil beanUtil;

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/FileUtils.java

@@ -3,6 +3,7 @@ package org.springblade.manager.utils;
 import com.aspose.cells.PdfSaveOptions;
 import com.aspose.cells.SaveFormat;
 import com.aspose.cells.Workbook;
+import com.itextpdf.io.image.ImageType;
 import com.itextpdf.text.Document;
 import com.itextpdf.text.pdf.PdfCopy;
 import com.itextpdf.text.pdf.PdfReader;
@@ -1050,4 +1051,7 @@ public class FileUtils {
         return file;
     }
 
+
+
+
 }