Bläddra i källkod

Merge branch 'refs/heads/dev' into test-merge

# Conflicts:
#	blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
#	blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ArchiveFileServiceImpl.java
#	blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/PDFUtils.java
#	blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
LHB 3 veckor sedan
förälder
incheckning
a82c080c00
27 ändrade filer med 203 tillägg och 111 borttagningar
  1. 0 6
      blade-common/pom.xml
  2. 0 11
      blade-common/src/main/java/org/springblade/common/utils/AsyncConfigurer.java
  3. 12 6
      blade-common/src/main/java/org/springblade/common/utils/DeepSeekClient.java
  4. 28 0
      blade-common/src/main/java/org/springblade/common/utils/singleEexConfigurer.java
  5. 4 5
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileTaskController.java
  6. 1 3
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java
  7. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/external/impl/ExternalDataArchiveAutoService.java
  8. 9 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/external/impl/ExternalDataArchiveFileService.java
  9. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/external/impl/ExternalDataArchiveMetaService.java
  10. 23 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/external/utils/TransUtil.java
  11. 0 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  12. 0 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  13. 6 4
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  14. 1 0
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java
  15. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/InformationQueryClientImpl.java
  16. 5 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ArchiveFileServiceImpl.java
  17. 1 1
      blade-service/blade-control/pom.xml
  18. 4 0
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVDataServiceImpl.java
  19. 1 1
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java
  20. 2 2
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/PDFUtils.java
  21. 1 1
      blade-service/blade-manager/pom.xml
  22. 5 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  23. 9 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java
  24. 3 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  25. 8 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  26. 63 45
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  27. 12 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/utils/TableCoordinates.java

+ 0 - 6
blade-common/pom.xml

@@ -64,12 +64,6 @@
             <scope>compile</scope>
         </dependency>
 
-<!--        <dependency>-->
-<!--            <groupId>com.google.collections</groupId>-->
-<!--            <artifactId>google-collections</artifactId>-->
-<!--            <version>1.0-rc2</version>-->
-<!--        </dependency>-->
-
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>

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

@@ -31,15 +31,4 @@ public class AsyncConfigurer {
                 , new ThreadPoolExecutor.DiscardOldestPolicy(), "manager-thread-pool");
     }
 
-    /**
-     * 线程池配置
-     *
-     * @return
-     */
-    /*@Bean("singleExecutor")
-    public ExecutorService getSingleExecutor() {
-        log.info("线程池初始化......");
-        return Executors.newSingleThreadExecutor();
-    }*/
-
 }

+ 12 - 6
blade-common/src/main/java/org/springblade/common/utils/DeepSeekClient.java

@@ -1,14 +1,15 @@
-package org.springblade.common.utils;
 
+package org.springblade.common.utils;
 import com.google.gson.Gson;
+
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import okhttp3.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
+
 import java.io.IOException;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -32,9 +33,10 @@ public class DeepSeekClient {
                 .build();
     }
 
-    /**
+/**
      * 请求 DeepSeek API
      */
+
     public String callDeepSeek(String prompt) throws IOException {
         DeepSeekRequest request = new DeepSeekRequest(prompt, "deepseek-chat");
         String requestJson = gson.toJson(request);
@@ -59,9 +61,11 @@ public class DeepSeekClient {
         }
     }
 
-    /**
+
+/**
      * 解析响应获取结果
      */
+
     public String analysisResponse(String responseJson) {
         try {
             JsonObject jsonObject = JsonParser.parseString(responseJson).getAsJsonObject();
@@ -87,9 +91,11 @@ public class DeepSeekClient {
         }
     }
 
-    /**
+
+/**
      * 直接获取精简后的内容
      */
+
     public String getSimplifiedContent(String prompt) {
         try {
             String response = callDeepSeek(prompt);
@@ -235,4 +241,4 @@ public class DeepSeekClient {
             }
         }
     }
-}
+}

+ 28 - 0
blade-common/src/main/java/org/springblade/common/utils/singleEexConfigurer.java

@@ -0,0 +1,28 @@
+package org.springblade.common.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.scheduling.annotation.EnableAsync;
+
+import java.util.concurrent.*;
+
+@Slf4j
+@Configuration
+@EnableAsync
+public class singleEexConfigurer {
+
+    /**
+     * 线程池配置
+     *
+     * @return
+     */
+    @Bean("singleExecutor")
+    @Primary
+    public ExecutorService getSingleExecutor() {
+        log.info("线程池初始化......");
+        return Executors.newSingleThreadExecutor();
+    }
+
+}

+ 4 - 5
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileTaskController.java

@@ -67,7 +67,8 @@ public class ArchiveFileTaskController extends BladeController {
             List<ArchiveFile> archiveFileList = jdbcTemplate.query("select * from u_archive_file where id in(" + ids + ")", new BeanPropertyRowMapper<>(ArchiveFile.class));
             if (archiveFileList.size() > 0) {
                 //固定水印图片章
-                String pngQzUrl = "https://blade-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20250221/7686a428dd1fe2cc7086dae94f0b3a9d.png";
+                String pngQzUrl = "https://xinan1.zos.ctyun.cn/blade-oss-chongqing/upload/20250221/7686a428dd1fe2cc7086dae94f0b3a9d.png";
+                String reData = "";
                 for (ArchiveFile archiveFile : archiveFileList) {
                     if (Arrays.asList(1, 2).contains(archiveFile.getStatus())) {
                         throw new ServiceException("只有【未上报 或 已废除】状态的业务数据才能认证!");
@@ -110,13 +111,11 @@ public class ArchiveFileTaskController extends BladeController {
                         //TODO ============= 电签认证 =============
                         String resultMsg = this.eVisaClient.eVisaCustom(eVISATaskArchiveDTO);
                         if (StringUtils.isEmpty(resultMsg) || ("500").equals(resultMsg)) {
-                            throw new ServiceException("电签服务发生异常,请联系管理员!");
-                        }
-                        if (resultMsg.contains("success@@@@")) {
-                            return R.data(true);
+                            reData = reData+archiveFile.getFileName()+"认证失败";
                         }
                     }
                 }
+                return R.success(reData);
             }
             return R.fail("操作失败");
         }

+ 1 - 3
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -44,7 +44,7 @@ import org.springblade.archive.vo.*;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.feign.ArchiveFileClient;
 import org.springblade.business.vo.NeiYeLedgerVO1;
-import org.springblade.common.utils.DeepSeekClient;
+//import org.springblade.common.utils.DeepSeekClient;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
@@ -101,8 +101,6 @@ public class ArchivesAutoController extends BladeController {
 
 	private final ProjectClient projectClient;
 
-	@Autowired
-	private ExecutorService executorService;
 	@Autowired
 	private ITraceLogService iTraceLogService;
     private final JdbcTemplate jdbcTemplate;

+ 2 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/external/impl/ExternalDataArchiveAutoService.java

@@ -195,6 +195,7 @@ public class ExternalDataArchiveAutoService {
                     localArchive.setOutUrl(externalArchive.getOutUrl());
                     localArchive.setName(externalArchive.getName());
                     localArchive.setFileNumber(externalArchive.getFileNumber());
+                    localArchive.setNodeId(externalArchive.getNodeId());
                     upArchives.add(localArchive);
                 }
             }
@@ -206,6 +207,7 @@ public class ExternalDataArchiveAutoService {
         // 检查关键字段差异
         return !Objects.equals(external.getOutUrl(), local.getOutUrl())
                 || !Objects.equals(external.getName(), local.getName())
+                || !Objects.equals(external.getNodeId(), local.getNodeId())
                 || !Objects.equals(external.getFileNumber(), local.getFileNumber());
 
         // 扩展检查示例(如需其他字段比较,可追加条件):

+ 9 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/external/impl/ExternalDataArchiveFileService.java

@@ -191,7 +191,14 @@ public class ExternalDataArchiveFileService {
             boolean pdfUrlDifferent = external.getPdfPageUrl() != null &&
                     !Objects.equals(external.getPdfPageUrl(), local.getPdfPageUrl());
 
-            return !Objects.equals(extUtimeStr, localUtimeStr) || pdfUrlDifferent;
+            // 新增nodeId比较:当external的nodeId非空时,与local的nodeId比较
+            boolean nodeIdDifferent = external.getNodeId() != null &&
+                    !Objects.equals(external.getNodeId(), local.getNodeId());
+
+            // 任意字段不同即需要更新
+            return !Objects.equals(extUtimeStr, localUtimeStr)
+                    || pdfUrlDifferent
+                    || nodeIdDifferent; // 新增nodeId判断
         }
     }
 
@@ -210,6 +217,7 @@ public class ExternalDataArchiveFileService {
         local.setFilePage(external.getFilePage());
         local.setFileSize(external.getFileSize());
         local.setUtime(external.getUtime());
+        local.setNodeId(external.getNodeId());
         //local.setArchiveId(external.getArchiveId());
     }
 

+ 2 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/external/impl/ExternalDataArchiveMetaService.java

@@ -14,6 +14,7 @@ import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
@@ -24,6 +25,7 @@ public class ExternalDataArchiveMetaService {
 
     private final JdbcTemplate jdbcTemplate;
 
+    @Resource(name = "singleExecutor")
     private ExecutorService executorService;
 
     private ArchivesAutoMapper autoMapper;

+ 23 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/external/utils/TransUtil.java

@@ -247,6 +247,9 @@ public class TransUtil {
         //五、进度控制文件
         put("4fbcf1973adb481a89a36d8b9898", 1927992893465690147L);
 
+        //六、合同管理文件
+        put("9a7cb944123647f19637983fe144", 1927992893465690148L);
+
         //七、变更文件
         put("2e203ab2574640c2895ac5196204", 1927992893465690162L);
         //八、施工原始记录
@@ -315,6 +318,9 @@ public class TransUtil {
         //五、进度控制文件
         put("9f7b03959db646f791a1b2581ed2", 1927992893469884450L);
 
+        //六、合同管理文件
+        put("0298983d7b8142778d88ab7c4d03", 1927992893469884451L);
+
         //七、变更文件
         put("e04b9db2c50749629bf8a01bf6f3", 1927992893469884465L);
         //八、施工原始记录
@@ -368,6 +374,9 @@ public class TransUtil {
         //五、进度控制文件
         put("9f3d46f37d194604925ab6bf1f30", 1927992893469884500L);
 
+        //六、合同管理文件
+        put("9551483177b54c029dcaa443af4b", 1927992893469884501L);
+
         //七、变更文件
         put("7eccf837cfb649c69086427ef9e3", 1927992893469884515L);
         //八、施工原始记录
@@ -415,6 +424,10 @@ public class TransUtil {
         put("eecc8d374650469b87b04af099c3", 1927992893474078753L);
         //五、进度控制文件
         put("74a3f78dff114518b3ebd1800562", 1927992893474078754L);
+
+        //六、合同管理文件
+        put("75a5781d00f94b98abe2ee47d175", 1927992893474078755L);
+
         //七、变更文件
         put("c37db7bb196b411ca59b99fad259", 1927992893474078769L);
         //八、施工原始记录
@@ -460,7 +473,16 @@ public class TransUtil {
 
 
         // (八)缺陷责任期资料
-        put("8a0aa647278548fa9edba59b78c4", 1945023416096522240L);
+        put("1d4c9460a9954d9d8ffcccc39f78", 1945023416096522240L);
+
+        // 四、施工安全及文明施工文件
+        put("fbca27defd5e48c1b08527154f87", 1927992893478273030L);
+
+        // 五、进度控制文件
+        put("c034b7bf1f4a44b78d422821337d", 1927992893478273031L);
+
+        // 八、施工原始记录
+        put("c52cf546b94d4099b0701a023caa", 1927992893478273037L);
         //二工程管理文件
         //施工准备文件 -1.施工项目部组建、印章启用、人员任命文件,进场人员资质报审文件,施工设备仪器进场报审文件、设备仪器校验、率定文件
         //put("0b0ac82851d7484bba414bb1ccbd", 1892759789415432263L);

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

@@ -236,5 +236,4 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 
 	void deleteIsElementFileByNode(@Param("projectId") Long projectId,@Param("ancestors") String ancestors,@Param("nodeId") String nodeId);
 	List<ArchivesAutoVO5> selectArchivesAutoFileFormDownload(@Param("projectId") Long projectId,  @Param("ids") List<String> ids);
-
 }

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

@@ -1467,7 +1467,6 @@
         select *
         from u_archives_auto
         where project_id = #{projectId}
-        and is_auto_file!=1
         and is_deleted=0
         and
         out_id in

+ 6 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -24,7 +24,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -86,6 +86,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.math.BigDecimal;
@@ -124,7 +125,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	private ProjectClient projectClient;
 	private final ArchivesAutoMapper autoMapper;
 
-	@Autowired
+	@Resource(name = "singleExecutor")
 	private ExecutorService executorService;
 
 	private Map<String, Integer> indexMap = new HashMap<>(); //按立卷位区分和生成流水号
@@ -256,9 +257,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 					secretLevelMap.put("2", "绝密");
 					secretLevelMap.put("3", "秘密");
 					secretLevelMap.put("4", "公开");
-
 					aa.setSecretLevelValue(secretLevelMap.getOrDefault(aa.getSecretLevel(), "秘密"));
-					//aa.setSecretLevelValue("1".equals(aa.getSecretLevel()) ? "机密" : ("2".equals(aa.getSecretLevel()) ? "绝密" : "秘密"));
 				}
 			});
 		}
@@ -445,6 +444,9 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				}else {
 					fileUrl = frontUrl;
 				}
+				if (fileUrl.contains("$$$")) {
+					fileUrl = fileUrl.substring(0, fileUrl.indexOf("$$$"));
+				}
 				if (frontUrl.contains("$$$")) {
 					fileId = frontUrl.substring(frontUrl.indexOf("$$$") + 3);
 				} else {

+ 1 - 0
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java

@@ -330,6 +330,7 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
                         local.setFilePage(external.getFilePage());
                         local.setFileSize(external.getFileSize());
                         local.setUtime(external.getUtime());
+                        local.setNodeId(external.getNodeId());
                     }
                     return local;
                 })

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/InformationQueryClientImpl.java

@@ -128,7 +128,7 @@ public class InformationQueryClientImpl implements InformationQueryClient {
 
     @Override
     public InformationQuery getInfoByWbsId(Long wbsId,Integer classify) {
-        return informationQueryMapper.selectOne(new QueryWrapper<InformationQuery>().eq("wbs_id",wbsId).eq("classify",classify));
+        return informationQueryMapper.selectOne(new QueryWrapper<InformationQuery>().eq("wbs_id",wbsId).eq("classify",classify).in("status",0,1,2));
     }
 
 

+ 5 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ArchiveFileServiceImpl.java

@@ -18,11 +18,13 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.feign.IDictBizClient;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
@@ -40,9 +42,11 @@ public class ArchiveFileServiceImpl extends BaseServiceImpl<ArchiveFileMapper, A
     private final IDictBizClient dictBizClient;
     private final NewIOSSClient iossClient;
 
+    @Resource(name = "singleExecutor")
     private ExecutorService executorService;
+
     private final ArchiveInspectionInfoClient archiveInspectionInfoClient;
-    private final JdbcTemplate  jdbcTemplate;
+    private final JdbcTemplate jdbcTemplate;
 
 
     @Override

+ 1 - 1
blade-service/blade-control/pom.xml

@@ -100,7 +100,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${path.separator}${java.home}/lib/jce.jar${path.separator}${java.home}/lib/jsse.jar
                         </bootclasspath>
                     </compilerArguments>
                 </configuration>

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

@@ -100,6 +100,8 @@ public class EVDataServiceImpl implements EVDataService {
             if (taskApp.getRemarkType().equals("1")) { //安心签
                 //添加电签策略
                 List<SealStrategyVO> strategyListByAXQ = getStrategyListByAXQ(taskApp, ids);
+
+                ids = ids.replaceAll("\\✹", "");
                 if (strategyListByAXQ == null || Func.isEmpty(strategyListByAXQ) || strategyListByAXQ.size() == 0) {
                     ids = ids.replaceAll("✹", "");
                     List<Map<String, Object>> mapList = jdbcTemplate.queryForList("SELECT * from m_textdict_info where type=6  and is_deleted=0 and id in(" + ids + ")");
@@ -376,6 +378,8 @@ public class EVDataServiceImpl implements EVDataService {
                 } 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() + "')");
+                    }else{
+                        this.jdbcTemplate.execute("update u_entrust_info set entrust_e_pdf='" + taskApp.getLastFilePdfUrl() + "' where id=(SELECT wbs_id from u_information_query where id='" + taskApp.getFormDataId() + "' and status in(0,1,2) ) ");
                     }
                     updateSql = "update u_information_query set e_visa_pdf_url='" + taskApp.getLastFilePdfUrl() + "',status=" + taskApp.getSigType() + ",business_time='" + taskApp.getPdfDate() + "' where id='" + taskApp.getFormDataId() + "'";
                 }

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

@@ -798,7 +798,7 @@ public class EVisaServiceImpl implements EVisaService {
             url = "http://219.151.181.73:9125/FrontSys/SealServicezx/FileSignByKeyWord";
         }
         if(signPdfByDFZX.equals("3")){
-            url = "http://113.250.191.72:9125/FrontSys/SealServicezx/FileSignByKeyWord";
+            url = "http://10.0.0.4:9125/FrontSys/SealServicezx/FileSignByKeyWord";
         }
 
 

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

@@ -134,8 +134,8 @@ public class PDFUtils {
         }
     }
 
-    public static void mai123n(String[] args) {
-        String pdfUrl = "/Users/hongchuangyanfa/Desktop/22222/1278页.pdf";
+    public static void mai11n(String[] args) {
+        String pdfUrl = "/Users/hongchuangyanfa/Downloads/cb1e0971f9ae3ab53ab2866b3471aaee.pdf";
         getPdfSignIds(pdfUrl);
     }
 

+ 1 - 1
blade-service/blade-manager/pom.xml

@@ -240,7 +240,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${path.separator}${java.home}/lib/jce.jar${path.separator}${java.home}/lib/jsse.jar
                         </bootclasspath>
                     </compilerArguments>
                 </configuration>

+ 5 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -4056,12 +4056,12 @@ public class ExcelTabController extends BladeController {
             for (String noId : nodeId) {
                 JSONObject js = new JSONObject();
                 JSONObject js2 = new JSONObject();
+             //   InformationQuery infoB = informationQueryClient.getInfoByWbsId(Func.toLong(noId), Func.toInt(classify));
                 List<AppWbsTreeContractVO> tableAll = wbsTreeContractService.searchNodeAllTable(noId, classify, contractId, projectId, null);
                 JSONArray array = new JSONArray();
                 if (tableAll != null && tableAll.size() >= 1) {
                     /*只需加载第一张即可,生效会自动补全*/
                     for (AppWbsTreeContractVO tab : tableAll) {
-                        //  AppWbsTreeContractVO tab = tableAll.get(0);
                         Map<String, Object> jo = excelTabService.getBussDataInfo(tab.getPKeyId(), 0,true);
                         String s = new Gson().toJson(jo);
                         //字符串转jsonobject
@@ -4081,6 +4081,10 @@ public class ExcelTabController extends BladeController {
                 js.put("dataInfo", js2);
                 js.put("signType", "1");
                 js.put("isNotDelOldHtml", 1);
+                /*if(infoB!=null && (infoB.getStatus()==1 || infoB.getStatus()==2)){
+                    js.put("signType", "1");
+                }*/
+
                 this.saveBussData2(js);
             }
         } catch (Exception e) {

+ 9 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -458,6 +458,15 @@ public class TableElementConverter implements ITableElementConverter {
                                 info.setToBeUpdated(true);
                                 info.getDataMap().put(fd.getKey(), FormulaUtils.recovery(p));
                                 }
+
+                                //单独处理 重复表单的数据
+                                if(elementDataList.size() == 1 && pages.size() == 1){
+                                    for (TableInfo table : tables) {
+                                        table.setToBeUpdated(true);
+                                        table.getDataMap().put(fd.getKey(), FormulaUtils.recovery(pages.get(0)));
+                                    }
+                                }
+
                             }
                         } catch (Exception e) {
                             StaticLog.error("元素{}回写报错", fd.getCode());

+ 3 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -48,14 +48,11 @@ import org.springblade.manager.vo.*;
 import org.springblade.manager.mapper.ArchiveTreeContractMapper;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springframework.beans.BeanUtils;
-import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
@@ -71,6 +68,7 @@ import java.util.stream.Collectors;
 public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeContractMapper, ArchiveTreeContract> implements IArchiveTreeContractService {
 
 	private final ArchiveTreeContractMapper archiveTreeContractMapper;
+
 	private final ArchiveTreeMapper archiveTreeMapper;
 
 	private final IArchiveTreeService archiveTreeService;
@@ -87,14 +85,12 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 	private final ArchiveFileClient archiveFileClient;
 
-	private final IWbsTreeContractService wbsTreeContractService;
 
 	private final ArchiveAutoRuleWbsMapper archiveAutoRuleWbsMapper;
 
 	private final ArchiveAutoClient archiveAutoClient;
 
-	private final JdbcTemplate jdbcTemplate;
-
+	@Resource(name = "singleExecutor")
 	private ExecutorService executorService;
 
 

+ 8 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -1292,14 +1292,15 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         sb.append(tableInfo.getPkeyId());sb.append(",");sb.append(user.getUserId());
                         sb.append(","); sb.append("SYSDATE()");sb.append(",\"");sb.append(sqlInfoNew);
                         sb.append("\")");
-
-                        if(sigType.equals("1") && wbsTreeContract.getProjectId().equals("1630011899725201410") && (tableInfo.getIsTypePrivatePid().equals("1559714325173080065") || tableInfo.getIsTypePrivatePid().equals("1559479719236702210") )){
+                        //由于当时 电签重刷 不想改变着两张表值 后来(监理不愿意,所以需要放开)
+                        /*if(sigType.equals("1") && wbsTreeContract.getProjectId().equals("1630011899725201410") && (tableInfo.getIsTypePrivatePid().equals("1559714325173080065") || tableInfo.getIsTypePrivatePid().equals("1559479719236702210") )){
                             System.out.println("123");
-                        }else{
-                            jdbcTemplate.execute(delSql);
-                            jdbcTemplate.execute(sqlInfo);
-                            jdbcTemplate.execute(sb.toString());
-                        }
+                        }else{*///}
+
+                        jdbcTemplate.execute(delSql);
+                        jdbcTemplate.execute(sqlInfo);
+                        jdbcTemplate.execute(sb.toString());
+
                         transactionManager1.commit(transactionStatus);
                     } catch (Exception e) {
                         transactionManager1.rollback(transactionStatus);

+ 63 - 45
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -84,6 +84,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.BiFunction;
 import java.util.function.BinaryOperator;
+import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -5817,59 +5818,21 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     if (FB02.TABLE_NAME.equals(wtcEva.getInitTableName())) {
                         FB02 fb02 = new FB02(processFds);
                         if (fb02.checked()) {
-                            /*swId是分项评定的父节点Id*/
-
-                          ///  List<FormulaDataBlock> formulaDataBlocks = this.getSqlList("select DISTINCT a.id,a.type,a.sw_id swId,a.contract_id contractId,a.val from m_formula_data_block a,m_wbs_tree_contract b where a.sw_id=b.parent_id and b.contract_id ="+wtcEva.getContractId()+" and b.major_data_type=2 and b.is_deleted=0 and b.ancestors_p_id like '%"+wtcEva.getPId()+"%' ORDER BY b.sort ", FormulaDataBlock.class);
-
-                            // 每次需要依赖于treeCode值
-                            // List<FormulaDataBlock> formulaDataBlocks = this.getSqlList("select DISTINCT a.id,a.type,a.sw_id swId,a.contract_id contractId,a.val from m_formula_data_block a join (select parent_id from m_wbs_tree_contract where tree_code like '" + treeCode.getLast() + "%' and contract_id =" + wtcEva.getContractId() + " and major_data_type=2 and is_deleted=0 ORDER BY tree_code)b on a.sw_id=b.parent_id ", FormulaDataBlock.class);
-                            /*if (formulaDataBlocks != null && formulaDataBlocks.size() > 0) {
-                                *//*就是分项工程节点的父节点名称*//*
-                                String swIds = formulaDataBlocks.stream().map(FormulaDataBlock::getSwId).map(Objects::toString).collect(Collectors.joining(","));
-                                List<Map<String, Object>> listMaps = this.jdbcTemplate.queryForList("select id ,node_name nodeName,full_name fullName  from m_wbs_tree_contract where is_deleted =0 and contract_id=" + wtcEva.getContractId() + " and id in(" + swIds + ")");
-                                Map<String, String> swNameMap = new HashMap<>();
-                                if (listMaps.size() > 0) {
-                                    swNameMap.putAll(listMaps.stream().collect(Collectors.toMap(m -> m.get("id").toString(), m -> m.get("fullName").toString(), (v1, v2) -> v2)));
-                                }
-                                fb02.source(formulaDataBlocks, swNameMap);
-
-                                if (fb02.getDatas().size() > 0) {
-                                    Map<String, String> tableKeysCoordsMap = FormulaUtils.getElementCell(wtcEva.getHtmlUrl());
-                                    if (fb02.initFdCoords(tableKeysCoordsMap)) {
-                                        *//*根据数据长度,增减页数*//*
-                                        List<WbsTreeContract> wtcList = this.adjustPageSize(fb02.getPageNum(), wtcEva, processFds);
-                                        if (fb02.flush(wtcList)) {
-                                            this.jdbcTemplate.batchUpdate(fb02.getSql(), fb02.getParams());
-                                            return R.success("成功");
-                                        }
-                                    }
-                                }
-                            }*/
-
-                            // 重新优化
-                           // String contSql = "SELECT p_key_id as pKeyId,node_name as fullName,init_table_name as initTableName,html_url as htmlUrl from m_wbs_tree_contract a where a.p_id in( select p_key_id  from m_wbs_tree_contract b where  b.contract_id ="+wtcEva.getContractId()+"  and b.major_data_type=2 and b.is_deleted=0 and b.ancestors_p_id like '%"+wtcEva.getPId()+"%' ) and a.type=2 and node_name not like '%附表%' and LENGTH(a.html_url)>=10 and init_table_name is not null ";
                             String contSql = "SELECT p_key_id as pKeyId,p_id as pId,IFNULL(if(length(trim(full_name))>0, full_name, node_name), node_name) AS fullName,init_table_name as partitionCode,html_url as oldId,type,major_data_type as majorDataType from m_wbs_tree_contract where is_deleted=0 and ancestors_p_id like '%"+wtcEva.getPId()+"%' and contract_id ="+wtcEva.getContractId()+"  ORDER BY sort ,full_name ";
                             List<WbsTreeContractLazyVO> allNode = this.getSqlList(contSql, WbsTreeContractLazyVO.class);
                             List<WbsTreeContractLazyVO> conNode= getAllChildNodesWithStream(wtcEva.getPId()+"",allNode);
                             //将conNode 转成Map对象
                             Map<Long, WbsTreeContractLazyVO> map = conNode.stream().collect(Collectors.toMap(WbsTreeContractLazyVO::getPKeyId, WbsTreeContractLazyVO -> WbsTreeContractLazyVO));
                             List<WbsTreeContractLazyVO> tableInfo = new ArrayList<>();
-                           // String nodeName = "";
                             for (WbsTreeContractLazyVO info : conNode) {
-                                /*if(info.getType()==1 && (info.getPId()+"").equals(wtcEva.getPId()+"") ){
-                                    nodeName=info.getFullName();
-                                }*/
                                 if(info.getType()==2){
                                     WbsTreeContractLazyVO wbsTreeContractLazyVO = map.get(info.getPId());
-                                  //  if(wbsTreeContractLazyVO!=null && wbsTreeContractLazyVO.getMajorDataType()!=null && wbsTreeContractLazyVO.getMajorDataType()==2 && info.getFullName().indexOf("附表")<0 && (info.getPKeyId()+"").equals("1861674943318589443")){
                                     if(wbsTreeContractLazyVO!=null && wbsTreeContractLazyVO.getMajorDataType()!=null && wbsTreeContractLazyVO.getMajorDataType()==2 && info.getFullName().indexOf("附表")<0 ){
                                         WbsTreeContractLazyVO wbsTreeC = map.get(wbsTreeContractLazyVO.getPId());
                                         info.setTitle(wbsTreeC.getFullName());
                                         tableInfo.add(info);
-                                      //  System.out.println("---------"+nodeName+"   "+info.getFullName());
                                     }
                                 }
-                              //  System.out.println(info.getFullName());
                             }
                             System.out.println("tableInfo:"+tableInfo);
                             for (WbsTreeContractLazyVO info : tableInfo) {
@@ -6027,7 +5990,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             for (FormData e : fbFds) {
                                 if (e.getEName().startsWith("分部工程名称")) {
                                     fbName = e;
-                                } else if (e.getEName().startsWith("分部工程实测得分计算")) {
+                                } else if (e.getEName().startsWith("分部工程评分") ) { //分部工程实测得分计算
                                     passRate = e;
                                 } else if (e.getEName().startsWith("质量等级")) {
                                     fbLevel = e;
@@ -6036,10 +5999,38 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             if (!(fbName != null && passRate != null && fbLevel != null)) {
                                 return R.fail("未能匹配分部评定节点");
                             }
+
                             String keys = Stream.of(fbName, passRate, fbLevel).map(FormData::getKey).map(StringUtils::handleNull).collect(Collectors.joining(",c.", "c.", ""));
-                            List<Map<String, Object>> mapList = jdbcTemplate.queryForList("select " + keys + " , a.tree_code from (select id,tree_code from m_wbs_tree_contract where tree_code like '" + treeCode.getLast() + "%' and contract_id =" + wtcEva.getContractId() + " and major_data_type=2 and is_deleted=0 and node_type=3 ORDER BY tree_code)a join m_wbs_tree_contract b on a.id=b.parent_id" +
-                                    " join " + FB02.TABLE_NAME + " c on b.p_key_id=c.p_key_id where b.contract_id =" + wtcEva.getContractId() + " and b.is_deleted=0 and b.init_table_name='" + FB02.TABLE_NAME + "'" +
-                                    "ORDER BY a.tree_code");
+                           // String contSql = "SELECT p_key_id as pKeyId,p_id as pId,IFNULL(if(length(trim(full_name))>0, full_name, node_name), node_name) AS fullName,init_table_name as partitionCode,html_url as oldId,type,major_data_type as majorDataType from m_wbs_tree_contract where is_deleted=0 and (ancestors_p_id like '%"+wtcEva.getPId()+"%' or p_key_id="+wtcEva.getPId()+") and contract_id ="+wtcEva.getContractId()+"  ORDER BY sort ,full_name ";
+                            String contSql = " SELECT DISTINCT c.p_key_id as pKeyId,c.p_id as pId, CASE WHEN c.type =1 then c.full_name when c.type =2 then c.node_name END AS fullName,c.type,c.major_data_type as majorDataType  from m_wbs_tree_contract c , "+
+                                             " (SELECT a.* from m_wbs_tree_contract a ,m_wbs_tree_contract b where  b.p_key_id=a.p_id and a.table_owner in(1,2,3) and  a.is_deleted=0 and  b.is_deleted=0 and b.ancestors_p_id like '%"+wtcEva.getPId()+"%' and b.contract_id ="+wtcEva.getContractId()+" and b.major_data_type=8 and a.node_name  NOT LIKE '%\\__%' ) d "+
+                                             " where (FIND_IN_SET(c.p_key_id,d.ancestors_p_id) or c.p_key_id=d.p_key_id) and  c.ancestors_p_id like '%"+wtcEva.getPId()+"%' and c.contract_id ="+wtcEva.getContractId()+" and c.is_deleted=0 "+
+                                             " ORDER BY c.sort ,c.full_name ";
+
+                            List<WbsTreeContractLazyVO> allNode = this.getSqlList(contSql, WbsTreeContractLazyVO.class);
+                            List<WbsTreeContractLazyVO> conNode= getAllChildNodesWithStream(wtcEva.getPId()+"",allNode);
+                            //将conNode 转成Map对象
+                            Map<Long, WbsTreeContractLazyVO> DataMap = conNode.stream().collect(Collectors.toMap(WbsTreeContractLazyVO::getPKeyId, WbsTreeContractLazyVO -> WbsTreeContractLazyVO));
+                            List<WbsTreeContractLazyVO> tableInfo = new ArrayList<>();
+                            StringBuffer sb = new StringBuffer();
+                            for (WbsTreeContractLazyVO info : conNode) {
+                                System.out.println(info.getFullName()+""+info.getPKeyId());
+                                if(info.getType()==2){
+                                    WbsTreeContractLazyVO wbsTreeContractLazyVO = DataMap.get(info.getPId());
+                                    if(wbsTreeContractLazyVO!=null && wbsTreeContractLazyVO.getMajorDataType()!=null && wbsTreeContractLazyVO.getMajorDataType()==8 && info.getFullName().indexOf("__")<0 ){
+                                        tableInfo.add(info);
+                                        sb.append(info.getPKeyId());
+                                    }
+                                }
+                            }
+
+                           System.out.println("123");
+                            String pkeyIds = tableInfo.stream().map(WbsTreeContractLazyVO::getPKeyId).map(Object::toString).collect(Collectors.joining(","));
+
+                            String sqlInfo = "select " +keys +",p_key_id from "+  FB02.TABLE_NAME +" c where p_key_id in("+pkeyIds+") ORDER BY FIND_IN_SET(p_key_id,'"+pkeyIds+"')";
+                            System.out.println("1231");
+
+                            List<Map<String, Object>> mapList = jdbcTemplate.queryForList(sqlInfo);
                             if (mapList.size() > 0) {
                                 List<Item02> abList = new ArrayList<>();
                                 for (Map<String, Object> map : mapList) {
@@ -6047,17 +6038,17 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                     item.setName(StringUtils.handleNull(map.get(fbName.getKey())).split("_\\^_")[0]);
                                     item.setPassRate(BaseUtils.obj2DoubleZero(StringUtils.handleNull(map.get(passRate.getKey())).split("_\\^_")[0]));
                                     item.setLevel(StringUtils.handleNull(map.get(fbLevel.getKey())).split("_\\^_")[0]);
-                                    item.setTreeCode(StringUtils.handleNull(map.get("tree_code")));
+                                    item.setTreeCode(StringUtils.handleNull(map.get("p_key_id")));
                                     abList.add(item);
                                 }
                                 /*合并相同分部评定*/
-                                BinaryOperator<Item02> biOp = (v1, v2) -> {
+                              /*  BinaryOperator<Item02> biOp = (v1, v2) -> {
                                     if (v1.getScores() >= v2.getScores()) {
                                         return v1;
                                     }
                                     return v2;
                                 };
-                                abList = new ArrayList<>(abList.stream().collect(Collectors.toMap(Item02::getTreeCode, f -> f, biOp)).values());
+                                abList = new ArrayList<>(abList.stream().collect(Collectors.toMap(Item02::getTreeCode, f -> f, biOp)).values());*/
                                 dw02.source(abList);
                                 if (dw02.getDatas().size() > 0) {
                                     Map<String, String> tableKeysCoordsMap = FormulaUtils.getElementCell(wtcEva.getHtmlUrl());
@@ -6083,6 +6074,33 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
 
+    // 批量加载+内存计算
+/*    public List<WbsTreeContractLazyVO> getAllChildNodesWithStream(Long parentId, List<WbsTreeContractLazyVO> allNodes) {
+
+        // 2. 构建内存索引
+        Map<Long, WbsTreeContractLazyVO> nodeMap = allNodes.stream()
+                .collect(Collectors.toMap(WbsTreeContractLazyVO::getPKeyId, Function.identity()));
+
+        Map<Long, List<WbsTreeContractLazyVO>> childrenMap = allNodes.stream()
+                .filter(node -> node.getPId() != null)
+                .collect(Collectors.groupingBy(WbsTreeContractLazyVO::getPId));
+
+        // 3. 递归查找子节点
+        List<WbsTreeContractLazyVO> result = new ArrayList<>();
+        Deque<Long> stack = new ArrayDeque<>();
+        stack.push(Func.toLong(parentId));
+
+        while (!stack.isEmpty()) {
+            Long currentId = stack.pop();
+            WbsTreeContractLazyVO node = nodeMap.get(currentId);
+            if (node != null) {
+                result.add(node);
+                childrenMap.getOrDefault(currentId, Collections.emptyList())
+                        .forEach(child -> stack.push(child.getPKeyId()));
+            }
+        }
+        return result;
+    }*/
     // 获取所有子节点
     public List<WbsTreeContractLazyVO> getAllChildNodesWithStream(String parentId, List<WbsTreeContractLazyVO> allNodes) {
         List<WbsTreeContractLazyVO> children = new ArrayList<>();

+ 12 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/TableCoordinates.java

@@ -4,6 +4,7 @@ import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
+import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.tool.utils.IoUtil;
 
 import java.io.File;
@@ -14,16 +15,19 @@ import java.util.*;
 
 public class TableCoordinates {
     static Map<Integer, Set<Integer>> occupiedCells = new HashMap<>();
-    public static void main12(String[] args) throws Exception {
-        String htmlUrl = "/Users/hongchuangyanfa/fsdownload/1582300079941746688.html";
+    public static void mai1ßn(String[] args) throws Exception {
+        String htmlUrl = "http://fileinfo.hczcxx.cn:9295/privateUrlCopy/1630011899725201410/1940382551554129920.html";
        // String htmlUrl = "/mnt/sdc/Users/hongchuangyanfa/Desktop/privateUrlCopy/1630011899725201410/1582300079941746688.html";
         getHtmlDataInfo(htmlUrl);
     }
 
     public static List<String> getHtmlDataInfo(String htmlUrl) throws Exception {
+        System.out.println(htmlUrl);
         occupiedCells.clear();
         List<String> redata = new ArrayList<>();
-        InputStream fileInputStream = FileUtils.getInputStreamByUrl(htmlUrl);
+        InputStream fileInputStream = FileUtils.getInputStreamByUrl(htmlUrl);//CommonUtil.getOSSInputStream(htmlUrl); //FileUtils.getOSSInputStream();//
+       // InputStream fileInputStream = CommonUtil.getOSSInputStream(htmlUrl); //FileUtils.getOSSInputStream();//
+        // FileUtils.getInputStreamByUrl(htmlUrl);
         try {
             String htmlString = IoUtil.readToString(fileInputStream);
             Document doc = Jsoup.parse(htmlString, "UTF-8");
@@ -55,6 +59,7 @@ public class TableCoordinates {
                     // 计算绝对坐标
                     Map<String, Object> coord = new HashMap<>();
                     String cellName = cell.text().replaceAll("\\s+", "");
+                    System.out.println("cellName:"+cellName);
                     coord.put("name", cellName);
                     coord.put("x1", x);
                     coord.put("y1", y);
@@ -67,11 +72,11 @@ public class TableCoordinates {
                         scX2 = x + colspan - 1;
                         scY1 = y;
                         scY2 = y + rowspan - 1;
-                    } else if (cellName != null && cellName.indexOf("合格判定") >= 0) {
+                    } else if (cellName != null && (cellName.indexOf("合格判定") >= 0 || cellName.indexOf("判定合格") >= 0)) {
                         tableKeys.put("合格判定", coord);
                     } else if (cellName != null && cellName.indexOf("实测值或实测偏差值") >= 0) {
                         tableKeys.put("实测值或实测偏差值", coord);
-                    } else if (cellName != null && cellName.indexOf("项次") >= 0) {
+                    } else if (cellName != null && cellName.indexOf("项次") >= 0 || cellName.indexOf("次项") >= 0) {
                         tableKeys.put("项次", coord);
                     } else if (cellName != null && cellName.indexOf("检查项目") >= 0) {
                         tableKeys.put("检查项目", coord);
@@ -176,6 +181,8 @@ public class TableCoordinates {
                   System.out.println(reVal);
                 redata.add(reVal);
             }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
         }finally {
             fileInputStream.close();
         }