Преглед изворни кода

Merge remote-tracking branch 'origin/master'

zhuwei пре 5 месеци
родитељ
комит
87cac534be
14 измењених фајлова са 264 додато и 25 уклоњено
  1. 14 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/reSigningEVisaStatus.java
  2. 3 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/external/impl/ExternalDataArchiveAutoService.java
  3. 15 4
      blade-service/blade-archive/src/main/java/org/springblade/archive/external/impl/ExternalDataArchiveFileService.java
  4. 3 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/external/utils/TransUtil.java
  5. 3 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  6. 6 3
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  7. 10 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  8. 46 1
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java
  9. 4 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java
  10. 25 3
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  11. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java
  12. 4 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/NodeBaseInfoController.java
  13. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/INodeBaseInfoService.java
  14. 129 6
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/NodeBaseInfoServiceImpl.java

+ 14 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/reSigningEVisaStatus.java

@@ -0,0 +1,14 @@
+package org.springblade.business.dto;
+
+import lombok.Data;
+
+/**
+ * 未上报重签
+ */
+@Data
+public class reSigningEVisaStatus {
+    private Long id;
+    private Long wbsId;
+    private Long projectId;
+    private Long contractId;
+}

+ 3 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/external/impl/ExternalDataArchiveAutoService.java

@@ -194,6 +194,7 @@ public class ExternalDataArchiveAutoService {
                     // 合并更新字段(示例:更新 outUrl)
                     localArchive.setOutUrl(externalArchive.getOutUrl());
                     localArchive.setName(externalArchive.getName());
+                    localArchive.setFileNumber(externalArchive.getFileNumber());
                     upArchives.add(localArchive);
                 }
             }
@@ -204,7 +205,8 @@ public class ExternalDataArchiveAutoService {
     private boolean needUpdate(ArchivesAuto external, ArchivesAuto local) {
         // 检查关键字段差异
         return !Objects.equals(external.getOutUrl(), local.getOutUrl())
-                || !Objects.equals(external.getName(), local.getName());
+                || !Objects.equals(external.getName(), local.getName())
+                || !Objects.equals(external.getFileNumber(), local.getFileNumber());
 
         // 扩展检查示例(如需其他字段比较,可追加条件):
         // || !Objects.equals(external.getFileNumber(), local.getFileNumber())

+ 15 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/external/impl/ExternalDataArchiveFileService.java

@@ -3,6 +3,7 @@ package org.springblade.archive.external.impl;
 import lombok.AllArgsConstructor;
 import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.archive.external.bean.ExternalDataInfo;
+import org.springblade.archive.external.utils.TransUtil;
 import org.springblade.archive.mapper.ArchivesAutoMapper;
 import org.springblade.archive.trans.ArchiveAutoVo;
 import org.springblade.archive.trans.ArchiveFileVo;
@@ -160,10 +161,19 @@ public class ExternalDataArchiveFileService {
 
     // 辅助方法:判断是否需要更新
     private boolean needUpdate(ArchiveFile external, ArchiveFile local) {
-        // 示例:检查关键字段是否变化
-        return !Objects.equals(external.getFileUrl(), local.getFileUrl())
-                || !Objects.equals(external.getPdfPageUrl(), local.getPdfPageUrl())
-                || !Objects.equals(external.getFileSize(), local.getFileSize());
+        String extUtimeStr = formatTime(external.getUtime());
+        String localUtimeStr = formatTime(local.getUtime());
+
+        // 字符串严格比较:格式或内容不同即视为不一致
+        return !Objects.equals(extUtimeStr, localUtimeStr)
+                || !Objects.equals(external.getPdfPageUrl(), local.getPdfPageUrl());
+    }
+
+    /**
+     * 将时间统一格式化为字符串(精确到秒)
+     */
+    private String formatTime(LocalDateTime time) {
+        return time != null ? time.format(TransUtil.FORMATTER) : null;
     }
 
     // 辅助方法:更新本地文件字段
@@ -173,6 +183,7 @@ public class ExternalDataArchiveFileService {
         local.setPdfPageUrl(external.getPdfPageUrl());
         local.setFilePage(external.getFilePage());
         local.setFileSize(external.getFileSize());
+        local.setUtime(external.getUtime());
     }
 
 

+ 3 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/external/utils/TransUtil.java

@@ -5,12 +5,15 @@ import org.springblade.business.entity.MetadataClassification;
 import org.springblade.common.utils.SnowFlakeUtil;
 
 import java.text.SimpleDateFormat;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
 public class TransUtil {
 
+    public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
     private static final ConcurrentMap<Long, ExternalDataInfo> dataMap = new ConcurrentHashMap<>();
 
     public static final Map<String, Long> EXTERNAL_TO_INTERNAL_NODE_ID_MAP = new LinkedHashMap<String, Long>() {{

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

@@ -1358,9 +1358,10 @@
 
 
     <select id="getOutArchiveFilesByOutIds" resultMap="archiveFileResultMap1">
-        select  *
+        select  id,utime,out_id,pdf_page_url
         from u_archive_file
-        where
+
+        where project_id = #{projectId} and is_deleted = 0 and
         out_id in
         <foreach collection="ids" item="id" open="(" separator="," close=")">
             #{id}

+ 6 - 3
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -3042,8 +3042,8 @@ public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo) {
 
     //检查新增类型
     if ("1".equals(vo.getSaveType())) {
-        //todo 当前节点及其子节点
-        //当前节点及其子节点时,半选说明其下的子节点并不是全部选中的,所以这时候只需要根据全选的查询其全部子节点即可
+        //todo 当前及父节点
+        //当前及父节点时,半选说明其下的子节点并不是全部选中的,所以这时候只需要根据全选的查询其全部子节点即可
         if (allSelectedNodeList.size() > 0) {
             //查询数据
             selectedNodeList = this.unifiedCode(allSelectedNodeList, treeContract, "1", query);
@@ -3070,7 +3070,7 @@ public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo) {
         //处理半选
         this.disposeHalfSelectList(treeContract, halfSelectedNodeList, selectedNodeList, query);
 
-    } else {
+    } else if("2".equals(vo.getSaveType())){
         //todo 仅当前节点操作
         if (allSelectedNodeList.size() > 0) {
             if (allSelectedNodeList.size() != 1) {
@@ -3097,8 +3097,11 @@ public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo) {
                     ArrayList::new
             ));
         }
+    }else if("3".equals(vo.getSaveType())){
+        //todo 当前及子节点
     }
 
+
     //保存集合
     List<WbsTreeContract> saveList = new ArrayList<>();
     List<ConstructionLedger> saveLedger = new ArrayList<>();

+ 10 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -1975,6 +1975,16 @@ public class TaskController extends BladeController {
         return R.success("任务已经成功提交重签,请耐心等待!");
     }
 
+    /**
+     * 重刷未上报的数据
+     * @return
+     */
+    @PostMapping("/reSigningEVisaStatus0")
+    public R<Object>reSigningEVisaStatus0(@RequestBody List<reSigningEVisaStatus> dtos,HttpServletRequest request) throws Exception {
+        String header = request.getHeader("Blade-Auth");
+        return taskService.reSigningEVisaStatus0(dtos,header);
+    }
+
     @PostMapping("/reSigningEntrust")
     @ApiOperationSupport(order = 3)
     @ApiOperation(value = "委托单管理-一键重签", notes = "传入taskIds、下拉框的contractId、projectId")

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

@@ -23,6 +23,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 
 @RestController
@@ -353,7 +355,50 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
 
     @Override
     public void updateArchiveFileEx(List<ArchiveFile> files) {
-        iArchiveFileService.updateBatchById(files);
+        // 1. 提取传入文件列表中的所有ID(过滤空值)
+        List<Long> ids = files.stream()
+                .map(ArchiveFile::getId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
+
+        if (ids.isEmpty()) {
+            return;
+        }
+
+        // 2. 根据ID批量查询现有记录
+        LambdaQueryWrapper<ArchiveFile> wrapper = Wrappers.lambdaQuery();
+        wrapper.in(ArchiveFile::getId, ids);
+        List<ArchiveFile> existFiles = iArchiveFileService.list(wrapper);
+
+        // 3. 将传入文件列表转换为Map<ID, 文件对象>便于查找
+        Map<Long, ArchiveFile> externalFileMap = files.stream()
+                .collect(Collectors.toMap(
+                        ArchiveFile::getId,
+                        Function.identity(),
+                        (existing, replacement) -> existing // 处理重复ID,保留第一个
+                ));
+
+        // 4. 更新需要同步的字段
+        List<ArchiveFile> updateList = existFiles.stream()
+                .map(local -> {
+                    ArchiveFile external = externalFileMap.get(local.getId());
+                    if (external != null) {
+                        // 仅更新指定字段(根据业务需求调整)
+                        local.setFileUrl(external.getFileUrl());
+                        local.setEVisaFile(external.getEVisaFile());
+                        local.setPdfPageUrl(external.getPdfPageUrl());
+                        local.setFilePage(external.getFilePage());
+                        local.setFileSize(external.getFileSize());
+                        local.setUtime(external.getUtime());
+                    }
+                    return local;
+                })
+                .collect(Collectors.toList());
+
+        // 5. 批量更新(建议分批处理,如每500条一次)
+        if (!updateList.isEmpty()) {
+            iArchiveFileService.updateBatchById(updateList);
+        }
     }
 
 }

+ 4 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java

@@ -18,11 +18,13 @@ package org.springblade.business.service;
 
 import org.springblade.business.dto.ReSigningEntrustDto;
 import org.springblade.business.dto.TrialResignDto;
+import org.springblade.business.dto.reSigningEVisaStatus;
 import org.springblade.business.entity.Task;
 import org.springblade.business.entity.TaskParallel;
 import org.springblade.business.vo.TaskApprovalVO;
 import org.springblade.business.vo.TaskVO;
 import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.tool.api.R;
 import org.springframework.scheduling.annotation.Async;
 
 import javax.servlet.http.HttpServletRequest;
@@ -129,4 +131,6 @@ public interface ITaskService extends BaseService<Task> {
     void reSigningTrial(TrialResignDto dto, HttpServletRequest request);
 
     void reSigningEntrust(List<ReSigningEntrustDto> dtos, String header, HttpServletRequest request);
+
+    R reSigningEVisaStatus0(List<reSigningEVisaStatus> dtos, String header) throws Exception;
 }

+ 25 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -15,6 +15,7 @@ import org.springblade.archive.feign.ArchiveAutoClient;
 import org.springblade.business.dto.ReSigningEntrustDto;
 import org.springblade.business.dto.TrialResignDto;
 import org.springblade.business.dto.TrialSelfInspectionRecordDTO;
+import org.springblade.business.dto.reSigningEVisaStatus;
 import org.springblade.business.entity.*;
 import org.springblade.business.mapper.TaskMapper;
 import org.springblade.business.mapper.TrialSelfInspectionRecordMapper;
@@ -1294,6 +1295,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         }
     }
 
+
+
     private R saveTrialSelfNodePdf(TrialResignDto dto,String trialId) {
         //试验记录id
         String trialIds = dto.getTrialIds();
@@ -1832,9 +1835,28 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 //        }
 //        throw new ServiceException("未获取到任务信息,操作失败!");
 //    }
-
-    @Override
-    public void reSigningEVisa(String classify, String taskIds, String contractId, String projectId, Integer type, String header , HttpServletRequest request) {
+        @Override
+        public R reSigningEVisaStatus0(List<reSigningEVisaStatus> dtos, String header) throws Exception {
+         R result= new R();
+         if(dtos.size()>0){
+            for (reSigningEVisaStatus dto : dtos) {
+                InformationQuery iq = informationQueryService.getById(dto.getId());
+                if(iq!=null){
+                    informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
+                        .eq(InformationQuery::getId, dto.getId())
+                        .set(InformationQuery::getEVisaPdfUrl, null)
+                        .set(InformationQuery::getPdfUrl, null));
+                    result = this.saveNodePdf(iq.getClassify()+"", iq.getWbsId()+"", dto.getContractId()+"", dto.getProjectId()+"", header);
+                    if(result==null||(result!=null&&result.getCode()!=200)){
+                        return R.fail(iq.getName()+"重新保存PDF信息失败");
+                    }
+                }
+            }
+        }
+         return R.success("操作成功");
+        }
+        @Override
+        public void reSigningEVisa(String classify, String taskIds, String contractId, String projectId, Integer type, String header , HttpServletRequest request) {
         //查询任务信息
         List<Task> taskList = jdbcTemplate.query("select * from u_task where id in(" + taskIds + ")", new BeanPropertyRowMapper<>(Task.class));
         if (taskList.size() > 0) {

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

@@ -1091,7 +1091,7 @@ public class TrialSelfInspectionRecordServiceImpl extends BaseServiceImpl<TrialS
             //------初始编号信息------
             this.initBuildNumber(dto);
         }
-        this.saveOrUpdate(dto);
+        //this.saveOrUpdate(dto);
         if (ObjectUtil.isNotEmpty(dto.getId())) {
             //------获取最新试验记录------
             TrialSelfInspectionRecord obj = baseMapper.selectById(dto.getId());

+ 4 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/NodeBaseInfoController.java

@@ -36,6 +36,7 @@ import org.springblade.manager.service.INodeBaseInfoService;
 import org.springblade.core.boot.ctrl.BladeController;
 
 import java.math.BigDecimal;
+import java.util.HashMap;
 
 /**
  *  控制器
@@ -141,9 +142,9 @@ public class NodeBaseInfoController extends BladeController {
 
 	@GetMapping("/getAllNodeBaseInfoByPkeyId")
 	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "自动获取表单所有的参数库数据", notes = "pkeyId表单Id")
-	public R getAllNodeBaseInfoByPkeyId(@RequestParam Long pkeyId){
-		return R.data(nodeBaseInfoService.getAllNodeBaseInfoByPkeyId(pkeyId));
+	@ApiOperation(value = "自动获取表单所有的参数库数据", notes = "pkeyId表单Id,nodeId节点Id")
+	public R getAllNodeBaseInfoByPkeyId(@RequestParam Long pkeyId,@RequestParam Long nodeId) throws Exception {
+		return R.data(nodeBaseInfoService.getAllNodeBaseInfoByPkeyId(pkeyId,nodeId));
 	}
 
 

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/INodeBaseInfoService.java

@@ -45,5 +45,5 @@ public interface INodeBaseInfoService extends BaseService<NodeBaseInfo> {
 
     Object getNodeBaseInfoByPkeyId(Long pkeyId, Long nodeId, Integer autoType, BigDecimal min,BigDecimal max);
 
-	Map<String,Object> getAllNodeBaseInfoByPkeyId(Long pkeyId);
+	Map<String,Object> getAllNodeBaseInfoByPkeyId(Long pkeyId,Long nodeId) throws Exception;
 }

+ 129 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/NodeBaseInfoServiceImpl.java

@@ -17,25 +17,35 @@
 package org.springblade.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
 import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.tool.utils.IoUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.manager.entity.NodeBaseInfo;
+import org.springblade.manager.entity.Parameter;
+import org.springblade.manager.entity.ParameterElement;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.service.IWbsTreeContractService;
+import org.springblade.manager.utils.FileUtils;
 import org.springblade.manager.vo.NodeBaseInfoVO;
 import org.springblade.manager.mapper.NodeBaseInfoMapper;
 import org.springblade.manager.service.INodeBaseInfoService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 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 java.io.InputStream;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  *  服务实现类
@@ -48,6 +58,8 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
 
     @Autowired
     private  IWbsTreeContractService iWbsTreeContractService;
+    @Autowired
+    private  JdbcTemplate jdbcTemplate;
 	@Override
 	public IPage<NodeBaseInfoVO> selectNodeBaseInfoPage(IPage<NodeBaseInfoVO> page, NodeBaseInfoVO nodeBaseInfo) {
 		return page.setRecords(baseMapper.selectNodeBaseInfoPage(page, nodeBaseInfo));
@@ -157,8 +169,119 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
     }
 
     @Override
-    public Map<String, Object> getAllNodeBaseInfoByPkeyId(Long pkeyId) {
-        return Collections.emptyMap();
+    public Map<String, Object> getAllNodeBaseInfoByPkeyId(Long pkeyId,Long nodeId) throws Exception {
+        HashMap<String, Object> map = new HashMap<>();
+        //查出表单
+        WbsTreeContract wbsTreeContract = iWbsTreeContractService.getBaseMapper().selectOne(new QueryWrapper<WbsTreeContract>().eq("p_key_id", pkeyId));
+        WbsTreeContract wbsTreeContractNode = iWbsTreeContractService.getBaseMapper().selectOne(new QueryWrapper<WbsTreeContract>().eq("p_key_id", nodeId));
+        //解析html表单
+        String htmlUrl = wbsTreeContract.getHtmlUrl();
+        //拿到所有的元素
+        if(htmlUrl!=null){
+            InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(htmlUrl);
+            String htmlString = IoUtil.readToString(inputStreamByUrl);
+            htmlString = htmlString.replaceAll("placeholder", "placeholderxx");
+            Document doc = Jsoup.parse(htmlString);
+            //拿到参数库所有元素与参数库的元素比较
+            String sql="select * from m_parameter_element where is_deleted !=0";
+            List<ParameterElement> ParameterElementList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ParameterElement.class));
+            List<WbsTreeContract> ancestorsNodes = iWbsTreeContractService.getBaseMapper().selectList(new QueryWrapper<WbsTreeContract>().in("id", Arrays.stream(wbsTreeContractNode.getAncestors().split(",")).toArray()).eq("contract_id", wbsTreeContractNode.getContractId()));
+            for (ParameterElement parameterElement : ParameterElementList) {
+                Elements select = doc.select("[placeholderxx='" + parameterElement.getElementName() + "']");
+                //元素库里存在表单的元素
+                if(select.size()>0){
+                    //用元素查出参数库
+                    String sql1="Select * from m_parameter where id="+parameterElement.getParameterId();
+                    Parameter parameter = jdbcTemplate.queryForObject(sql1, new BeanPropertyRowMapper<>(Parameter.class));
+                    //不需要获取的情况
+                    //如果参数要区分项目
+                    if(parameter.getType()==1){
+                        //并且元素不是全局参数
+                        if(parameterElement.getType()!=1){
+                            //并且元素对应的项目ID不等于表单的项目ID
+                            if(parameterElement.getProjectId()!=null&&!wbsTreeContract.getProjectId().equals(parameterElement.getProjectId().toString())){
+                                System.out.println(parameter.getParamName()+" 参数库的"+parameterElement.getElementName()+"元素不是全局参数,并且项目Id对应不上");
+                                continue;
+                            }else {
+                                if(parameterElement.getContractId()!=null&&!wbsTreeContract.getContractId().equals(parameterElement.getContractId())){
+                                    System.out.println(parameter.getParamName()+" 参数库的"+parameterElement.getElementName()+"元素不是全局参数,项目ID能对应上但是合同段Id对应不上");
+                                    continue;
+                                }
+                            }
+                        }
+                    }
+                    //需要获取的情况
+                    //拿到参数库的类型
+                    String paramType = parameter.getParamType();
+                    String[] paramTypes = paramType.split(",");
+                    StringBuilder result=new StringBuilder();
+                    //根据参数的类型值,来获取不同的值 1-7是获取单位工程名称这些 8是获取划分编号 9是获取范围随机数
+                    for (String type : paramTypes) {
+                        if(type.equals("1")){
+                            String s=ancestorsNodes.stream()
+                                    .filter(m -> m.getNodeType() == 1)
+                                    .map(WbsTreeContract::getNodeName)
+                                    .findFirst()
+                                    .orElse("");
+                            result.append(s);
+                        } else if (type.equals("2")) {
+                            String s=ancestorsNodes.stream()
+                                    .filter(m -> m.getNodeType() == 18)
+                                    .map(WbsTreeContract::getNodeName)
+                                    .findFirst()
+                                    .orElse("");
+                            result.append(s);
+                        } else if (type.equals("3")) {
+                            String s=ancestorsNodes.stream()
+                                    .filter(m -> m.getNodeType() == 2)
+                                    .map(WbsTreeContract::getNodeName)
+                                    .findFirst()
+                                    .orElse("");
+                            result.append(s);
+                        }else if (type.equals("4")) {
+                            String s=ancestorsNodes.stream()
+                                    .filter(m -> m.getNodeType() == 3)
+                                    .map(WbsTreeContract::getNodeName)
+                                    .findFirst()
+                                    .orElse("");
+                            result.append(s);
+                        }else if (type.equals("5")) {
+                            String s=ancestorsNodes.stream()
+                                    .filter(m -> m.getNodeType() == 4)
+                                    .map(WbsTreeContract::getNodeName)
+                                    .findFirst()
+                                    .orElse("");
+                            result.append(s);
+                        }else if (type.equals("6")) {
+                            String s=ancestorsNodes.stream()
+                                    .filter(m -> m.getNodeType() == 5)
+                                    .map(WbsTreeContract::getNodeName)
+                                    .findFirst()
+                                    .orElse("");
+                            result.append(s);
+                        }else if (type.equals("7")) {
+                            String s=ancestorsNodes.stream()
+                                    .filter(m -> m.getNodeType() == 6)
+                                    .map(WbsTreeContract::getNodeName)
+                                    .findFirst()
+                                    .orElse("");
+                            result.append(s);
+                        }else if (type.equals("8")) {
+                            String  s= ancestorsNodes.stream()
+                                    .map(WbsTreeContract::getPartitionCode) // 获取 partitionCode
+                                    .filter(partitionCode -> partitionCode != null && !partitionCode.isEmpty()) // 过滤掉空值
+                                    .collect(Collectors.joining());
+                            if(wbsTreeContract.getPartitionCode()!=null){
+                                s=s+wbsTreeContract.getPartitionCode();
+                            }
+                            result.append(s);
+                        }
+                    }
+                    map.put(select.attr("keyname"),result.toString());
+                }
+            }
+        }
+        return map;
     }
 
 }