Quellcode durchsuchen

2023 1 8 保存更新

zhuwei vor 1 Jahr
Ursprung
Commit
4f27d97885
16 geänderte Dateien mit 291 neuen und 156 gelöschten Zeilen
  1. 2 2
      blade-common/src/main/java/org/springblade/common/utils/AsyncConfigurer.java
  2. 15 12
      blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  3. 2 0
      blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java
  4. 1 2
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliOssBuilder.java
  5. 2 2
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
  6. 1 1
      blade-service-api/blade-e-visa-api/src/main/java/org/springblade/evisa/feign/EVisaClientFallBack.java
  7. 7 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java
  8. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskBatchMapper.xml
  9. 6 5
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  10. 97 97
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVisaController.java
  11. 17 14
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java
  12. 27 9
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/PDFUtils.java
  13. 80 0
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/ThreadPoolDemo.java
  14. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/SignPfxFileController.java
  15. 12 8
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java
  16. 19 1
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

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

@@ -15,7 +15,7 @@ public class AsyncConfigurer {
     /**
      * cpu 核心数量
      */
-    public static final int cpuNum =10 ;//Runtime.getRuntime().availableProcessors();
+    public static final int cpuNum =6 ;//Runtime.getRuntime().availableProcessors();
 
     /**
      * 线程池配置
@@ -25,7 +25,7 @@ public class AsyncConfigurer {
     @Bean("taskExecutor1")
     public ThreadPoolExecutor getAsyncExecutor() {
         return new ThreadPoolMonitor(cpuNum
-                , 20
+                , 12
                 , 30
                 , TimeUnit.SECONDS
                 , new LinkedBlockingQueue<>(2000)

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

@@ -4,6 +4,7 @@ import cn.hutool.core.io.FileUtil;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.aliyun.oss.common.utils.IOUtils;
 import com.drew.imaging.ImageMetadataReader;
 import com.drew.imaging.ImageProcessingException;
 import com.drew.metadata.Metadata;
@@ -110,17 +111,14 @@ public class CommonUtil {
     /**
      * 根据OSS文件路径获取文件输入流
      */
-    public static InputStream getOSSInputStream(String urlStr) throws Exception {
+    public static synchronized InputStream getOSSInputStream(String urlStr) throws Exception {
         //获取OSS文件流
-        URL imageUrl = new URL(urlStr);
-        HttpURLConnection conn = null;
+        URL url =new URL(urlStr);
+        final URLConnection conn = url.openConnection();
+        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
         try {
-            conn = (HttpURLConnection) imageUrl.openConnection();
-            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
-            InputStream inputStream = conn.getInputStream();
-
-            return inputStream;
-        } catch (Exception e) {
+            return conn.getInputStream();
+        } catch (Exception e){
             return null;
         }
     }
@@ -149,12 +147,17 @@ public class CommonUtil {
     /**
      * 获取字节数组
      */
-    public static byte[] InputStreamToBytes(InputStream is) throws IOException {
+    public static synchronized byte[] InputStreamToBytes(InputStream is){
         BufferedInputStream bis = new BufferedInputStream(is);
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         int date = -1;
-        while ((date = bis.read()) != -1) {
-            os.write(date);
+        while (true) {
+            try {
+                if (!((date = bis.read()) != -1)) break;
+                os.write(date);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
         }
         return os.toByteArray();
     }

+ 2 - 0
blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java

@@ -36,6 +36,8 @@ public class AuthProvider {
         DEFAULT_SKIP_URL.add("/example");
         DEFAULT_SKIP_URL.add("/oauth/token/**");
         DEFAULT_SKIP_URL.add("/loginByToken");
+        DEFAULT_SKIP_URL.add("/loginByToken2");
+        DEFAULT_SKIP_URL.add("/submit2");
         DEFAULT_SKIP_URL.add("/exceltab/callbackSave");
         DEFAULT_SKIP_URL.add("/oauth/captcha/**");
         DEFAULT_SKIP_URL.add("/oauth/clear-cache/**");

+ 1 - 2
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliOssBuilder.java

@@ -52,11 +52,10 @@ public class AliOssBuilder {
         // 设置失败请求重试次数,默认为3次。
         conf.setMaxErrorRetry(5);
         OssProperties ossProperties = new OssProperties();
-
         ossProperties.setEndpoint(oss.getEndpoint());
 
         //本地测试1
-        //ossProperties.setEndpoint("https://oss-cn-hangzhou.aliyuncs.com/");
+      //  ossProperties.setEndpoint("https://oss-cn-hangzhou.aliyuncs.com/");
 
         ossProperties.setAccessKey(oss.getAccessKey());
         ossProperties.setSecretKey(oss.getSecretKey());

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

@@ -145,8 +145,8 @@ public class OssBuilder {
                 Oss defaultOss = new Oss();
                 defaultOss.setId(0L);
                 defaultOss.setCategory(OssEnum.of(ossProperties.getName()).getCategory());
-              //  defaultOss.setEndpoint(ossProperties.getEndpoint());
-                defaultOss.setEndpoint("https://oss-cn-hangzhou.aliyuncs.com");
+                defaultOss.setEndpoint(ossProperties.getEndpoint());
+               // defaultOss.setEndpoint("https://oss-cn-hangzhou.aliyuncs.com");
                 defaultOss.setBucketName(ossProperties.getBucketName());
                 defaultOss.setAccessKey(ossProperties.getAccessKey());
                 defaultOss.setSecretKey(ossProperties.getSecretKey());

+ 1 - 1
blade-service-api/blade-e-visa-api/src/main/java/org/springblade/evisa/feign/EVisaClientFallBack.java

@@ -1,12 +1,12 @@
 package org.springblade.evisa.feign;
 
+import feign.hystrix.FallbackFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springblade.evisa.vo.CertBeanVO;
 import org.springblade.evisa.vo.EVisaMakeSealVO;
 import org.springblade.evisa.vo.EVisaTaskApprovalVO;
 import org.springblade.evisa.vo.TaskArchiveDTO;
-import org.springframework.cloud.openfeign.FallbackFactory;
 import org.springframework.stereotype.Component;
 
 @Component

+ 7 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java

@@ -47,6 +47,13 @@ public class AuthClient extends BaseEntity {
      */
     @ApiModelProperty(value = "客户端密钥")
     private String clientSecret;
+
+    /**
+     * 名称
+     */
+    @ApiModelProperty(value = "名称")
+    private String name;
+
     /**
      * 资源集合
      */

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskBatchMapper.xml

@@ -26,7 +26,7 @@
     </delete>
 
     <select id="queryDataInfo" resultMap="taskBatchResultMap">
-        SELECT DISTINCT JSON_EXTRACT(a.json_data, '$.formDataId') ,a.* from u_task_batch a GROUP BY JSON_EXTRACT(a.json_data, '$.formDataId') LIMIT 140
+        SELECT a.* from u_task_batch a LIMIT 40
     </select>
 
 </mapper>

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

@@ -61,7 +61,6 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -580,19 +579,20 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
     }
 
 
-    @Scheduled(cron = "0 */1 * * * ?")
-    public void SignInfo() {
+    //@Scheduled(cron = "0/20 * * * * ?")
+    public void SignInfo() throws InterruptedException {
         //执行代码
         logger.debug("扫描开始");
         List<TaskBatch> maps = taskBatchService.queryDataInfo();
-        if (maps != null && maps.size() >= 1 && executor.getQueue().size() <= 200) {
+        if (maps != null && maps.size() >= 1 && executor.getQueue().size()<=200) {
             for (TaskBatch dataInfo : maps) {
+                if (executor.getQueue().size()<=40 ) {
                 String jsonData = dataInfo.getJsonData();
                 TaskApprovalVO taskApprovalVO = JSON.parseObject(jsonData, TaskApprovalVO.class);
                 String taskBatchId = dataInfo.getId().toString();
                 Long userId = dataInfo.getCreateUser();
                 String nickName = dataInfo.getNickName();
-
+                Thread.sleep(100);
                 Boolean aBoolean = RedisTemplate.hasKey("sign-" + taskApprovalVO.getFormDataId());
                 System.out.println("---------" + aBoolean);
                 if (!aBoolean) {
@@ -606,6 +606,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         }
                     }, executor);
                 }
+                }
             }
         }
         System.out.println("队列数量" + executor.getQueue().size());

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

@@ -1,97 +1,97 @@
-package org.springblade.evisa.controller;
-
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.StringUtils;
-import org.springblade.business.entity.TaskBatch;
-import org.springblade.business.vo.TaskApprovalVO;
-import org.springblade.core.boot.ctrl.BladeController;
-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.*;
-
-import javax.annotation.Resource;
-import java.io.BufferedReader;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.*;
-import java.util.concurrent.*;
-
-import java.lang.management.ManagementFactory;
-import java.lang.management.OperatingSystemMXBean;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * 清表基础数据表 控制器
- *
- * @author BladeX
- * @since 2022-05-18
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("/evisaInfo")
-@Api(value = "电签类", tags = "电签类接口")
-@Slf4j
-public class EVisaController {
-
-    @Autowired
-    StringRedisTemplate RedisTemplate;
-
-    private final JdbcTemplate jdbcTemplate;
-
-    // 线程池
-    @Resource(name = "taskExecutor1")
-    private ThreadPoolExecutor executor;
-
-    // 电签主类
-  //  @Scheduled(cron = "0 */1 * * * ?")
-    public void SignInfo() {
-
-        //执行代码
-        log.info("扫描开始");
-        String sql = "SELECT * from u_task_batch where is_deleted =0 LIMIT 100";
-        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
-        if (maps != null && maps.size() >= 1) {
-            for (Map<String, Object> dataInfo : maps) {
-                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());
-                System.out.println(aBoolean);
-
-                RedisTemplate.opsForValue().set("sign-" + taskApprovalVO.getFormDataId(), "1", 600, TimeUnit.SECONDS);
-
-               /* String formDataId = taskApprovalVO.getFormDataId().substring(0,5);
-                synchronized (formDataId){
-                    executor.execute(new Runnable() {
-                        @Override
-                        public void run() {
-                            checkIsExsitTaskBatch(taskApprovalVO,formDataId,userId,nickName);
-                        }
-                    });
-                }*/
-            }
-        }
-    }
-
-    public void checkIsExsitTaskBatch(TaskApprovalVO taskApprovalVO, String batchId, Long userId, String nickName){
-           synchronized (batchId){
-               try {
-                   System.out.println("开始执行-------");
-                   Thread.sleep(8000);
-                   System.out.println(batchId);
-                   System.out.println("结束执行-------");
-               } catch (InterruptedException e) {
-                   throw new RuntimeException(e);
-               }
-           }
-    }
-}
+//package org.springblade.evisa.controller;
+//
+//import com.alibaba.fastjson.JSON;
+//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+//import io.swagger.annotations.*;
+//import lombok.AllArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.apache.commons.lang.StringUtils;
+//import org.springblade.business.entity.TaskBatch;
+//import org.springblade.business.vo.TaskApprovalVO;
+//import org.springblade.core.boot.ctrl.BladeController;
+//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.*;
+//
+//import javax.annotation.Resource;
+//import java.io.BufferedReader;
+//import java.io.FileNotFoundException;
+//import java.io.IOException;
+//import java.io.InputStreamReader;
+//import java.util.*;
+//import java.util.concurrent.*;
+//
+//import java.lang.management.ManagementFactory;
+//import java.lang.management.OperatingSystemMXBean;
+//import java.util.concurrent.locks.ReentrantLock;
+//
+///**
+// * 清表基础数据表 控制器
+// *
+// * @author BladeX
+// * @since 2022-05-18
+// */
+//@RestController
+//@AllArgsConstructor
+//@RequestMapping("/evisaInfo")
+//@Api(value = "电签类", tags = "电签类接口")
+//@Slf4j
+//public class EVisaController {
+//
+//    @Autowired
+//    StringRedisTemplate RedisTemplate;
+//
+//    private final JdbcTemplate jdbcTemplate;
+//
+//    // 线程池
+//   // @Resource(name = "taskExecutor1")
+//  //  private ThreadPoolExecutor executor;
+//
+//    // 电签主类
+//  //  @Scheduled(cron = "0 */1 * * * ?")
+//    public void SignInfo() {
+//
+//        //执行代码
+//        log.info("扫描开始");
+//        String sql = "SELECT * from u_task_batch where is_deleted =0 LIMIT 100";
+//        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
+//        if (maps != null && maps.size() >= 1) {
+//            for (Map<String, Object> dataInfo : maps) {
+//                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());
+//                System.out.println(aBoolean);
+//
+//                RedisTemplate.opsForValue().set("sign-" + taskApprovalVO.getFormDataId(), "1", 600, TimeUnit.SECONDS);
+//
+//               /* String formDataId = taskApprovalVO.getFormDataId().substring(0,5);
+//                synchronized (formDataId){
+//                    executor.execute(new Runnable() {
+//                        @Override
+//                        public void run() {
+//                            checkIsExsitTaskBatch(taskApprovalVO,formDataId,userId,nickName);
+//                        }
+//                    });
+//                }*/
+//            }
+//        }
+//    }
+//
+//    public void checkIsExsitTaskBatch(TaskApprovalVO taskApprovalVO, String batchId, Long userId, String nickName){
+//           synchronized (batchId){
+//               try {
+//                   System.out.println("开始执行-------");
+//                   Thread.sleep(8000);
+//                   System.out.println(batchId);
+//                   System.out.println("结束执行-------");
+//               } catch (InterruptedException e) {
+//                   throw new RuntimeException(e);
+//               }
+//           }
+//    }
+//}

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

@@ -76,6 +76,7 @@ import javax.imageio.metadata.IIOMetadataNode;
 import javax.imageio.stream.ImageOutputStream;
 import java.awt.image.BufferedImage;
 import java.io.*;
+import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
 
@@ -475,7 +476,7 @@ public class EVisaServiceImpl implements EVisaService {
                         return SUCCESS + "@@@@" + taskFile.getApprovalFileList().get(0).getFileUrl();
                     }
                 } else { //安心签证
-                    String sqlinfo = " SELECT a.id,a.pyzbx ,a.pyzby,(SELECT signature_file_url from m_sign_pfx_file where is_register=1 and certificate_user_id='" + task.getUserId() + "' and is_deleted=0  ) as signature_file_url 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 )";
+                    String sqlinfo = " SELECT DISTINCT a.id,a.pyzbx ,a.pyzby,(SELECT signature_file_url from m_sign_pfx_file where is_register=1 and certificate_user_id='" + task.getUserId() + "' and is_deleted=0  ) as signature_file_url 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 )";
                     List<Map<String, Object>> maps = jdbcTemplate.queryForList(sqlinfo);
                     System.out.println("安心签-个人-user-id" + task.getUserId() + "--SQL=" + sqlinfo);
                     if (maps == null || maps.size() <= 0) {
@@ -503,7 +504,14 @@ public class EVisaServiceImpl implements EVisaService {
                     pdfVO.setStrategyVoList(sealStrategyVOS);
 
                     //获取字节
-                    byte[] fileByte = CommonUtil.InputStreamToBytes(CommonUtil.getOSSInputStream(pdfUrl));
+                    URL url =new URL(pdfUrl);
+                    byte[] fileByte;
+                    try {
+                        fileByte = IOUtils.toByteArray(url);
+                    }catch (Exception e){
+                        return null;
+                    }
+
                     //执行电签
                     Object[] result = this.signPdfByAXQZ(pdfVO, fileByte);
                     if (result != null) {
@@ -776,8 +784,8 @@ public class EVisaServiceImpl implements EVisaService {
      */
     private Object[] signPdfByAXQZ(SealPdfVO pdfVO, byte[] fileByte) {
         Object[] result = new Object[3];
-        try {
-            PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 300000, 36000000);
+            try {
+            PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 300000, 1800000);
             paperlessClient.setSSL(false);
             //*****************************************************************************
             CompoundSealPdfListDetachedRequest compoundSealPdfListDetachedRequest = new CompoundSealPdfListDetachedRequest();
@@ -791,7 +799,6 @@ public class EVisaServiceImpl implements EVisaService {
             String operatorCode = EVisaConstant.operationCode;
             //渠道编码 可为空
             String channelCode = "";
-
             //设置属性
             requestHead.setBasicInfo(transactionNo, organizationCode, operatorCode, channelCode);
 
@@ -828,9 +835,10 @@ public class EVisaServiceImpl implements EVisaService {
             compoundSealPdfListDetachedRequest.setBody(requestBody);
             //****************************** 请求服务端进行签章 *********************************************
             System.out.println("-----------------------"+new Date().toString()+"开始"+transactionNo +"----------------------------");
+
             ResponseDto responseDto = paperlessClient.execute(compoundSealPdfListDetachedRequest);
-            System.out.println("-----------------------"+new Date().toString()+"结束"+transactionNo +"----------------------------");
 
+            System.out.println("-----------------------"+new Date().toString()+"结束"+transactionNo +"----------------------------");
             //******************************解析响应结果 *********************************************
             CompoundSealPdfListDetachedResponse compoundSealPdfListDetachedResponse = (CompoundSealPdfListDetachedResponse) responseDto;
             ResponseHead responseHead = compoundSealPdfListDetachedResponse.getHead();
@@ -848,14 +856,9 @@ public class EVisaServiceImpl implements EVisaService {
                 result[1] = compoundSealPdfListDetachedResponse.toString();
                 result[2] = responseHead.getMessage();
             }
-
-        } catch (Exception e) {
-            e.printStackTrace();
-            logger.info("【电签模块】{}", "电签签章接口调用异常");
-            e.printStackTrace();
-            return null;
-        }
-
+            }catch (Exception e){
+                e.printStackTrace();
+            }
         return result;
     }
 

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

@@ -7,11 +7,17 @@ import com.spire.pdf.general.find.PdfTextFindCollection;
 import com.spire.pdf.utilities.PdfTable;
 import com.spire.pdf.utilities.PdfTableExtractor;
 
+import org.apache.commons.io.IOUtils;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ResourceUtil;
 
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.InputStream;
+import java.net.HttpURLConnection;
 import java.net.URL;
+import java.net.URLConnection;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -62,15 +68,26 @@ public class PDFUtils {
 */
 
 
-    public static List<String> getPdfSignIds(String pdfUrl) {
+    public static synchronized List<String>  getPdfSignIds(String pdfUrl) {
         PdfDocument pdf = new PdfDocument();
         List<String> eVisaConfigList = new ArrayList<>();
         try {
-            InputStream ossInputStream = CommonUtil.getOSSInputStream(pdfUrl);;
-          //  InputStream ossInputStream = new URL(pdfUrl).openStream();
-            //加载PDF文档
-            pdf.loadFromStream(ossInputStream);
 
+            URL url =new URL(pdfUrl);
+/*            URLConnection conn = url.openConnection();
+            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+            //加载PDF文档
+            System.out.println("-------getid------"+pdfUrl);
+            conn.setConnectTimeout(30000);
+            conn.setConnectTimeout(60000);
+            InputStream ossInputStream = conn.getInputStream();
+            Is
+            pdf.loadFromStream(ossInputStream);*/
+            byte[] byteArray = IOUtils.toByteArray(url);
+            pdf.loadFromBytes(byteArray);
+            /*if (conn instanceof HttpURLConnection) {
+                ((HttpURLConnection) conn).disconnect();
+            }*/
             for(int i= 0;i<pdf.getPages().getCount();i++){
                 PdfPageBase page = pdf.getPages().get(i);
                 PdfTextFindCollection allText = page.findAllText();
@@ -78,20 +95,21 @@ public class PDFUtils {
                 for(int k=0;k<finds.length;k++){
                     String textStr = finds[k].getMatchText();
                     if (textStr.length() >= 15 && Func.isNumeric(textStr)) {
-                        System.out.println(textStr);
                         eVisaConfigList.add(textStr);
                     }
                 }
             }
 
-
+           // ossInputStream.close();
             List<String> unique = eVisaConfigList.stream().distinct().collect(Collectors.toList());
-            ossInputStream.close();
+
             return unique;
         }catch (Exception e){
             e.printStackTrace();
+            return null;
+        }finally {
+            pdf.close();
         }
-        return null;
     }
 
     public static void main123(String[] args) {

+ 80 - 0
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/ThreadPoolDemo.java

@@ -0,0 +1,80 @@
+package org.springblade.evisa.utils;
+import com.alibaba.fastjson.JSON;
+import org.springblade.business.vo.TaskApprovalVO;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.io.FileNotFoundException;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.*;
+
+public class ThreadPoolDemo {
+
+    ThreadPoolDemo(){
+        System.out.println("-----------------------");
+        System.out.println("----------启动-------------");
+        System.out.println("-----------------------");
+    }
+
+
+    @Scheduled(cron = "0 */1 * * * ?")
+    public void SignInfo() {
+
+    }
+
+    public static void main11(String[] args) throws InterruptedException {
+
+        // 准备创建线程池所需要的7个参数
+        int corePoolSize = 3;
+        int maximumPoolSize = 3;
+        int keepLiveTime = 0;
+        TimeUnit timeUnit = TimeUnit.SECONDS;
+        ThreadFactory threadFactory = Executors.defaultThreadFactory();
+        ArrayBlockingQueue queue = new ArrayBlockingQueue<>(30);
+
+        RejectedExecutionHandler policy =
+                new ThreadPoolExecutor.DiscardOldestPolicy();
+        // 创建线程池对象
+        ThreadPoolExecutor myThreadPool = new ThreadPoolExecutor(
+                corePoolSize,
+                maximumPoolSize,
+                keepLiveTime,
+                timeUnit,
+                queue,
+                threadFactory,
+                policy);
+
+        for (int i=0;i<10;i++){
+            final int index = i;
+            String index2 = "1";
+            if(i%3==0){
+                index2="2";
+            }
+
+
+            String finalIndex = index2;
+            myThreadPool.execute(new Runnable() {
+
+                @Override
+                public void run() {
+                    try {
+                        synchronized (finalIndex) {
+                            System.out.println(index+"------"+finalIndex);
+                            if(finalIndex.equals("2")){
+                                System.out.println(index+"--2--开始");
+                                Thread.sleep(20000);
+                                System.out.println(index+"--2--结束");
+                            }else{
+                                Thread.sleep(1000);
+                            }
+                        }
+                    } catch (InterruptedException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                }
+            });
+        }
+    }
+
+}

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/SignPfxFileController.java

@@ -430,7 +430,7 @@ public class SignPfxFileController extends BladeController {
     @ApiOperation(value = "新增", notes = "传入signPfxFile")
     public R<Boolean> save(@Valid @RequestBody SignPfxFileVO vo) {
 
-        if (new Integer("2").equals(vo.getCertificateType())) {
+        if (new Integer("2").equals(vo.getCertificateType()) || new Integer("3").equals(vo.getCertificateType())) {
             this.saveSignPfxDeputy(vo, true);
         }
         vo.setCreateUser(AuthUtil.getUserId());
@@ -446,7 +446,7 @@ public class SignPfxFileController extends BladeController {
     @ApiOperationSupport(order = 3)
     @ApiOperation(value = "修改", notes = "传入signPfxFile")
     public R<Boolean> update(@Valid @RequestBody SignPfxFileVO vo) {
-        if (new Integer("2").equals(vo.getCertificateType())) {
+        if (new Integer("2").equals(vo.getCertificateType())||new Integer("3").equals(vo.getCertificateType())) {
             //查询旧数据
             SignPfxFile oldData = this.signPfxFileService.getById(vo.getId());
             if (StringUtils.isNotEmpty(oldData.getProjectContractRole()) && !vo.getProjectContractRole().trim().equals(oldData.getProjectContractRole().trim())) {

+ 12 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java

@@ -533,8 +533,6 @@ public class TextdictInfoController extends BladeController {
         String ids = StringUtils.join(pKeyIds, ",");
 
         //读取html页面信息
-        //File file1 = ResourceUtil.getFile(wbsTreePrivate.getHtmlUrl());
-        //String htmlString = IoUtil.readToString(new FileInputStream(file1));
         InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(wbsTreePrivate.getHtmlUrl());
         String htmlString = IoUtil.readToString(inputStreamByUrl);
 
@@ -563,37 +561,43 @@ public class TextdictInfoController extends BladeController {
         List<TextdictInfo> textDictInfosNewAll = new ArrayList<>();
         for (Long pKeyId : pKeyIds) {
             List<TextdictInfo> textDictInfosNew = JSON.parseArray(JSON.toJSONString(textDictInfosOld), TextdictInfo.class);
+            List<TextdictInfo> textDictInfosNew2 = new ArrayList<>();
 
+            // 由于一个key 只能配置一个 对象 需要去除多余的 对象
+            for(TextdictInfo dafa:textDictInfosNew){
+                if(!dafa.getColKey().equals(id)){
+                    textDictInfosNew2.add(dafa);
+                }
+            }
             TextdictInfo textDictBean = new TextdictInfo();
             textDictBean.setColKey(id);
             textDictBean.setColName(placeholder);
             textDictBean.setSigRoleName(textdictInfo.getTextId());
             textDictBean.setIsDeleted(0);
             textDictBean.setProjectId(wbsTreePrivate.getProjectId());
-
-            textDictInfosNew.add(textDictBean);
+            textDictInfosNew2.add(textDictBean);
 
             //重新构造赋值
             if (textdictInfo.getType() == 4) {
-                for (TextdictInfo obj : textDictInfosNew) {
+                for (TextdictInfo obj : textDictInfosNew2) {
                     obj.setId(SnowFlakeUtil.getId());
                     obj.setTabId(pKeyId.toString());
                     obj.setType(4);
                     obj.setName("编辑默认值");
                 }
             } else if (textdictInfo.getType() == 5) {
-                for (TextdictInfo obj : textDictInfosNew) {
+                for (TextdictInfo obj : textDictInfosNew2) {
                     obj.setId(SnowFlakeUtil.getId());
                     obj.setTabId(pKeyId.toString());
                     obj.setType(5);
                     obj.setName("提示信息");
                 }
             }
-            textDictInfosNewAll.addAll(textDictInfosNew);
+            textDictInfosNewAll.addAll(textDictInfosNew2);
         }
 
         //删除当前类型
-        List<String> collect = textDictInfosNewAll.stream().map(TextdictInfo::getTabId).distinct().collect(Collectors.toList());
+        List<String> collect = textDictInfosOld.stream().map(TextdictInfo::getTabId).distinct().collect(Collectors.toList());
         if (collect != null && collect.size() >= 1) {
             this.textdictInfoService.getBaseMapper().delete(Wrappers.<TextdictInfo>query().lambda()
                     .eq(TextdictInfo::getType, textdictInfo.getType())

+ 19 - 1
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

@@ -182,9 +182,27 @@ public class UserController {
     @PostMapping("/submit2")
     @ApiOperationSupport(order = 4)
     @ApiOperation(value = "新增2", notes = "传入UserDTO")
-    @PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+  //  @PreAuth(RoleConstant.HAS_ROLE_ADMIN)
     public R submitTow(@Valid @RequestBody UserDTO user) {
         CacheUtil.clear(USER_CACHE);
+        // 为第三方系统
+        if(user.getSysId().equals("30")){
+            user.setUserType("1,2,3");
+            user.setPassword("123456");
+            user.setPlaintextPassword("123456");
+            user.setTenantId("000000");
+            user.setDeptId("1592394131177873410");
+            user.setStatus(1);
+            user.setSysType(2);
+            List<SaveUserInfoByProjectDTO> projectAndUserList = new ArrayList<>();
+            SaveUserInfoByProjectDTO data= new SaveUserInfoByProjectDTO();
+            data.setContractId("1714919227250950146");
+            data.setProjectId("1612329251049537537");
+            data.setRoleId("1537248158277914626");
+            projectAndUserList.add(data);
+            user.setProjectAndUserList(projectAndUserList);
+        }
+
         return R.status(userService.submit2(user));
     }