Selaa lähdekoodia

Merge remote-tracking branch 'origin/zhuwei' into dev

# Conflicts:
#	blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVController.java
zhuwei 1 kuukausi sitten
vanhempi
commit
4cec85dbce

+ 5 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileAutoController.java

@@ -339,12 +339,16 @@ ArchiveFileAutoController extends BladeController {
     @ApiOperation(value = "预览")
     public R<Object> mergePdf(@RequestParam String ids) {
         List<ArchiveFile> result = this.archiveFileClient.getArchiveFileByArchivesId(ids, "");
+        // 由于文件分解后,pdf文件会生成多个,所以需要合并
+        if(result!=null && result.size()>0){
+            result.sort(Comparator.comparing(ArchiveFile::getSort));
+        }
         List<String> pdfUrls = result.stream().map(archiveFile -> StringUtils.isNotEmpty(archiveFile.getPdfFileUrl()) ? archiveFile.getPdfFileUrl() : archiveFile.getFileUrl()).distinct().collect(Collectors.toList());
 
         //FileUtils.mergePdfPublicMethods(pdfUrls,"");
         /**
          * 案卷的只有一个文件,不合并先,需要的时候在把合并方法放出来
          * **/
-        return R.data(pdfUrls);
+        return R.data(pdfUrls.get(0));
     }
 }

+ 39 - 22
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/ArchiveController.java

@@ -62,7 +62,7 @@ public class ArchiveController {
     @Resource(name = "taskExecutor1")
     private ThreadPoolExecutor executor;
 
-   @Scheduled(cron = "0 0/1 * * * ?")
+  // @Scheduled(cron = "0 0/1 * * * ?")
     public void SignInfo() {
         //执行代码
 
@@ -156,7 +156,7 @@ public class ArchiveController {
     }
 
 
-   // @Scheduled(cron = "0/30 * * * * ?")
+  //  @Scheduled(cron = "0/30 * * * * ?")
     public void SplitPdfInfo() {
         //执行代码
 
@@ -191,72 +191,89 @@ public class ArchiveController {
         System.out.println("完成数量_html" + executor.getCompletedTaskCount());
     }
 
+
     public void signTaskBatchpng(ArchivesSplitInfoVO taskSign) {
         try {
             String archiveId = taskSign.getArchiveId();
             String fileUlr = taskSign.getFileUrl();
             String firstPage = FileUtils.getSysLocalFileUrl() + "archiveSplit/";
+            String firstFileUrl = taskSign.getFirstFileUrl();
+            int basePage = Integer.parseInt(firstFileUrl.split("--")[1]);
             int bkb = 0 ;
             //将imagePath 的数据转成一个可解析的html
             String htmlUrl = pngToHtml(firstPage, archiveId,taskSign.getFirstFileUrl());
 
+
             if (htmlUrl.indexOf("_001.html") >= 0 && htmlUrl.indexOf("archiveSplit") >= 0) {
                 String htmlString = IoUtil.readToString(new FileInputStream(htmlUrl));
                 Document doc = Jsoup.parse(htmlString);
                 Element table = doc.select("table").first();
                 Elements trs = table.select("tr");
 
-                for (int i = 1; i <= trs.size() - 1; i++) {
+                for (int i = 0; i <= trs.size() - 1; i++) {
                     Element tr = trs.get(i);
                     String zrz = tr.select("td").get(0).text();
                     String wjtm = tr.select("td").get(1).text();
                     String rq = tr.select("td").get(2).text();
                     String ym = tr.select("td").get(3).text();
+                   if(zrz.equals("责任者") && wjtm.equals("文件题名") && rq.equals("日期")){
+                        continue;
+                   }
                     int startYm = 0;
                     int endYm = 0;
                     if(i<trs.size()-1){
                         startYm = Func.toInt(ym);
                         String enData = trs.get(i+1).select("td").get(3).text();
-                        if(enData.indexOf("-")>=0){
-                            endYm = Func.toInt(enData.split("-")[0])-1;
-                        }else{
-                            endYm = Func.toInt(enData)-1;
+                        if(enData.indexOf("页")>=0){
+                            enData = trs.get(i+2).select("td").get(3).text();
+                        }
+
+                        String[] parts = enData.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
+                        if(parts!=null && parts.length>=1){
+                            endYm = Func.toInt(parts[0]);
                         }
                     }else{
-                        if(ym.indexOf("-")>=0){
-                            String[] split = ym.split("-");
+                        String[] split = ym.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
+                        if(split!=null && split.length>=3){
+                            startYm = Func.toInt(split[0]);
+                            endYm = Func.toInt(split[2]);
+                        }else{
                             startYm = Func.toInt(split[0]);
-                            endYm = Func.toInt(split[1]);
+                            endYm = Func.toInt(split[0]);
                         }
                     }
-                    startYm = startYm + 2 ;
-                    endYm = endYm + 2 ;
-                    System.out.println(zrz + " " + wjtm + " " + rq + " " + ym);
+                    startYm = basePage+startYm ;
+                    endYm = basePage+endYm ;
+                    System.out.println("序号="+i+"--文件提名:"+wjtm +"--开始("+startYm+"-"+endYm+")---页数"+(endYm-startYm+1));
                     // 分解文件
                     String fmlUrl = FileUtils.getSysLocalFileUrl() + "archiveSplit/"+archiveId+"_cf_00"+i+".pdf";
                     getPdfByPage(startYm,endYm,fileUlr,fmlUrl);
-                    saveDataToMysql(fmlUrl,wjtm,taskSign.getId(),endYm-startYm+1);
+                    saveDataToMysql(fmlUrl,wjtm,taskSign.getId(),endYm-startYm+1,i);
                     bkb =  endYm ;
                 }
-
             } else {
-
+                return;
             }
 
             // 添加封面信息
             String fmlUrl = FileUtils.getSysLocalFileUrl() + "archiveSplit/"+archiveId+"_fm_001.pdf";
             getPdfByPage(1,1,fileUlr,fmlUrl);
-            saveDataToMysql(fmlUrl,"封面",taskSign.getId(),1);
+            saveDataToMysql(fmlUrl,"封面",taskSign.getId(),1,-4);
 
             // 卷内目录
             String jnmuUrl = FileUtils.getSysLocalFileUrl() + "archiveSplit/"+archiveId+"_jnml_001.pdf";
             getPdfByPage(2,2,fileUlr,jnmuUrl);
-            saveDataToMysql(jnmuUrl,"卷内目录",taskSign.getId(),1);
+            saveDataToMysql(jnmuUrl,"卷内目录",taskSign.getId(),1,-3);
 
             // 卷内备考表
             String jnbkbUrl = FileUtils.getSysLocalFileUrl() + "archiveSplit/"+archiveId+"_jnbkb_001.pdf";
             getPdfByPage(bkb+1,bkb+1,fileUlr,jnbkbUrl);
-            saveDataToMysql(jnbkbUrl,"卷内备考表",taskSign.getId(),1);
+            saveDataToMysql(jnbkbUrl,"卷内备考表",taskSign.getId(),1,100);
+
+            // 背脊表
+            String bjbUrl = FileUtils.getSysLocalFileUrl() + "archiveSplit/"+archiveId+"_beiji_001.pdf";
+            getPdfByPage(bkb+2,bkb+2,fileUlr,jnbkbUrl);
+            saveDataToMysql(jnbkbUrl,"背脊表",taskSign.getId(),1,101);
 
             // 修改任务状态
             String updateSql = "update u_archives_split_info set status=3 where id=" + taskSign.getId();
@@ -293,7 +310,6 @@ public class ArchiveController {
                     new InputStreamReader(process.getInputStream()));
             String htmlUrl;
             while ((htmlUrl = reader.readLine()) != null) {
-                System.out.println("222" + htmlUrl);
                 if (htmlUrl.indexOf("html文件路径") >= 0 && htmlUrl.indexOf("_001.html") >= 0 && htmlUrl.indexOf("archiveSplit") >= 0) {
                     lasHhtmlUrl = htmlUrl.replace("html文件路径", "");
                 }
@@ -410,7 +426,8 @@ public class ArchiveController {
         }
     }
 
-    public int saveDataToMysql(String upFileUrl,String fileName,String fileId,int filePage) {
+    public int saveDataToMysql(String upFileUrl,String fileName,String fileId,int filePage,int sort) {
+
         // 获取封面信息
         long newPkId = SnowFlakeUtil.getId(); //主键Id
         File fmfile = new File(upFileUrl);
@@ -424,7 +441,7 @@ public class ArchiveController {
                         " file_size,source_type,is_element,pdf_page_url,fid,rectification,classify,m_wbs_tree_contract_p_key_id,u_image_classification_file_id,archive_file_storage_type,node_tree_structure,date_name,archive_file_stroage_type,out_id,sort_num " +
                         "   ) " +
                         " SELECT "+newPkId+",project_id,contract_id,node_id,file_number,'" + fileName + "',file_time,'" + FmPdfUrl + "','" + FmPdfUrl + "',"+filePage+",is_approval,is_certification,is_need_certification,duty_user,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,sheet_type,sheet_source, " +
-                        "        drawing_no,cite_change_number,certification_time,e_visa_file,node_ext_id,file_type,archive_id,origin_id,filming_time,filmingor_time,tag_id,pic_code,refer_code,film_code,width,height,ftime,utime,del_time,sort,box_name,box_number,is_auto_file,is_archive,page_num, " +
+                        "        drawing_no,cite_change_number,certification_time,e_visa_file,node_ext_id,file_type,archive_id,origin_id,filming_time,filmingor_time,tag_id,pic_code,refer_code,film_code,width,height,ftime,utime,del_time,"+sort+",box_name,box_number,is_auto_file,is_archive,page_num, " +
                         "        file_size,source_type,is_element,pdf_page_url,fid,rectification,classify,m_wbs_tree_contract_p_key_id,u_image_classification_file_id,archive_file_storage_type,node_tree_structure,date_name,archive_file_stroage_type,out_id,sort_num " +
                         " from u_archive_file where id=" + fileId;
                 System.out.println(fileName + "----" + sql);

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

@@ -71,6 +71,8 @@ public class EVController {
                 "JSON_UNQUOTE(JSON_EXTRACT(json_data, '$.flag')) as flag," +
                 "GROUP_CONCAT(create_user) as userId," +
                 "GROUP_CONCAT(nick_name) as nickName," +
+                "sign_type as sigType" +
+                " from u_task_batch where JSON_UNQUOTE(JSON_EXTRACT(json_data, '$.taskId'))= 1936603482567999488 and  is_deleted=0 GROUP BY JSON_EXTRACT(json_data, '$.formDataId'),sign_type ORDER BY sign_type ASC ";
                 "sign_type as sigType," +
                 "(select count(0) from u_task_parallel b where a.task_parallel_id = b.process_instance_id and b.is_deleted = 0 and (b.status = 1 or b.initiative = 1)) isSignature" +
                 " from u_task_batch a where is_deleted=0 GROUP BY JSON_EXTRACT(json_data, '$.formDataId'),sign_type ORDER BY sign_type DESC ";

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

@@ -50,5 +50,5 @@ public interface EVisaService {
 
     Object[] signPdfByAXQZ(SealPdfVO pdfVO, String loPdfurl,String outPdfUrl);
 
-    String signPdfByDFZX(HashMap<String, Object> daMa);
+    String signPdfByDFZX(HashMap<String, Object> daMa,String signPdfByDFZX,String contractId);
 }

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

@@ -129,11 +129,11 @@ public class EVDataServiceImpl implements EVDataService {
                 if (taskApp.getSigState() != 1) {
                     return;
                 }
-            } else if (taskApp.getRemarkType().equals("2")) { //东方中讯
+            } else if (taskApp.getRemarkType().equals("2") || taskApp.getRemarkType().equals("3")) { //东方中讯
                 //添加电签策略
                 List<Map<String, Object>> strategyListByDFZX = getStrategyListByDFZX(taskApp, ids);
                 //调用签字逻辑
-                String s = signTaskBatchByDFZX(strategyListByDFZX, fileUrl, taskApp.getSigType());
+                String s = signTaskBatchByDFZX(strategyListByDFZX, fileUrl, taskApp.getSigType(),taskApp.getRemarkType(),taskApp.getContractId());
                 if (s.contains("sucess")) {
                     taskApp.setLastFilePdfUrl(s.split("@@@@")[1]);
                     taskApp.setSigState(1);
@@ -492,7 +492,9 @@ public class EVDataServiceImpl implements EVDataService {
                 Integer remarkType = projectInfo.getRemarkType();
                 if (remarkType != null && Func.isNotEmpty(remarkType) && remarkType == 2) {
                     taskApp.setRemarkType("2");
-                } else {
+                }else if (remarkType != null && Func.isNotEmpty(remarkType) && remarkType == 3) {
+                    taskApp.setRemarkType("3");
+                }else {
                     taskApp.setRemarkType("1");
                 }
             }
@@ -663,7 +665,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,String remarkType,String contractId) {
         if (maps != null && maps.size() > 0) {
             String fileUrl = pdfUrl;
             for (Map<String, Object> dataMap : maps) {
@@ -671,7 +673,7 @@ public class EVDataServiceImpl implements EVDataService {
                 daMa.put("keyWord", dataMap.get("keyWord"));
                 daMa.put("sealId", dataMap.get("sealId"));
                 // 设置图片显示大小
-                if (type != 2) { //章
+                if (type != 2 && !remarkType.equals("3")) { //章
                     daMa.put("showHeight", 30);
                     daMa.put("showWidth", 60);
                 }
@@ -702,7 +704,10 @@ public class EVDataServiceImpl implements EVDataService {
                 } catch (Exception e) {
                     throw new RuntimeException(e);
                 }
-                String reData = eVisaService.signPdfByDFZX(daMa);
+
+
+                String reData = eVisaService.signPdfByDFZX(daMa,remarkType,contractId);
+
                 if (reData.indexOf("success@") >= 0) {
                     fileUrl = reData.split("@@@@")[1];
                 } else {

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

@@ -68,6 +68,9 @@ import org.springblade.system.cache.ParamCache;
 import org.springblade.system.user.entity.User;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.StringHttpMessageConverter;
@@ -313,7 +316,7 @@ public class EVisaServiceImpl implements EVisaService {
                             String originalFileB64 = Base64.toBase64String(fileByte);
                             daMa.put("fileB64", originalFileB64);
                             daMa.put("lastSignFlag", false);
-                            String reData = signPdfByDFZX(daMa);
+                            String reData = signPdfByDFZX(daMa,reType,contractId);
                             if (reData.indexOf("success@") >= 0) {
                                 fileUrl = reData.split("@@@@")[1];
                             } else {
@@ -517,7 +520,7 @@ public class EVisaServiceImpl implements EVisaService {
                             String originalFileB64 = Base64.toBase64String(fileByte);
                             daMa.put("fileB64", originalFileB64);
                             daMa.put("lastSignFlag", false);
-                            String reData = signPdfByDFZX(daMa);
+                            String reData = signPdfByDFZX(daMa,"2",contractId);
                             if (reData.indexOf("success@") >= 0) {
                                 fileUrl = reData.split("@@@@")[1];
                             } else {
@@ -788,12 +791,17 @@ public class EVisaServiceImpl implements EVisaService {
      * 东方 中讯
      * @throws Exception
      */
-    public String signPdfByDFZX(HashMap<String, Object> request) {
+    public String signPdfByDFZX(HashMap<String, Object> paramsMap,String signPdfByDFZX,String contractId) {
         String url = "http://localhost:9125/FrontSys/SealServicezx/FileSignByKeyWord";
         String sys_isonline = ParamCache.getValue(CommonConstant.SYS_ISONLINE);
         if ("20".equals(sys_isonline) || SystemUtils.isWindows() || SystemUtils.isMacOs()) {
             url = "http://219.151.181.73:9125/FrontSys/SealServicezx/FileSignByKeyWord";
         }
+        if(signPdfByDFZX.equals("3")){
+            url = "http://113.250.191.72:9125/FrontSys/SealServicezx/FileSignByKeyWord";
+        }
+
+
         String sysLocalFileUrl = FileUtils.getSysLocalFileUrl();
         String filecode = SnowFlakeUtil.getId() + "";
         String dataFileUrl = sysLocalFileUrl + "/pdf/" + filecode + ".pdf";
@@ -802,7 +810,9 @@ public class EVisaServiceImpl implements EVisaService {
             httpRequestFactory.setConnectionRequestTimeout(30000);
             httpRequestFactory.setConnectTimeout(30000);
             httpRequestFactory.setReadTimeout(30000);
+
             RestTemplate restTemplate = new RestTemplate(httpRequestFactory);
+
             // 设置编码格式为UTF-8
             List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();
             HttpMessageConverter<?> converterTarget = null;
@@ -818,16 +828,33 @@ public class EVisaServiceImpl implements EVisaService {
             }
             HttpMessageConverter<?> converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
             converterList.add(1, converter);
+            HashMap<String, Object> retData;
+            if(signPdfByDFZX.equals("3")){
+                Map<String, Object> stringObj = jdbcTemplate.queryForMap("SELECT seal_project_id,seal_account_id,seal_customer_id,seal_comm_key from m_contract_info  where id = " + contractId);
+                System.out.println(contractId);
+                HttpHeaders headers = new HttpHeaders();
+                // 添加自定义头(示例:设置Authorization和Content-Type)
+                headers.add("project_id", stringObj.get("seal_project_id")+"");  // 替换为实际
+                headers.add("account_id", stringObj.get("seal_account_id")+"");  // 替换为实际
+                headers.add("customer_id", stringObj.get("seal_customer_id")+"");  // 替换为实际
+                headers.add("commKey", stringObj.get("seal_comm_key")+"");  // 替换为实际
+                headers.setContentType(MediaType.APPLICATION_JSON);  // 指定请求体为JSON格式
+
+                HttpEntity<HashMap<String, Object>> httpEntity = new HttpEntity<>(paramsMap, headers);
+
+                retData = restTemplate.postForObject(url, httpEntity, HashMap.class);
+            }else{
+                retData = restTemplate.postForObject(url, paramsMap, HashMap.class);
+            }
 
-            HashMap<String, Object> retData = restTemplate.postForObject(url, request, HashMap.class);
             System.out.println("东方中讯uRL" + url);
             String code = retData.get("code").toString();
             String msg = retData.get("msg").toString();
 
             if (!"0".equals(code)) {
+                System.out.println(retData);
                 return ERROR + "@@@@" + msg;
             }
-
             String fileB642 = retData.get("fileB64").toString();
 
             FileOutputStream fout = new FileOutputStream(dataFileUrl);