huangjn 3 年 前
コミット
d97741e83a
13 ファイル変更218 行追加109 行削除
  1. 10 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java
  2. 23 5
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractTreeVOS.java
  3. 104 92
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  4. 4 4
      blade-service/blade-business/src/main/java/org/springblade/business/controller/MaterialProgressController.java
  5. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/controller/NeiYeController.java
  6. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ClientTreePublicCodeClientImpl.java
  7. 16 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionServiceImpl.java
  8. 16 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  9. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreePrivateClientImpl.java
  10. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java
  11. 14 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  12. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java
  13. 15 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

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

@@ -1,5 +1,6 @@
 package org.springblade.manager.feign;
 package org.springblade.manager.feign;
 
 
+import org.springblade.manager.entity.ContractRelationJlyz;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.vo.WbsTreeContractTreeVO;
 import org.springblade.manager.vo.WbsTreeContractTreeVO;
 import org.springblade.manager.vo.WbsTreeContractTreeVOS;
 import org.springblade.manager.vo.WbsTreeContractTreeVOS;
@@ -21,6 +22,15 @@ public interface WbsTreeContractClient {
      */
      */
     String API_PREFIX = "/api/manager/WbsTreeContract";
     String API_PREFIX = "/api/manager/WbsTreeContract";
 
 
+    @GetMapping(API_PREFIX + "/selectQueryCurrentNodeByAncestors")
+    List<WbsTreeContract> selectQueryCurrentNodeByAncestors(@RequestParam List<String> ids, @RequestParam String contractId);
+
+    @GetMapping(API_PREFIX + "/selectQueryValueLikeNodeName")
+    List<WbsTreeContract> selectQueryValueLikeNodeName(@RequestParam String queryValue, @RequestParam String contractId);
+
+    @GetMapping(API_PREFIX + "/selectContractRelationInfo")
+    List<ContractRelationJlyz> selectContractRelationInfo(@RequestParam String contractId);
+
     @GetMapping(API_PREFIX + "/countChildByPrimaryKeyId")
     @GetMapping(API_PREFIX + "/countChildByPrimaryKeyId")
     Long countChildByPrimaryKeyId(@RequestParam String primaryKeyId);
     Long countChildByPrimaryKeyId(@RequestParam String primaryKeyId);
 
 

+ 23 - 5
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractTreeVOS.java

@@ -1,7 +1,12 @@
 package org.springblade.manager.vo;
 package org.springblade.manager.vo;
 
 
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
+import org.springblade.core.tool.node.INode;
+import org.springblade.manager.entity.WbsTreeContract;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
@@ -10,7 +15,9 @@ import java.util.List;
  * 不知道为什么通过远程调用时实体字段不是想要的,所以中间转换一次
  * 不知道为什么通过远程调用时实体字段不是想要的,所以中间转换一次
  */
  */
 @Data
 @Data
-public class WbsTreeContractTreeVOS {
+public class WbsTreeContractTreeVOS extends WbsTreeContract implements INode<WbsTreeContractTreeVOS>{
+
+    private static final long serialVersionUID = 1L;
 
 
     @ApiModelProperty("显隐控制表单数据")
     @ApiModelProperty("显隐控制表单数据")
     private String value;
     private String value;
@@ -24,9 +31,11 @@ public class WbsTreeContractTreeVOS {
     private String title;
     private String title;
 
 
     @ApiModelProperty("父节点")
     @ApiModelProperty("父节点")
-    private String parentId;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
 
 
-    private String id;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
 
 
     @ApiModelProperty("模板类型")
     @ApiModelProperty("模板类型")
     private Integer wbsType;
     private Integer wbsType;
@@ -38,13 +47,14 @@ public class WbsTreeContractTreeVOS {
     private Boolean leaf;
     private Boolean leaf;
 
 
     @ApiModelProperty("是否有下级")
     @ApiModelProperty("是否有下级")
-    private Boolean notExsitChild;
+    private Boolean notExsitChild = true;
 
 
     @ApiModelProperty("节点类型")
     @ApiModelProperty("节点类型")
     private Integer deptCategory;
     private Integer deptCategory;
 
 
     @ApiModelProperty("子节点")
     @ApiModelProperty("子节点")
-    private List<WbsTreeContractTreeVOS> children = new ArrayList<>();
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<WbsTreeContractTreeVOS> children;
 
 
     @ApiModelProperty("节点上传图纸主键")
     @ApiModelProperty("节点上传图纸主键")
     private Long drawingsId;
     private Long drawingsId;
@@ -72,4 +82,12 @@ public class WbsTreeContractTreeVOS {
 
 
     private Integer majorDataType;
     private Integer majorDataType;
 
 
+    @Override
+    public List<WbsTreeContractTreeVOS> getChildren() {
+        if (this.children == null) {
+            this.children = new ArrayList<>();
+        }
+        return this.children;
+    }
+
 }
 }

+ 104 - 92
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1,19 +1,3 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
 package org.springblade.business.controller;
 package org.springblade.business.controller;
 
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
@@ -46,10 +30,12 @@ import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.jackson.JsonUtil;
 import org.springblade.core.tool.jackson.JsonUtil;
+import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.evisa.feign.EVisaClient;
 import org.springblade.evisa.feign.EVisaClient;
 import org.springblade.evisa.vo.CertBeanVO;
 import org.springblade.evisa.vo.CertBeanVO;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ContractInfo;
+import org.springblade.manager.entity.ContractRelationJlyz;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.feign.ContractClient;
@@ -66,7 +52,6 @@ import org.springblade.business.service.IInformationQueryService;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.boot.ctrl.BladeController;
 
 
 import java.util.*;
 import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -109,6 +94,14 @@ public class InformationWriteQueryController extends BladeController {
 
 
 	private final RecycleBinClient recycleBinClient;
 	private final RecycleBinClient recycleBinClient;
 
 
+	@PostMapping("/initMappingStructureTree")
+	@ApiOperationSupport(order = 27)
+	@ApiOperation(value = "初始化合同段导图树(只有接口,功能未写)")
+	public R<List<WbsTreeContractTreeVOS>> initMappingStructureTree(@RequestBody List<String> ids){
+
+		return null;
+	}
+
 	/**
 	/**
 	 * 输入框查询合同段树
 	 * 输入框查询合同段树
 	 */
 	 */
@@ -116,89 +109,108 @@ public class InformationWriteQueryController extends BladeController {
 	@ApiOperationSupport(order = 26)
 	@ApiOperationSupport(order = 26)
 	@ApiOperation(value = "输入框查询合同段树")
 	@ApiOperation(value = "输入框查询合同段树")
 	public R<List<WbsTreeContractTreeVOS>> searchContractTree(@RequestParam String queryValue, @RequestParam String contractId){
 	public R<List<WbsTreeContractTreeVOS>> searchContractTree(@RequestParam String queryValue, @RequestParam String contractId){
+		//设置返回结果
+		List<WbsTreeContractTreeVOS> result = new ArrayList<>();
 		//获取合同段信息
 		//获取合同段信息
 		ContractInfo contract = this.contractClient.getContractById(Long.parseLong(contractId));
 		ContractInfo contract = this.contractClient.getContractById(Long.parseLong(contractId));
 		if(new Integer("2").equals(contract.getContractType())){
 		if(new Integer("2").equals(contract.getContractType())){
 			//监理,需要获取监理合同段关联的施工方合同段ID
 			//监理,需要获取监理合同段关联的施工方合同段ID
+			List<ContractRelationJlyz> jlyzList = this.wbsTreeContractClient.selectContractRelationInfo(contractId);
+			if(jlyzList != null && jlyzList.size() > 0){
+				//施工合同段子节点
+				List<WbsTreeContractTreeVOS> sgChildNodeList = new ArrayList<>();
+
+				for(ContractRelationJlyz jlkz : jlyzList){
+					List<WbsTreeContract> queryValueList = this.wbsTreeContractClient.selectQueryValueLikeNodeName(queryValue, jlkz.getContractIdSg().toString());
+					if(queryValueList != null && queryValueList.size() > 0){
+						//查询与当前节点相关联的数据
+						List<WbsTreeContractTreeVOS> associatedVONodeList = new ArrayList<>();
+						List<String> ids = JSONArray.parseArray(JSONObject.toJSONString(queryValueList.stream().map(WbsTreeContract::getId).distinct().collect(Collectors.toList())), String.class);
+						//查询相关联的数据
+						List<WbsTreeContract> associatedList = this.wbsTreeContractClient.selectQueryCurrentNodeByAncestors(ids, jlkz.getContractIdSg().toString());
+						if(associatedList != null){
+							queryValueList.addAll(associatedList);
+						}
+						//处理参数
+						this.queryContractTree(associatedVONodeList, queryValueList, 2);
+
+						if(associatedVONodeList.size() > 0){
+							List<WbsTreeContractTreeVOS> list = ForestNodeMerger.merge(associatedVONodeList);
+							list.removeIf(vos -> !"0".equals(vos.getParentId().toString()));
+							sgChildNodeList.addAll(list);
+						}
+					}
+				}
+				if(sgChildNodeList.size() > 0){
+					//给个顶点
+					WbsTreeContractTreeVOS vos = new WbsTreeContractTreeVOS();
+					vos.setTitle(contract.getContractName());
+					vos.setChildren(sgChildNodeList);
+					result.add(vos);
+				}
+				return R.data(result);
+			}
 		} else {
 		} else {
 			//施工,直接查询
 			//施工,直接查询
 			//获取当前合同段下所有的数据
 			//获取当前合同段下所有的数据
-			List<WbsTreeContract> contractTreeList = this.wbsTreeContractClient.searchContractTree(contractId);
-			Map<String, WbsTreeContractTreeVOS> nodeMap = new HashMap<>();
-			Map<String, String> titleToIdMap = new HashMap<>();
-			//根节点
-			AtomicReference<WbsTreeContract> rootNode = new AtomicReference<>();
-
-			contractTreeList.forEach(tree -> {
-				if(Long.valueOf("0").equals(tree.getParentId())){
-					//顺便找到根节点
-					rootNode.set(tree);
+			List<WbsTreeContract> queryValueList = this.wbsTreeContractClient.selectQueryValueLikeNodeName(queryValue, contractId);
+			if(queryValueList != null && queryValueList.size() > 0){
+				//查询与当前节点相关联的数据
+				List<WbsTreeContractTreeVOS> associatedVONodeList = new ArrayList<>();
+				List<String> ids = JSONArray.parseArray(JSONObject.toJSONString(queryValueList.stream().map(WbsTreeContract::getId).distinct().collect(Collectors.toList())), String.class);
+				//查询相关联的数据
+				List<WbsTreeContract> associatedList = this.wbsTreeContractClient.selectQueryCurrentNodeByAncestors(ids, contractId);
+				if(associatedList != null && associatedList.size() > 0){
+					queryValueList.addAll(associatedList);
 				}
 				}
-				//转换类型
-				WbsTreeContractTreeVOS vos = new WbsTreeContractTreeVOS();
-				//设置参数
-				vos.setId(tree.getId().toString());
-				vos.setKey(tree.getId().toString());
-				vos.setPrimaryKeyId(tree.getPKeyId().toString());
-				vos.setParentId(tree.getParentId().toString());
-				vos.setTitle(StringUtils.isNotEmpty(tree.getFullName()) ? tree.getFullName() : tree.getDeptName());
-				vos.setType(tree.getType());
-				vos.setWbsType(tree.getWbsType());
-
-				nodeMap.put(tree.getId().toString(), vos);
-				titleToIdMap.put(tree.getId().toString(), StringUtils.isNotEmpty(tree.getFullName()) ? tree.getFullName() : tree.getDeptName());
-			});
-			if(rootNode.get() == null){
-				return R.data(300, null, "未找到相关数据");
-			}
-			//获得根节点
-			WbsTreeContract rootTree = rootNode.get();
-
-			//查询名称
-			titleToIdMap.entrySet().removeIf(map -> !map.getValue().contains(queryValue));
-
-			//处理后的titleToIdMap就是匹配的结果,向上获取父节点,向下获取所有子节点
-			if(titleToIdMap.size() > 0){
-				//循环剩下的数据,找到对应的节点
-				Set<String> idMap = titleToIdMap.keySet();
-				//记录哪些节点已经被获取了
-				List<String> recordGetIds = new ArrayList<>();
-				for(String nodeId : idMap){
-					if(!recordGetIds.contains(nodeId)){
-						//获取节点
-						WbsTreeContractTreeVOS node = nodeMap.get(nodeId);
-						//优先向下获取子节点
-						this.foreachQueryChild(node, nodeMap, recordGetIds);
-						//其次向上获取父节点
-
-						int i = 0;
-					}
+				//处理参数
+				this.queryContractTree(associatedVONodeList, queryValueList, 1);
+
+				if(associatedVONodeList.size() > 0){
+					List<WbsTreeContractTreeVOS> list = ForestNodeMerger.merge(associatedVONodeList);
+					list.removeIf(vos -> !"0".equals(vos.getParentId().toString()));
+					result.addAll(list);
 				}
 				}
+				return R.data(result);
 			}
 			}
 		}
 		}
 
 
 		return R.data(300, null, "未找到相关数据");
 		return R.data(300, null, "未找到相关数据");
 	}
 	}
 
 
-	private void foreachQueryChild(WbsTreeContractTreeVOS parentNode, Map<String, WbsTreeContractTreeVOS> nodeMap, List<String> recordGetIds){
-		//校验当前节点是否还有子节点
-		Long count = this.wbsTreeContractClient.countChildByPrimaryKeyId(parentNode.getPrimaryKeyId());
-		if(count > 0){
-			//说明还有子节点
-			Set<String> keySet = nodeMap.keySet();
-			for(String key : keySet){
-				if(!recordGetIds.contains(key)){
-					WbsTreeContractTreeVOS child = nodeMap.get(key);
-					if(child.getParentId().equals(parentNode.getId())){
-						//继续向下获取子节点
-						this.foreachQueryChild(child, nodeMap, recordGetIds);
-						//添加记录
-						recordGetIds.add(key);
-						//设置进子节点集合中
-						parentNode.getChildren().add(child);
-					}
+	/**
+	 * 转换参数
+	 */
+	private void queryContractTree(List<WbsTreeContractTreeVOS> associatedVONodeList, List<WbsTreeContract> associatedList, Integer contractType) {
+		List<String> exsitList =  new ArrayList<>();
+		for(WbsTreeContract tree : associatedList){
+			if(exsitList.contains(tree.getId().toString())){
+				continue;
+			}
+			//转换类型
+			WbsTreeContractTreeVOS vos = new WbsTreeContractTreeVOS();
+			//设置参数
+			vos.setId(new Integer("1").equals(contractType) ? tree.getId() : tree.getPKeyId());
+			vos.setKey(tree.getId().toString());
+			vos.setPrimaryKeyId(new Integer("1").equals(contractType) ? tree.getPKeyId().toString() : tree.getId().toString());
+			if(new Integer("2").equals(contractType)){
+				vos.setContractIdRelation(tree.getContractId());
+			}
+			vos.setParentId(tree.getParentId());
+			vos.setTitle(StringUtils.isNotEmpty(tree.getFullName()) ? tree.getFullName() : tree.getDeptName());
+			vos.setType(tree.getType());
+			vos.setWbsType(tree.getWbsType());
+
+			//判断当前节点是否存在子节点
+			for(WbsTreeContract treeNode : associatedList){
+				if(treeNode.getParentId().equals(tree.getId())){
+					//存在一个,即认为存在
+					vos.setNotExsitChild(false);
+					break;
 				}
 				}
 			}
 			}
+			associatedVONodeList.add(vos);
+			exsitList.add(tree.getId().toString());
 		}
 		}
 	}
 	}
 
 
@@ -794,7 +806,7 @@ public class InformationWriteQueryController extends BladeController {
 			//获取当前父节点下所有工序节点及填报资料
 			//获取当前父节点下所有工序节点及填报资料
 			List<QueryProcessDataVO> queryDataResult;
 			List<QueryProcessDataVO> queryDataResult;
 			if(new Integer("2").equals(contractInfo.getContractType())){
 			if(new Integer("2").equals(contractInfo.getContractType())){
-				queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 2, contractIdRelation);
+				queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 1, contractIdRelation);
 			} else {
 			} else {
 				queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 1, contractId);
 				queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 1, contractId);
 			}
 			}
@@ -872,7 +884,7 @@ public class InformationWriteQueryController extends BladeController {
 	 */
 	 */
 	private void foreachQueryChildNode(List<WbsTreeContractTreeVOS> result, String contractId){
 	private void foreachQueryChildNode(List<WbsTreeContractTreeVOS> result, String contractId){
 		result.forEach(vos -> {
 		result.forEach(vos -> {
-			List<WbsTreeContractTreeVOS> child = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, 1, vos.getId());
+			List<WbsTreeContractTreeVOS> child = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, 1, vos.getId().toString());
 			if(child != null && child.size() == 1){
 			if(child != null && child.size() == 1){
 				//如果子节点还是只有一个,则进一步向下查询
 				//如果子节点还是只有一个,则进一步向下查询
 				this.foreachQueryChildNode(child, contractId);
 				this.foreachQueryChildNode(child, contractId);
@@ -1196,10 +1208,10 @@ public class InformationWriteQueryController extends BladeController {
 			WbsTreeContractTreeVOS vos = new WbsTreeContractTreeVOS();
 			WbsTreeContractTreeVOS vos = new WbsTreeContractTreeVOS();
 			WbsTreePrivate wbsTreePrivate = this.wbsTreePrivateClient.queryPeersNodeByProjectIdAndId(projectId, Long.parseLong(id));
 			WbsTreePrivate wbsTreePrivate = this.wbsTreePrivateClient.queryPeersNodeByProjectIdAndId(projectId, Long.parseLong(id));
 			//设置参数
 			//设置参数
-			vos.setId(wbsTreePrivate.getId().toString());
+			vos.setId(wbsTreePrivate.getId());
 			vos.setKey(wbsTreePrivate.getId().toString());
 			vos.setKey(wbsTreePrivate.getId().toString());
 			vos.setPrimaryKeyId(wbsTreePrivate.getPKeyId().toString());
 			vos.setPrimaryKeyId(wbsTreePrivate.getPKeyId().toString());
-			vos.setParentId(wbsTreePrivate.getParentId().toString());
+			vos.setParentId(wbsTreePrivate.getParentId());
 			vos.setTitle(wbsTreePrivate.getDeptName());
 			vos.setTitle(wbsTreePrivate.getDeptName());
 			vos.setType(wbsTreePrivate.getType());
 			vos.setType(wbsTreePrivate.getType());
 			vos.setWbsType(Integer.parseInt(wbsTreePrivate.getWbsType()));
 			vos.setWbsType(Integer.parseInt(wbsTreePrivate.getWbsType()));
@@ -1310,7 +1322,7 @@ public class InformationWriteQueryController extends BladeController {
 		WbsTreeContract node = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(vo.getWbsId());
 		WbsTreeContract node = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(vo.getWbsId());
 		if(!new Integer("6").equals(node.getDeptCategory()) && !Arrays.asList("1,2,3,4".split(",")).contains(node.getMajorDataType().toString())){
 		if(!new Integer("6").equals(node.getDeptCategory()) && !Arrays.asList("1,2,3,4".split(",")).contains(node.getMajorDataType().toString())){
 			//不是工序,则查询当前节点下的所有填报节点
 			//不是工序,则查询当前节点下的所有填报节点
-			List<QueryProcessDataVO> queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(node.getId().toString(), vo.getClassify(), vo.getContractId().toString());
+			List<QueryProcessDataVO> queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(node.getId().toString(), 1, vo.getContractId().toString());
 			if(StringUtils.isNotEmpty(vo.getIsFirst())){
 			if(StringUtils.isNotEmpty(vo.getIsFirst())){
 				//如果是首件列表请求,则删掉没有标记为首件的数据
 				//如果是首件列表请求,则删掉没有标记为首件的数据
 				queryDataResult.removeIf(data -> StringUtils.isEmpty(data.getFirstId()));
 				queryDataResult.removeIf(data -> StringUtils.isEmpty(data.getFirstId()));
@@ -1360,13 +1372,13 @@ public class InformationWriteQueryController extends BladeController {
 			//获取当前父节点下所有工序节点及填报资料
 			//获取当前父节点下所有工序节点及填报资料
 			List<QueryProcessDataVO> queryDataResult;
 			List<QueryProcessDataVO> queryDataResult;
 			if(new Integer("2").equals(contractInfo.getContractType())){
 			if(new Integer("2").equals(contractInfo.getContractType())){
-				queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 2, contractIdRelation);
+				queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 1, contractIdRelation);
 			} else {
 			} else {
 				queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 1, contractId);
 				queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 1, contractId);
 			}
 			}
 
 
 			rootTreeNode.forEach(vo -> {
 			rootTreeNode.forEach(vo -> {
-				String primaryKeyId = new Integer("2").equals(contractInfo.getContractType()) ? vo.getId() : vo.getPrimaryKeyId();
+				String primaryKeyId = new Integer("2").equals(contractInfo.getContractType()) ? vo.getId().toString() : vo.getPrimaryKeyId();
 
 
 				if(new Integer("1").equals(contractInfo.getContractType())){
 				if(new Integer("1").equals(contractInfo.getContractType())){
 					if(StringUtils.isEmpty(parentId) || "0".equals(parentId)){
 					if(StringUtils.isEmpty(parentId) || "0".equals(parentId)){
@@ -1413,8 +1425,8 @@ public class InformationWriteQueryController extends BladeController {
 			StringBuilder colorStatusValue = new StringBuilder();
 			StringBuilder colorStatusValue = new StringBuilder();
 			while (iterator.hasNext()) {
 			while (iterator.hasNext()) {
 				QueryProcessDataVO query = iterator.next();
 				QueryProcessDataVO query = iterator.next();
-				if(StringUtils.isNotEmpty(query.getAncestors()) && StringUtils.isNotEmpty(vos.getId())){
-					if(query.getAncestors().contains(vos.getId()) || query.getAncestors().startsWith(vos.getParentId() + ",") || query.getTreeId().equals(vos.getId())){
+				if(StringUtils.isNotEmpty(query.getAncestors()) && StringUtils.isNotEmpty(String.valueOf(vos.getId()))){
+					if(query.getAncestors().contains(vos.getId().toString()) || query.getAncestors().startsWith(vos.getParentId() + ",") || query.getTreeId().equals(vos.getId().toString())){
 						//如果为空,说明未填报
 						//如果为空,说明未填报
 						if(query.getStatus() == null || query.getStatus() == -1){
 						if(query.getStatus() == null || query.getStatus() == -1){
 							colorStatusValue.append("1");
 							colorStatusValue.append("1");

+ 4 - 4
blade-service/blade-business/src/main/java/org/springblade/business/controller/MaterialProgressController.java

@@ -81,7 +81,7 @@ public class MaterialProgressController extends BladeController {
                 List<WbsTreeContractTreeVOS> nodeResult = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(sgContractId, 1, StringUtils.isNotEmpty(parentId) ? parentId : "0");
                 List<WbsTreeContractTreeVOS> nodeResult = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(sgContractId, 1, StringUtils.isNotEmpty(parentId) ? parentId : "0");
                 if(nodeResult != null && nodeResult.size() > 0){
                 if(nodeResult != null && nodeResult.size() > 0){
                     //找到当前节点下的所有填报节点
                     //找到当前节点下的所有填报节点
-                    List<QueryProcessDataVO> queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(nodeResult.get(0).getId(), 1, sgContractId);
+                    List<QueryProcessDataVO> queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(nodeResult.get(0).getId().toString(), 1, sgContractId);
                     //统计
                     //统计
                     this.countAmount(nodeResult, queryDataResult, sgContractId, reVO);
                     this.countAmount(nodeResult, queryDataResult, sgContractId, reVO);
                 }
                 }
@@ -123,7 +123,7 @@ public class MaterialProgressController extends BladeController {
             Iterator<QueryProcessDataVO> iterator = queryDataResult.iterator();
             Iterator<QueryProcessDataVO> iterator = queryDataResult.iterator();
             while (iterator.hasNext()){
             while (iterator.hasNext()){
                 QueryProcessDataVO query = iterator.next();
                 QueryProcessDataVO query = iterator.next();
-                if(query.getAncestors().contains(node.getId()) || query.getAncestors().startsWith(node.getParentId() + ",") || query.getTreeId().equals(node.getId())){
+                if(query.getAncestors().contains(node.getId().toString()) || query.getAncestors().startsWith(node.getParentId() + ",") || query.getTreeId().equals(node.getId().toString())){
                     switch (query.getMajorDataType()){
                     switch (query.getMajorDataType()){
                         case 1:
                         case 1:
                             //开工报告
                             //开工报告
@@ -149,7 +149,7 @@ public class MaterialProgressController extends BladeController {
             }
             }
 
 
             WbsTreeContract nodes = new WbsTreeContract();
             WbsTreeContract nodes = new WbsTreeContract();
-            nodes.setId(Long.parseLong(node.getId()));
+            nodes.setId(node.getId());
             nodes.setContractId(contractId);
             nodes.setContractId(contractId);
             nodes.setWbsType(node.getWbsType());
             nodes.setWbsType(node.getWbsType());
 
 
@@ -157,7 +157,7 @@ public class MaterialProgressController extends BladeController {
             List<WbsTreeContract> childList = this.wbsTreeContractClient.queryChildByParentId(nodes, "");
             List<WbsTreeContract> childList = this.wbsTreeContractClient.queryChildByParentId(nodes, "");
 
 
             //设置参数
             //设置参数
-            reVO.setTreeMaterialProgressList("0".equals(node.getParentId()) ? contract.getContractName() : node.getTitle(), node.getId(), node.getPrimaryKeyId(), contractId, standingBookNotAmount, standingBookEndAmount,
+            reVO.setTreeMaterialProgressList("0".equals(node.getParentId().toString()) ? contract.getContractName() : node.getTitle(), node.getId().toString(), node.getPrimaryKeyId(), contractId, standingBookNotAmount, standingBookEndAmount,
                     processNotSubmitAmount.get(), processNotTaskAmount.get(), processAwaitAmount.get(), processApprovalAmount.get(),
                     processNotSubmitAmount.get(), processNotTaskAmount.get(), processAwaitAmount.get(), processApprovalAmount.get(),
                     workStartNotSubmitAmount.get(), workStartNotTaskAmount.get(), workStartAwaitAmount.get(), workStartApprovalAmount.get(),
                     workStartNotSubmitAmount.get(), workStartNotTaskAmount.get(), workStartAwaitAmount.get(), workStartApprovalAmount.get(),
                     evaluationNotSubmitAmount.get(), evaluationNotTaskAmount.get(), evaluationAwaitAmount.get(), evaluationApprovalAmount.get(),
                     evaluationNotSubmitAmount.get(), evaluationNotTaskAmount.get(), evaluationAwaitAmount.get(), evaluationApprovalAmount.get(),

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/NeiYeController.java

@@ -56,7 +56,7 @@ public class NeiYeController {
             List<WbsTreeContractTreeVOS> contractNodeLIst = this.wbsTreeContractClient.queryContractWbsTreeAll(queryVO.getContractId(), 1, "");
             List<WbsTreeContractTreeVOS> contractNodeLIst = this.wbsTreeContractClient.queryContractWbsTreeAll(queryVO.getContractId(), 1, "");
             //设置map
             //设置map
             Map<String, WbsTreeContractTreeVOS> idToNodeMap = new HashMap<>();
             Map<String, WbsTreeContractTreeVOS> idToNodeMap = new HashMap<>();
-            contractNodeLIst.forEach(vos -> idToNodeMap.put(vos.getId(), vos));
+            contractNodeLIst.forEach(vos -> idToNodeMap.put(vos.getId().toString(), vos));
 
 
             //根据点击的节点获取这个节点下所有填报节点
             //根据点击的节点获取这个节点下所有填报节点
             WbsTreeContract node = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(queryVO.getWbsIds().get(0));
             WbsTreeContract node = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(queryVO.getWbsIds().get(0));
@@ -169,7 +169,7 @@ public class NeiYeController {
                 resultMap.put("subentryChildProject", vos.getTitle());
                 resultMap.put("subentryChildProject", vos.getTitle());
 
 
             }
             }
-            this.foreachGetParent(resultMap, vosMap, vos.getParentId(), contractId);
+            this.foreachGetParent(resultMap, vosMap, vos.getParentId().toString(), contractId);
         }
         }
     }
     }
 
 

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

@@ -23,7 +23,7 @@ public class ClientTreePublicCodeClientImpl {
         if(rootTreeNode != null && rootTreeNode.size() != 0){
         if(rootTreeNode != null && rootTreeNode.size() != 0){
             rootTreeNode.forEach(vo -> {
             rootTreeNode.forEach(vo -> {
                 //获取一级子节点
                 //获取一级子节点
-                List<WbsTreeContractTreeVOS> treeNodes = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, wbsType, vo.getId());
+                List<WbsTreeContractTreeVOS> treeNodes = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, wbsType, vo.getId().toString());
                 if(treeNodes != null && treeNodes.size() != 0){
                 if(treeNodes != null && treeNodes.size() != 0){
                     treeNodes.forEach(child -> {
                     treeNodes.forEach(child -> {
                         //判断当前节点是否被标记为首件
                         //判断当前节点是否被标记为首件

+ 16 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionServiceImpl.java

@@ -21,6 +21,8 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
+import org.springblade.manager.feign.SaveUserInfoByProjectClient;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springblade.system.user.feign.IUserClient;
@@ -52,6 +54,8 @@ public class UserOpinionServiceImpl extends BaseServiceImpl<UserOpinionMapper, U
 
 
 	private final ISysClient sysClient;
 	private final ISysClient sysClient;
 
 
+	private final SaveUserInfoByProjectClient saveUserInfoByProjectClient;
+
 	@Override
 	@Override
 	public List<UserOpinion> queryOpinionTypeAmount() {
 	public List<UserOpinion> queryOpinionTypeAmount() {
 		return this.baseMapper.queryOpinionTypeAmount();
 		return this.baseMapper.queryOpinionTypeAmount();
@@ -153,8 +157,18 @@ public class UserOpinionServiceImpl extends BaseServiceImpl<UserOpinionMapper, U
 					User user = this.userClient.userInfoById(opinion.getCreateUser()).getData();
 					User user = this.userClient.userInfoById(opinion.getCreateUser()).getData();
 					if(user != null){
 					if(user != null){
 						vo.setSubmitPhone(user.getPhone());
 						vo.setSubmitPhone(user.getPhone());
-						if(StringUtils.isNotEmpty(user.getRoleId())){
-							List<String> roleNames = this.sysClient.getRoleNames(user.getRoleId()).getData();
+						List<SaveUserInfoByProjectDTO> userRoleList = this.saveUserInfoByProjectClient.searchUserInfoAndProject2(opinion.getCreateUser().toString());
+						//用户角色
+						String roleIds = user.getRoleId();
+						if(userRoleList != null && userRoleList.size() > 0){
+							//找到合同段的角色
+							userRoleList = userRoleList.stream().filter(userRole -> userRole.getContractId().equals(opinion.getContractId().toString())).collect(Collectors.toList());
+							if(userRoleList.size() > 0){
+								roleIds = userRoleList.stream().map(SaveUserInfoByProjectDTO::getRoleId).distinct().collect(Collectors.joining(","));
+							}
+						}
+						List<String> roleNames = this.sysClient.getRoleNames(roleIds).getData();
+						if(roleNames != null && roleNames.size() > 0){
 							vo.setSubmitUserRole(String.join(",", roleNames));
 							vo.setSubmitUserRole(String.join(",", roleNames));
 						}
 						}
 					}
 					}

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

@@ -2,7 +2,6 @@ package org.springblade.manager.feign;
 
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.mixsmart.utils.StringUtils;
 import com.mixsmart.utils.StringUtils;
@@ -10,6 +9,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ContractInfo;
+import org.springblade.manager.entity.ContractRelationJlyz;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.service.IContractInfoService;
 import org.springblade.manager.service.IContractInfoService;
 import org.springblade.manager.service.IWbsTreeContractService;
 import org.springblade.manager.service.IWbsTreeContractService;
@@ -32,6 +32,21 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
 
 
     private final IDictBizClient dictBizClient;
     private final IDictBizClient dictBizClient;
 
 
+    @Override
+    public List<WbsTreeContract> selectQueryCurrentNodeByAncestors(List<String> ids, String contractId) {
+        return this.wbsTreeContractService.selectQueryCurrentNodeByAncestors(ids, contractId);
+    }
+
+    @Override
+    public List<WbsTreeContract> selectQueryValueLikeNodeName(String queryValue, String contractId) {
+        return this.wbsTreeContractService.selectQueryValueLikeNodeName(queryValue, contractId);
+    }
+
+    @Override
+    public List<ContractRelationJlyz> selectContractRelationInfo(String contractId) {
+        return this.wbsTreeContractService.selectContractRelationInfo(contractId);
+    }
+
     @Override
     @Override
     public Long countChildByPrimaryKeyId(String primaryKeyId) {
     public Long countChildByPrimaryKeyId(String primaryKeyId) {
         WbsTreeContract contractTree = this.getContractNodeByPrimaryKeyId(primaryKeyId);
         WbsTreeContract contractTree = this.getContractNodeByPrimaryKeyId(primaryKeyId);

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

@@ -51,10 +51,10 @@ public class WbsTreePrivateClientImpl implements WbsTreePrivateClient {
     private void foreachSetChildList(List<WbsTreeContractTreeVOS> vosResult, List<WbsTreePrivateVO> voList){
     private void foreachSetChildList(List<WbsTreeContractTreeVOS> vosResult, List<WbsTreePrivateVO> voList){
         voList.forEach(wbsTreePrivateVO -> {
         voList.forEach(wbsTreePrivateVO -> {
             WbsTreeContractTreeVOS vos = new WbsTreeContractTreeVOS();
             WbsTreeContractTreeVOS vos = new WbsTreeContractTreeVOS();
-            vos.setId(wbsTreePrivateVO.getId().toString());
+            vos.setId(wbsTreePrivateVO.getId());
             vos.setKey(wbsTreePrivateVO.getId().toString());
             vos.setKey(wbsTreePrivateVO.getId().toString());
             vos.setPrimaryKeyId(wbsTreePrivateVO.getPKeyId().toString());
             vos.setPrimaryKeyId(wbsTreePrivateVO.getPKeyId().toString());
-            vos.setParentId(wbsTreePrivateVO.getParentId().toString());
+            vos.setParentId(wbsTreePrivateVO.getParentId());
             vos.setTitle(wbsTreePrivateVO.getDeptName());
             vos.setTitle(wbsTreePrivateVO.getDeptName());
             vos.setType(wbsTreePrivateVO.getType());
             vos.setType(wbsTreePrivateVO.getType());
             vos.setWbsType(Integer.parseInt(wbsTreePrivateVO.getWbsType()));
             vos.setWbsType(Integer.parseInt(wbsTreePrivateVO.getWbsType()));

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

@@ -12,6 +12,10 @@ import java.util.List;
 
 
 public interface WbsTreeContractMapper extends BaseMapper<WbsTreeContract> {
 public interface WbsTreeContractMapper extends BaseMapper<WbsTreeContract> {
 
 
+    List<WbsTreeContract> selectQueryCurrentNodeByAncestors(@Param("ids") List<String> ids, @Param("contractId") String contractId);
+
+    List<WbsTreeContract> selectQueryValueLikeNodeName(@Param("queryValue") String queryValue,@Param("contractId") String contractId);
+
     Boolean regainRemoveTreeByPrimaryKeyIds(@Param("primaryKeyIds") List<String> primaryKeyIds);
     Boolean regainRemoveTreeByPrimaryKeyIds(@Param("primaryKeyIds") List<String> primaryKeyIds);
 
 
     List<WbsTreeContract> queryContractSubmitWbsTreeByContractId(@Param("contractId")String contractId);
     List<WbsTreeContract> queryContractSubmitWbsTreeByContractId(@Param("contractId")String contractId);

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

@@ -589,4 +589,18 @@
         </where>
         </where>
     </update>
     </update>
 
 
+    <select id="selectQueryValueLikeNodeName" resultMap="ResultMap">
+        select * from m_wbs_tree_contract where is_deleted = 0 and contract_id = #{contractId} and (dept_name like concat('%',#{queryValue},'%') or full_name like concat('%',#{queryValue},'%')) and `type` = '1'
+    </select>
+
+    <select id="selectQueryCurrentNodeByAncestors" resultMap="ResultMap">
+        select * from m_wbs_tree_contract where is_deleted = 0 and contract_id = #{contractId} and `type` = '1' and (
+            parent_id = '0' or parent_id = (select id from m_wbs_tree_contract where parent_id = '0' and contract_id = #{contractId}) or (
+                <foreach collection="ids" item="id" index="index" separator="or">
+                    ancestors like concat('%',#{id},'%')
+                </foreach>
+            )
+        ) group by id order by parent_id,`sort`
+    </select>
+
 </mapper>
 </mapper>

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java

@@ -2,6 +2,7 @@ package org.springblade.manager.service;
 
 
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.manager.dto.WbsTreeContractDTO;
 import org.springblade.manager.dto.WbsTreeContractDTO;
+import org.springblade.manager.entity.ContractRelationJlyz;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.entity.WbsTreePrivate;
@@ -12,6 +13,12 @@ import java.util.List;
 
 
 public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
 public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
 
 
+    List<WbsTreeContract> selectQueryCurrentNodeByAncestors(List<String> ids, String contractId);
+
+    List<WbsTreeContract> selectQueryValueLikeNodeName(String queryValue, String contractId);
+
+    List<ContractRelationJlyz> selectContractRelationInfo(String contractId);
+
     Boolean regainRemoveTreeByPrimaryKeyIds(List<String> primaryKeyIds);
     Boolean regainRemoveTreeByPrimaryKeyIds(List<String> primaryKeyIds);
 
 
     List<WbsTreeContract> queryContractSubmitWbsTreeByContractId(String contractId);
     List<WbsTreeContract> queryContractSubmitWbsTreeByContractId(String contractId);

+ 15 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -40,6 +40,21 @@ public class WbsTreeContractServiceImpl
     private final ConstructionLedgerFeignClient constructionLedgerFeign;
     private final ConstructionLedgerFeignClient constructionLedgerFeign;
     private final WbsTreePrivateMapper wbsTreePrivateMapper;
     private final WbsTreePrivateMapper wbsTreePrivateMapper;
 
 
+    @Override
+    public List<WbsTreeContract> selectQueryCurrentNodeByAncestors(List<String> ids, String contractId) {
+        return this.baseMapper.selectQueryCurrentNodeByAncestors(ids, contractId);
+    }
+
+    @Override
+    public List<WbsTreeContract> selectQueryValueLikeNodeName(String queryValue, String contractId) {
+        return this.baseMapper.selectQueryValueLikeNodeName(queryValue, contractId);
+    }
+
+    @Override
+    public List<ContractRelationJlyz> selectContractRelationInfo(String contractId) {
+        return this.baseMapper.selectContractRelationInfo(Long.parseLong(contractId));
+    }
+
     @Override
     @Override
     public Boolean regainRemoveTreeByPrimaryKeyIds(List<String> primaryKeyIds) {
     public Boolean regainRemoveTreeByPrimaryKeyIds(List<String> primaryKeyIds) {
         return this.baseMapper.regainRemoveTreeByPrimaryKeyIds(primaryKeyIds);
         return this.baseMapper.regainRemoveTreeByPrimaryKeyIds(primaryKeyIds);