zhuwei 9 mesi fa
parent
commit
dfa607909b
18 ha cambiato i file con 398 aggiunte e 173 eliminazioni
  1. 0 1
      blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  2. 10 0
      blade-ops/blade-resource/pom.xml
  3. 1 1
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
  4. 1 2
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TaskSignInfoVO.java
  5. 4 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InterimPayCertificate.java
  6. 5 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MaterialStartStatement.java
  7. 7 1
      blade-service/blade-archive/pom.xml
  8. 16 0
      blade-service/blade-e-visa/pom.xml
  9. 11 3
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVController.java
  10. 120 107
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVDataServiceImpl.java
  11. 14 5
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java
  12. 8 3
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/FileUtils.java
  13. 1 1
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/PDFUtils.java
  14. 53 15
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/PdfAddimgUtil.java
  15. 13 3
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/SignFtpUtil.java
  16. 0 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  17. 133 27
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java
  18. 1 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateMapper.xml

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

@@ -747,7 +747,6 @@ public class CommonUtil {
                 url = url.replace("https://","http://").replace("183.247.216.148","152.168.2.15").replace(":9000//",":9000/");
             }
         }
-        System.out.println("11111"+url);
         return url;
     }
 

+ 10 - 0
blade-ops/blade-resource/pom.xml

@@ -121,6 +121,16 @@
             <artifactId>pdfbox</artifactId>
             <version>2.0.20</version>
         </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
 
     </dependencies>
 

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

@@ -85,7 +85,7 @@ public class OssBuilder {
         String tenantId = AuthUtil.getTenantId();
         Oss oss = getOss(tenantId, code);
         oss.setEndpoint("http://183.247.216.148:9000/");
-       //oss.setEndpoint("https://oss-cn-shenzhen.aliyuncs.com/");
+       // oss.setEndpoint("https://oss-cn-shenzhen.aliyuncs.com/");
         System.out.println("3333333"+oss.getEndpoint());
         Oss ossCached = ossPool.get(tenantId);
         OssTemplateRe template = templatePool.get(tenantId);

+ 1 - 2
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TaskSignInfoVO.java

@@ -60,7 +60,7 @@ public class TaskSignInfoVO {
     @ApiModelProperty("pdf上的时间")
     private String pdfDate;
 
-    @ApiModelProperty("数据类型 ")
+    @ApiModelProperty("数据类型")
     private String pdfDataType;
 
     /**
@@ -70,7 +70,6 @@ public class TaskSignInfoVO {
         return "OK".equals(flag) || "同意".equals(comment);
     }
 
-
     /**
      * 电签中的对象数据
      */

+ 4 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InterimPayCertificate.java

@@ -125,7 +125,10 @@ InterimPayCertificate extends BaseEntity {
     @ApiModelProperty(value = "原始PDF地址")
     private String rawUrl;
 
-    @ApiModelProperty(value = "电签前PDF地址")
+    /**
+     * 电签前-预览pdf
+     */
+    @ApiModelProperty(value = "电签前-预览pdf")
     private String prePdfUrl;
 
     /**

+ 5 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MaterialStartStatement.java

@@ -102,6 +102,10 @@ public class MaterialStartStatement extends BaseEntity {
 
     @ApiModelProperty(value = "pdfUrl")
     private String rawUrl;
-
+    /**
+     * 电签前-预览pdf
+     */
+    @ApiModelProperty(value = "电签前-预览pdf")
+    private String prePdfUrl;
 
 }

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

@@ -35,6 +35,12 @@
 <!--            <version>2.13.1</version>-->
 <!--        </dependency>-->
         <!--sqlite-->
+
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.13</version>
+        </dependency>
         <dependency>
             <groupId>org.xerial</groupId>
             <artifactId>sqlite-jdbc</artifactId>
@@ -166,7 +172,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>

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

@@ -62,6 +62,12 @@
             <artifactId>commons.codec</artifactId>
             <version>1.10</version>
         </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itextpdf</artifactId>
+            <version>5.5.13</version>
+            <scope>compile</scope>
+        </dependency>
         <dependency>
             <groupId>com.e.visa</groupId>
             <artifactId>commons.compress</artifactId>
@@ -147,6 +153,11 @@
             <artifactId>paperless.http.framework</artifactId>
             <version>4.6.0.2</version>
         </dependency>
+        <dependency>
+            <groupId>commons-net</groupId>
+            <artifactId>commons-net</artifactId>
+            <version>3.8.0</version>
+        </dependency>
         <dependency>
             <groupId>com.e.visa</groupId>
             <artifactId>paperless.sadk.ext</artifactId>
@@ -197,6 +208,11 @@
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>
         </dependency>
+        <dependency>
+            <groupId>commons-net</groupId>
+            <artifactId>commons-net</artifactId>
+            <version>3.8.0</version>
+        </dependency>
         <dependency>
             <groupId>org.apache.pdfbox</groupId>
             <artifactId>pdfbox</artifactId>

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

@@ -56,18 +56,21 @@ public class EVController {
     @Resource(name = "taskExecutor1")
     private ThreadPoolExecutor executor;
 
-     @Scheduled(cron = "0/10 * * * * ?")
+    // @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 JSON_EXTRACT(json_data, '$.approvalType')=1 and  is_deleted=0 GROUP BY JSON_EXTRACT(json_data, '$.formDataId')) LIMIT 10 ";
+        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') ORDER BY sign_type ASC) LIMIT 10 ";
+
+       // String sql = "SELECT * from u_task_batch where is_deleted=0 and JSON_EXTRACT(json_data, '$.taskId')=1864831795413909504 ORDER BY sign_type ASC ";
 
         List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
         if (maps != null && maps.size() >= 1 ) {
             for (Map<String, Object> dataInfo : maps) {
-                if (executor.getQueue().size()<=40 ) {
+                if (executor.getQueue().size()<=6 ) {
                     String jsonData = dataInfo.get("json_data") + "";
                     String signFormat = dataInfo.get("sign_format") + "";
+                    String sigType = dataInfo.get("sign_type") + "";
                     TaskSignInfoVO taskSignInfoVO = JSON.parseObject(jsonData, TaskSignInfoVO.class);
                     String taskBatchId = dataInfo.get("id").toString();
                     Long userId = Long.valueOf(dataInfo.get("create_user") + "");
@@ -77,6 +80,11 @@ public class EVController {
                     taskSignInfoVO.setUserId(userId);
                     taskSignInfoVO.setNickName(nickName);
                     taskSignInfoVO.setSignFormat(signFormat);
+                    if(sigType.equals("2")){
+                        taskSignInfoVO.setSigType(2);
+                    }else{
+                        taskSignInfoVO.setSigType(1);
+                    }
                     if (!aBoolean) {
                         RedisTemplate.opsForValue().set("sign-" + taskSignInfoVO.getFormDataId(), "1",1800, TimeUnit.SECONDS);
                         CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {

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

@@ -15,6 +15,7 @@ import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.constant.EVisaConstant;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.common.utils.SystemUtils;
 import org.springblade.core.launch.StartEventListener;
 import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.tool.utils.DateUtil;
@@ -75,66 +76,83 @@ public class EVDataServiceImpl implements EVDataService {
     public void signTaskBatch(TaskSignInfoVO taskApp) {
         //获取pdf 文件
         this.getSignPdfInfo(taskApp);
+        this.addSignatureTaskBatch(taskApp);
         if (taskApp.getSigState() != 1) {
             return;
         }
-        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='" + taskApp.getParallelProcessInstanceId() + "') and is_deleted=0 and initiative<>2 ";
+
         String fileUrl = CommonUtil.replaceOssUrl(taskApp.getSignPdfUrl());
-        List<String> eVisaConfigList = PDFUtils.getPdfSignIds(fileUrl,taskApp);
-        String ids = String.join(",", eVisaConfigList);
-        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
-        if(maps!=null && maps.size()>=1) {
-            if (eVisaConfigList == null || eVisaConfigList.size() == 0) {
-                //没有电签配置,默认当前任务为不签字审批,返回成功
-                taskApp.setSigState(2);
-                taskApp.setSignSmg("pdf未获取到关键字Id");
+        List<String> eVisaConfigList = PDFUtils.getPdfSignIds(fileUrl, taskApp);
+         String ids = String.join(",", eVisaConfigList);
+
+        if (eVisaConfigList == null || eVisaConfigList.size() == 0) {
+            //没有电签配置,默认当前任务为不签字审批,返回成功
+            taskApp.setSigState(2);
+            taskApp.setSignSmg("pdf未获取到关键字Id");
+            SignBackPdfInfo(taskApp);
+            return;
+        }
+
+        if (taskApp.getRemarkType().equals("1")) { //安心签
+            //添加电签策略
+            List<SealStrategyVO> strategyListByAXQ = getStrategyListByAXQ(taskApp, ids);
+            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){
+                    taskApp.setSigState(2);
+                    taskApp.setSignSmg("未获取到签字证书信息");
+                }else{
+                    if(taskApp.getSigType()==1){
+                        taskApp.setSigState(2);
+                        taskApp.setSignSmg("未获取到签字证书信息");
+                    }else if(taskApp.getSigType()==2){
+                        taskApp.setSigState(1);
+                        taskApp.setSignSmg("签字成功");
+                        taskApp.setLastFilePdfUrl(taskApp.getSignPdfUrl());
+                    }
+                }
                 SignBackPdfInfo(taskApp);
+            }
+
+            //调用签字逻辑
+            signTaskBatchByAXQZ(strategyListByAXQ, taskApp);
+            if (taskApp.getSigState() != 1) {
                 return;
             }
-            if (taskApp.getRemarkType().equals("1")) { //安心签
-                //添加电签策略
-                List<SealStrategyVO> strategyListByAXQ = getStrategyListByAXQ(taskApp, ids);
-                if (taskApp.getSigState() != 1) {
-                    return;
-                }
-                //调用签字逻辑
-                signTaskBatchByAXQZ(strategyListByAXQ, taskApp);
-                if (taskApp.getSigState() != 1) {
-                    return;
-                }
-                // 回归处理
-                SignBackPdfInfo(taskApp);
-                if (taskApp.getSigState() != 1) {
-                    return;
-                }
-            } else if (taskApp.getRemarkType().equals("2")) { //东方中讯
-                //添加电签策略
-                List<Map<String, Object>> strategyListByDFZX = getStrategyListByDFZX(taskApp, ids);
-                //调用签字逻辑
-                signTaskBatchByDFZX(strategyListByDFZX, fileUrl);
-                // 回归处理
+            // 回归处理
+            SignBackPdfInfo(taskApp);
+            if (taskApp.getSigState() != 1) {
+                return;
+            }
+        } else if (taskApp.getRemarkType().equals("2")) { //东方中讯
+            //添加电签策略
+            List<Map<String, Object>> strategyListByDFZX = getStrategyListByDFZX(taskApp, ids);
+            //调用签字逻辑
+            String s = signTaskBatchByDFZX(strategyListByDFZX, fileUrl);
+            if (s.contains("sucess")) {
+                taskApp.setLastFilePdfUrl(s.split("@@@@")[1]);
+                taskApp.setSigState(1);
+                taskApp.setSignSmg("电签成功");
+            } else {
+                taskApp.setSigState(2);
+                taskApp.setSignSmg("电签中失败");
                 SignBackPdfInfo(taskApp);
             }
+            // 回归处理
+            SignBackPdfInfo(taskApp);
         }
-        // 判断签章信息
-        maps = jdbcTemplate.queryForList(sql);
-        if (maps == null || maps.size() == 0) {
-            taskApp.setSigType(2);
-            if (taskApp.getRemarkType().equals("1")) { //安心签
-                //添加电签策略
-                List<SealStrategyVO> strategyListByAXQ = getStrategyListByAXQ(taskApp, ids);
-                //调用签字逻辑
-                signTaskBatchByAXQZ(strategyListByAXQ, taskApp);
-                // 回归处理
-                SignBackPdfInfo(taskApp);
+    }
 
-            } else if (taskApp.getRemarkType().equals("2")) { //东方中讯
-                //添加电签策略
-                List<Map<String, Object>> strategyListByDFZX = getStrategyListByDFZX(taskApp, ids);
-                //调用签字逻辑
-                signTaskBatchByDFZX(strategyListByDFZX, taskApp.getLastFilePdfUrl());
-                // 回归处理
-                SignBackPdfInfo(taskApp);
+
+    public void addSignatureTaskBatch(TaskSignInfoVO taskApp) {
+        if(taskApp.getSigType()==1){
+            String sql = "SELECT * from u_task_batch where JSON_EXTRACT(json_data, '$.taskId')="+taskApp.getTaskId()+" and sign_type=2";
+            List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
+            String id = SnowFlakeUtil.getId()+"";
+            if(maps==null || maps.size()==0){
+                String sql2 ="INSERT into u_task_batch(id,task_parallel_id,json_data,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,nick_name,sign_format,sign_type)" +
+                        "SELECT "+id+" as id,task_parallel_id,json_data,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,nick_name,sign_format,2 as sign_type from u_task_batch where id="+taskApp.getId()+"";
+                jdbcTemplate.execute(sql2);
             }
         }
     }
@@ -142,7 +160,7 @@ public class EVDataServiceImpl implements EVDataService {
     // 获取pdf 文件
     @Transactional
     public void SignBackPdfInfo(TaskSignInfoVO taskApp) {
-        Integer totalCount= this.jdbcTemplate.queryForObject("select exe_count from u_task_parallel where parallel_process_instance_id='" + taskApp.getParallelProcessInstanceId() + "'",Integer.class);
+        Integer totalCount = this.jdbcTemplate.queryForObject("select exe_count from u_task_parallel where parallel_process_instance_id='" + taskApp.getParallelProcessInstanceId() + "'", Integer.class);
         //上报类型: 1填报资料,2工程文件,3日志资料
         //档案:4档案数据 ,
         //计量: 5中间计量申请,6材料计量单 ,7开工预付款计量单, 8变更令
@@ -150,15 +168,15 @@ public class EVDataServiceImpl implements EVDataService {
             //电签成功
             if (taskApp.getSigState() == 1) { //签字成功
                 String updateSql = "";
-                if(taskApp.getApprovalType() == 1 ){ //
+                if (taskApp.getApprovalType() == 1) { //
                     //
                     String sys_isonline = ParamCache.getValue(CommonConstant.SYS_ISONLINE);
-                    String pdfPage = "";
+                    String pdfPage = "0";
                     Long pdfSize = 0L;
                     String nodePdfUrl = "";
 
-                    List<Map<String, Object>> mapList = jdbcTemplate.queryForList("select *,domain_url as url from m_table_file where is_deleted = 0 and type in (10,11,12) and tab_id = (select wbs_id from u_information_query WHERE id = + "+taskApp.getFormDataId()+")");
-                    if(Func.isNotEmpty(mapList)&&mapList.size()>=1) {
+                    List<Map<String, Object>> mapList = jdbcTemplate.queryForList("select *,domain_url as url from m_table_file where is_deleted = 0 and type in (10,11,12) and tab_id = (select wbs_id from u_information_query WHERE id = + " + taskApp.getFormDataId() + ")");
+                    if (Func.isNotEmpty(mapList) && mapList.size() >= 1) {
                         String file_path = FileUtils.getSysLocalFileUrl();
                         List<String> datainfo = new ArrayList<>();
                         datainfo.add(taskApp.getLastFilePdfUrl());
@@ -172,7 +190,7 @@ public class EVDataServiceImpl implements EVDataService {
                         }
 
                         FileUtils.mergePdfPublicMethods(datainfo, listPdf);
-                        if (sys_isonline.equals("20")) {
+                        if("20".equals(sys_isonline) || SystemUtils.isWindows() || SystemUtils.isMacOs()){
                             BladeFile bladeFile = this.newIOSSClient.uploadFile(taskApp.getFormDataId() + ".pdf", listPdf);
                             if (bladeFile != null && Func.isNotEmpty(bladeFile.getLink())) {
                                 nodePdfUrl = bladeFile.getLink();
@@ -181,7 +199,7 @@ public class EVDataServiceImpl implements EVDataService {
                             nodePdfUrl = FileUtils.getNetUrl(listPdf);
                         }
 
-                    }else{
+                    } else {
                         nodePdfUrl = taskApp.getLastFilePdfUrl();
                     }
 
@@ -190,23 +208,23 @@ public class EVDataServiceImpl implements EVDataService {
 
                     // 实验时
                     String pdfTrialUrlPosition = "";
-                    if("2".equals(taskApp.getPdfDataType())){
+                    if ("2".equals(taskApp.getPdfDataType())) {
                         String taskStatus = "";
-                        if(taskApp.getSigState()==1){
+                        if (taskApp.getSigState() == 1) {
                             taskStatus = "待审批";
-                        } else if (taskApp.getSigState()==2) {
+                        } else if (taskApp.getSigState() == 2) {
                             taskStatus = "已审批";
-                        } else if (taskApp.getSigState()==3) {
+                        } else if (taskApp.getSigState() == 3) {
                             taskStatus = "已废除";
                         }
-                        String updTrial = "update u_trial_self_inspection_record set task_status="+taskStatus +",pdf_url='"+taskApp.getLastFilePdfUrl()+"' where id=(select b.trial_self_inspection_record_id from u_task b,u_task_parallel c where b.process_instance_id=c.process_instance_id and b.is_deleted=0 and c.is_deleted=0 and b.status in(1,2) and parallel_process_instance_id="+taskApp.getParallelProcessInstanceId()+")";
+                        String updTrial = "update u_trial_self_inspection_record set task_status='" + taskStatus + "',pdf_url='" + taskApp.getLastFilePdfUrl() + "' where id=(select b.trial_self_inspection_record_id from u_task b,u_task_parallel c where b.process_instance_id=c.process_instance_id and b.is_deleted=0 and c.is_deleted=0 and b.status in(1,2) and parallel_process_instance_id='" + taskApp.getParallelProcessInstanceId() + "')";
                         jdbcTemplate.execute(updTrial);
 
                         /**
-                        * 在资料填报工序-预览全部pdf时再拼接合并显示,当前只做储存(如果当前资料填报工序节点有其他多个试验记录pdf关联信息,那么合并存储,否则直接存储)
-                        */
+                         * 在资料填报工序-预览全部pdf时再拼接合并显示,当前只做储存(如果当前资料填报工序节点有其他多个试验记录pdf关联信息,那么合并存储,否则直接存储)
+                         */
 
-                        String redoe = " select * from  u_trial_self_inspection_record where id=(select b.trial_self_inspection_record_id from u_task b,u_task_parallel c where b.process_instance_id=c.process_instance_id and b.is_deleted=0 and c.is_deleted=0 and b.status in(1,2) and parallel_process_instance_id="+taskApp.getParallelProcessInstanceId()+")";
+                        String redoe = " select * from  u_trial_self_inspection_record where id=(select b.trial_self_inspection_record_id from u_task b,u_task_parallel c where b.process_instance_id=c.process_instance_id and b.is_deleted=0 and c.is_deleted=0 and b.status in(1,2) and parallel_process_instance_id='" + taskApp.getParallelProcessInstanceId() + "')";
                         TrialSelfInspectionRecord record = jdbcTemplate.query(redoe, new BeanPropertyRowMapper<>(TrialSelfInspectionRecord.class)).stream().findAny().orElse(null);
                         if (("已审批").equals(record.getTaskStatus()) && (new Integer(1)).equals(record.getDetectionResult()) && (new Integer(1)).equals(record.getDetectionCategory())) {
                             if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotEmpty(record.getProjectPosition())) {
@@ -215,25 +233,25 @@ public class EVDataServiceImpl implements EVDataService {
                                 List<Long> collect = jdbcTemplate.query(sqlNodeAll, new BeanPropertyRowMapper<>(InformationQuery.class)).stream().map(InformationQuery::getWbsId).collect(Collectors.toList());
                                 if (collect.size() > 0) {
                                     //删除当前记录关联记录
-                                    jdbcTemplate.execute("delete from u_trial_self_quality_project where self_id = "+record.getId()+"");
+                                    jdbcTemplate.execute("delete from u_trial_self_quality_project where self_id = " + record.getId() + "");
                                     for (Long pKeyId : collect) {
                                         //新增当前记录关联信息
-                                        jdbcTemplate.execute("insert into u_trial_self_quality_project(id,self_id,quality_node_id) values("+SnowFlakeUtil.getId()+","+record.getId()+","+pKeyId+") ");
+                                        jdbcTemplate.execute("insert into u_trial_self_quality_project(id,self_id,quality_node_id) values(" + SnowFlakeUtil.getId() + "," + record.getId() + "," + pKeyId + ") ");
 
                                         //获取当前工程部位节点最新的关联试验记录ids
-                                        String sqlIds = "select self_id from u_trial_self_quality_project where quality_node_id = "+pKeyId+"";
+                                        String sqlIds = "select self_id from u_trial_self_quality_project where quality_node_id = '" + pKeyId + "'";
                                         List<Map<String, Object>> trialRecordIds = jdbcTemplate.queryForList(sqlNodeAll);
 
 
                                         //如果当前工程部位节点的关联试验记录id只有一条,且等于当前关联试验记录id,那么不合并,直接存储该条试验记录的pdf
                                         if (trialRecordIds.size() == 1 && (trialRecordIds.get(0).get("self_id")).equals(record.getId().toString())) {
                                             //修改当前试验pdf到质检树节点的pdf_trial_url_position上存储
-                                            pdfTrialUrlPosition = record.getPdfUrl() ;
+                                            pdfTrialUrlPosition = record.getPdfUrl();
                                             continue;
                                         }
 
                                         //如果当前工程部位节点的关联试验记录id有多条,那么合并
-                                        String dataSql = "select * from  u_trial_self_inspection_record where id in(select self_id from u_trial_self_quality_project where quality_node_id = "+pKeyId+")";
+                                        String dataSql = "select * from  u_trial_self_inspection_record where id in(select self_id from u_trial_self_quality_project where quality_node_id = '" + pKeyId + "')";
                                         List<TrialSelfInspectionRecord> pdfUrlList = jdbcTemplate.queryForList(redoe, TrialSelfInspectionRecord.class);
                                         List<String> pdfS = pdfUrlList.stream().filter(f -> com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotEmpty(f.getPdfUrl())).map(TrialSelfInspectionRecord::getPdfUrl).collect(Collectors.toList());
                                         if (ObjectUtil.isNotEmpty(pdfS) && pdfS.size() > 0) {
@@ -256,16 +274,16 @@ 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() + "' " ;
+                    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() + "' ";
                 } 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() + "' " ;
+                    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) { // 日志
-                    updateSql = "update u_contract_log set e_visa_pdf_url='" + taskApp.getLastFilePdfUrl() + "',status='" + taskApp.getSigType() + "',update_time=SYSDATE() where id='" + taskApp.getFormDataId() + "' " ;
+                    updateSql = "update u_contract_log set e_visa_pdf_url='" + taskApp.getLastFilePdfUrl() + "',status='" + taskApp.getSigType() + "',update_time=SYSDATE() where id='" + taskApp.getFormDataId() + "' ";
                 } else if (taskApp.getApprovalType() == 5) { //中期计量支付证书
                     updateSql = "update s_interim_pay_certificate set approve_status=" + taskApp.getSigType() + ",update_time=SYSDATE(), raw_url='" + taskApp.getLastFilePdfUrl() + "' where contract_period_id = " + taskApp.getFormDataId();
                 } else if (taskApp.getApprovalType() == 6 || taskApp.getApprovalType() == 7) {
                     updateSql = "update s_material_start_statement set raw_url='" + taskApp.getLastFilePdfUrl() + "' where meter_period_id = " + taskApp.getFormDataId();
-                } else if (taskApp.getApprovalType() == 8){
+                } else if (taskApp.getApprovalType() == 8) {
                     if (taskApp.getSigType() == 2) {
                         this.jdbcTemplate.execute("update u_entrust_info set sample_status=2,status=" + (taskApp.getSigType() + 1) + ",entrust_e_pdf='" + taskApp.getLastFilePdfUrl() + "' where id=(SELECT wbs_id from u_information_query where id='" + taskApp.getFormDataId() + "')");
                     }
@@ -274,15 +292,15 @@ public class EVDataServiceImpl implements EVDataService {
                 this.jdbcTemplate.execute(updateSql);
                 this.jdbcTemplate.execute("update u_task_parallel set e_visa_status=1,e_visa_content='" + taskApp.getSignSmg() + "' , status=2 , initiative=2 ,update_time=SYSDATE() where parallel_process_instance_id='" + taskApp.getParallelProcessInstanceId() + "'");
                 this.jdbcTemplate.execute("update u_task set status=" + taskApp.getSigType() + " ,update_time=SYSDATE() where id='" + taskApp.getTaskId() + "'");
-                if(taskApp.getSigType()==2){
+                if (taskApp.getSigType() == 2) {
                     this.jdbcTemplate.execute("delete from u_task_batch where JSON_EXTRACT(json_data, '$.taskId')=" + taskApp.getTaskId());
-                }else{
+                } else {
                     this.jdbcTemplate.execute("delete from u_task_batch where id=" + taskApp.getId());
                 }
-            }else{ //签字失败
+            } else { //签字失败
                 this.jdbcTemplate.execute("update u_task_parallel set exe_count=(exe_count+1), e_visa_status=99,e_visa_content='" + taskApp.getSignSmg() + "' ,update_time=SYSDATE() where parallel_process_instance_id='" + taskApp.getParallelProcessInstanceId() + "'");
                 this.jdbcTemplate.execute("update u_task set status=1 ,update_time=SYSDATE() where id='" + taskApp.getTaskId() + "'");
-                if(totalCount>=3){
+                if (totalCount >= 3) {
                     this.jdbcTemplate.execute("delete from u_task_batch where id=" + taskApp.getId());
                 }
             }
@@ -300,24 +318,23 @@ public class EVDataServiceImpl implements EVDataService {
         //上报类型: 1填报资料,2工程文件,3日志资料
         //档案:4档案数据 ,
         //计量: 5中间计量申请,6材料计量单 ,7开工预付款计量单, 8变更令
-        taskApp.setSigType(1);
         taskApp.setSigState(1);
         Map<String, Object> map = new HashMap<>();
         try {
             if (taskApp.getApprovalType() == 1 || taskApp.getApprovalType() == 8) {
                 map = this.jdbcTemplate.queryForMap("select * from u_information_query where  is_deleted=0 and id = " + taskApp.getFormDataId());
-                String pdfTrialUrlPosition = map.get("pdf_trial_url_position")+""; //关联工程部位信息后合并的pdf路径
-                String pdfTrialUrl = map.get("pdf_trial_url")+""; //pdf路径,引用试验记录后合并的pdf
-                String eVisaPdfUrl = map.get("e_visa_pdf_url")+""; //签字的PDF路径
-                String pdfUrl = map.get("pdf_url")+""; //合并后的PDF路径
-                String type = map.get("type")+""; //资料类型,1资料填报,2试验,3首件
+                String pdfTrialUrlPosition = map.get("pdf_trial_url_position") + ""; //关联工程部位信息后合并的pdf路径
+                String pdfTrialUrl = map.get("pdf_trial_url") + ""; //pdf路径,引用试验记录后合并的pdf
+                String eVisaPdfUrl = map.get("e_visa_pdf_url") + ""; //签字的PDF路径
+                String pdfUrl = map.get("pdf_url") + ""; //合并后的PDF路径
+                String type = map.get("type") + ""; //资料类型,1资料填报,2试验,3首件
                 taskApp.setPdfDataType(type);
-                if (StringUtils.isNotEmpty(pdfTrialUrlPosition) || StringUtils.isNotEmpty(pdfTrialUrl)|| StringUtils.isNotEmpty(eVisaPdfUrl)|| StringUtils.isNotEmpty(pdfUrl)) {
-                    if("1".equals(type)){
-                        String approvalPdf = eVisaPdfUrl.length()>=10 ? eVisaPdfUrl : pdfUrl;
-                         approvalPdf = pdfTrialUrl.length()>=10 ? pdfTrialUrl : approvalPdf;
-                         approvalPdf = pdfTrialUrl.length()>=10 ? pdfTrialUrlPosition : approvalPdf;
-                         taskApp.setSignPdfUrl(getHppsToHttp(approvalPdf));
+                if (StringUtils.isNotEmpty(pdfTrialUrlPosition) || StringUtils.isNotEmpty(pdfTrialUrl) || StringUtils.isNotEmpty(eVisaPdfUrl) || StringUtils.isNotEmpty(pdfUrl)) {
+                    if ("1".equals(type)) {
+                        String approvalPdf = eVisaPdfUrl.length() >= 10 ? eVisaPdfUrl : pdfUrl;
+                        approvalPdf = pdfTrialUrl.length() >= 10 ? pdfTrialUrl : approvalPdf;
+                        approvalPdf = pdfTrialUrl.length() >= 10 ? pdfTrialUrlPosition : approvalPdf;
+                        taskApp.setSignPdfUrl(getHppsToHttp(approvalPdf));
                     } else if ("2".equals(type)) {
                         if (StringUtils.isNotEmpty(eVisaPdfUrl) || StringUtils.isNotEmpty(pdfUrl)) {
                             //试验原始pdf
@@ -343,17 +360,17 @@ public class EVDataServiceImpl implements EVDataService {
                     }
                 }
             } else if (taskApp.getApprovalType() == 2) { //档案
-                map = this.jdbcTemplate.queryForMap("select * from u_archive_file where is_deleted=0 and id =("+taskApp.getFormDataId()+")");
-                String eVisaPdfUrl = map.get("pdf_file_url")+""; //签字的PDF路径
-                String pdfUrl = map.get("file_url")+""; //合并后的PDF路径
+                map = this.jdbcTemplate.queryForMap("select * from u_archive_file where is_deleted=0 and id =(" + taskApp.getFormDataId() + ")");
+                String eVisaPdfUrl = map.get("pdf_file_url") + ""; //签字的PDF路径
+                String pdfUrl = map.get("file_url") + ""; //合并后的PDF路径
                 if (StringUtils.isNotEmpty(eVisaPdfUrl) || StringUtils.isNotEmpty(pdfUrl)) {
                     String url = StringUtils.isNotEmpty(eVisaPdfUrl) ? eVisaPdfUrl : pdfUrl;
                     taskApp.setSignPdfUrl(url);
                 }
             } else if (taskApp.getApprovalType() == 3) {
                 map = this.jdbcTemplate.queryForMap("select * from u_contract_log where  is_deleted=0 and id = " + taskApp.getFormDataId());
-                String eVisaPdfUrl = map.get("e_visa_pdf_url")+""; //签字的PDF路径
-                String pdfUrl = map.get("pdf_url")+""; //合并后的PDF路径
+                String eVisaPdfUrl = map.get("e_visa_pdf_url") + ""; //签字的PDF路径
+                String pdfUrl = map.get("pdf_url") + ""; //合并后的PDF路径
                 if (StringUtils.isNotEmpty(eVisaPdfUrl) || StringUtils.isNotEmpty(pdfUrl)) {
                     String url = StringUtils.isNotEmpty(eVisaPdfUrl) ? eVisaPdfUrl : pdfUrl;
                     taskApp.setSignPdfUrl(url);
@@ -413,10 +430,10 @@ public class EVDataServiceImpl implements EVDataService {
         }
     }
 
-    // 添加电签策略 -- 安心签
+    // 添加电签策略 -- 东方中讯
     public List<Map<String, Object>> getStrategyListByDFZX(TaskSignInfoVO task, String ids) {
 
-        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='" + 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=" + task.getContractId() + " and user_id=" + task.getUserId() + " and c.is_deleted=0 ) ) x where x.signature_file_url is not null ";
+        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=" + task.getContractId() + " and user_id=" + task.getUserId() + " and c.is_deleted=0 ) ) x where x.sealId is not null ";
         if (task.getSigType() == 2) {
             sqlinfo = "SELECT a.id,a.pyzbx,a.pyzby,b.signature_file_url,b.id as sfId,a.project_id,b.certificate_password,b.certificate_user_name,b.certificate_number from m_textdict_info a ,m_sign_pfx_file b where a.sig_role_id = b.pfx_type and b.project_contract_role like '%" + task.getContractId() + "%' and a.is_deleted=0 and b.is_deleted=0 and a.type=6 and a.id in(" + ids + ")";
         }
@@ -453,18 +470,14 @@ public class EVDataServiceImpl implements EVDataService {
         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='" + 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=" + task.getContractId() + " and user_id=" + task.getUserId() + " and c.is_deleted=0 ) ) x where x.signature_file_url is not null ";
         if (task.getSigType() == 2) {
             sqlinfo = "SELECT a.id,a.pyzbx,a.pyzby,b.signature_file_url,b.id as sfId,a.project_id,b.certificate_password,b.certificate_user_name,b.certificate_number from m_textdict_info a ,m_sign_pfx_file b where a.sig_role_id = b.pfx_type and b.project_contract_role like '%" + task.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);
+            System.out.println("签字Sql=" + sqlinfo);
         }
 
         List<Map<String, Object>> maps2 = jdbcTemplate.queryForList(sqlinfo);
         if (maps2 == null && maps2.size() <= 0) {
-            task.setSigState(2);
-            task.setSignSmg("未查询到电签策略");
-            SignBackPdfInfo(task);
             return sealStrategyVOS;
         }
 
-
         List<Map<String, Object>> maps = new ArrayList<>();
         Map<String, List<Map<String, Object>>> peopleByAge = maps2.stream()
                 .collect(Collectors.groupingBy(hada -> (Func.toStr(hada.get("id")))));
@@ -489,9 +502,6 @@ public class EVDataServiceImpl implements EVDataService {
         }
 
         if (maps == null || maps.size() <= 0) {
-            task.setSigState(2);
-            task.setSignSmg("没有签字体的数据");
-            SignBackPdfInfo(task);
             return sealStrategyVOS;
         }
         //准备签章策略
@@ -582,6 +592,7 @@ public class EVDataServiceImpl implements EVDataService {
                 BladeFile bladeFile = this.newIOSSClient.uploadFile(fileUrl.substring(fileUrl.lastIndexOf("/") + 1, fileUrl.length()), fileUrl);
                 if (bladeFile != null) {
                     System.out.println("pdf上传=" + bladeFile.getLink());
+
                     return "sucess@@@@" + bladeFile.getLink();
                 } else {
                     return "电签成功";
@@ -596,7 +607,7 @@ public class EVDataServiceImpl implements EVDataService {
     // 安心签 - 关键字策略
     public void signTaskBatchByAXQZ(List<SealStrategyVO> list, TaskSignInfoVO taskApp) {
 
-        String pdfUrl = Func.notNull(taskApp.getLastFilePdfUrl())?taskApp.getLastFilePdfUrl():taskApp.getSignPdfUrl();
+        String pdfUrl = Func.notNull(taskApp.getLastFilePdfUrl()) ? taskApp.getLastFilePdfUrl() : taskApp.getSignPdfUrl();
 
         if (Func.isEmpty(pdfUrl) || list == null) {
             taskApp.setLastFilePdfUrl(pdfUrl);
@@ -625,7 +636,7 @@ public class EVDataServiceImpl implements EVDataService {
 
         Object[] result = null;
         String fileUrl = pdfUrl;
-        if (list.size() >= 15 || fileByte.length > 10 * 1000 * 1000) {
+        if (list.size() >= 10 || fileByte.length > 10 * 1000 * 1000) {
             String inUrl = "/inp/" + DateUtil.today();
             String outUrl = "/out/" + DateUtil.today();
             SignFtpUtil.FTPCreateDir(inUrl);
@@ -679,7 +690,7 @@ public class EVDataServiceImpl implements EVDataService {
                 taskApp.setSignSmg("电签成功");
             } else {
                 taskApp.setSigState(2);
-                taskApp.setSignSmg("上传OSS失败"+fileUrl);
+                taskApp.setSignSmg("上传OSS失败" + fileUrl);
                 SignBackPdfInfo(taskApp);
                 return;
             }
@@ -693,4 +704,6 @@ public class EVDataServiceImpl implements EVDataService {
         }
         return url;
     }
+
+
 }

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

@@ -44,6 +44,7 @@ import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.constant.EVisaConstant;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.common.utils.SystemUtils;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -95,8 +96,7 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class EVisaServiceImpl implements EVisaService {
 
- //  private static final String SIGN_HOST = "172.30.224.79";
-    private static final String SIGN_HOST = "47.115.117.246";
+    private static String SIGN_HOST = "172.30.224.79";
 
     private static final String SIGN_PORT = "8183";
 
@@ -846,6 +846,11 @@ public class EVisaServiceImpl implements EVisaService {
     public Object[] signPdfByAXQZ(SealPdfVO pdfVO, byte[] fileByte) {
         Object[] result = new Object[3];
         try {
+            String sys_isonline = ParamCache.getValue(CommonConstant.SYS_ISONLINE);
+            if("20".equals(sys_isonline) || SystemUtils.isWindows() || SystemUtils.isMacOs()){
+                SIGN_HOST = "47.115.117.246";
+            }
+
             PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 240000000, 810000000);
             paperlessClient.setSSL(false);
             //*****************************************************************************
@@ -1028,7 +1033,7 @@ public class EVisaServiceImpl implements EVisaService {
     private Object[] signPdfByAXQZ_2(SealPdfVO pdfVO, byte[] fileByte, int typeGenerate) {
         Object[] result = new Object[3];
         try {
-            PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 300000, 36000000);
+            PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 240000000, 810000000);
             paperlessClient.setSSL(false);
             //*****************************************************************************
             CompoundSealPdfListDetachedRequest compoundSealPdfListDetachedRequest = new CompoundSealPdfListDetachedRequest();
@@ -1286,7 +1291,7 @@ public class EVisaServiceImpl implements EVisaService {
     @Override
     public String createSeal(EVisaMakeSealVO vo) {
         try {
-            PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 3000, 20000);
+            PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 240000000, 810000000);
             paperlessClient.setSSL(false);
 
             // ------构造请求报文头------
@@ -1360,7 +1365,7 @@ public class EVisaServiceImpl implements EVisaService {
     @Override
     public List<CertBean> onlineCheckSeal(String pdfUrl) {
         try {
-            PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 300000, 1800000);
+            PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 240000000, 810000000);
             paperlessClient.setSSL(false);
 
             /*==================================================================================*/
@@ -1638,6 +1643,10 @@ public class EVisaServiceImpl implements EVisaService {
     public Object[] signPdfByAXQZ(SealPdfVO pdfVO, String loPdfurl,String outPdfUrl) {
         Object[] result = new Object[3];
         try {
+            String sys_isonline = ParamCache.getValue(CommonConstant.SYS_ISONLINE);
+            if("20".equals(sys_isonline) || SystemUtils.isWindows() || SystemUtils.isMacOs()){
+                SIGN_HOST = "47.115.117.246";
+            }
             PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 240000000, 810000000);
             paperlessClient.setSSL(false);
             //*****************************************************************************

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

@@ -24,13 +24,18 @@ public class FileUtils {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
         String sys_file_net_url = ParamCache.getValue(CommonConstant.SYS_FILE_NET_URL);
 
+
         File file1 = new File(fileUrl);
         InputStream fileInputStream = null;
         if (file1.exists()) {
             fileInputStream = new FileInputStream(file1);
         } else {
-            String path = sys_file_net_url + fileUrl.replaceAll("//", "/").replaceAll(file_path, "");
-            fileInputStream = CommonUtil.getOSSInputStream(path);
+            if(fileUrl.indexOf("http:")>=0 || fileUrl.indexOf("https:")>=0){
+                fileInputStream = CommonUtil.getOSSInputStream(fileUrl);
+            }else {
+                String path = sys_file_net_url + fileUrl.replaceAll("//", "/").replaceAll(file_path, "");
+                fileInputStream = CommonUtil.getOSSInputStream(fileUrl);
+            }
         }
         return fileInputStream;
     }
@@ -101,7 +106,7 @@ public class FileUtils {
     public static String getPdfNum(String url) {
         try {
             if (url.isEmpty() || url.equals("")) {
-                return "";
+                return "0";
             }
             InputStream pdfInputStream = CommonUtil.getOSSInputStream(url);
             //获取这份文件的页数并设置签章策略

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

@@ -64,7 +64,7 @@ public class PDFUtils {
     public static List<String>  getPdfSignIds(String pdfUrl) {
         List<String> eVisaConfigList = new ArrayList<>();
         try  {
-            InputStream inputStream =new FileInputStream(new File(pdfUrl));// CommonUtil.getOSSInputStream(pdfUrl);
+            InputStream inputStream = CommonUtil.getOSSInputStream(pdfUrl);
             PDDocument document = PDDocument.load(inputStream);
             PDFTextStripper stripper = new PDFTextStripper();
             String text = stripper.getText(document);

+ 53 - 15
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/PdfAddimgUtil.java

@@ -6,9 +6,11 @@ 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.manager.entity.TextdictInfo;
 import org.springblade.manager.vo.PDFIndexInfo;
 import org.springblade.system.cache.ParamCache;
 
@@ -16,13 +18,11 @@ import java.io.*;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 public class PdfAddimgUtil {
 
-    public static void pdfAddImgInfo(String pdfUrl, String keyword, Map<Long, TextdictInfo> textMap) throws Exception {
-        String file_path = FileUtils.getSysLocalFileUrl();
-        String signImg = file_path+"/print/241dc221f83929a87d55ce700d6a4cd7.png";
-
+    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;
@@ -41,6 +41,9 @@ public class PdfAddimgUtil {
             }
         }
 
+        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);
 
@@ -48,17 +51,17 @@ public class PdfAddimgUtil {
         if (positions != null && positions.size() > 0) {
 
             for (int i = 0; i < positions.size(); i++) {
-
                 PDFIndexInfo pdfIndexInfo = positions.get(i);
                 float[] position = pdfIndexInfo.getDataInfo();
-                TextdictInfo textdictInfo = textMap.get(Func.toLong(pdfIndexInfo.getPkeyid()));
+                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.getPyzbx());
-                    pyzby = Func.toFloat(textdictInfo.getPyzby());
-                    type = textdictInfo.getType()+"";
+                    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);
             }
@@ -67,20 +70,19 @@ public class PdfAddimgUtil {
 
     public static void gaizhang(File src, File dest, int page, float x, float y, String imagePath,float pyzbx,float pyzby,String type) throws Exception {
         // 读取模板文件
-        String sysLocalFileUrl = FileUtils.getSysLocalFileUrl();
         InputStream input = new FileInputStream(src);
         PdfReader reader = new PdfReader(input);
         PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
-        Rectangle pageSize = reader.getPageSize(1);
+        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 = sysLocalFileUrl + "/print/ht1234567890.png";
+            imagePath = "/Users/hongchuangyanfa/Desktop/print/ht1234567890.png";
         }else{
-            x = width * x - 20+pyzbx;
-            y = height - height * y - 8+pyzby;
+            x = width * x - 33+pyzbx;
+            y = height - height * y - 12+pyzby;
         }
 
         // 读图片
@@ -383,4 +385,40 @@ public class PdfAddimgUtil {
         String path = sys_file_net_url + fileUrl.replaceAll("//", "/").replaceAll(file_path, "");
         return path;
     }
+
+    public static List<String>  getPdfSignIds(String pdfUrl) {
+        List<String> eVisaConfigList = new ArrayList<>();
+        try  {
+            InputStream inputStream = CommonUtil.getOSSInputStream(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)) {
+                        System.out.println(txt);
+                        eVisaConfigList.add(txt);
+                    }
+                }
+            }
+
+            List<String> unique = eVisaConfigList.stream().distinct().collect(Collectors.toList());
+            document.close();
+            return unique;
+        }catch (Exception e){
+            e.printStackTrace();
+            return null;
+        }
+    }
 }

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

@@ -2,17 +2,23 @@ package org.springblade.evisa.utils;
 
 import org.apache.commons.net.ftp.FTP;
 import org.apache.commons.net.ftp.FTPClient;
+import org.springblade.common.constant.CommonConstant;
+import org.springblade.common.utils.SystemUtils;
+import org.springblade.system.cache.ParamCache;
 
 import java.io.*;
 
 public class SignFtpUtil {
 
-    private static final String SERVER = "47.115.117.246";
+    // -外网
+   // private static final String SERVER = "47.115.117.246";
+    // 内网210
+    private static String SERVER = "172.30.224.79";
     private static final int PORT = 6233;
     private static final String USER = "signAdmin";
     private static final String PASS = "123456";
-    private static final int CONNECT_TIMEOUT = 30000; // 30秒
-    private static final int DATA_TIMEOUT = 30000; // 30秒
+    private static final int CONNECT_TIMEOUT = 90000; // 30秒
+    private static final int DATA_TIMEOUT = 90000; // 30秒
 
     /**
      *  获取ftp 客户端
@@ -27,6 +33,10 @@ public class SignFtpUtil {
             // 设置数据传输超时时间
             ftp.setDataTimeout(DATA_TIMEOUT);
             // 连接到FTP服务器
+            String sys_isonline = ParamCache.getValue(CommonConstant.SYS_ISONLINE);
+            if("20".equals(sys_isonline) || SystemUtils.isWindows() || SystemUtils.isMacOs()){
+                SERVER = "47.115.117.246";
+            }
             ftp.connect(SERVER, PORT);
             ftp.setControlEncoding("UTF-8");
             ftp.enterLocalPassiveMode();

+ 0 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -1281,13 +1281,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                         e.printStackTrace();
                         tec.getLog().put(FormulaLog.CALC,fd.getEName()+"("+formula+")");
                     }
-
                 }
                 /*数量不相等*/
                 fd.setUpdate(1);
             }
         }
-
     }
     /*确定各个元素在计算时的步长,算法:step=最长单元格数/当前元素单元格数*/
     private LinkedHashMap<String,FormData>  step(List<FormData> ele){

+ 133 - 27
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -76,10 +76,7 @@ import org.springblade.meter.service.IInterimPayCertificateService;
 import org.springblade.meter.service.IMaterialStartStatementService;
 import org.springblade.meter.service.ITaskRepealMessageService;
 import org.springblade.meter.service.impl.*;
-import org.springblade.meter.utils.CollectionUtils;
-import org.springblade.meter.utils.CreateDashedLine;
-import org.springblade.meter.utils.ExcelImageExample;
-import org.springblade.meter.utils.FileUtils;
+import org.springblade.meter.utils.*;
 import org.springblade.meter.vo.*;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.cache.ParamCache;
@@ -89,6 +86,7 @@ import org.springblade.websocket.feign.WebSocketClient;
 import org.springblade.websocket.vo.UserInfoVO;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
@@ -2655,7 +2653,7 @@ public class TaskController extends BladeController {
     @ApiOperationSupport(order = 19)
     @ApiOperation(value = "同意审批(批量审批)", notes = "传入TaskApproveDTO")
 //    @PushMessage(clientId = ClientIdConstant.METER_CLIENT_ID)
-    @Transactional
+  //  @Transactional
     public R<Object> approve(@RequestBody TaskApproveDTO dto) {
         if (ObjectUtil.isEmpty(dto.getTaskId()) || ObjectUtil.isEmpty(dto.getProjectId()) || ObjectUtil.isEmpty(dto.getContractId()) || ObjectUtil.isEmpty(SecureUtil.getUserId())) {
             throw new ServiceException("入参数据异常");
@@ -2786,6 +2784,8 @@ public class TaskController extends BladeController {
                 meterPdfInfo(reportId + "", task.getMeterTaskType() - 1, taskType);
             }
 
+            taskMeterPdfInfo2(task.getId(),reportId,task.getMeterTaskType() - 1, taskType);
+
             return R.data(200, aopParamsSet, "操作成功");
         }
         return R.fail("操作失败");
@@ -3739,32 +3739,137 @@ public class TaskController extends BladeController {
     @ApiOperationSupport(order = 22)
     @ApiOperation(value = "任务审批时-查看报表", notes = "任务审批时-查看报表")
     public R taskMeterPdfInfo(@RequestParam Long taskId, @RequestParam String reportId, @RequestParam Integer type, @RequestParam Integer taskType) {
-        Task task = jdbcTemplate.query("SELECT * FROM u_task WHERE id = ?", new Object[]{taskId}, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
-        if (task == null){
-            return R.fail("未找到任务相关信息");
+        try {
+            Task task = jdbcTemplate.query("SELECT * FROM u_task WHERE id = ?", new Object[]{taskId}, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+            if (task == null) {
+                return R.fail("未找到任务相关信息");
+            }
+            if (task.getStatus() == 3) {
+                return R.fail("已废除无法查看报表");
+            }
+
+            String sql = "";
+            if (type == 0) {
+                sql = "select raw_url,pre_pdf_url from s_interim_pay_certificate where id = ?";
+            } else {
+                sql = "select raw_url,pre_pdf_url from s_material_start_statement where id = ?";
+            }
+
+            Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql, reportId);
+            String pdfUrl = (String) stringObjectMap.get("raw_url");
+            if (StringUtils.isBlank(pdfUrl)) {
+                calculate(reportId, type, taskType);
+                return R.fail("电签报表生成中,等2分钟刷新查看");
+            } else {
+                if (task.getStatus() == 2) {
+                    return R.data(pdfUrl);
+                }
+                if (task.getStatus() == 1){
+                    String pre_pdf_url = (String) stringObjectMap.get("pre_pdf_url");
+                    return R.data(pre_pdf_url);
+                }
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
         }
-        if (task.getStatus() == 2 || task.getStatus() == 1){
-            String pdfUrl;
-            //审批完成
-            String sql;
+        return R.data("");
+    }
+
+    //
+
+    @Async
+    public R taskMeterPdfInfo2(@RequestParam Long taskId, @RequestParam String reportId, @RequestParam Integer type, @RequestParam Integer taskType) {
+        try {
+            Task task = jdbcTemplate.query("SELECT * FROM u_task WHERE id = ?", new Object[]{taskId}, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+            if (task == null) {
+                return R.fail("未找到任务相关信息");
+            }
+            if (task.getStatus() == 3) {
+                return R.fail("已废除无法查看报表");
+            }
+
+            String sql = "";
             if (type == 0) {
-                sql = "select raw_url from s_interim_pay_certificate where id = ?";
+                if(Func.isEmpty(reportId) || reportId==null){
+                    sql = "select raw_url from s_interim_pay_certificate where contract_period_id = "+task.getFormDataId()+" ";
+                }else{
+                    sql = "select raw_url from s_interim_pay_certificate where id = "+reportId+"";
+                }
             } else {
-                sql = "select raw_url from s_material_start_statement where id = ?";
+                if(Func.isEmpty(reportId) || reportId==null){
+                    sql = "select raw_url from s_material_start_statement where contract_period_id = "+task.getFormDataId()+"";
+                }else{
+                    sql = "select raw_url from s_material_start_statement where id = "+reportId+"";
+                }
             }
-            pdfUrl = jdbcTemplate.queryForObject(sql, String.class, reportId);
-            if (StringUtils.isBlank(pdfUrl)){
-                 calculate(reportId, type, taskType);
-                return R.fail("电签报表生成中,请稍后刷新查看");
+            String pdfUrl = jdbcTemplate.queryForObject(sql, String.class);
+            if (StringUtils.isBlank(pdfUrl)) {
+                calculate(reportId, type, taskType);
+                return R.fail("电签报表生成中,等2分钟刷新查看");
+            } else {
+                List<String> pdfSignIds = PdfAddimgUtil.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);
+                        if (sys_isonline.equals("20")) {
+                            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 {
+                            return R.data(FileUtils.getNetUrl(localPdfPath));
+                        }
+
+                    } else {
+                        return R.data(pdfUrl);
+                    }
+
+                } else {
+                    return R.data(pdfUrl);
+                }
             }
-            return R.data(pdfUrl);
-        }/*else if (task.getStatus() == 1){
-            //审批中
-            return calculate(reportId, type, taskType);
-        }*/else {
-            //已废除
-            return R.fail("已废除无法查看报表");
+        } catch (Exception e) {
+            throw new RuntimeException(e);
         }
+        return R.data("");
     }
 
 
@@ -3832,6 +3937,9 @@ public class TaskController extends BladeController {
             String string = stringBuilder.toString();
             String sqlUpdate = "update s_interim_pay_certificate set file_url_list = '"+string +"',raw_url = '"+rawPdfUrL+"' where id = "+report.getId();
             jdbcTemplate.execute(sqlUpdate);
+            if (taskType != 10) {
+                addSignTaskBatch(report);
+            }
             return R.data(rawPdfUrL);
         }else{
             reportResults = formulaClient.formulaExecute3(report.getContractId(), report.getId(), report.getType(),report.getPeriodId(),report.getProjectId());
@@ -4290,13 +4398,11 @@ public class TaskController extends BladeController {
                     } catch (Exception e) {
                         StaticLog.error(e.getMessage());
                     }
-
                 }
             });
         }
     }
 
-
     // 添加电签任务列表lL
     @Transactional
     public void addSignTaskBatch(Report report) {

+ 1 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateMapper.xml

@@ -24,6 +24,7 @@
         <result column="calculate_date" property="calculateDate"/>
         <result column="pay_money" property="payMoney"/>
         <result column="raw_url" property="rawUrl"/>
+        <result column="pre_pdf_url" property="prePdfUrl"/>
         <result column="file_url_list" property="fileUrlList" />
     </resultMap>
     <select id="getById" resultType="org.springblade.meter.vo.InterimPayCertificateVO">