Procházet zdrojové kódy

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex

huangtf před 2 roky
rodič
revize
be7c261647
24 změnil soubory, kde provedl 468 přidání a 254 odebrání
  1. 7 3
      blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  2. 1 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/InformationQueryClient.java
  3. 1 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/InformationQueryVO.java
  4. 10 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormData.java
  5. 0 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java
  6. 0 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreePrivateClient.java
  7. 4 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractTreeAllVO.java
  8. 8 4
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveOfflineVersionInfoServiceImpl.java
  9. 130 12
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  10. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/InformationQueryClientImpl.java
  11. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  12. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/IInformationQueryService.java
  13. 6 3
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  14. 1 1
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java
  15. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  16. 7 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreePrivateClientImpl.java
  17. 5 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml
  18. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  19. 90 75
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  20. 27 20
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  21. 126 91
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  22. 4 14
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  23. 29 15
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  24. 5 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

+ 7 - 3
blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java

@@ -94,9 +94,13 @@ public class CommonUtil {
     public static InputStream getOSSInputStream(String urlStr) throws Exception {
         //获取OSS文件流
         URL imageUrl = new URL(urlStr);
-        HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
-        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
-        return conn.getInputStream();
+        try {
+            HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
+            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+            return conn.getInputStream();
+        }catch (Exception e){
+            return null;
+        }
     }
 
     /**

+ 1 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/InformationQueryClient.java

@@ -69,6 +69,6 @@ public interface InformationQueryClient {
 
     // 删除更新redis数据
     @PostMapping(API_PREFIX + "/delAsyncWbsTree")
-    void delAsyncWbsTree(@RequestParam String parentId, @RequestParam String contractId,@RequestParam String classifyType);
+    void delAsyncWbsTree(@RequestParam String contractId);
 
 }

+ 1 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/InformationQueryVO.java

@@ -41,6 +41,7 @@ public class InformationQueryVO extends InformationQuery {
 	@ApiModelProperty("当前页")
 	private int current;
 
+	@ApiModelProperty("节点pKeyId")
 	private List<String> wbsIds;
 
 	@ApiModelProperty("流程状态,中文")

+ 10 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormData.java

@@ -3,6 +3,7 @@ package org.springblade.manager.dto;
 
 
 import lombok.Data;
+import lombok.Setter;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.entity.Formula;
@@ -112,6 +113,15 @@ public class FormData {
     }
 
 
+
+    public void setOffset(Integer offset) {
+        this.offset = offset;
+        this.backup=new ArrayList<>(values);
+        this.values=values.stream().skip(this.offset).collect(Collectors.toList());
+    }
+
+
+
     public FormData(String code, Integer step, List<ElementData> values, Formula formula,String coords) {
         this.code = code;
         this.step = step;

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

@@ -9,7 +9,6 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;

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

@@ -1,6 +1,5 @@
 package org.springblade.manager.feign;
 
-import org.springblade.core.tool.api.R;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.vo.WbsTreeContractTreeVOS;
 import org.springblade.manager.vo.WbsTreePrivateVO;

+ 4 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractTreeAllVO.java

@@ -31,6 +31,10 @@ public class WbsTreeContractTreeAllVO implements INode<WbsTreeContractTreeAllVO>
 
     private String contractIdRelation;
 
+    private Integer type;
+
+    private Integer majorDataType;
+
     @ApiModelProperty("未填报1 、已填报-未上报2 、已填报-待审批3 、已审批4")
     private Integer colorStatus;
 

+ 8 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveOfflineVersionInfoServiceImpl.java

@@ -88,15 +88,19 @@ public class ArchiveOfflineVersionInfoServiceImpl extends BaseServiceImpl<Archiv
                     String fileUrl = file.getFileUrl();
                     String fileName = fileUrl.substring(fileUrl.lastIndexOf('/') + 1);
                     InputStream file_out = CommonUtil.getOSSInputStream(fileUrl);
-                    CommonUtil.inputStreamToFile(file_out, new File(localUrl + fileName));
-                    file.setFileUrl(fileName);
+                    if (file_out != null) {
+                        CommonUtil.inputStreamToFile(file_out, new File(localUrl + fileName));
+                        file.setFileUrl(fileName);
+                    }
                 }
                 if (StringUtil.isNotBlank(file.getPdfFileUrl())) {
                     String pdfFileUrl = file.getPdfFileUrl();
                     String fileName = pdfFileUrl.substring(pdfFileUrl.lastIndexOf('/') + 1);
                     InputStream file_out = CommonUtil.getOSSInputStream(pdfFileUrl);
-                    CommonUtil.inputStreamToFile(file_out, new File(localUrl + fileName));
-                    file.setPdfFileUrl(fileName);
+                    if (file_out != null) {
+                        CommonUtil.inputStreamToFile(file_out, new File(localUrl + fileName));
+                        file.setPdfFileUrl(fileName);
+                    }
                 }
             }
             try {

+ 130 - 12
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1504,7 +1504,7 @@ public class InformationWriteQueryController extends BladeController {
                     //结果集
                     List<WbsTreeContract> addNodeList = new ArrayList<>();//新增节点
                     List<WbsTreeContract> addTabList = new ArrayList<>(); //新增表单
-                    List<WbsTreeContract> asyncWbsTreeNodes = new ArrayList<>(); //redis同步节点
+                    //List<WbsTreeContract> asyncWbsTreeNodes = new ArrayList<>(); //redis同步节点
                     Set<WbsTreeContract> addChildNodesTablesOldAll = new HashSet<>(addChildNodesTables);//数据源表附件
                     Set<WbsTreeContract> addNewFileTabs = new HashSet<>(addChildNodesTables);//新增到目标表附件
                     List<String> resultTablesData = new ArrayList<>();//表单数据
@@ -1519,7 +1519,7 @@ public class InformationWriteQueryController extends BladeController {
                                 //首先查询需要复制的节点的信息
                                 WbsTreeContract toCopyNode = toCopyNodes.get(i);
                                 CopyContractTreeNodeVO.CopyBatch toCopyVO = copyBatches.get(i);
-                                asyncWbsTreeNodes.add(toCopyNode);
+                                //asyncWbsTreeNodes.add(toCopyNode);
                                 String finalTabOwner = tabOwner;
                                 executor.submit(() -> {
                                     if (toCopyNode != null && toCopyVO != null && needCopyNodeAndTabMap.size() > 0) {
@@ -1631,13 +1631,14 @@ public class InformationWriteQueryController extends BladeController {
                             jdbcTemplate.execute(StringUtils.join(strings, ""));
                         }
                     }
-                    if (row && asyncWbsTreeNodes.size() > 0) {
+                    if (row) {
                         //更新redis缓存
-                        List<WbsTreeContract> collect = asyncWbsTreeNodes.stream().distinct().collect(Collectors.toList());
+                        informationQueryService.delAsyncWbsTree(contractId);
+                        /*List<WbsTreeContract> collect = asyncWbsTreeNodes.stream().distinct().collect(Collectors.toList());
                         for (WbsTreeContract asyncWbsTreeNode : collect) {
                             informationQueryService.AsyncWbsTree("", asyncWbsTreeNode.getId() + "", contractId, "", "1");
                             informationQueryService.AsyncWbsTree("", asyncWbsTreeNode.getParentId() + "", contractId, "", "1");
-                        }
+                        }*/
                     }
                     return R.success("操作成功");
                 } else {
@@ -1708,8 +1709,7 @@ public class InformationWriteQueryController extends BladeController {
             }
             if (resultFileData.size() > 0) {
                 //入库
-                tableFileClient.saveBatch(resultFileData);
-                if (updatePKeyIds.size() > 0) {
+                if (tableFileClient.saveBatch(resultFileData) && updatePKeyIds.size() > 0) {
                     //修改表的文件按钮状态
                     wbsTreeContractClient.updateTabFileTypeByPkeyIds(updatePKeyIds);
                 }
@@ -2038,6 +2038,35 @@ public class InformationWriteQueryController extends BladeController {
         }
     }
 
+    /**
+     * 获取所有子级节点-资料查询
+     */
+    private List<WbsTreeContract> getChildNodesZL(WbsTreeContract obj) {
+        if (obj != null) {
+            List<WbsTreeContract> wbsTreeContracts = Collections.singletonList(obj);
+            List<WbsTreeContract> result = new ArrayList<>();
+            this.recursionGetChildNodesZL(wbsTreeContracts, result, obj.getContractId());
+            if (result.size() > 0) {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 递归获取所有子级节点-资料查询
+     */
+    private void recursionGetChildNodesZL(List<WbsTreeContract> list, List<WbsTreeContract> result, String contractId) {
+        List<Long> ids = list.stream().map(WbsTreeContract::getId).collect(Collectors.toList());
+        if (ids.size() > 0) {
+            List<WbsTreeContract> query = jdbcTemplate.query("select full_name,id,p_key_id,parent_id,sort from m_wbs_tree_contract where type = 1 and parent_id in(" + StringUtils.join(ids, ",") + ") and status = 1 and is_deleted = 0 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            if (query.size() > 0) {
+                result.addAll(query);
+                recursionGetChildNodesZL(query, result, contractId);
+            }
+        }
+    }
+
     /**
      * 获取所有子级下的表
      */
@@ -2640,6 +2669,10 @@ public class InformationWriteQueryController extends BladeController {
         //保存集合
         List<WbsTreeContract> saveList = new ArrayList<>();
         List<ConstructionLedger> saveLedger = new ArrayList<>();
+        //原始表ids,电签位置信息使用
+        List<Long> oldTabIds = selectedNodeList.stream().filter(f -> new Integer(2).equals(f.getType())).map(WbsTreeContract::getId).collect(Collectors.toList());
+
+        //构造参数
         if (selectedNodeList.size() > 0) {
             //重塑关键信息
             Map<Long, Long> OldIdToNewIdMap = new HashMap<>();
@@ -2745,14 +2778,43 @@ public class InformationWriteQueryController extends BladeController {
         //更新redis
         informationQueryService.AsyncWbsTree(treeContract.getId() + "", treeContract.getId() + "", treeContract.getContractId(), "", "1");
         informationQueryService.AsyncWbsTree(treeContract.getParentId() + "", treeContract.getParentId() + "", treeContract.getContractId(), "", "1");
+
+        //获取电签信息、默认信息
+        List<WbsTreeContract> nowTabs = saveList.stream().filter(f -> new Integer(2).equals(f.getType())).collect(Collectors.toList());
+        this.updateTextDictInfos(nowTabs, oldTabIds, vo.getProjectId());
+
         return booleanR;
     }
 
+
+    @Async
+    public void updateTextDictInfos(List<WbsTreeContract> nowTabs, List<Long> oldTabIds, String projectId) {
+        if (oldTabIds.size() > 0) {
+            List<WbsTreePrivate> tabs = jdbcTemplate.query("select p_key_id,id,html_url,excel_id,init_table_name from m_wbs_tree_private where type = 2 and status = 1 and is_deleted = 0 and id in(" + StringUtils.join(oldTabIds, ",") + ") and project_id =" + projectId, new BeanPropertyRowMapper<>(WbsTreePrivate.class));
+            Map<Long, WbsTreeContract> nowTabMaps = nowTabs.stream().collect(Collectors.toMap(WbsTreeContract::getId, wbsTreeContract -> wbsTreeContract, (obj1, obj2) -> obj1));
+            List<String> resultSQL = new ArrayList<>();
+            for (WbsTreePrivate tab : tabs) {
+                WbsTreeContract nowTab = nowTabMaps.get(tab.getId());
+                if (nowTab != null) {
+                    nowTab.setHtmlUrl(tab.getHtmlUrl());
+                    nowTab.setExcelId(tab.getExcelId());
+                    nowTab.setInitTableName(tab.getInitTableName());
+                    String updateSql = "update m_wbs_tree_contract set html_url = '" + nowTab.getHtmlUrl() + "',excel_id = " + nowTab.getExcelId() + ",init_table_name = '" + nowTab.getInitTableName() + "' where p_key_id = " + nowTab.getPKeyId();
+                    resultSQL.add(updateSql);
+                }
+            }
+            if (resultSQL.size() > 0) {
+                jdbcTemplate.update(StringUtils.join(resultSQL, ";"));
+            }
+        }
+    }
+
     private List<WbsTreeContract> unifiedCode(List<AddContractTreeNodeVO.Node> allSelectedNodeList, WbsTreeContract treeContract, String saveType) {
         //获取主键
         List<Long> halfSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).map(Long::parseLong).distinct().collect(Collectors.toList());
         //查询数据
-        List<WbsTreeContract> selectedNodeList = this.wbsTreeContractClient.queryContractTreeNodeByPKIds(halfSelectedList);
+        List<WbsTreeContract> selectedNodeList = jdbcTemplate.query("select * from m_wbs_tree_contract where status = 1 and is_deleted = 0 and p_key_id in(" + StringUtils.join(halfSelectedList, ",") + ")", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+
         //剔除与当前操作节点相同的ID,(如果saveType=1,表示当前及子级节点,那么就要剔除自己本身,否则视为仅当前节点操作,会存在自己本身)
         if (("1").equals(saveType)) {
             selectedNodeList.removeIf(wbsTreePrivate -> treeContract.getId().equals(wbsTreePrivate.getId()) || treeContract.getOldId().equals(wbsTreePrivate.getId().toString()));
@@ -2838,10 +2900,8 @@ public class InformationWriteQueryController extends BladeController {
      */
     private void foreachQueryChild(List<WbsTreeContract> parentList, List<WbsTreeContract> childList) {
         parentList.forEach(parent -> {
-            //List<WbsTreeContract> childS = this.wbsTreeContractClient.queryChildByParentId(parent, "", "");
-
             //只获取原始表,不获取复制的表(业务说是从项目wbs处取表,目前直接从当前合同段取原始表,也是一样的)
-            List<WbsTreeContract> childS = jdbcTemplate.query("select * from m_wbs_tree_contract where is_cope_tab is null and is_deleted = 0 and parent_id = " + parent.getId() + " and contract_id = " + parent.getContractId(), new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            List<WbsTreeContract> childS = jdbcTemplate.query("select * from m_wbs_tree_contract where parent_id = " + parent.getId() + " and contract_id = " + parent.getContractId() + " and is_deleted = 0 and is_cope_tab is null", new BeanPropertyRowMapper<>(WbsTreeContract.class));
             if (childS.size() > 0) {
                 //添加入结果集
                 childList.addAll(childS);
@@ -3064,7 +3124,65 @@ public class InformationWriteQueryController extends BladeController {
             vo.setContractId(Long.valueOf(vo.getContractIdRelation()));
         }
 
-        return R.data(this.informationQueryService.selectInformationQueryPage(Condition.getPage(query), vo));
+        IPage<InformationQueryVO> resultPageData = this.informationQueryService.selectInformationQueryPage(Condition.getPage(query), vo);
+
+        //TODO 处理资料查询,page数据与节点顺序同步问题
+        //获取选择的节点下的所有子节点信息
+        /*WbsTreeContract oldSelectedNode = BeanUtil.copyProperties(node, WbsTreeContract.class);
+        List<WbsTreeContract> treeAll = this.getChildNodesZL(oldSelectedNode);
+        if (treeAll == null) {
+            treeAll = new ArrayList<>();
+        }
+        treeAll.add(oldSelectedNode);
+
+        if (treeAll.size() == 1) { //最底层节点,直接返回
+            return R.data(resultPageData);
+        } else {
+            List<InformationQueryVO> resultData = new ArrayList<>();
+            if (oldSelectedNode != null) {
+                List<WbsTreeContract> resultNodes = this.reOrderNode(treeAll, oldSelectedNode);
+                Map<Long, InformationQueryVO> dataMaps = resultPageData.getRecords().stream().collect(Collectors.toMap(InformationQueryVO::getWbsId, Function.identity()));
+                for (WbsTreeContract resultNode : resultNodes) {
+                    InformationQueryVO queryVO = dataMaps.get(resultNode.getPKeyId());
+                    if (queryVO != null) {
+                        resultData.add(queryVO);
+                    }
+                }
+            }
+            if (resultData.size() > 0) {
+                return R.data(resultPageData.setRecords(resultData));
+            } else {*/
+        return R.data(resultPageData);
+        //}
+        //}
+    }
+
+    /**
+     * 节点重新排序
+     */
+    private List<WbsTreeContract> reOrderNode(List<WbsTreeContract> inList, WbsTreeContract oldSelectedNode) {
+        Map<Long, List<WbsTreeContract>> parentGroup = inList.stream().collect(Collectors.groupingBy(WbsTreeContract::getParentId));
+        Long parentId = oldSelectedNode.getId();
+        return getSubNodes(parentId, parentGroup);
+    }
+
+    private List<WbsTreeContract> getSubNodes(Long parentId, Map<Long, List<WbsTreeContract>> parentGroup) {
+        List<WbsTreeContract> subNodes = new ArrayList<>();
+        if (parentGroup.containsKey(parentId)) {
+            List<WbsTreeContract> children = parentGroup.get(parentId);
+            for (WbsTreeContract child : children) {
+                List<WbsTreeContract> grandChildren = this.getSubNodes(child.getId(), parentGroup);
+                subNodes.addAll(grandChildren);
+            }
+            subNodes.addAll(children);
+        }
+        subNodes.sort(
+                Comparator.comparingInt((WbsTreeContract node) -> node.getSort() == null ? Integer.MAX_VALUE : node.getSort())
+                        .thenComparing(Comparator.nullsLast(Comparator.comparing(WbsTreeContract::getFullName)))
+                        .thenComparingLong(node -> node.getPKeyId() == null ? Long.MAX_VALUE : node.getPKeyId())
+                        .thenComparing(Comparator.nullsLast(Comparator.comparing(WbsTreeContract::getUpdateTime)))
+        );
+        return subNodes;
     }
 
     /**

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

@@ -81,8 +81,8 @@ public class InformationQueryClientImpl implements InformationQueryClient {
     }
 
     @Override
-    public void delAsyncWbsTree(String parentId, String contractId, String classifyType) {
-        iInformationQueryService.delAsyncWbsTree(parentId,contractId,classifyType);
+    public void delAsyncWbsTree(String contractId) {
+        iInformationQueryService.delAsyncWbsTree(contractId);
     }
 
 }

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

@@ -305,7 +305,7 @@
         and wtc.node_type != 111
         and wtc.type = 1
         and wtc.is_deleted= '0'
-        ORDER BY wtc.sort,wtc.create_time
+        ORDER BY wtc.sort,title,wtc.create_time
     </select>
     <!--
 

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

@@ -136,6 +136,6 @@ public interface IInformationQueryService extends BaseService<InformationQuery>
     void  AsyncWbsTree(String primaryKeyId,String parentId,String contractId,String contractIdRelation,String classifyType);
 
     //删除变更节点
-    void  delAsyncWbsTree(String parentId, String contractId, String classifyType);
+    void  delAsyncWbsTree(String contractId);
 
 }

+ 6 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -730,9 +730,12 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
     }
 
     @Override
-    public void delAsyncWbsTree(String parentId, String contractId, String classifyType) {
-        String dataInfoId = contractId + "_" + parentId + "_" + classifyType;
-        RedisTemplate.delete("blade-manager::contract:wbstree:" + dataInfoId);
+    public void delAsyncWbsTree(String contractId) {
+        //模糊匹配所有以contractId开头的所有key值
+        Set<String> keys = RedisTemplate.keys("blade-manager::contract:wbstree:" + contractId + "*");
+        if (keys != null) {
+            RedisTemplate.delete(keys);
+        }
     }
 
 }

+ 1 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -349,7 +349,7 @@ public class FormulaUtils {
 
 
     private static boolean isContainKeywords(String s) {
-        List<String> keywords = Arrays.asList("或", "每", "个","附录");
+        List<String> keywords = Arrays.asList("或", "每", "个","附录","抽查","测","量");
         return keywords.stream().anyMatch(s::contains);
     }
 

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java

@@ -22,6 +22,7 @@ import org.springblade.system.feign.ISysClient;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 @RestController
 @AllArgsConstructor
@@ -104,7 +105,7 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
             return this.wbsTreeContractService.list(wrapper);
         } else {
             //.eq(WbsTreeContract::getType, "1")
-            return this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getParentId, treeNode.getId()).eq(WbsTreeContract::getContractId, treeNode.getContractId()).eq(WbsTreeContract::getStatus,1));
+            return this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getParentId, treeNode.getId()).eq(WbsTreeContract::getContractId, treeNode.getContractId()).eq(WbsTreeContract::getStatus, 1));
         }
     }
 

+ 7 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreePrivateClientImpl.java

@@ -14,11 +14,12 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.manager.entity.TableFile;
-import org.springblade.manager.entity.TrialSelfDataRecord;
-import org.springblade.manager.entity.WbsTreePrivate;
+import org.springblade.manager.entity.*;
+import org.springblade.manager.mapper.WbsTreeContractMapper;
 import org.springblade.manager.service.IWbsTreePrivateService;
 import org.springblade.manager.service.impl.ExcelTabServiceImpl;
+import org.springblade.manager.service.impl.TextdictInfoServiceImpl;
+import org.springblade.manager.service.impl.WbsTreeContractServiceImpl;
 import org.springblade.manager.vo.WbsTreeContractTreeVOS;
 import org.springblade.manager.vo.WbsTreePrivateVO;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
@@ -27,6 +28,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @RestController
@@ -37,6 +39,8 @@ public class WbsTreePrivateClientImpl implements WbsTreePrivateClient {
     private final JdbcTemplate jdbcTemplate;
     private final TableFileClientImpl tableFileClient;
     private final ExcelTabServiceImpl excelTabServiceImpl;
+    private final TextdictInfoServiceImpl textDictInfoService;
+    private final WbsTreeContractServiceImpl wbsTreeContractService;
 
     @Override
     public List<WbsTreePrivate> queryAllNodeByProjectId(String projectId) {

+ 5 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml

@@ -430,14 +430,17 @@
         partition_code,
         node_type,
         sort,
-        d.contract_id AS contractIdRelation
+        d.contract_id AS contractIdRelation,
+        d.type,
+        d.major_data_type AS majorDataType,
+        d.create_time
         FROM m_wbs_tree_contract d
         WHERE
          contract_id = #{contractId}
         AND d.type = 1
         AND d.status = 1
         AND d.is_deleted = 0
-        ORDER BY d.sort
+        ORDER BY d.sort,title,d.create_time
     </select>
 
     <select id="tree6" resultMap="treeNodeResultMap6">

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -577,6 +577,7 @@
                 table_type = #{item.tableType},
                 table_owner = #{item.tableOwner},
                 html_url = #{item.htmlUrl},
+                excel_id = #{item.excelId},
                 sort = #{item.sort}
             </set>
             WHERE id = #{item.id}

+ 90 - 75
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -184,23 +184,23 @@
 
     <update id="updateByPKeyId">
         update m_wbs_tree_private
-        set tenant_id       = #{wbsTP.tenantId},
-            parent_id       = #{wbsTP.parentId},
-            node_type       = #{wbsTP.nodeType},
-            node_name       = #{wbsTP.nodeName},
-            full_name       = #{wbsTP.nodeName},
-            ancestors       = #{wbsTP.ancestors},
-            unique_code     = #{wbsTP.uniqueCode},
-            partition_code  = #{wbsTP.partitionCode},
-            major_data_type = #{wbsTP.majorDataType},
-            create_user     = #{wbsTP.createUser},
-            create_dept     = #{wbsTP.createDept},
-            create_time     = #{wbsTP.createTime},
-            update_user     = #{wbsTP.updateUser},
-            update_time     = #{wbsTP.updateTime},
+        set tenant_id          = #{wbsTP.tenantId},
+            parent_id          = #{wbsTP.parentId},
+            node_type          = #{wbsTP.nodeType},
+            node_name          = #{wbsTP.nodeName},
+            full_name          = #{wbsTP.nodeName},
+            ancestors          = #{wbsTP.ancestors},
+            unique_code        = #{wbsTP.uniqueCode},
+            partition_code     = #{wbsTP.partitionCode},
+            major_data_type    = #{wbsTP.majorDataType},
+            create_user        = #{wbsTP.createUser},
+            create_dept        = #{wbsTP.createDept},
+            create_time        = #{wbsTP.createTime},
+            update_user        = #{wbsTP.updateUser},
+            update_time        = #{wbsTP.updateTime},
             mix_ratio_test_ids = #{wbsTP.mixRatioTestIds},
-            status          = 1,
-            is_deleted      = 0
+            status             = 1,
+            is_deleted         = 0
         where p_key_id = #{pKeyId}
     </update>
 
@@ -296,6 +296,7 @@
                 init_table_name = #{item.initTableName},
                 init_table_id = #{item.initTableId},
                 html_url = #{item.htmlUrl},
+                excel_id = #{item.excelId},
                 sort = #{item.sort}
             </set>
             WHERE id = #{item.id}
@@ -449,25 +450,31 @@
           AND project_id = #{projectId}
     </select>
     <select id="selectByNodeTable" resultType="org.springblade.manager.vo.WbsNodeTableVO">
-        SELECT wt.p_key_id AS "pKeyId",
-               wt.id AS id,
-               wt.wbs_type AS wbsType,
-               wt.node_name AS tableName,
-               case when wt.table_type in(1,9) then 1
-                    when wt.table_type in(2,10) then 2
-                    else wt.table_type
-                       end as tableType,
-               wt.`status` AS isCreateTable,
-               wt.table_owner AS tableOwner,
+        SELECT wt.p_key_id            AS "pKeyId",
+               wt.id                  AS id,
+               wt.wbs_type            AS wbsType,
+               wt.node_name           AS tableName,
+               wt.full_name,
+               wt.update_time,
+               case
+                   when wt.table_type in (1, 9) then 1
+                   when wt.table_type in (2, 10) then 2
+                   else wt.table_type
+                   end                as tableType,
+               wt.`status`            AS isCreateTable,
+               wt.table_owner         AS tableOwner,
                wt.is_link_table,
                wt.init_table_name,
-               wt.init_table_id as initTableId,
-               wt.excel_id AS excelId,
+               wt.init_table_id       as initTableId,
+               wt.excel_id            AS excelId,
                wt.sort,
                wt.status,
-               wt.fill_rate AS "fillRate",
-               wt.html_url AS htmlUrl,
-               (SELECT count(1) FROM m_wbs_form_element WHERE f_id = wt.init_table_id and is_deleted=0) AS "elementTotal"
+               wt.fill_rate           AS "fillRate",
+               wt.html_url            AS htmlUrl,
+               (SELECT count(1)
+                FROM m_wbs_form_element
+                WHERE f_id = wt.init_table_id
+                  and is_deleted = 0) AS "elementTotal"
         FROM m_wbs_tree_private AS wt
         WHERE wt.type = 2
           AND wt.is_deleted = 0
@@ -476,7 +483,7 @@
           AND wt.project_id = #{projectId}
           AND wt.trial_tab_contract_id is null
           AND (wt.wbs_type != 2 OR wt.table_type IN (1,2,9,10))
-        ORDER BY wt.sort, wt.node_name, wt.create_time
+        ORDER BY wt.sort, wt.full_name, wt.p_key_id, wt.update_time
     </select>
     <select id="getByCondition" resultType="org.springblade.manager.entity.WbsTreePrivate">
         SELECT *
@@ -588,7 +595,7 @@
                wt.excel_id                                                  as excelId,
                wt.sort,
                wt.status,
-               wt.parent_id AS parentId,
+               wt.parent_id                                                 AS parentId,
                (SELECT count(1) FROM m_wbs_form_element WHERE f_id = wt.id) AS "elementTotal"
         FROM m_wbs_tree_private AS wt
         WHERE wt.type = 2
@@ -651,7 +658,8 @@
 
     <!-- 项目级 表单类型分类 wbs树 -->
     <select id="tabTypeLazyTreeAll" resultMap="treeNodeResultMapTabType">
-        SELECT p_key_id as id,p_key_id as primaryKeyId,title,parent_id,fill_rate as fillRate,0 as excelIds,initTableId,initTableName,
+        SELECT p_key_id as id,p_key_id as primaryKeyId,title,parent_id,fill_rate as fillRate,0 as
+        excelIds,initTableId,initTableName,
         (SELECT dict_value from blade_dict where code='table_type' and dict_key not in(-1,0) and dict_key=table_type )
         as tabType,
         (SELECT count(1) FROM m_wbs_form_element WHERE f_id = initTableId and is_deleted=0) AS "elementTotal",
@@ -677,7 +685,8 @@
         table_owner,0 as initTableId,0 as initTableName
         union all
         SELECT dict_key as p_key_id ,dict_value as title,'12345678910' as parent_id,0 as table_type,0 as fill_rate,0 as
-        table_owner,0 as initTableId,0 as initTableName from blade_dict where code='table_type' and dict_key not in(-1,0)
+        table_owner,0 as initTableId,0 as initTableName from blade_dict where code='table_type' and dict_key not
+        in(-1,0)
         union all
         SELECT id as p_key_id,tab_ch_name as title,tab_type as parent_id,tab_type as table_type,fill_rate,table_owner,id
         as initTableId,tab_en_name as initTableName from m_table_info WHERE is_deleted=0
@@ -693,41 +702,41 @@
 
     <select id="selectWbsTreeTrialTabList" resultType="org.springblade.manager.vo.WbsTreePrivateVO4">
         SELECT
-            p_key_id,
-            node_name,
-            node_type,
-            is_link_table,
-            is_tab_pdf,
-            is_buss_show,
-            tab_file_type,
-            wbs_id,
-            wbs_type,
-            html_url,
-            excel_id,
-            project_id,
-            type,
-            case when table_type = 9 then 1
-                 when table_type = 10 then 2
-                 end as tableType,
-            table_owner,
-            init_table_name,
-            init_table_id,
-            fill_rate,
-            pdf_url,
-            sort,
-            create_time,
-            (CASE WHEN locate('__',node_name) > 0 THEN 1 ELSE 0 END) AS isCopyTab
+        p_key_id,
+        node_name,
+        node_type,
+        is_link_table,
+        is_tab_pdf,
+        is_buss_show,
+        tab_file_type,
+        wbs_id,
+        wbs_type,
+        html_url,
+        excel_id,
+        project_id,
+        type,
+        case when table_type = 9 then 1
+        when table_type = 10 then 2
+        end as tableType,
+        table_owner,
+        init_table_name,
+        init_table_id,
+        fill_rate,
+        pdf_url,
+        sort,
+        create_time,
+        (CASE WHEN locate('__',node_name) > 0 THEN 1 ELSE 0 END) AS isCopyTab
         FROM
-            m_wbs_tree_private
+        m_wbs_tree_private
         WHERE project_id = #{projectId}
-            AND wbs_id = #{wbsId}
-            AND parent_id = #{parentId}
-            AND table_type = #{tableType}
-            AND type = 2
-            AND status = 1
-            AND is_deleted = 0
-            /*试验所属方=7*/
-            AND table_owner = 7
+        AND wbs_id = #{wbsId}
+        AND parent_id = #{parentId}
+        AND table_type = #{tableType}
+        AND type = 2
+        AND status = 1
+        AND is_deleted = 0
+        /*试验所属方=7*/
+        AND table_owner = 7
         /*解决不同合同段中复制表问题*/
         <if test="contractId == null">
             -- 后管加载原始表
@@ -741,14 +750,15 @@
     </select>
 
     <select id="selectTabInfoAll" resultType="org.springblade.manager.entity.TableInfo">
-        select * from m_table_info
+        select *
+        from m_table_info
     </select>
 
     <select id="treeRecordTrial" resultType="org.springblade.manager.vo.WbsTreePrivateVO5">
-        select  id, parent_id,
-                node_name as title,
-                node_type AS "nodeType",
-                wbs_type as "wbsType"
+        select id, parent_id,
+        node_name as title,
+        node_type AS "nodeType",
+        wbs_type as "wbsType"
         from m_wbs_tree_private
         where
         is_deleted = 0
@@ -763,11 +773,16 @@
     </select>
 
     <delete id="delTabProjectById">
-        delete from m_wbs_tree_private WHERE p_key_id = #{pKeyId} and project_id=#{projectId}AND type = 10
+        delete
+        from m_wbs_tree_private
+        WHERE p_key_id = #{pKeyId}
+          and project_id = #{projectId}AND type = 10
     </delete>
 
     <delete id="delTableById">
-        delete from m_table_info WHERE id = #{pKeyId}
+        delete
+        from m_table_info
+        WHERE id = #{pKeyId}
     </delete>
 
 </mapper>

+ 27 - 20
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -135,24 +135,24 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     @Override
     public List<WbsTreeContractTreeAllVO> tree3(String contractId, Integer type) {
         List<WbsTreeContractTreeAllVO> wbsTreeContractVOS = baseMapper.tree5(Long.parseLong(contractId));
-//        if (ObjectUtils.isNotEmpty(type) && type == 1) {
-        //获取所有已填报信息
-  /*      Map<String, Long> allTable = informationQueryClient.getTreeAllTable(contractId);
-        Set<String> keySet = allTable.keySet();
-        for (String key : keySet) {
-            for (WbsTreeContractTreeAllVO vo : wbsTreeContractVOS) {
-                if (key.equals(vo.getId() + "")) {
-                    vo.setSubmitCounts(allTable.get(key));
-                    vo.setColorStatus(2);
+        /*if (ObjectUtils.isNotEmpty(type) && type == 1) {
+            //获取所有已填报信息
+            Map<String, Long> allTable = informationQueryClient.getTreeAllTable(contractId);
+            Set<String> keySet = allTable.keySet();
+            for (String key : keySet) {
+                for (WbsTreeContractTreeAllVO vo : wbsTreeContractVOS) {
+                    if (key.equals(vo.getId() + "")) {
+                        vo.setSubmitCounts(allTable.get(key));
+                        vo.setColorStatus(2);
+                    }
                 }
             }
-        }
-        wbsTreeContractVOS.stream().forEach(wtc -> {
-            if (wtc.getSubmitCounts() == null) {
-                wtc.setSubmitCounts(0L);
-            }
-        });*/
-//        }
+            wbsTreeContractVOS.stream().forEach(wtc -> {
+                if (wtc.getSubmitCounts() == null) {
+                    wtc.setSubmitCounts(0L);
+                }
+            });
+        }*/
         return buildWbsTreeByStreamByTreeAll(wbsTreeContractVOS);
     }
 
@@ -384,10 +384,10 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
             if (contractInfo.getContractType().equals(2) || contractInfo.getContractType().equals(3)) {
                 if (contractInfo.getIdList().size() > 0) {
                     List<WbsTreeContractVO3> infos = contractInfo.getIdList();
-                    infos.forEach(info -> {
+                    for (WbsTreeContractVO3 info : infos) {
                         //新增关系记录
                         baseMapper.insertContractRelationJLYZ(SnowFlakeUtil.getId(), contractInfo.getId(), info.getContractId());
-                    });
+                    }
                 }
 
                 //中西试验室
@@ -417,9 +417,16 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
                 List<String> updateId_SG = contractInfo.getIdList().stream().map(WbsTreeContractVO3::getContractId).collect(Collectors.toList());
                 //删除新增记录信息
                 baseMapper.deleteContractRelationJLYZ(contractInfo.getId());
-                updateId_SG.forEach(id -> {
+                for (String id : updateId_SG) {
                     baseMapper.insertContractRelationJLYZ(SnowFlakeUtil.getId(), contractInfo.getId(), id);
-                });
+                }
+
+                //更新redis树缓存
+                for (Long id : contractInfosSGAll) {
+                    informationQueryClient.delAsyncWbsTree(id + "");
+                }
+                //当前合同段树缓存
+                informationQueryClient.delAsyncWbsTree(contractInfo.getId() + "");
 
                 //当前关联的施工合同段ids
                 String sql = "select * from m_contract_relation_jlyz where contract_id_jlyz = " + contractInfo.getId();

+ 126 - 91
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -75,7 +75,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     private final ITextdictInfoService textDictInfoService;
     private final IFormulaDataBlockService formulaDataBlockService;
 
-    /**  private final Container env;*/
     private   TableElementConverter tec;
 //    private   Map<String,Object> constantMap;
 //    private   List<FormData> formDataList;
@@ -184,7 +183,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         /*公式参数*/
         FormulaOption formulaOption = this.formulaOptionService.getOne(Wrappers.<FormulaOption>lambdaQuery().eq(FormulaOption::getParentId,one.getRelateId()).eq(FormulaOption::getContractId,contractId));
         if(formulaOption!=null){
-           /*数据格式 {tablename:{keyxxx:{option:[1|0]}}}*/
            tec.constantMap.put(FMOT,JSON.parseObject(formulaOption.getVal(),LinkedHashMap.class));
         }
         /*评定表*/
@@ -207,6 +205,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
     public Long findFirstParentId(){
+        /*分项实测项目锚定点*/
         int max=10;
         int loop=0;
         Long parentId= tec.getCurrentNode().getParentId();
@@ -223,72 +222,73 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         }
         return parentId;
     }
-
+    /*评定表处理*/
     public void assessmentForm(){
-        if(tec.getTableAll().stream().anyMatch(e->StringUtils.isEquals(e.getTableType(),5))){
-            /*评定节点*/
-            FormulaDataBlock fdb = findFdb();
-            if(!StringUtils.isEquals("[]",fdb.getVal())){
-                List<ElementBlock> elementBlockList =JSON.parseArray(fdb.getVal(),ElementBlock.class);
-                Map<String, Measurement> itemsMap = new HashMap<>();
-                this.formDataMap.values().forEach(e->{
-                    String eName=e.getEName();
-                    if(eName.contains("实测")&&!eName.contains("平均")&&!eName.contains("率")&&!eName.contains("判")){
-                        String point  =FormulaUtils.parseItemName(eName);
-                        /*评定匹配检验单的元素用相似匹配*/
-                        Measurement measurement = itemsMap.computeIfAbsent(point,k->new Measurement(point));
-                        measurement.setValue(e);
-                    }
-                });
-                if(itemsMap.size()>0){
-                    /*表内用同行匹配*/
-                    List<FormData> primary =  tec.getFormDataMap().values().stream().filter(v -> v.getEName().contains("率") || v.getEName().contains("判")).collect(Collectors.toList());
-                    itemsMap.values().forEach(i->{
-                        FormData vf = i.getValue();
-                        primary.stream().filter(p->vf.getMaxRow().equals(p.getMaxRow()) && vf.getTableName().equals(p.getTableName())).forEach(t->{
-                            if (t.getEName().contains("率") ) {
-                                i.setPass(t);
-                            } else if (t.getEName().contains("判")) {
-                                i.setJudge(t);
-                            }
-                        });
-                    });
-                    AtomicBoolean update= new AtomicBoolean(false);
-                    itemsMap.values().stream().filter(Measurement::isMatching).forEach(t->{
-                        ElementBlock g=null;
-                        FormData vfd=t.getValue();
-                        if(vfd.executable()&&vfd.getFormula().getRelyList()!=null){
-                            List<String> relyList = vfd.getFormula().getRelyList();
-                            /*先从公式去匹配*/
-                           Optional<ElementBlock> op= elementBlockList.stream().filter(e->relyList.contains(e.getCode())).findAny();
-                           if(op.isPresent()){
-                               g=op.get();
-                           }
+        try {
+            if (tec.getTableAll().stream().anyMatch(e -> StringUtils.isEquals(e.getTableType(), 5))) {
+                /*评定节点*/
+                FormulaDataBlock fdb = findFdb();
+                if (!StringUtils.isEquals("[]", fdb.getVal())) {
+                    List<ElementBlock> elementBlockList = JSON.parseArray(fdb.getVal(), ElementBlock.class);
+                    Map<String, Measurement> itemsMap = new HashMap<>();
+                    this.formDataMap.values().forEach(e -> {
+                        String eName = e.getEName();
+                        if (eName.contains("实测") && !eName.contains("平均") && !eName.contains("率") && !eName.contains("判")) {
+                            String point = FormulaUtils.parseItemName(eName);
+                            /*评定匹配检验单的元素用相似匹配*/
+                            Measurement measurement = itemsMap.computeIfAbsent(point, k -> new Measurement(point));
+                            measurement.setValue(e);
                         }
-                        if(g==null){
-                            Optional<ElementBlock> op= elementBlockList.stream().filter(w->FormulaUtils.similarity(w.getEName(),t.getPoint())>0.6).max(Comparator.comparingDouble((ElementBlock b)->FormulaUtils.similarity(b.getEName(),t.getPoint())));
-                            /*相似匹配*/
-                            if(op.isPresent()){
-                                g=op.get();
+                    });
+                    if (itemsMap.size() > 0) {
+                        /*表内用同行匹配*/
+                        List<FormData> primary = tec.getFormDataMap().values().stream().filter(v -> v.getEName().contains("率") || v.getEName().contains("判")).collect(Collectors.toList());
+                        itemsMap.values().forEach(i -> {
+                            FormData vf = i.getValue();
+                            primary.stream().filter(p -> vf.getMaxRow().equals(p.getMaxRow()) && vf.getTableName().equals(p.getTableName())).forEach(t -> {
+                                if (t.getEName().contains("率")) {
+                                    i.setPass(t);
+                                } else if (t.getEName().contains("判")) {
+                                    i.setJudge(t);
+                                }
+                            });
+                        });
+                        AtomicBoolean update = new AtomicBoolean(false);
+                        itemsMap.values().stream().filter(Measurement::isMatching).forEach(t -> {
+                            ElementBlock g = null;
+                            FormData vfd = t.getValue();
+                            if (vfd.executable() && vfd.getFormula().getRelyList() != null) {
+                                List<String> relyList = vfd.getFormula().getRelyList();
+                                /*先从公式去匹配*/
+                                Optional<ElementBlock> op = elementBlockList.stream().filter(e -> relyList.contains(e.getCode())).findAny();
+                                if (op.isPresent()) {
+                                    g = op.get();
+                                }
                             }
-                        }
-                        if(g!=null){
-                            List<ItemBlock> itemBlockList =g.getList();
-                            int originSize=itemBlockList.size();
-                            List<Long> ids = this.jdbcTemplate.queryForList("select b.p_key_id from m_wbs_tree_contract a join m_wbs_tree_contract b on (a.parent_id=b.parent_id and a.contract_id=b.contract_id) where a.p_key_id="+tec.getCurrentNode().getPkId()+" and b.is_deleted=0 and b.node_type=6",Long.class);
-                            itemBlockList.removeIf(ik->!ids.contains(ik.getPkeyId()));
-                            if(itemBlockList.size()>0){
-                                int total=itemBlockList.stream().mapToInt(ItemBlock::getSubTotal).sum();
-                                int passNum=itemBlockList.stream().mapToInt(ItemBlock::getSubPass).sum();
-                                double passRate=100*(double)passNum/(double) total;
-                                FormulaUtils.write(t.getPass(),StringUtils.number2String(passRate,1),false);
-                                if(passRate>=60){
-                                    FormulaUtils.write(t.getJudge(),"合格",false);
+                            if (g == null) {
+                                Optional<ElementBlock> op = elementBlockList.stream().filter(w -> FormulaUtils.similarity(w.getEName(), t.getPoint()) > 0.6).max(Comparator.comparingDouble((ElementBlock b) -> FormulaUtils.similarity(b.getEName(), t.getPoint())));
+                                /*相似匹配*/
+                                if (op.isPresent()) {
+                                    g = op.get();
                                 }
-                                itemBlockList.sort(Comparator.comparingInt(a->ids.indexOf(a.getPkeyId())));
-                                List<String> values=itemBlockList.stream().map(ItemBlock::getData).flatMap(v->v.stream().flatMap(Collection::stream)).map(Object::toString).collect(Collectors.toList());
-                                int scale = StringUtils.getScale(values);
-                                FormulaUtils.write(t.getValue(),values.stream().map(u->StringUtils.number2String(u,scale)).collect(Collectors.toList()), true);
+                            }
+                            if (g != null) {
+                                List<ItemBlock> itemBlockList = g.getList();
+                                int originSize = itemBlockList.size();
+                                List<Long> ids = this.jdbcTemplate.queryForList("select b.p_key_id from m_wbs_tree_contract a join m_wbs_tree_contract b on (a.parent_id=b.parent_id and a.contract_id=b.contract_id) where a.p_key_id=" + tec.getCurrentNode().getPkId() + " and b.is_deleted=0 and b.node_type=6", Long.class);
+                                itemBlockList.removeIf(ik -> !ids.contains(ik.getPkeyId()));
+                                if (itemBlockList.size() > 0) {
+                                    int total = itemBlockList.stream().mapToInt(ItemBlock::getSubTotal).sum();
+                                    int passNum = itemBlockList.stream().mapToInt(ItemBlock::getSubPass).sum();
+                                    double passRate = 100 * (double) passNum / (double) total;
+                                    FormulaUtils.write(t.getPass(), StringUtils.number2String(passRate, 1), false);
+                                    if (passRate >= 60) {
+                                        FormulaUtils.write(t.getJudge(), "合格", false);
+                                    }
+                                    itemBlockList.sort(Comparator.comparingInt(a -> ids.indexOf(a.getPkeyId())));
+                                    List<String> values = itemBlockList.stream().map(ItemBlock::getData).flatMap(v -> v.stream().flatMap(Collection::stream)).map(Object::toString).collect(Collectors.toList());
+                                    int scale = StringUtils.getScale(values);
+                                    FormulaUtils.write(t.getValue(), values.stream().map(u -> StringUtils.number2String(u, scale)).collect(Collectors.toList()), true);
 
 //                                   if(t.getValue().getEName().contains("±")){
 //                                       /*存在偏差范围则获取的是偏差值:实测-设计*/
@@ -306,19 +306,22 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 //                                   }else{
 //                                      FormulaUtils.write(t.getValue(),itemBlockList.stream().map(ItemBlock::getData).flatMap(v->v.stream().flatMap(Collection::stream)).collect(Collectors.toList()),true);
 //                                   }
+                                }
+                                t.flush();
+                                if (originSize > 0 && originSize != itemBlockList.size()) {
+                                    g.setList(itemBlockList);
+                                    update.set(true);
+                                }
                             }
-                            t.flush();
-                            if(originSize>0&&originSize!=itemBlockList.size()){
-                                g.setList(itemBlockList);
-                                update.set(true);
-                            }
+                        });
+                        if (update.get()) {
+                            this.formulaDataBlockService.saveOrUpdate(fdb);
                         }
-                    });
-                    if(update.get()){
-                        this.formulaDataBlockService.saveOrUpdate(fdb);
                     }
                 }
             }
+        }catch (Exception e){
+            e.printStackTrace();
         }
     }
 
@@ -562,24 +565,28 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     @Override
     public IFormulaService sort() {
-        Map<Boolean,List<FormData>> map = tec.formDataList.stream().collect(Collectors.partitioningBy(e->Func.isNotEmpty(e.getFormula())&&e.getFormula().getFormula().contains("E[")));
-        tec.formDataList.clear();
-        /*没有依赖的*/
-        List<FormData> simple=map.get(false);
-        if(CollectionUtil.isNotEmpty(simple)){
-            tec.formDataList.addAll(simple);
-        }
-        /*有依赖的*/
-        List<FormData> rely= map.get(true);
-        if(CollectionUtil.isNotEmpty(rely)){
-            sort(rely,((rely.size()+1)/2)*rely.size());
-            tec.formDataList.addAll(rely);
+        try {
+            Map<Boolean, List<FormData>> map = tec.formDataList.stream().collect(Collectors.partitioningBy(e -> Func.isNotEmpty(e.getFormula()) && e.getFormula().getFormula().contains("E[")));
+            tec.formDataList.clear();
+            /*没有依赖的*/
+            List<FormData> simple = map.get(false);
+            if (CollectionUtil.isNotEmpty(simple)) {
+                tec.formDataList.addAll(simple);
+            }
+            /*有依赖的*/
+            List<FormData> rely = map.get(true);
+            if (CollectionUtil.isNotEmpty(rely)) {
+                sort(rely, ((rely.size() + 1) / 2) * rely.size());
+                tec.formDataList.addAll(rely);
+            }
+            /*初始化排序值,每个点间隔1000,方便插入*/
+            AtomicInteger sort = new AtomicInteger();
+            tec.formDataList.forEach(e -> e.setSort(sort.getAndAdd(1000)));
+            /*汇总阶段执行的公式*/
+            summaryPre();
+        }catch (Exception e){
+            e.printStackTrace();
         }
-        /*初始化排序值,每个点间隔1000,方便插入*/
-        AtomicInteger sort= new AtomicInteger();
-        tec.formDataList.forEach(e->e.setSort(sort.getAndAdd(1000)));
-        /*汇总阶段执行的公式*/
-        summaryPre();
         return this;
     }
 
@@ -1030,7 +1037,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                          }
                          if(Func.isNotEmpty(list)){
                              targetItem.setSubTotal(list.size());
-                             targetItem.setDesigns(designList.getValues().stream().map(ElementData::getValue).flatMap(e->CustomFunction.obj2ListNe(e).stream()).filter(StringUtils::isNumber).map(StringUtils::obj2Double).collect(Collectors.toList()));
+                             if(Func.isNotEmpty(designList)) {
+                                 targetItem.setDesigns(designList.getValues().stream().map(ElementData::getValue).flatMap(e -> CustomFunction.obj2ListNe(e).stream()).filter(StringUtils::isNumber).map(StringUtils::obj2Double).collect(Collectors.toList()));
+                             }
                              AtomicInteger index= new AtomicInteger();
                              int len=targetItem.getDesigns().size();
                              if(len>0){
@@ -1414,7 +1423,7 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
                          while (m.find()){
                              String el=m.group();
                              String pstr=el.replaceAll("^"+FC_REG+"ifelse\\(","").replaceAll("\\)$","");
-                             String pa[]=pstr.split(",");
+                             String[] pa =pstr.split(",");
                              if(pa.length==3){
                                  Object data = Expression.parse(pa[0]+"?"+pa[1]+":"+pa[2]).calculate(createCurrentMap(el));
                                  f=f.replace(el,putDataWithKey(data));
@@ -1426,12 +1435,38 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
                        max++;
                      }while (f.contains("ifelse")&&max<20);
                  }
+                 if(f.contains("avg4segment")){
+                     Matcher m = RegexUtils.matcher(FC_REG+"(avg4segment)\\(([^)]+)\\)",f);
+                     while (m.find()){
+                         String[] args=m.group(2).split(",");
+                         List<FormData> target = getFormDataByCode(args[0]);
+                         if(!target.isEmpty()){
+                             FormData a=target.get(0);
+                             int n=Math.max(1,a.coordsList.size()/fd.getCoordsList().size());
+                             List<Object> data=CustomFunction.avg4segment(a.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()),n);
+                             f=f.replace(m.group(),putDataWithKey(data));
+                         }
+                     }
+                 }
+                 if(f.contains("skip")){
+                     Matcher m = RegexUtils.matcher(FC_REG+"(skip)\\(([^)]+)\\)",f);
+                     while (m.find()){
+                         String[] args=m.group(2).split(",");
+                         List<FormData> target = getFormDataByCode(args[0]);
+                         if(!target.isEmpty()){
+                             FormData a=target.get(0);
+                             a.setOffset(StringUtils.handleObj2Integer(args[1]));
+                             f=f.replace(m.group(),args[0]);
+                         }
+                     }
+                 }
                  if(f.contains("quantity")){
                      /*聚合*/
                      Matcher m = RegexUtils.matcher(FC_REG+"(quantity)\\(([^)]+)\\)",f);
                      while (m.find()) {
                          Object data=null;
                          List<String> codeList = getCodeList(m.group(2));
+                         @SuppressWarnings("unchecked")
                          Map<String,List<Map<String,Object>>> textInfoMap= (Map<String, List<Map<String, Object>>>) tec.constantMap.getOrDefault(TEXT_INFO_MAP,new HashMap<>());
                          List<Map<String,Object>> tableColKeyVal= textInfoMap.get(codeList.get(0));
                          if(Func.isNotEmpty(tableColKeyVal)){

+ 4 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -115,7 +115,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
             List<WbsTreePrivate> wbsTreePrivateList = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
                     .eq(WbsTreePrivate::getProjectId, Long.parseLong(pawDTO.getProjectId()))
                     .eq(WbsTreePrivate::getWbsId, Long.parseLong(pawDTO.getWbsId()))
-                    .eq(WbsTreePrivate::getStatus,1)
+                    .eq(WbsTreePrivate::getStatus, 1)
                     .eq(WbsTreePrivate::getType, 2)
             );
 
@@ -216,13 +216,6 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     throw new ServiceException(StringUtil.format("节点下的 {} 中存在填报数据,删除失败!", names));
                 }
                 baseMapper.deleteBatch(ids1, pawDTO.getWbsId(), pawDTO.getProjectId(), pawDTO.getContractId());
-
-                //更新redis缓存
-                List<WbsTreeContract> delObjList = list.stream().filter(f -> ids1.contains(f.getId())).collect(Collectors.toList());
-                Map<Long, List<WbsTreeContract>> collect = delObjList.stream().filter(f -> ObjectUtil.isNotEmpty(f.getParentId())).collect(Collectors.groupingBy(WbsTreeContract::getParentId));
-                for (Map.Entry<Long, List<WbsTreeContract>> longListEntry : collect.entrySet()) {
-                    informationQueryClient.delAsyncWbsTree(longListEntry.getKey().toString() + "", pawDTO.getContractId() + "", "1");
-                }
             }
 
             //TODO ---------新增---------
@@ -277,14 +270,11 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
                 this.insertBatch(wbsTreeContractList, 1000);
                 constructionLedgerFeign.initConstructionLedger(constructionLedgerList);
-
-                //更新redis缓存
-                Map<Long, List<WbsTreeContract>> collect = wbsTreeContractList.stream().filter(f -> new Integer(1).equals(f.getType()) && ObjectUtil.isNotEmpty(f.getParentId())).collect(Collectors.groupingBy(WbsTreeContract::getParentId));
-                for (Map.Entry<Long, List<WbsTreeContract>> longListEntry : collect.entrySet()) {
-                    informationQueryClient.AsyncWbsTree("", longListEntry.getKey().toString(), pawDTO.getContractId(), "", "1");
-                }
             }
         }
+
+        //更新Redis缓存
+        informationQueryClient.delAsyncWbsTree(pawDTO.getContractId());
         return true;
     }
 

+ 29 - 15
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -433,7 +433,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         //修改到合同段
         if (listContract.size() > 0) {
             //获取当前项目下所有合同段下的复制、新增节点
-            String sql = "select id,old_id,project_id,contract_id from m_wbs_tree_contract where project_id = " + projectId + " and contract_id in(" + org.apache.commons.lang.StringUtils.join(contractInfosIds, ",") + ") and wbs_type = " + wbsType + " and type = 1 and status = 1 and is_deleted = 0 and old_id is not null";
+            String sql = "select id,old_id,project_id,contract_id from m_wbs_tree_contract where old_id is not null and project_id = " + projectId + " and contract_id in(" + org.apache.commons.lang.StringUtils.join(contractInfosIds, ",") + ") and wbs_type = " + wbsType + " and type = 1 and status = 1 and is_deleted = 0 and old_id is not null";
             List<WbsTreeContract> wbsTreeContractsCopyOrAddAll = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
             Map<String, List<WbsTreeContract>> copyAddNodes = wbsTreeContractsCopyOrAddAll.stream().collect(Collectors.groupingBy(WbsTreeContract::getOldId));
             List<WbsTreeContract> listContractAdd = new ArrayList<>();
@@ -448,6 +448,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                         obj2.setTableType(obj1.getTableType());
                         obj2.setTableOwner(obj1.getTableOwner());
                         obj2.setHtmlUrl(obj1.getHtmlUrl());
+                        obj2.setExcelId(obj1.getExcelId());
                         listContractAdd.add(obj2);
                     }
                 }
@@ -516,7 +517,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         //修改到合同段
         if (listContract.size() > 0) {
             //获取当前项目下所有合同段下的复制、新增节点
-            String sql = "select id,old_id,project_id,contract_id from m_wbs_tree_contract where project_id = " + projectId + " and contract_id in(" + org.apache.commons.lang.StringUtils.join(contractInfosIds, ",") + ") and wbs_type = " + wbsType + " and type = 1 and status = 1 and is_deleted = 0 and old_id is not null";
+            String sql = "select id,old_id,project_id,contract_id from m_wbs_tree_contract where old_id is not null and project_id = " + projectId + " and contract_id in(" + org.apache.commons.lang.StringUtils.join(contractInfosIds, ",") + ") and wbs_type = " + wbsType + " and type = 1 and status = 1 and is_deleted = 0 and old_id is not null";
             List<WbsTreeContract> wbsTreeContractsCopyOrAddAll = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
             Map<String, List<WbsTreeContract>> copyAddNodes = wbsTreeContractsCopyOrAddAll.stream().collect(Collectors.groupingBy(WbsTreeContract::getOldId));
             List<WbsTreeContract> listContractAdd = new ArrayList<>();
@@ -531,6 +532,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                         obj2.setTableType(obj1.getTableType());
                         obj2.setTableOwner(obj1.getTableOwner());
                         obj2.setHtmlUrl(obj1.getHtmlUrl());
+                        obj2.setExcelId(obj1.getExcelId());
                         listContractAdd.add(obj2);
                     }
                 }
@@ -594,6 +596,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     || !Objects.equals(nonNull(a.getInitTableId()), nonNull(b.getInitTableId()))
                     || !Objects.equals(nonNull(a.getInitTableName()), nonNull(b.getInitTableName()))
                     || !Objects.equals(nonNull(a.getHtmlUrl()), nonNull(b.getHtmlUrl()))
+                    || !Objects.equals(nonNull(a.getExcelId()), nonNull(b.getExcelId()))
                     || !Objects.equals(nonNull(a.getSort()), nonNull(b.getSort()));
         }
         return !Objects.equals(nonNull(a.getNodeName()), nonNull(b.getNodeName()))
@@ -605,7 +608,8 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 || !Objects.equals(nonNull(a.getMixRatioTestIds()), nonNull(b.getMixRatioTestIds()))
                 || !Objects.equals(nonNull(a.getInitTableId()), nonNull(b.getInitTableId()))
                 || !Objects.equals(nonNull(a.getInitTableName()), nonNull(b.getInitTableName()))
-                || !Objects.equals(nonNull(a.getHtmlUrl()), nonNull(b.getHtmlUrl()));
+                || !Objects.equals(nonNull(a.getHtmlUrl()), nonNull(b.getHtmlUrl()))
+                || !Objects.equals(nonNull(a.getExcelId()), nonNull(b.getExcelId()));
     }
 
     /**
@@ -694,6 +698,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     @Override
     public boolean syncNodeParam(String projectId, String pKeyId) {
         if (StringUtils.isNotEmpty(projectId) && StringUtils.isNotEmpty(pKeyId)) {
+            ProjectInfo projectInfo = projectInfoMapper.selectById(projectId);
             //当前选择同步的节点信息
             WbsTreePrivate selectNodeNow = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, pKeyId).eq(WbsTreePrivate::getStatus, 1));
             if (selectNodeNow == null) {
@@ -717,16 +722,16 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             List<Long> privateNodeIds = selectNodeAndChildNodes.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
             List<Long> privateNodePKeyIds = selectNodeAndChildNodes.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
 
-            //获取对应公有树节点
-            Map<Long, WbsTree> treePublicNodeAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
-                    .select(WbsTree::getId)
-                    .in(WbsTree::getId, privateNodeIds)
-                    .eq(WbsTree::getStatus, 1)
-                    .eq(WbsTree::getType, 1))
-                    .stream().collect(Collectors.toMap(WbsTree::getId, Function.identity()));
-
-            if (treePublicNodeAll.size() > 0) {
+            if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
                 //TODO ---------公有引用同步---------
+                //获取对应公有树节点
+                Map<Long, WbsTree> treePublicNodeAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
+                        .select(WbsTree::getId)
+                        .in(WbsTree::getId, privateNodeIds)
+                        .eq(WbsTree::getStatus, 1)
+                        .eq(WbsTree::getType, 1))
+                        .stream().collect(Collectors.toMap(WbsTree::getId, Function.identity()));
+
                 Map<String, Long> map = new HashMap<>();
                 for (WbsTreePrivate wbsTreePrivate : selectNodeAndChildNodes) {
                     WbsTree wbsTree = treePublicNodeAll.get(wbsTreePrivate.getId());
@@ -779,8 +784,11 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 //获取当前私有引用模板的对应节点与它的所有子节点
                 WbsTreePrivate selectRecordNode = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getWbsId, treePrivateRootNode.getWbsId()).eq(WbsTreePrivate::getId, selectNodeNow.getId()).eq(WbsTreePrivate::getProjectId, treePrivateRootNode.getProjectId()).eq(WbsTreePrivate::getStatus, 1));
                 List<WbsTreePrivate> selectNodeAndChildNodesRecord = this.getChildNodes(selectRecordNode);
+                if (selectNodeAndChildNodesRecord == null) {
+                    selectNodeAndChildNodesRecord = new ArrayList<>();
+                }
                 selectNodeAndChildNodesRecord.add(selectRecordNode);
-                Map<Long, WbsTreePrivate> treePrivateNodeAll = selectNodeAndChildNodesRecord.stream().collect(Collectors.toMap(WbsTreePrivate::getId, Function.identity()));
+                Map<Long, WbsTreePrivate> treePrivateNodeAll = selectNodeAndChildNodesRecord.stream().collect(Collectors.toMap(WbsTreePrivate::getId, wbsTreePrivate -> wbsTreePrivate, (obj1, obj2) -> obj1));
 
                 for (WbsTreePrivate wbsTreePrivate : selectNodeAndChildNodes) {
                     WbsTreePrivate wbsTreePrivateYS = treePrivateNodeAll.get(wbsTreePrivate.getId());
@@ -926,6 +934,10 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     throw new ServiceException("未获取到当前选择同步的节点信息,请联系管理员");
                 }
                 List<WbsTreePrivate> wbsTreePrivatesNodeAndTabNow = this.getChildNodesAndTabs(selectNodeNow);
+                if (wbsTreePrivatesNodeAndTabNow == null) {
+                    wbsTreePrivatesNodeAndTabNow = new ArrayList<>();
+                }
+                wbsTreePrivatesNodeAndTabNow.add(selectNodeNow);
 
                 //当前项目独立表
                 Map<Long, WbsTreePrivate> wbsTreePrivatesTableDL = wbsTreePrivatesNodeAndTabNow.stream().filter(f -> f.getType().equals(10) && f.getParentId().equals(-10L)).collect(Collectors.toMap(WbsTreePrivate::getId, Function.identity()));
@@ -937,8 +949,10 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 //选择节点对应所引用的关联对应的节点、表、独立表
                 WbsTreePrivate selectOneRecord = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, oneRecordRoot.getProjectId()).eq(WbsTreePrivate::getId, selectNodeNow.getId()).eq(WbsTreePrivate::getWbsId, oneRecordRoot.getWbsId()));
                 List<WbsTreePrivate> wbsTreePrivatesNodeAndTabRecord = this.getChildNodesAndTabs(selectOneRecord);
-
-                //引用的节点树对应的节点、表、独立表
+                if (wbsTreePrivatesNodeAndTabRecord == null) {
+                    wbsTreePrivatesNodeAndTabRecord = new ArrayList<>();
+                }
+                wbsTreePrivatesNodeAndTabRecord.add(selectOneRecord);
 
                 //获取当前对应电签位置配置信息
                 List<WbsTreePrivate> collect1 = wbsTreePrivatesNodeAndTabRecord.stream().filter(f -> f.getType().equals(10) || f.getType().equals(2)).collect(Collectors.toList());

+ 5 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -432,10 +432,10 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         List<Long> ids = list.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
         if (ids.size() > 0) {
             List<WbsTreePrivate> query = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
-                    .select(WbsTreePrivate::getWbsId,WbsTreePrivate::getPKeyId, WbsTreePrivate::getId, WbsTreePrivate::getType, WbsTreePrivate::getNodeName,
+                    .select(WbsTreePrivate::getWbsId, WbsTreePrivate::getPKeyId, WbsTreePrivate::getId, WbsTreePrivate::getType, WbsTreePrivate::getNodeName,
                             WbsTreePrivate::getNodeType, WbsTreePrivate::getMajorDataType, WbsTreePrivate::getTableType, WbsTreePrivate::getTableOwner,
                             WbsTreePrivate::getImportMatchingInfo, WbsTreePrivate::getMixRatioTestIds, WbsTreePrivate::getInitTableId,
-                            WbsTreePrivate::getInitTableName, WbsTreePrivate::getSort, WbsTreePrivate::getHtmlUrl)
+                            WbsTreePrivate::getInitTableName, WbsTreePrivate::getSort, WbsTreePrivate::getHtmlUrl, WbsTreePrivate::getExcelId)
                     .in(WbsTreePrivate::getParentId, ids)
                     .eq(WbsTreePrivate::getProjectId, obj.getProjectId())
                     .eq(WbsTreePrivate::getWbsId, obj.getWbsId())
@@ -468,7 +468,9 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         List<Long> ids = list.stream().map(WbsTree::getId).collect(Collectors.toList());
         if (ids.size() > 0) {
             List<WbsTree> query = baseMapper.selectList(Wrappers.<WbsTree>lambdaQuery()
-                    .select(WbsTree::getId, WbsTree::getType, WbsTree::getNodeName, WbsTree::getNodeType, WbsTree::getWbsId, WbsTree::getMajorDataType, WbsTree::getTableType, WbsTree::getTableOwner, WbsTree::getImportMatchingInfo, WbsTree::getMixRatioTestIds, WbsTree::getInitTableId, WbsTree::getInitTableName, WbsTree::getSort)
+                    .select(WbsTree::getId, WbsTree::getType, WbsTree::getNodeName, WbsTree::getNodeType, WbsTree::getWbsId, WbsTree::getMajorDataType,
+                            WbsTree::getTableType, WbsTree::getTableOwner, WbsTree::getImportMatchingInfo,
+                            WbsTree::getMixRatioTestIds, WbsTree::getInitTableId, WbsTree::getInitTableName, WbsTree::getSort)
                     .in(WbsTree::getParentId, ids)
                     .eq(WbsTree::getWbsId, obj.getWbsId())
                     .eq(WbsTree::getType, 1) //没有绑定清表,html_url字段为null,不同步