zhuwei 5 сар өмнө
parent
commit
2dca840524
25 өөрчлөгдсөн 1230 нэмэгдсэн , 1076 устгасан
  1. 1 1
      blade-common/src/main/java/org/springblade/common/utils/AsyncConfigurer.java
  2. 6 3
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
  3. 6 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ScrSignInfoVO.java
  4. 3 1
      blade-service-api/blade-e-visa-api/src/main/java/org/springblade/evisa/vo/CertBeanVO.java
  5. 22 0
      blade-service-api/blade-e-visa-api/src/main/java/org/springblade/evisa/vo/SignKeyVO.java
  6. 2 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/config/sqliteConfig.java
  7. 1 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  8. 9 5
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveOfflineVersionInfoServiceImpl.java
  9. 617 596
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  10. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml
  11. 4 4
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVController.java
  12. 3 2
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/ScrController.java
  13. 2 0
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/feign/EVisaClientImpl.java
  14. 98 82
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVDataServiceImpl.java
  15. 2 0
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java
  16. 68 43
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/ScrDataServiceImpl.java
  17. 10 2
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/PdfAddimgUtil.java
  18. 12 9
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/PdfSignatureInfo.java
  19. 289 300
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  20. 0 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java
  21. 9 3
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java
  22. 1 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateMapper.xml
  23. 1 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml
  24. 63 18
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateItemServiceImpl.java
  25. 0 1
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

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

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

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

@@ -86,9 +86,12 @@ public class OssBuilder {
     public OssTemplateRe template(String code) {
         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/");
-
+        String sys_isonline = ParamCache.getValue(CommonConstant.SYS_ISONLINE);
+        if(sys_isonline.equals("20")){
+            oss.setEndpoint("http://183.247.216.148:9000/");
+        }else{
+            oss.setEndpoint("https://oss-cn-shenzhen.aliyuncs.com/");
+        }
         Oss ossCached = ossPool.get(tenantId);
         OssTemplateRe template = templatePool.get(tenantId);
         // 若为空或者不一致,则重新加载

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

@@ -33,4 +33,10 @@ public class ScrSignInfoVO implements Serializable {
     @ApiModelProperty("流程节点Id")
     private String processInstanceId;
 
+    @ApiModelProperty("电签类型1:安心签 东方中讯")
+    private String remarkType;
+
+    @ApiModelProperty("电签状态 1待审批 2已审批 3废除")
+    private String status;
+
 }

+ 3 - 1
blade-service-api/blade-e-visa-api/src/main/java/org/springblade/evisa/vo/CertBeanVO.java

@@ -11,8 +11,10 @@ public class CertBeanVO {
     private String issuerDn = "";
     private String notBefore = "";
     private String notAfter = "";
-
     private String pdfUrl;
+    private String time;
+    private String result;
+
 
     private List<CertBeanVO> certBeanVOList;
 

+ 22 - 0
blade-service-api/blade-e-visa-api/src/main/java/org/springblade/evisa/vo/SignKeyVO.java

@@ -0,0 +1,22 @@
+package org.springblade.evisa.vo;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class SignKeyVO {
+
+    /**
+     * pdf上签字key
+     */
+    private List<String> eVisaConfigList;
+    /**
+     * key来源对象
+     */
+    private Map<String,String> dataMap;
+
+}

+ 2 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/config/sqliteConfig.java

@@ -15,7 +15,8 @@ public class sqliteConfig {
     public DataSource dataSource() {
         DruidDataSource ds = new DruidDataSource();
 //        ds.setUrl("jdbc:sqlite:D:\\BaiduNetdiskDownload\\bladeX后端开发手册\\data");
-        ds.setUrl("jdbc:sqlite:/www/wwwroot/Users/hongchuangyanfa/Desktop/localArchive/localClient/data");
+        ds.setUrl("jdbc:sqlite:/Users/hongchuangyanfa/Desktop/localArchive/data");
+      //  ds.setUrl("jdbc:sqlite:/www/wwwroot/Users/hongchuangyanfa/Desktop/localArchive/localClient/data");
         ds.setDriverClassName("org.sqlite.JDBC");
         return ds;
     }

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -440,7 +440,7 @@
     <select id="getListByProjectId" resultType="org.springblade.archive.dto.ArchivesAutoDTO">
         select *
         from u_archives_auto
-        where project_id = #{projectId} and is_deleted = 0;
+        where project_id = #{projectId} and is_deleted = 0 limit 10;
     </select>
     <select id="pageByArchivesAuto" resultMap="archivesAutoResultMap">
         select uaa.*

+ 9 - 5
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveOfflineVersionInfoServiceImpl.java

@@ -68,7 +68,7 @@ public class ArchiveOfflineVersionInfoServiceImpl extends BaseServiceImpl<Archiv
 //        String packUrl = "/www/wwwroot/localClient";
 //        String zipUrl = "/www/wwwroot/localClient.zip";
         String fileUrl = FileUtils.getSysLocalFileUrl();
-        String localUrl = fileUrl+"localArchive/localClient/local_archives/alilib";
+        String localUrl = fileUrl+"localArchive/pdf";
         String packUrl = fileUrl+"localArchive";
         String zipUrl = fileUrl+"localArchive/"+projectId;
         //清空url的文件夹
@@ -151,7 +151,9 @@ public class ArchiveOfflineVersionInfoServiceImpl extends BaseServiceImpl<Archiv
                     pstm.setString(8, m.getFileStorageType());
                     pstm.setString(9, m.getContainerInitTabName());
                     pstm.setString(10, m.getFieldKey());
-                    pstm.setLong(11, m.getIsType());
+
+                  //  pstm.setLong(11, m.getIsType());
+                    pstm.setLong(11, 1);
                     //添加批处理
                     pstm.addBatch();
                     if (i % 1000 == 0) {
@@ -289,7 +291,7 @@ public class ArchiveOfflineVersionInfoServiceImpl extends BaseServiceImpl<Archiv
     public void fileToSqlite(Long projectId) throws Exception {
         List<ArchiveFile> list = fileClient.getListByProjectId(projectId);
         if (list != null && list.size() > 0) {
-            String localUrl = "/www/wwwroot/Users/hongchuangyanfa/Desktop/localArchive/localClient/local_archives/alilib/";
+            String localUrl = FileUtils.getSysLocalFileUrl()+"localArchive/pdf/";
             for (ArchiveFile file : list) {
 //                if (StringUtil.isNotBlank(file.getFileUrl())) {
 //                    String fileUrl = file.getFileUrl();
@@ -305,7 +307,9 @@ public class ArchiveOfflineVersionInfoServiceImpl extends BaseServiceImpl<Archiv
                     String fileName = pdfFileUrl.substring(pdfFileUrl.lastIndexOf('/') + 1);
                     InputStream file_out = CommonUtil.getOSSInputStream(pdfFileUrl);
                     if (file_out != null) {
-                        CommonUtil.inputStreamToFile(file_out, new File(localUrl + fileName));
+                       String localFileUrl = localUrl + fileName;
+                        File lofile=new File(localFileUrl);
+                        CommonUtil.inputStreamToFile(file_out, lofile);
                         file.setPdfFileUrl(fileName);
                     }
                 }
@@ -401,7 +405,7 @@ public class ArchiveOfflineVersionInfoServiceImpl extends BaseServiceImpl<Archiv
     public void autoToSqlite(Long projectId) {
         List<ArchivesAutoDTO> list = autoMapper.getListByProjectId(projectId);
         if (list != null && list.size() > 0) {
-            String localUrl = "/www/wwwroot/Users/hongchuangyanfa/Desktop/localArchive/localClient/local_archives/alilib/";
+            String localUrl = "/www/wwwroot/Users/hongchuangyanfa/Desktop/localArchive/pdf/";
             //拼接档案里文件的pdf设置allPdf
 //            for (ArchivesAutoDTO dto : list) {
 //                List<ArchiveFile> files = fileClient.getArchiveFileByArchivesId(dto.getId() + "", "");

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 617 - 596
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java


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

@@ -331,7 +331,7 @@
     <select id="getListByProjectId" resultType="org.springblade.business.entity.ArchiveFile">
         select *
         from u_archive_file
-        where project_id = #{projectId} and is_deleted = 0;
+        where project_id = #{projectId} and is_deleted = 0 LIMIT 10;
     </select>
     <select id="getAllArchiveFileByContractType" resultType="org.springblade.business.vo.ArchiveFileVO">
         SELECT uaf.*, matc.tree_code as 'contractType'

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

@@ -56,18 +56,18 @@ 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 GROUP BY JSON_EXTRACT(json_data, '$.formDataId') ORDER BY sign_type ASC LIMIT 30  ";
+        String sql = "SELECT *  from u_task_batch where  is_deleted=0 GROUP BY JSON_EXTRACT(json_data, '$.formDataId')  ORDER BY sign_type ASC LIMIT 30  ";
 
         //String sql = "SELECT * from u_task_batch where is_deleted=0 and id=1871438158680403970 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()<=50 ) {
+                if (executor.getQueue().size()<=20 ) {
                     String jsonData = dataInfo.get("json_data") + "";
                     String signFormat = dataInfo.get("sign_format") + "";
                     String sigType = dataInfo.get("sign_type") + "";
@@ -82,7 +82,7 @@ public class EVController {
                     taskSignInfoVO.setSignFormat(signFormat);
                     if(sigType.equals("2")){
                         taskSignInfoVO.setSigType(2);
-                      String sql12 = "SELECT a.* from u_task a,u_task_parallel b where a.process_instance_id=b.process_instance_id and b.initiative=1 and  a.is_deleted=0 and b.is_deleted=0 and a.`status` in(1,2) and a.id="+taskSignInfoVO.getTaskId()+"";
+                      String sql12 = "SELECT a.* from u_task a,u_task_parallel b where a.process_instance_id=b.process_instance_id and b.initiative=1 and  a.is_deleted=0 and b.is_deleted=0 and a.`status` in(1,2) and a.id='"+taskSignInfoVO.getTaskId()+"'";
                       List<Map<String, Object>> maps12 = jdbcTemplate.queryForList(sql12);
                       if(maps12!=null && maps12.size()>=1){
                           jdbcTemplate.execute("delete from u_task_batch where id="+taskBatchId+"");

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

@@ -45,13 +45,14 @@ public class ScrController {
     @Resource(name = "taskExecutor1")
     private ThreadPoolExecutor executor;
 
-   // @Scheduled(cron = "0/10 * * * * ?")
+    @Scheduled(cron = "0/10 * * * * ?")
     public void SignInfo() {
         //执行代码
 
         // 质检SQL
         //String sql = "SELECT a.id as ,a.e_visa_pdf_url,b.process_instance_id,a.contract_id,a.project_id from u_information_query a ,u_task b  where a.id=1848624592908722177 and a.`status` in(1,2) and a.is_deleted=0 and a.e_visa_pdf_url is not null  and b.form_data_id = a.id and b.`status` in(1,2) ";
-        String sql = "SELECT a.id ,a.e_visa_pdf_url,b.process_instance_id,a.contract_id,a.project_id  from u_information_query a ,u_task b  where a.id=1848624592908722177 and a.`status` in(1,2) and a.is_deleted=0 and a.e_visa_pdf_url is not null  and b.form_data_id = a.id and b.`status` in(1,2) ";
+        //String sql = "SELECT a.id ,a.e_visa_pdf_url,b.process_instance_id,a.contract_id,a.project_id,c.remark_type,b.status  from u_information_query a ,u_task b ,m_project_info c where a.id=1876454170165248000 and c.id=a.project_id and  (a.update_time > DATE_SUB(NOW(), INTERVAL 3 DAY) or a.create_time > DATE_SUB(NOW(), INTERVAL 3 DAY)) and a.`status` in(1,2) and a.is_deleted=0 and a.e_visa_pdf_url is not null  and b.form_data_id = a.id and b.`status` in(1,2) ";
+        String sql = "SELECT a.id ,a.e_visa_pdf_url,b.process_instance_id,a.contract_id,a.project_id,c.remark_type,b.status  from u_information_query a ,u_task b ,m_project_info c where a.id=1876454170165248000 and c.id=a.project_id  and a.`status` in(1,2) and a.is_deleted=0 and a.e_visa_pdf_url is not null  and b.form_data_id = a.id and b.`status` in(1,2) ";
 
         List<ScrSignInfoVO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ScrSignInfoVO.class));
         if (query != null && query.size() >= 1 ) {

+ 2 - 0
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/feign/EVisaClientImpl.java

@@ -20,6 +20,8 @@ public class EVisaClientImpl implements EVisaClient {
     @Override
     public CertBeanVO onlineCheckSeal(String pdfUrl) {
         List<CertBean> beans = this.eVisaService.onlineCheckSeal(pdfUrl);
+
+
         if (beans != null && beans.size() > 0) {
             //设置返回参数
             CertBeanVO reVO = new CertBeanVO();

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

@@ -75,90 +75,106 @@ public class EVDataServiceImpl implements EVDataService {
     @Override
     public void signTaskBatch(TaskSignInfoVO taskApp) {
         //获取pdf 文件
-        this.getSignPdfInfo(taskApp);
-        if (taskApp.getSigState() != 1) {
-            return;
-        }
-
-        this.addSignatureTaskBatch(taskApp);
-
-        String fileUrl = CommonUtil.replaceOssUrl(taskApp.getSignPdfUrl());
-        List<String> eVisaConfigList = PDFUtils.getPdfSignIds(fileUrl, taskApp);
-        if (eVisaConfigList == null || eVisaConfigList.size() == 0) {
-            //没有电签配置,默认当前任务为不签字审批,返回成功
-            taskApp.setSigState(2);
-            taskApp.setSignSmg("pdf未获取到关键字Id");
-            SignBackPdfInfo(taskApp);
-            return;
-        }
-        // 获取pdf上的电签Ids
-        String ids = String.join(",", eVisaConfigList);
-        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);
-                return;
-            }
-
-            //调用签字逻辑
-            signTaskBatchByAXQZ(strategyListByAXQ, taskApp);
+        if (taskApp.getFlag().equals("OK")) {
+            this.getSignPdfInfo(taskApp);
             if (taskApp.getSigState() != 1) {
                 return;
             }
-            // 回归处理
-            SignBackPdfInfo(taskApp);
-            if (taskApp.getSigState() != 1) {
+            this.addSignatureTaskBatch(taskApp);
+            String fileUrl = CommonUtil.replaceOssUrl(taskApp.getSignPdfUrl());
+            List<String> eVisaConfigList = PDFUtils.getPdfSignIds(fileUrl, taskApp);
+            if (eVisaConfigList == null || eVisaConfigList.size() == 0) {
+                //没有电签配置,默认当前任务为不签字审批,返回成功
+                taskApp.setSigState(2);
+                taskApp.setSignSmg("pdf未获取到关键字Id");
+                SignBackPdfInfo(taskApp);
                 return;
             }
-        } else if (taskApp.getRemarkType().equals("2")) { //东方中讯
-            //添加电签策略
-            List<Map<String, Object>> strategyListByDFZX = getStrategyListByDFZX(taskApp, ids);
-            //调用签字逻辑
-            String s = signTaskBatchByDFZX(strategyListByDFZX, fileUrl,taskApp.getSigType());
-            if (s.contains("sucess")) {
-                taskApp.setLastFilePdfUrl(s.split("@@@@")[1]);
-                taskApp.setSigState(1);
-                taskApp.setSignSmg("电签成功");
-            } else {
-                taskApp.setSigState(2);
-                taskApp.setSignSmg("电签中失败");
+            // 获取pdf上的电签Ids
+            String ids = String.join(",", eVisaConfigList);
+            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);
+                    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);
+                //调用签字逻辑
+                String s = signTaskBatchByDFZX(strategyListByDFZX, fileUrl, taskApp.getSigType());
+                if (s.contains("sucess")) {
+                    taskApp.setLastFilePdfUrl(s.split("@@@@")[1]);
+                    taskApp.setSigState(1);
+                    taskApp.setSignSmg("电签成功");
+                } else {
+                    taskApp.setSigState(2);
+                    taskApp.setSignSmg("电签中失败");
+                    SignBackPdfInfo(taskApp);
+                }
+                // 回归处理
                 SignBackPdfInfo(taskApp);
             }
-            // 回归处理
-            SignBackPdfInfo(taskApp);
+        } else{ //废除
+            // 修改 主 任务 u_task 表 状态改为3
+            String up_task_par = "update u_task_parallel set status=3 where parallel_process_instance_id='"+taskApp.getParallelProcessInstanceId()+"'";
+            String up_task = "update u_task set status=3 where id='"+taskApp.getTaskId()+"'";
+            this.jdbcTemplate.execute("delete from u_task_batch where id="+taskApp.getId());
+            jdbcTemplate.execute(up_task_par);
+            jdbcTemplate.execute(up_task);
+
+            if(taskApp.getApprovalType() == 3){
+                jdbcTemplate.execute("update u_contract_log set status=0 where id='"+taskApp.getFormDataId()+"'");
+            }else if (taskApp.getApprovalType()==8) {
+                this.jdbcTemplate.execute("update u_entrust_info set status=1 where id=(SELECT wbs_id from u_information_query where id='"+taskApp.getFormDataId()+"')");
+            }else {
+                jdbcTemplate.execute("update u_information_query set e_visa_pdf_url='',status=0 where id='"+taskApp.getFormDataId()+"'");
+            }
+            RedisTemplate.delete("sign-" + taskApp.getFormDataId());
         }
     }
 
 
     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";
+        if (taskApp.getSigType() == 1) {
+            String sql = " SELECT * from u_task_batch where sign_type=2 and (JSON_EXTRACT(json_data, '$.taskId')='" + taskApp.getTaskId() + "' or JSON_EXTRACT(json_data, '$.taskId')=" + taskApp.getTaskId() + ")";
             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()+"";
+            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);
             }
         }
         // 计量签字时,需要 把 审计的任务改为已经审批
-        if(taskApp.getApprovalType()==5 || taskApp.getApprovalType()==6 || taskApp.getApprovalType()==7){
+        if (taskApp.getApprovalType() == 5 || taskApp.getApprovalType() == 6 || taskApp.getApprovalType() == 7) {
             String UPSqlJL = " update u_task_parallel a set a.e_visa_status=1,e_visa_content='电签成功',initiative=2 where sort in( SELECT a.fixed_flow_branch_sort from u_task b,u_fixed_flow_link a where b.`status` in(1,2) and b.id='" + taskApp.getTaskId() + "' and a.fixed_flow_id=b.fixed_flow_id and a.flow_task_type=2 ) and a.process_instance_id in(SELECT process_instance_id from u_task b where b.`status` in(1,2) and b.id='" + taskApp.getTaskId() + "')";
             jdbcTemplate.execute(UPSqlJL);
         }
@@ -197,7 +213,7 @@ public class EVDataServiceImpl implements EVDataService {
                         }
 
                         FileUtils.mergePdfPublicMethods(datainfo, listPdf);
-                        if("20".equals(sys_isonline) || SystemUtils.isWindows() || SystemUtils.isMacOs()){
+                        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();
@@ -217,14 +233,14 @@ public class EVDataServiceImpl implements EVDataService {
                     String pdfTrialUrlPosition = "";
                     if ("2".equals(taskApp.getPdfDataType())) {
                         String taskStatus = "";
-                        if (taskApp.getSigState() == 1 && taskApp.getSigType()==1) {
+                        if (taskApp.getSigState() == 1 && taskApp.getSigType() == 1) {
                             taskStatus = "待审批";
-                        } else if (taskApp.getSigState() == 1 && taskApp.getSigType()==2) {
+                        } else if (taskApp.getSigState() == 1 && taskApp.getSigType() == 2) {
                             taskStatus = "已审批";
                         } else if (taskApp.getSigState() == 3) {
                             taskStatus = "已废除";
                         }
-                        String updTrial = "update u_trial_self_inspection_record set status="+taskApp.getSigType()+", 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 status=" + taskApp.getSigType() + ", 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);
 
                         /**
@@ -357,7 +373,7 @@ public class EVDataServiceImpl implements EVDataService {
                     } else if ("3".equals(type)) {
                         //首件,首件的资料由三个部分组成:封面、关联资料、总结报告
                         if (StringUtils.isNotEmpty(eVisaPdfUrl) || StringUtils.isNotEmpty(pdfUrl)) {
-                            String url = eVisaPdfUrl.length()>=10 ? eVisaPdfUrl : pdfUrl;
+                            String url = eVisaPdfUrl.length() >= 10 ? eVisaPdfUrl : pdfUrl;
                             String s = getHppsToHttp(url);
                             taskApp.setSignPdfUrl(s);
                         }
@@ -368,7 +384,7 @@ public class EVDataServiceImpl implements EVDataService {
                 String eVisaPdfUrl = map.get("pdf_file_url") + ""; //签字的PDF路径
                 String pdfUrl = map.get("file_url") + ""; //合并后的PDF路径
                 if (StringUtils.isNotEmpty(eVisaPdfUrl) || StringUtils.isNotEmpty(pdfUrl)) {
-                    String url = eVisaPdfUrl.length()>=10 ? eVisaPdfUrl : pdfUrl;
+                    String url = eVisaPdfUrl.length() >= 10 ? eVisaPdfUrl : pdfUrl;
                     taskApp.setSignPdfUrl(url);
                 }
             } else if (taskApp.getApprovalType() == 3) {
@@ -376,7 +392,7 @@ public class EVDataServiceImpl implements EVDataService {
                 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 = eVisaPdfUrl.length()>=10 ? eVisaPdfUrl : pdfUrl;
+                    String url = eVisaPdfUrl.length() >= 10 ? eVisaPdfUrl : pdfUrl;
                     taskApp.setSignPdfUrl(url);
                 }
             } else if (taskApp.getApprovalType() == 4) { //档案走自定义 搓章的问题
@@ -440,9 +456,9 @@ public class EVDataServiceImpl implements EVDataService {
         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 as keyWord,a.pyzbx,a.pyzby,b.certificate_number as sealId from m_textdict_info a ,m_sign_pfx_file b where a.sig_role_id = b.pfx_type and b.project_contract_role like '%" + task.getContractId() + "%' and a.is_deleted=0 and b.is_deleted=0 and a.type=6 and a.id in(" + ids + ")";
-            System.out.println("东方中讯--签章--"+sqlinfo);
-        }else{
-            System.out.println("东方中讯--签字--"+sqlinfo);
+            System.out.println("东方中讯--签章--" + sqlinfo);
+        } else {
+            System.out.println("东方中讯--签字--" + sqlinfo);
         }
 
         List<Map<String, Object>> maps2 = jdbcTemplate.queryForList(sqlinfo);
@@ -474,11 +490,11 @@ public class EVDataServiceImpl implements EVDataService {
     // 添加电签策略 -- 安心签
     public List<SealStrategyVO> getStrategyListByAXQ(TaskSignInfoVO task, String ids) {
         List<SealStrategyVO> sealStrategyVOS = new ArrayList<>();
-        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, (SELECT wide from m_sign_pfx_file where is_register=1 and certificate_user_id='" + task.getUserId() + "' and is_deleted=0  ) as wide ,(SELECT high from m_sign_pfx_file where is_register=1 and certificate_user_id='"+task.getUserId()+"' and is_deleted=0  ) as high 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 and x.project_id="+task.getProjectId()+" ";
+        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, (SELECT wide from m_sign_pfx_file where is_register=1 and certificate_user_id='" + task.getUserId() + "' and is_deleted=0  ) as wide ,(SELECT high from m_sign_pfx_file where is_register=1 and certificate_user_id='" + task.getUserId() + "' and is_deleted=0  ) as high 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 and x.project_id=" + task.getProjectId() + " ";
         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 ,b.wide,b.high 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 + ") and a.project_id="+task.getProjectId()+"";
+            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 ,b.wide,b.high 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 + ") and a.project_id=" + task.getProjectId() + "";
             System.out.println("安心签--签章--=" + sqlinfo);
-        }else{
+        } else {
             System.out.println("安心签--签字--=" + sqlinfo);
         }
         List<Map<String, Object>> maps2 = jdbcTemplate.queryForList(sqlinfo);
@@ -554,7 +570,7 @@ public class EVDataServiceImpl implements EVDataService {
     }
 
     // 添加电签策略 -- 东方中讯
-    public String signTaskBatchByDFZX(List<Map<String, Object>> maps, String pdfUrl,int type) {
+    public String signTaskBatchByDFZX(List<Map<String, Object>> maps, String pdfUrl, int type) {
         if (maps != null && maps.size() > 0) {
             String fileUrl = pdfUrl;
             for (Map<String, Object> dataMap : maps) {
@@ -562,7 +578,7 @@ public class EVDataServiceImpl implements EVDataService {
                 daMa.put("keyWord", dataMap.get("keyWord"));
                 daMa.put("sealId", dataMap.get("sealId"));
                 // 设置图片显示大小
-                if(type!=2){ //章
+                if (type != 2) { //章
                     daMa.put("showHeight", 30);
                     daMa.put("showWidth", 60);
                 }
@@ -713,7 +729,7 @@ public class EVDataServiceImpl implements EVDataService {
 
     public String getHppsToHttp(String url) {
         String sys_isonline = ParamCache.getValue(CommonConstant.SYS_ISONLINE);
-        if (Func.isNotEmpty(sys_isonline) &&url.contains("https:") && sys_isonline.equals("20")) {
+        if (Func.isNotEmpty(sys_isonline) && url.contains("https:") && sys_isonline.equals("20")) {
             return url.replace("https:", "http:");
         }
         return url;

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

@@ -1732,6 +1732,7 @@ public class EVisaServiceImpl implements EVisaService {
             CompoundSealPdfListDetachedResponse compoundSealPdfListDetachedResponse = (CompoundSealPdfListDetachedResponse) responseDto;
             ResponseHead responseHead = compoundSealPdfListDetachedResponse.getHead();
             CompoundSealPdfListDetachedResponseBody responseBody = compoundSealPdfListDetachedResponse.getBody();
+
             if (ClientConstants.CODE_SUCCESS.equals(responseHead.getCode())) {
                 List<PdfBean4Response> pdfBeanList = responseBody.getPdfBeans();
                 if (pdfBeanList != null && pdfBeanList.size() > 0) {
@@ -1740,6 +1741,7 @@ public class EVisaServiceImpl implements EVisaService {
                 }
             } else {
                 logger.info("【电签模块】{}", "签章响应Response:" + compoundSealPdfListDetachedResponse);
+                System.out.println("签章响应Response:" + compoundSealPdfListDetachedResponse);
                 logger.info("【电签模块】{}", "签章响应code:" + responseHead.getCode());
                 result[0] = null;
                 result[1] = compoundSealPdfListDetachedResponse.toString();

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

@@ -11,9 +11,11 @@ import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.evisa.service.ScrDataService;
 import org.springblade.evisa.utils.PdfAddimgUtil;
+import org.springblade.evisa.vo.SignKeyVO;
 import org.springblade.manager.vo.PDFIndexInfo;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
+
 import java.io.*;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -28,7 +30,7 @@ public class ScrDataServiceImpl implements ScrDataService {
     @Override
     public void sctTaskBatch(ScrSignInfoVO taskApp) throws Exception {
         // 电签检查
-
+        this.sctTaskBatch2(taskApp);
     }
 
     /**
@@ -45,11 +47,17 @@ public class ScrDataServiceImpl implements ScrDataService {
         byte[] pdfData = CommonUtil.InputStreamToBytes(inputStream);
 
         PDDocument document = PDDocument.load(inputStream2);
-        List<String> positions = PdfAddimgUtil.getPdfSignIds(pdfUrl);
+        SignKeyVO pdfSignIds = PdfAddimgUtil.getPdfSignIds(pdfUrl);
+        List<String> positions = pdfSignIds.getEVisaConfigList();
+        Map<String, String> dataMap = pdfSignIds.getDataMap();
 
         List<String> sucess = new ArrayList<>();
         String ids = String.join(",", positions);
-        List<Map<String, Object>> strategyListByDFZX = getStrategyListByDFZX(taskApp,ids);
+        List<Map<String, Object>> strategyListByDFZX = getStrategyListByDFZX(taskApp, ids);
+        if(strategyListByDFZX==null || strategyListByDFZX.size()==0){
+            System.out.println("为获取到签字的关键字");
+            return;
+        }
 
         positions = strategyListByDFZX.stream().map(map -> map.get("keyWord").toString()).collect(Collectors.toList());
         String keyWord = String.join(",", positions);
@@ -59,8 +67,8 @@ public class ScrDataServiceImpl implements ScrDataService {
         List<Map<String, Object>> list2 = strategyListByDFZX.stream().collect(
                 Collectors.collectingAndThen(
                         Collectors.toCollection(
-                                () ->new TreeSet<>(Comparator.comparing(m->m.get("keyWord").toString()))
-                        ),ArrayList::new
+                                () -> new TreeSet<>(Comparator.comparing(m -> m.get("keyWord").toString()))
+                        ), ArrayList::new
                 )
         );
 
@@ -80,68 +88,85 @@ public class ScrDataServiceImpl implements ScrDataService {
                     float imgX = rect.getLowerLeftX() + imgW / 2;
                     float imgY = rect.getLowerLeftY() + imgH / 2;
                     List<PDFIndexInfo> pdfIndexInfos = groupBy.get((i + 1) + ".0");
-
-                    for (PDFIndexInfo pdfInfo : pdfIndexInfos) {
-                        String pkeyid = pdfInfo.getPkeyid();
-
-                        float[] dataInfo = pdfInfo.getDataInfo();
-
-                        float keyX = dataInfo[1];
-                        float keyY = dataInfo[2];
-
-                        float pageHeight = page.getMediaBox().getHeight();
-                        float pageWidth = page.getMediaBox().getWidth();
-
-                        float keyw = keyX * pageWidth;
-                        float keyh = pageHeight - keyY * pageHeight;
-
-                        List<Map<String, Object>> mapList = newMap.get(pkeyid);
-                        if(mapList!=null && mapList.size()>=0){
-                            Map<String, Object> map = mapList.get(0);
-                            Float pyzbx = Func.toFloat(map.get("pyzbx"));
-                            Float pyzby = Func.toFloat(map.get("pyzby"));
-                            keyw = keyw + pyzbx;
-                            keyh = keyh + pyzby;
-                        }
-
-                        if (Math.abs(imgX - keyw) <= threshold && Math.abs(imgY - keyh) <= threshold) {
-                            sucess.add(pkeyid);
-                            break;
+                    if (pdfIndexInfos!=null && pdfIndexInfos.size() > 0) {
+                        for (PDFIndexInfo pdfInfo : pdfIndexInfos) {
+                            String pkeyid = pdfInfo.getPkeyid();
+
+                            float[] dataInfo = pdfInfo.getDataInfo();
+
+                            float keyX = dataInfo[1];
+                            float keyY = dataInfo[2];
+
+                            float pageHeight = page.getMediaBox().getHeight();
+                            float pageWidth = page.getMediaBox().getWidth();
+
+                            float keyw = keyX * pageWidth ;
+                            float keyh = pageHeight - keyY * pageHeight;
+
+                            List<Map<String, Object>> mapList = newMap.get(pkeyid);
+                            String keyData = dataMap.get(pkeyid);
+                            if (mapList != null && mapList.size() >= 0) {
+                                Map<String, Object> map = mapList.get(0);
+                                Float pyzbx = Func.toFloat(map.get("pyzbx"));
+                                Float pyzby = Func.toFloat(map.get("pyzby"));
+                                if(taskApp.getRemarkType().equals("2")){ //东方中讯
+                                    if(imgH>=100){ //个人签字
+                                        keyw = keyw + pyzbx - 20;
+                                        keyh = keyh + pyzby - 15;
+                                    }else{
+                                        keyw = keyw + pyzbx + 10;
+                                        keyh = keyh + pyzby;
+                                        if(keyData.indexOf("||")>0){
+                                            keyw += 10;
+                                        }
+                                    }
+                                }else{
+                                    keyw = keyw + pyzbx +5;
+                                    keyh = keyh + pyzby;
+                                }
+                            }
+                            if (Math.abs(imgX - keyw) <= threshold && Math.abs(imgY - keyh) <= threshold) {
+                                sucess.add(pkeyid);
+                                System.out.println("keyid="+pkeyid+"imgX:" + imgX + " keyw:" + keyw + " imgY:" + imgY + " keyh:" + keyh+"-imgH-"+imgH);
+                                break;
+                            }
                         }
                     }
                 }
             }
         }
-
         Set<String> differentElements = new HashSet<>(positions);
         // 使用retainAll方法来移除两个集合中相同的元素,留下不同的元素
         differentElements.removeAll(sucess);
 
-        System.out.println("总共:"+positions.size()+"-剩下-"+differentElements.size());
+        System.out.println(taskApp.getId() +"-"+"总共:" + positions.size() + "-剩下-" + differentElements.size());
     }
 
 
     // 添加电签策略 -- 东方中讯
-    public List<Map<String, Object>> getStrategyListByDFZX(ScrSignInfoVO taskApp,String ids) {
+    public List<Map<String, Object>> getStrategyListByDFZX(ScrSignInfoVO taskApp, String ids) {
         List<Map<String, Object>> maps = new ArrayList<>();
         List<Map<String, Object>> maps2 = new ArrayList<>();
         String sql = "select * from u_task_parallel where process_instance_id = '" + taskApp.getProcessInstanceId() + "' and initiative=2 and status=2";
         List<Map<String, Object>> mapList = jdbcTemplate.queryForList(sql);
-        if(mapList!=null && mapList.size()>0){
-            for(Map<String, Object> task : mapList){
+        if (mapList != null && mapList.size() > 0) {
+            for (Map<String, Object> task : mapList) {
                 String taskUserId = Func.toStr(task.get("task_user"));
-                String sqlinfo = " SELECT * from ( SELECT a.id as keyWord,a.project_id,a.pyzbx ,a.pyzby,(SELECT acc_code from blade_user where id='" + taskUserId + "' and is_deleted=0  ) as sealId from m_textdict_info a where  a.type =2 and a.id in (" + ids + ")  and sig_role_id in (SELECT DISTINCT c.role_id from m_project_assignment_user c  where c.contract_id=" + taskApp.getContractId() + " and user_id=" + taskUserId + " and c.is_deleted=0 ) ) x where x.sealId is not null ";
+                String sqlinfo = " SELECT * from ( SELECT a.id as keyWord,a.project_id,a.pyzbx ,a.pyzby,(SELECT acc_code from blade_user where id='" + taskUserId + "' and is_deleted=0  ) as sealId from m_textdict_info a where  a.type =2 and a.id in (" + ids + ")  and sig_role_id in (SELECT DISTINCT c.role_id from m_project_assignment_user c  where c.contract_id=" + taskApp.getContractId() + " and user_id=" + taskUserId + " and c.is_deleted=0 ) ) x where x.sealId is not null and x.project_id='" + taskApp.getProjectId() + "'";
+                System.out.println("扫描-签字-sql=" + sqlinfo);
                 List<Map<String, Object>> maps3 = jdbcTemplate.queryForList(sqlinfo);
                 maps2.addAll(maps3);
             }
         }
         // 添加章
-        String sqlinfo = "SELECT a.id as keyWord,a.pyzbx,a.pyzby,b.certificate_number as sealId from m_textdict_info a ,m_sign_pfx_file b where a.sig_role_id = b.pfx_type and b.project_contract_role like '%" + taskApp.getContractId() + "%' and a.is_deleted=0 and b.is_deleted=0 and a.type=6 and a.id in(" + ids + ")";
-        List<Map<String, Object>> maps3 = jdbcTemplate.queryForList(sqlinfo);
-        if(mapList!=null && mapList.size()>0){
-            maps2.addAll(maps3);
+        if (taskApp.getStatus().equals("2")) {
+            String sqlinfo = "SELECT a.id as keyWord,a.pyzbx,a.pyzby,b.certificate_number as sealId from m_textdict_info a ,m_sign_pfx_file b where a.sig_role_id = b.pfx_type and b.project_contract_role like '%" + taskApp.getContractId() + "%' and a.is_deleted=0 and b.is_deleted=0 and a.type=6 and a.id in(" + ids + ") and a.project_id=" + taskApp.getProjectId() + "";
+            System.out.println("扫描-签章-sql=" + sqlinfo);
+            List<Map<String, Object>> maps3 = jdbcTemplate.queryForList(sqlinfo);
+            if (mapList != null && mapList.size() > 0) {
+                maps2.addAll(maps3);
+            }
         }
-
         Map<String, List<Map<String, Object>>> peopleByAge = maps2.stream()
                 .collect(Collectors.groupingBy(hada -> (Func.toStr(hada.get("keyWord")))));
         for (String keyId : peopleByAge.keySet()) {

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

@@ -12,11 +12,13 @@ import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ResourceUtil;
+import org.springblade.evisa.vo.SignKeyVO;
 import org.springblade.manager.vo.PDFIndexInfo;
 import org.springblade.system.cache.ParamCache;
 
 import java.io.*;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -389,8 +391,11 @@ public class PdfAddimgUtil {
         return path;
     }
 
-    public static List<String>  getPdfSignIds(String pdfUrl) {
+
+    public static SignKeyVO getPdfSignIds(String pdfUrl) {
+        SignKeyVO signKeyVO = new SignKeyVO();
         List<String> eVisaConfigList = new ArrayList<>();
+        Map<String,String> dataMap = new HashMap<>();
         InputStream inputStream;
         try  {
             if(pdfUrl.indexOf("http")>=0){
@@ -416,13 +421,16 @@ public class PdfAddimgUtil {
                     }
                     if (txt.length() >= 15 && Func.isNumeric(txt)) {
                         eVisaConfigList.add(txt);
+                        dataMap.put(txt,textStr);
                     }
                 }
             }
 
             List<String> unique = eVisaConfigList.stream().distinct().collect(Collectors.toList());
             document.close();
-            return unique;
+            signKeyVO.setEVisaConfigList(unique);
+            signKeyVO.setDataMap(dataMap);
+            return signKeyVO;
         }catch (Exception e){
             e.printStackTrace();
             return null;

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

@@ -8,6 +8,7 @@ import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
 import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.evisa.vo.SignKeyVO;
 import org.springblade.manager.vo.PDFIndexInfo;
 
 import java.io.File;
@@ -22,8 +23,8 @@ public class PdfSignatureInfo{
 
 
     //
-    public static void main11(String[] args) throws IOException {
-        String pdfUrl = "/Users/hongchuangyanfa/Downloads/727dd864f9569e802692294f9b8fbb97.pdf";
+    public static void main123(String[] args) throws IOException {
+        String pdfUrl = "/Users/hongchuangyanfa/Downloads/037128298ffe28b74ee32781fb2d5a6c.pdf";
         PDDocument document = PDDocument.load(new File(pdfUrl));
         for (int i=0 ;i<document.getPages().getCount();i++) {
             PDPage page = document.getPage(i);
@@ -35,14 +36,14 @@ public class PdfSignatureInfo{
                     float imgW = rect.getWidth();
                     float imgH = rect.getHeight();
                     float imgX = rect.getLowerLeftX() + imgW / 2;
-                    float imgY = rect.getLowerLeftY() + imgH / 2;
+                    float imgY = rect.getLowerLeftY()+ imgH / 2;
 
                     System.out.println("imgX:"+imgX+"--imgY:"+imgY+"--imgW:"+imgW+"--imgH:"+imgH);
                 }
             }
         }
 
-        String ids = "1847105950746411008";
+        String ids = "1881525426422022144";
         byte[] pdfData = CommonUtil.InputStreamToBytes(new FileInputStream(new File(pdfUrl)));
         List<PDFIndexInfo> pdfIndexInfo = PdfAddimgUtil.findKeywordPostions(pdfData, ids);
         for (PDFIndexInfo pdfInfo : pdfIndexInfo) {
@@ -55,16 +56,17 @@ public class PdfSignatureInfo{
             float pageHeight = page.getMediaBox().getHeight();
             float pageWidth = page.getMediaBox().getWidth();
 
-            float keyw = keyX * pageWidth + (-15);
-            float keyh = pageHeight - keyY * pageHeight + 36;
+            float keyw = keyX * pageWidth +10;
+            float keyh = pageHeight - keyY * pageHeight-5;
             System.out.println("pkeyid:"+pkeyid+"--keyw:"+keyw+"--keyh:"+keyh);
+
         }
     }
 
 
 
-    public static void main2(String[] args) throws Exception {
-        String pdfUrl = "/Users/hongchuangyanfa/Downloads/277af927eb766a06186397d46fd9c4ce.pdf";
+    public static void main23(String[] args) throws Exception {
+        String pdfUrl = "/Users/hongchuangyanfa/Downloads/6790a9294ea79afb7514d14b5d77c3fd.pdf";
         //阈值
         int threshold = 5 ;
         File file = new File(pdfUrl);
@@ -73,7 +75,8 @@ public class PdfSignatureInfo{
         byte[] pdfData = CommonUtil.InputStreamToBytes(new FileInputStream(new File(pdfUrl)));
 
         PDDocument document = PDDocument.load(new File(pdfUrl));
-        List<String> positions = PdfAddimgUtil.getPdfSignIds(pdfUrl);
+        SignKeyVO pdfSignIds = PdfAddimgUtil.getPdfSignIds(pdfUrl);
+        List<String> positions = pdfSignIds.getEVisaConfigList();
 
         List<String> sucess = new ArrayList<>();
         String ids = String.join(",", positions);

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 289 - 300
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java


+ 0 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java

@@ -150,7 +150,6 @@ public class ExcelTabClientImpl implements ExcelTabClient {
                         }
                     }
                 }
-
             } else if (isBatchSave == 1) {
                 //------多表PDF保存------
                 pdfUrl = excelTabService.getBussPDFSTrial(nodeId, tableType, String.valueOf(type), contractId, projectId, id, tabIds, dto);

+ 9 - 3
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -438,6 +438,8 @@ public class TaskController extends BladeController {
                     periodService.update(Wrappers.<MeterPeriod>lambdaUpdate().set(MeterPeriod::getApproveStatus, 1).eq(MeterPeriod::getId, approvalDTO.getPeriodId()));
                     //修改报表状态,如果不存在则创建报表,因为任务要查看报表
                     this.updateStatement(Long.valueOf(approvalDTO.getPeriodId()),2,1);
+                    //发送短信
+                    interimPayCertificateItemService.sendJLSmg(taskId);
                     return R.data(200, aopParamsSet, "操作成功");
                 }
 
@@ -504,6 +506,8 @@ public class TaskController extends BladeController {
                     periodService.update(Wrappers.<MeterPeriod>lambdaUpdate().set(MeterPeriod::getApproveStatus, 1).eq(MeterPeriod::getId, approvalDTO.getPeriodId()));
                     //修改报表状态,如果不存在则创建报表,因为任务要查看报表
                     this.updateStatement(Long.valueOf(approvalDTO.getPeriodId()),3,1);
+                    //发送短信
+                    interimPayCertificateItemService.sendJLSmg(taskId);
                     return R.data(200, aopParamsSet, "操作成功");
                 }
             } else if (approvalDTO.getType().equals(4)) {
@@ -2842,6 +2846,8 @@ public class TaskController extends BladeController {
             }
 
             interimPayCertificateService.taskMeterPdfInfo2(task.getId()+"",reportId,task.getMeterTaskType() - 1);
+            //发送短信
+            interimPayCertificateItemService.sendJLSmg(task.getId());
             return R.data(200, aopParamsSet, "操作成功");
         }
         return R.fail("操作失败");
@@ -4468,15 +4474,15 @@ public class TaskController extends BladeController {
     @Transactional
     public void addSignTaskBatch(Report report) {
         try {
-            String selSql = "select * from  u_task_parallel a where a.process_instance_id = (select b.process_instance_id from u_task b where  b.`status` in(1,2) and b.form_data_id=" + report.getPeriodId() +  ") and a.status=1 and a.e_visa_status is NULL and a.e_visa_content is null ";
+            String selSql = "select * from u_task_parallel a where a.process_instance_id = (select b.process_instance_id from u_task b where  b.`status` in(1,2) and b.form_data_id='"+report.getPeriodId()+"') and a.status=1 and a.e_visa_status is NULL and a.e_visa_content is null ";
             List<Map<String, Object>> mapList = jdbcTemplate.queryForList(selSql);
             if(Func.isEmpty(mapList) || mapList.size()==0) {
                 // 修改个人电签状态
-                String UPSql = "update u_task_parallel a set a.e_visa_status=null,e_visa_content=null,initiative=1 where a.process_instance_id = (select b.process_instance_id from u_task b where  b.`status` in(1,2) and b.form_data_id=" + report.getPeriodId() + ") ";
+                String UPSql = "update u_task_parallel a set a.e_visa_status=null,e_visa_content=null,initiative=1 where a.process_instance_id = (select b.process_instance_id from u_task b where  b.`status` in(1,2) and b.form_data_id='" + report.getPeriodId() + "') ";
                 String UPSqlJL = " update u_task_parallel a set a.e_visa_status=1,e_visa_content='电签成功',initiative=2 where sort in( SELECT a.fixed_flow_branch_sort from u_task b,u_fixed_flow_link a where b.`status` in(1,2) and b.form_data_id='" + report.getPeriodId() + "' and a.fixed_flow_id=b.fixed_flow_id and a.flow_task_type=2 ) and a.process_instance_id in(SELECT process_instance_id from u_task b where b.`status` in(1,2) and b.form_data_id='" + report.getPeriodId() + "')";
                 String DeSql = "delete from u_task_batch where task_parallel_id in(select b.process_instance_id from u_task b where b.`status` in(1,2) and b.form_data_id=" + report.getPeriodId() + ")";
                 //删除以前存在的电签
-                String sql = "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 a.id,a.process_instance_id,json_object('approvalFileList',json_array(),'approvalType',b.approval_type,'comment','','flag','OK','formDataId',b.form_data_id,'parallelProcessInstanceId',a.parallel_process_instance_id,'pass',true,'taskId',b.id) as  json_data,a.task_user,a.create_dept,a.create_time,a.update_user,a.update_time,1 as status,0 as is_deleted,a.task_user_name as nick_name ,1 as sign_format,1 as sign_type from u_task_parallel a,u_task b,u_fixed_flow_link c where b.`status` in(1,2) and  a.process_instance_id=b.process_instance_id and c.flow_task_type!=2 and a.sort = c.fixed_flow_branch_sort and c.fixed_flow_id=b.fixed_flow_id and b.form_data_id= '" + report.getPeriodId() + "'";
+                String sql = "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 a.id,a.process_instance_id,json_object('approvalFileList',json_array(),'approvalType',b.approval_type,'comment','','flag','OK','formDataId',b.form_data_id,'parallelProcessInstanceId',a.parallel_process_instance_id,'pass',true,'taskId',b.id) as  json_data,a.task_user,a.create_dept,a.create_time,a.update_user,a.update_time,1 as status,0 as is_deleted,a.task_user_name as nick_name ,1 as sign_format,1 as sign_type from u_task_parallel a,u_task b,u_fixed_flow_link c where b.`status` in(1,2) and  a.process_instance_id=b.process_instance_id and c.flow_task_type!=2 and a.sort = c.fixed_flow_branch_sort and c.fixed_flow_id=b.fixed_flow_id and b.form_data_id= '" + report.getPeriodId() + "'";
 
                 jdbcTemplate.execute(DeSql);
                 jdbcTemplate.execute(UPSql);

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

@@ -33,7 +33,7 @@
     </select>
     <select id="page2" resultType="org.springblade.meter.vo.InterimPayCertificateVO">
         select IFNULL(pre_pdf_url,raw_url) as pre_pdf_url,sipc.*,
-               (select id from u_task where form_data_id = sipc.contract_period_id and is_deleted = 0 and status in (1,2) limit 1) as taskId
+               (select id from u_task where form_data_id = CONVERT(sipc.contract_period_id, CHAR) and is_deleted = 0 and status in (1,2) limit 1) as taskId
         from s_interim_pay_certificate sipc
         where contract_id = #{pay.contractId} and is_deleted = 0
         order by create_time desc

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

@@ -301,7 +301,7 @@
         order by sort,create_time
     </select>
     <select id="getNodeData" resultType="org.springblade.meter.vo.WbsFileVO">
-        select name as dataName,IFNULL(node_pdf_url,pdf_url) as pdfUrl,e_visa_pdf_url as eVisaPdfUrl, uiq.id as selectId,
+        select name as dataName,IFNULL(node_pdf_url,pdf_url) as pdfUrl,IFNULL(node_pdf_url,e_visa_pdf_url) as eVisaPdfUrl, uiq.id as selectId,
                (select node_type from m_wbs_tree_contract wtc where wtc.p_key_id = uiq.wbs_id) as nodeType,
                (select IFNULL(ancestors,wtc.id) from m_wbs_tree_contract wtc where wtc.p_key_id = uiq.wbs_id) as ancestors,
                (select node_name from m_wbs_tree_contract wtc where wtc.p_key_id = uiq.wbs_id) as nodeName,

+ 63 - 18
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateItemServiceImpl.java

@@ -9,6 +9,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.entity.InterimPayCertificateItem;
 import org.springblade.meter.mapper.InterimPayCertificateItemMapper;
 import org.springblade.meter.service.IInterimPayCertificateItemService;
+import org.springblade.meter.utils.MeMsgUtils;
 import org.springblade.meter.vo.MonthlyReportVo;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
@@ -28,11 +29,12 @@ import java.util.Map;
 public class InterimPayCertificateItemServiceImpl extends BaseServiceImpl<InterimPayCertificateItemMapper, InterimPayCertificateItem> implements IInterimPayCertificateItemService {
 
     private final JdbcTemplate jdbcTemplate;
+
     @Override
     @Transactional
     public void addInterimPayCertificateItem(Long certificateId, List<MonthlyReportVo> values) {
-        if(!values.isEmpty()){
-            List<InterimPayCertificateItem>list=new ArrayList<>();
+        if (!values.isEmpty()) {
+            List<InterimPayCertificateItem> list = new ArrayList<>();
             for (int i = 0; i < values.size(); i++) {
                 MonthlyReportVo vo = values.get(i);
                 InterimPayCertificateItem item = new InterimPayCertificateItem();
@@ -40,13 +42,13 @@ public class InterimPayCertificateItemServiceImpl extends BaseServiceImpl<Interi
                 item.setSort(i);
                 item.setFormName(vo.getChapterSeq());
                 item.setChapterSeq(vo.getFormName());
-                item.setContractAmount(vo.getCurrentMeterMoney()==null?null:vo.getCurrentMeterMoney().toString());
-                item.setRevisedTotal(vo.getChangeMeterMoney()==null?null:vo.getChangeMeterMoney().toString());
-                item.setRevisedAmount(vo.getAfterCurrentMeterMoney()==null?null:vo.getAfterCurrentMeterMoney().toString());
-                item.setCurrentPeriodEndPay(vo.getNowEndMoney()==null?null:vo.getNowEndMoney().toString());
-                item.setPreviousPeriodEndPay(vo.getBeforeEndMoney()==null?null:vo.getBeforeEndMoney().toString());
-                item.setCurrentPeriodPay(vo.getNowMoney()==null?null:vo.getNowMoney().toString());
-                if(vo.getFormName().equals("其他扣款")||vo.getFormName().equals("其他费用")){
+                item.setContractAmount(vo.getCurrentMeterMoney() == null ? null : vo.getCurrentMeterMoney().toString());
+                item.setRevisedTotal(vo.getChangeMeterMoney() == null ? null : vo.getChangeMeterMoney().toString());
+                item.setRevisedAmount(vo.getAfterCurrentMeterMoney() == null ? null : vo.getAfterCurrentMeterMoney().toString());
+                item.setCurrentPeriodEndPay(vo.getNowEndMoney() == null ? null : vo.getNowEndMoney().toString());
+                item.setPreviousPeriodEndPay(vo.getBeforeEndMoney() == null ? null : vo.getBeforeEndMoney().toString());
+                item.setCurrentPeriodPay(vo.getNowMoney() == null ? null : vo.getNowMoney().toString());
+                if (vo.getFormName().equals("其他扣款") || vo.getFormName().equals("其他费用")) {
                     item.setNoApply(1);
                 }
                 list.add(item);
@@ -57,26 +59,69 @@ public class InterimPayCertificateItemServiceImpl extends BaseServiceImpl<Interi
 
     @Override
     public void updateInterimPayCertificateItem(List<InterimPayCertificateItem> list4) {
-        if(!list4.isEmpty()){
+        if (!list4.isEmpty()) {
             updateBatchById(list4);
         }
     }
 
     @Override
     public InterimPayCertificateItem selectItem(String cts, Long id) {
-        QueryWrapper wrapper=new QueryWrapper();
-        wrapper.eq("chapter_seq",cts);
-        wrapper.eq("certificate_id",id);
+        QueryWrapper wrapper = new QueryWrapper();
+        wrapper.eq("chapter_seq", cts);
+        wrapper.eq("certificate_id", id);
         InterimPayCertificateItem item = baseMapper.selectOne(wrapper);
-        return item==null?new InterimPayCertificateItem():item;
+        return item == null ? new InterimPayCertificateItem() : item;
     }
 
     @Override
     public void sendJLSmg(Long taskId) {
         //发送短信
-        jdbcTemplate.queryForMap("select  * from u_task where id=" + taskId + " ");
-
-
-
+        Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap("select  * from u_task where id=" + taskId + " ");
+        if (stringObjectMap != null) {
+            String fixedFlowId = stringObjectMap.get("fixed_flow_id")+"";
+            String processInstanceId =  stringObjectMap.get("process_instance_id")+"";
+            if (fixedFlowId != null && processInstanceId.length() > 8) {
+                String smgUser = "SELECT a.id,fixed_flow_link_type,c.phone,fixed_flow_link_sort from u_task_parallel a ,u_fixed_flow_link b,blade_user c where a.sort=b.fixed_flow_branch_sort and a.process_instance_id='" + processInstanceId + "' and a.status=1 and b.fixed_flow_id='" + fixedFlowId + "' and a.task_user=c.id ORDER BY a.sort";
+                List<Map<String, Object>> mapList = jdbcTemplate.queryForList(smgUser);
+                if (mapList != null && mapList.size() >= 1) {
+                    String fixedFlowLinkType = mapList.get(0).get("fixed_flow_link_type") + "";
+                    String fixedFlowLinkSort = mapList.get(0).get("fixed_flow_link_sort") + "";
+                    List<String> phoneList = new ArrayList<>();
+                    if(fixedFlowLinkType.equals("2")){ //平行
+                        for(Map<String, Object> data:mapList){
+                            String fixedFlowLinkSort1 = data.get("fixed_flow_link_sort") + "";
+                            if(fixedFlowLinkSort1.equals(fixedFlowLinkSort)){
+                                phoneList.add(data.get("phone")+"");
+                            }
+                        }
+                    }else { //垂直
+                        String phone = mapList.get(0).get("phone") + "";
+                        phoneList.add(phone);
+                    }
+                    if(phoneList!=null && phoneList.size()>0){
+                        for(String phone:phoneList){
+                            for (int i = 1; i <= 3; i++) {
+                                boolean b = MeMsgUtils.sendMsg(phone);
+                                if (b) {
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+            } else { //自定义流程
+                String smgUser = "SELECT a.id,b.phone,a.sort from u_task_parallel a,blade_user b where a.process_instance_id='" + processInstanceId + "' and a.status=1 and a.task_user=b.id ORDER BY a.sort ";
+                List<Map<String, Object>> mapList = jdbcTemplate.queryForList(smgUser);
+                if (mapList != null && mapList.size() >= 1) {
+                    String phone = mapList.get(0).get("phone") + "";
+                    for (int i = 1; i <= 3; i++) {
+                        boolean b = MeMsgUtils.sendMsg(phone);
+                        if (b) {
+                            return;
+                        }
+                    }
+                }
+            }
+        }
     }
 }

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

@@ -534,7 +534,6 @@ public class UserController {
         }
         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("account", account);
-        // queryWrapper.eq("password", tokenPw);
         queryWrapper.eq("sys_type", 2);
         User userInfo = userService.getOne(queryWrapper);
         if (userInfo == null) {

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно