Browse Source

Merge remote-tracking branch 'origin/master' into master

yangyj 1 year ago
parent
commit
22d40c012f
15 changed files with 162 additions and 37 deletions
  1. 14 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractVO8.java
  2. 67 3
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  3. 5 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.java
  4. 25 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  5. 3 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  6. 10 4
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java
  7. 1 13
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  8. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TabBusstimeInfoController.java
  9. 3 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/TabBusstimeInfoMapper.java
  10. 7 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/TabBusstimeInfoMapper.xml
  11. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/ITabBusstimeInfoService.java
  12. 0 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  13. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/TabBusstimeInfoServiceImpl.java
  14. 20 8
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  15. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

+ 14 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractVO8.java

@@ -0,0 +1,14 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class WbsTreeContractVO8 implements Serializable {
+
+    private Long id;
+    private Long pKeyId;
+    private Integer hasChildren;
+
+}

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

@@ -20,6 +20,7 @@ import org.springblade.business.feign.MessageWarningClient;
 import org.springblade.business.feign.OperationLogClient;
 import org.springblade.business.feign.RecycleBinClient;
 import org.springblade.business.feign.TaskClient;
+import org.springblade.business.mapper.InformationQueryMapper;
 import org.springblade.business.service.*;
 import org.springblade.business.socket.WebSocket;
 import org.springblade.business.utils.FileUtils;
@@ -45,6 +46,7 @@ import org.springblade.manager.entity.*;
 import org.springblade.manager.feign.*;
 import org.springblade.manager.vo.WbsTreeContractLazyVO;
 import org.springblade.manager.vo.WbsTreeContractTreeVOS;
+import org.springblade.manager.vo.WbsTreeContractVO8;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.cache.ParamCache;
 import org.springblade.system.entity.DictBiz;
@@ -93,6 +95,8 @@ public class InformationWriteQueryController extends BladeController {
 
     private final IInformationQueryService informationQueryService;
 
+    private final InformationQueryMapper informationQueryMapper;
+
     private final IInformationQueryFileService informationQueryFileService;
 
     private final IDictBizClient dictBizClient;
@@ -3513,16 +3517,49 @@ public class InformationWriteQueryController extends BladeController {
             node = this.wbsTreeContractClient.getContractWbsTreeByContractIdAndId(vo.getWbsId(), Long.parseLong(vo.getContractIdRelation()));
         }
         List<QueryProcessDataVO> queryDataResult = new ArrayList<>();
+        List<WbsTreeContractVO8> lowestNodes = new ArrayList<>();
         if (!new Integer("6").equals(node.getNodeType()) && !Arrays.asList("1,2,3,4".split(",")).contains(node.getMajorDataType() + "")) {
+            /**
+             * 更改逻辑
+             * 使用queryProcessDataByParentIdAndContractId_3中,通过pKeyId查询;
+             * 放弃使用queryProcessDataByParentIdAndContractIdTwo中,通过ancestors字段查询,ancestors有问题
+             * @author liuyc
+             * @date 2023年9月8日11:26:46
+             */
             //不是工序,则查询当前节点下的所有填报节点
             if (node.getParentId() == 0) {
-                queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo("", contract.getContractType(), StringUtils.isNotEmpty(vo.getContractIdRelation()) ? vo.getContractIdRelation() : vo.getContractId().toString());
+                //当前合同段最底层节点pKeyIds
+                List<WbsTreeContract> lowestNodesAll = jdbcTemplate.query("select a.p_key_id,a.id,(SELECT CASE WHEN COUNT(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND b.contract_id = " + node.getContractId() + " AND b.status = 1 AND b.type = 1 AND b.is_deleted = 0) AS hasChildren from m_wbs_tree_contract a where a.type = 1 and a.status = 1 and a.is_deleted = 0 and a.contract_id = " + node.getContractId() + " HAVING hasChildren = 0", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+                List<String> pKeyIds = lowestNodesAll.stream().map(WbsTreeContract::getPKeyId).map(String::valueOf).collect(Collectors.toList());
+                List<List<String>> partition = Lists.partition(pKeyIds, 1000);
+                for (List<String> items : partition) {
+                    //获取填报节点信息
+                    List<QueryProcessDataVO> result = this.informationQueryMapper.queryProcessDataByParentIdAndContractId_3(contract.getContractType(), items);
+                    if (result.size() > 0) {
+                        queryDataResult.addAll(result);
+                    }
+                }
+
+                //queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo("", contract.getContractType(), StringUtils.isNotEmpty(vo.getContractIdRelation()) ? vo.getContractIdRelation() : vo.getContractId().toString());
             } else {
-                queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo(node.getId().toString(), contract.getContractType(), StringUtils.isNotEmpty(vo.getContractIdRelation()) ? vo.getContractIdRelation() : vo.getContractId().toString());
+                //获取当前选择的节点下的所有最底层节点
+                WbsTreeContractVO8 vo8 = BeanUtil.copyProperties(node, WbsTreeContractVO8.class);
+                this.lowestNodesRecursively(lowestNodes, Collections.singleton(vo8), node.getContractId());
+                List<String> pKeyIds = lowestNodes.stream().map(WbsTreeContractVO8::getPKeyId).map(String::valueOf).collect(Collectors.toList());
+                List<List<String>> partition = Lists.partition(pKeyIds, 1000);
+                for (List<String> items : partition) {
+                    //获取填报节点信息
+                    List<QueryProcessDataVO> result = this.informationQueryMapper.queryProcessDataByParentIdAndContractId_3(contract.getContractType(), items);
+                    if (result.size() > 0) {
+                        queryDataResult.addAll(result);
+                    }
+                }
 
+                //queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo(node.getId().toString(), contract.getContractType(), StringUtils.isNotEmpty(vo.getContractIdRelation()) ? vo.getContractIdRelation() : vo.getContractId().toString());
             }
+
             //如果是首件列表请求,则删掉没有标记为首件的数据
-            if (queryDataResult != null && queryDataResult.size() > 0) {
+            if (queryDataResult.size() > 0) {
                 if (StringUtils.isNotEmpty(vo.getIsFirst())) {
                     if (StringUtils.isNotEmpty(vo.getFirstTitle())) {
                         queryDataResult = queryDataResult.stream().filter(qdr -> "3".equals(qdr.getQueryType())).collect(Collectors.toList());
@@ -3538,6 +3575,7 @@ public class InformationWriteQueryController extends BladeController {
                 submitNodeKeyIds.addAll(queryDataResult.stream().map(QueryProcessDataVO::getPrimaryKeyId).distinct().collect(Collectors.toList()));
             }
         }
+
         //设置进集合中
         vo.setWbsIds(submitNodeKeyIds);
         if (StringUtils.isNotEmpty(vo.getContractIdRelation())) {
@@ -3547,6 +3585,32 @@ public class InformationWriteQueryController extends BladeController {
         return R.data(this.informationQueryService.selectInformationQueryPage(Condition.getPage(query), vo, node));
     }
 
+
+    /**
+     * 获取一个节点下的所有最底层节点
+     *
+     * @param lowestNodes 结果集
+     * @param nodes       初始入参节点
+     */
+    private void lowestNodesRecursively(List<WbsTreeContractVO8> lowestNodes, Set<WbsTreeContractVO8> nodes, String contractId) {
+        if (nodes.size() > 0) {
+            Set<Long> ids = nodes.stream().map(WbsTreeContractVO8::getId).collect(Collectors.toSet());
+            if (ids.size() > 0) {
+                List<WbsTreeContractVO8> childNodes = jdbcTemplate.query("select a.p_key_id,a.id,(SELECT CASE WHEN COUNT(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND b.contract_id = " + contractId + " AND b.status = 1 AND b.type = 1 AND b.is_deleted = 0) AS hasChildren from m_wbs_tree_contract a where a.type = 1 and a.status = 1 and a.is_deleted = 0 and a.contract_id = " + contractId + " and a.parent_id in(" + StringUtils.join(ids, ",") + ")", new BeanPropertyRowMapper<>(WbsTreeContractVO8.class));
+                if (childNodes.size() > 0) {
+                    Set<WbsTreeContractVO8> lowestNode = childNodes.stream().filter(f -> f.getHasChildren().equals(0)).collect(Collectors.toSet());
+                    Set<WbsTreeContractVO8> noLowestNode = childNodes.stream().filter(f -> f.getHasChildren().equals(1)).collect(Collectors.toSet());
+                    if (lowestNode.size() > 0) { //最底层节点加入结果集
+                        lowestNodes.addAll(lowestNode);
+                    }
+                    if (noLowestNode.size() > 0) { //非最底层节点继续递归
+                        this.lowestNodesRecursively(lowestNodes, noLowestNode, contractId);
+                    }
+                }
+            }
+        }
+    }
+
     /**
      * 获取当前合同段的划分树
      *

+ 5 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.java

@@ -59,6 +59,11 @@ public interface InformationQueryMapper extends BaseMapper<InformationQuery> {
      */
     List<QueryProcessDataVO> queryProcessDataByParentIdAndContractIdTwo(@Param("parentId") String parentId, @Param("classify") Integer classify, @Param("contractId") String contractId);
 
+    /**
+     * 查询工序节点的填报记录3
+     */
+    List<QueryProcessDataVO> queryProcessDataByParentIdAndContractId_3(@Param("classify") Integer classify, @Param("list") List<String> list);
+
     /**
      * 查询工序节点的填报记录,资料进度使用
      */

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

@@ -831,6 +831,31 @@
           AND wtc.status = 1
     </select>
 
+    <select id="queryProcessDataByParentIdAndContractId_3" resultMap="queryProcessDataMap">
+        SELECT wtc.id                                                                                   AS treeId,
+               wtc.p_key_id,
+               wtc.ancestors,
+               wtc.major_data_type,
+               wtc.node_type                                                                            AS nodeType,
+               IFNULL(if(length(trim(wtc.full_name)) > 0, wtc.full_name, wtc.node_name), wtc.node_name) AS title,
+               wtc.parent_id                                                                            AS parentId,
+               uiq.id                                                                                   AS informationQueryId,
+               IFNULL(uiq.status, 0)                                                                    AS status,
+               uiq.type                                                                                 AS queryType,
+               case
+                   WHEN uiq.pdf_trial_url is null then 'false'
+                   ELSE 'true' end                                                                      AS isExperiment
+        FROM m_wbs_tree_contract AS wtc
+                 LEFT JOIN u_information_query AS uiq
+                           ON wtc.p_key_id = uiq.wbs_id AND uiq.classify = #{classify} and uiq.is_deleted = 0 and
+                              wtc.is_deleted = 0 and
+                              wtc.status = 1
+        WHERE wtc.p_key_id in
+        <foreach collection="list" item="item" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+
     <select id="queryProcessDataByParentIdAndContractIdThree" resultMap="queryProcessDataMap">
         SELECT wtc.id                                                                                   AS treeId,
                wtc.p_key_id,

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

@@ -516,7 +516,9 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
             List<InformationQueryVO> voResult = JSONArray.parseArray(JSONObject.toJSONString(result), InformationQueryVO.class);
             //处理流程状态
             voResult.forEach(vor -> {
-                vor.setStartTime(DateUtil.format(vor.getCreateTime(), "yyyy-MM-dd"));
+                if (ObjectUtil.isNotEmpty(vor.getCreateTime())) {
+                    vor.setStartTime(DateUtil.format(vor.getCreateTime(), "yyyy-MM-dd"));
+                }
                 vor.setTaskStatusStr(new Integer("0").equals(vor.getStatus()) ? "未上报" : new Integer("1").equals(vor.getStatus()) ? "待审批" : new Integer("2").equals(vor.getStatus()) ? "已审批" : "已废除");
                 try {
                     //填报人

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

@@ -39,6 +39,7 @@ import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.FileUtil;
 import org.springblade.evisa.redissionUtil.DistributedRedisLock;
 import org.springblade.evisa.service.EVisaService;
 import org.springblade.evisa.vo.EVisaMakeSealVO;
@@ -135,6 +136,7 @@ public class EVisaServiceImpl implements EVisaService {
                     }
                 }
             }
+
             //没有找到合同章,直接返回
             if (contractPfx == null) {
                 return NOT_PFX_OR_FILE;
@@ -196,11 +198,9 @@ public class EVisaServiceImpl implements EVisaService {
                 //电签失败 ,接口返回认证失败
                 return "认证失败!认证接口调用异常";
             }
-
         } catch (Exception e) {
             e.printStackTrace();
         }
-
         return null;
     }
 
@@ -375,9 +375,15 @@ public class EVisaServiceImpl implements EVisaService {
                 Object[] result = this.signPdfByAXQZ(pdfVO, fileByte);
                 if (result != null) {
                     if (result[0] != null) {
-                        MultipartFile newFiles = new MockMultipartFile("file", SnowFlakeUtil.getId() + ".pdf", "text/plain", IOUtils.toByteArray(new ByteArrayInputStream((byte[]) result[0])));
+
+                      //MultipartFile newFiles = new MockMultipartFile("file", SnowFlakeUtil.getId() + ".pdf", "text/plain", IOUtils.toByteArray(new ByteArrayInputStream((byte[]) result[0])));
+
+                        byte[] byteArray = IOUtils.toByteArray(new ByteArrayInputStream((byte[]) result[0]));
+                        String dataUrl = "/www/wwwroot/Users/hongchuangyanfa/Desktop/pdf/"+SnowFlakeUtil.getId() + ".pdf";
+                        File file1 =new File(dataUrl);
+                        FileUtil.copy(byteArray,file1);
                         //重新上传
-                        BladeFile bladeFile = this.newIOSSClient.uploadFileByInputStream(newFiles);
+                        BladeFile bladeFile = this.newIOSSClient.uploadFile(SnowFlakeUtil.getId() + ".pdf",dataUrl);
                         if (bladeFile != null) {
                             resultMessage = SUCCESS + "@@@@" + bladeFile.getLink();
                         } else {

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

@@ -2121,16 +2121,6 @@ public class ExcelTabController extends BladeController {
         String projectId = tableInfo1.getString("projectId");
         String classify = tableInfo1.getString("classify");
 
-        /*String groupId = tableInfo1.getString("tabGroupId");
-        String pkeyId = tableInfo1.getString("pkeyId");
-        String pkeyIds = pkeyId;
-        String groupIds = groupId;
-        for (int i = 1; i < dataArray.size(); i++) {
-            JSONObject jsonObject = dataArray.getJSONObject(i);
-            pkeyIds += "," + jsonObject.getString("pkeyId");
-            groupIds += "," + jsonObject.getString("tabGroupId");
-        }*/
-
         /*全加载,或者可以优化成依赖加载*/
         List<AppWbsTreeContractVO> tableAll = new ArrayList<>();
         List<TableInfo> tableInfoList = this.excelTabService.getTableInfoList(dataArray);
@@ -2170,13 +2160,13 @@ public class ExcelTabController extends BladeController {
 
         //公式填充
         this.excelTabService.formulaFillData(tableInfoList, Long.parseLong(nodeId), ExecuteType.INSPECTION);
-
         //保存数据到数据库
         R<Object> result = this.excelTabService.saveOrUpdateInfo(tableInfoList);
         if (!result.isSuccess()) {
             return R.fail("以下的表在保存数据时发生了异常【" + result.getMsg() + "】");
         }
 
+
         List<String> errorPKeyIds = new ArrayList<>();
         //单个pdf加载
         if (tableInfoList != null) {
@@ -2205,7 +2195,6 @@ public class ExcelTabController extends BladeController {
 
         //合并pdf加载
         excelTabService.getBussPdfs(nodeId, classify, contractId, projectId);
-
         //更新缓存
         informationQueryClient.delAsyncWbsTree(contractId);
 
@@ -3776,5 +3765,4 @@ public class ExcelTabController extends BladeController {
         return R.fail("操作失败");
     }
 
-
 }

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TabBusstimeInfoController.java

@@ -129,7 +129,7 @@ public class TabBusstimeInfoController extends BladeController {
 		String [] keys = tabBusstimeInfo.getColKey().split(":");
 		tabBusstimeInfo.setColKey(keys[1]);
 		tabBusstimeInfo.setTabEnName(keys[0]);
-		tabBusstimeInfoService.delTabBussTimeByColId(tabBusstimeInfo.getColId()+"");
+		tabBusstimeInfoService.delTabBussTimeByColId(tabBusstimeInfo.getTableId()+"","");
 		return R.status(tabBusstimeInfoService.save(tabBusstimeInfo));
 	}
 
@@ -140,6 +140,6 @@ public class TabBusstimeInfoController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "逻辑删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(tabBusstimeInfoService.delTabBussTimeByColId(ids));
+		return R.status(tabBusstimeInfoService.delTabBussTimeByColId(null,ids));
 	}
 }

+ 3 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/TabBusstimeInfoMapper.java

@@ -20,6 +20,8 @@ import org.springblade.manager.entity.TabBusstimeInfo;
 import org.springblade.manager.vo.TabBusstimeInfoVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.data.repository.query.Param;
+
 import java.util.List;
 
 /**
@@ -39,5 +41,5 @@ public interface TabBusstimeInfoMapper extends BaseMapper<TabBusstimeInfo> {
 	 */
 	List<TabBusstimeInfoVO> selectTabBusstimeInfoPage(IPage page, TabBusstimeInfoVO tabBusstimeInfo);
 
-	boolean delTabBussTimeByColId(String colId);
+	boolean delTabBussTimeByColId(@Param("tabId") String tabId,@Param("colId") String colId);
 }

+ 7 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/TabBusstimeInfoMapper.xml

@@ -24,6 +24,12 @@
     </select>
 
     <delete id="delTabBussTimeByColId">
-        delete from m_tab_busstime_info where col_id = #{colId}
+        delete from m_tab_busstime_info where 1=1
+        <if test="tabId != null and colId != ''">
+           and tab_id = #{tabId}
+        </if>
+        <if test="colId != null and colId != ''">
+           and col_id = #{colId}
+        </if>
     </delete>
 </mapper>

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

@@ -38,5 +38,5 @@ public interface ITabBusstimeInfoService extends BaseService<TabBusstimeInfo> {
 	 */
 	IPage<TabBusstimeInfoVO> selectTabBusstimeInfoPage(IPage<TabBusstimeInfoVO> page, TabBusstimeInfoVO tabBusstimeInfo);
 
-	boolean delTabBussTimeByColId(String colId);
+	boolean delTabBussTimeByColId(String tabId,String colId);
 }

+ 0 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -1598,7 +1598,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                         cell.setCellValue(myData);
                                     }
                                     boolean wrap = Optional.ofNullable(cell).map(Cell::getCellStyle).map(CellStyle::getWrapText).orElse(true);
-                                    ;
                                     if (!wrap) {
                                         cell.getCellStyle().setShrinkToFit(true);
                                     }

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/TabBusstimeInfoServiceImpl.java

@@ -39,8 +39,8 @@ public class TabBusstimeInfoServiceImpl extends BaseServiceImpl<TabBusstimeInfoM
 	}
 
 	@Override
-	public boolean delTabBussTimeByColId(String colId) {
-		return baseMapper.delTabBussTimeByColId(colId);
+	public boolean delTabBussTimeByColId(String tabId,String colId) {
+		return baseMapper.delTabBussTimeByColId(tabId,colId);
 	}
 
 }

+ 20 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -461,8 +461,8 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         List<AppWbsTreeContractVO> resultTabs = baseMapper.selectWbsTreeContractList(tableOwnerNumbers, wbsTreeContract.getProjectId(), wbsTreeContract.getWbsId(), wbsTreeContract.getContractId(), wbsTreeContract.getId(), wbsTreeContract.getContractIdRelation(), tableOwnerList);
 
         //表单排序
-        List<AppWbsTreeContractVO> resultTabsToCopy = this.sortTabs(resultTabs, "__");
-        return this.sortTabs(resultTabsToCopy, "_PL_");
+        List<AppWbsTreeContractVO> resultTabsToCopy = this.sortTabs(resultTabs, "__"); //复制表排序
+        return this.sortTabs(resultTabsToCopy, "_PL_"); //频率表排序
     }
 
     /**
@@ -487,8 +487,10 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         if (tabsWithKeyword.isEmpty()) {
             return tabsWithoutKeyword;
         }
-        //对带有关键字的数据按照特定顺序排序
-        tabsWithKeyword.sort(Comparator.comparing(AppWbsTreeContractVO::getNodeName));
+
+        //将带有关键字的数据按照数字大小进行排序
+        tabsWithKeyword.sort(Comparator.comparingInt(this::getNumberFromNodeName));
+
         //将带有关键字的数据插入到对应表名后面
         List<AppWbsTreeContractVO> sortedTabs = new ArrayList<>();
         for (AppWbsTreeContractVO tabWithoutKeyword : tabsWithoutKeyword) {
@@ -504,6 +506,15 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         return sortedTabs;
     }
 
+    private int getNumberFromNodeName(AppWbsTreeContractVO tab) {
+        String nodeName = tab.getNodeName();
+        String[] parts = nodeName.split("_");
+        if (parts.length > 1) {
+            return Integer.parseInt(parts[parts.length - 1]); //取最后一个部分作为数字
+        }
+        return Integer.MAX_VALUE;
+    }
+
     @Override
     public List<WbsTreeContract> searchParentAllNode(long primaryKeyId, Long contractId) {
         return baseMapper.searchParentAllNode(primaryKeyId, contractId);
@@ -594,10 +605,10 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                 wbsTreeContract.setCreateTime(new Date());
                 wbsTreeContract.setTabGroupId(tabGroupId);
                 wbsTreeContract.setSort(wbsInfo.getSort());
-                String nodeName="";
-                if(wbsTreeContractList2.size()>=1){
+                String nodeName = "";
+                if (wbsTreeContractList2.size() >= 1) {
                     nodeName = wbsTreeContractList2.get(wbsTreeContractList2.size() - 1).getNodeName();
-                }else{
+                } else {
                     nodeName = wbsTreeContract.getNodeName();
                 }
 
@@ -1286,7 +1297,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
     }
 
     /**
-     * 反向递归获取父级(父级Id=子级parentId)
+     * 构造从最底层节点获取他的所有父级,并统计出现次数(父级Id=子级parentId)
      *
      * @param result              结果集
      * @param lowestNodeParentIds 最底层节点ParentIds
@@ -1344,6 +1355,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
     /**
      * 反向递归处理父节点颜色
+     * (暂未解决父级颜色问题,因为按照这个方法构造出来的父级颜色,颜色会断层;目前上级统一显示蓝色,最底层填报数据显示上报审批状态的颜色)
      */
     private void recursiveParentNodeColorStatus(List<WbsTreeContractLazyVO> childNodeTBList, Map<Long, WbsTreeContractLazyVO> distinctParentNodesTBIdKeyMap, Map<Long, List<WbsTreeContractLazyVO>> allNodesParentGroup, Map<Long, WbsTreeContractLazyVO> nodeColorMap) {
         if (childNodeTBList.size() > 0) {

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -1617,6 +1617,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                         if (tabs.size() > 0) {
                             List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
                             for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
+                                wbsTreeContract.setIsBussShow(1);
                                 wbsTreeContract.setIsDeleted(0);
                                 wbsTreeContract.setStatus(1);
                                 wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
@@ -1631,6 +1632,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                         if (tabs.size() > 0) {
                             List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
                             for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
+                                wbsTreeContract.setIsBussShow(1);
                                 wbsTreeContract.setIsDeleted(0);
                                 wbsTreeContract.setStatus(1);
                                 wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());