|
@@ -31,6 +31,8 @@ import org.springblade.business.service.IContractTreeDrawingsService;
|
|
|
import org.springblade.business.service.ITreeContractFirstService;
|
|
|
import org.springblade.business.vo.FileUserVO;
|
|
|
import org.springblade.business.vo.InformationQueryVO;
|
|
|
+import org.springblade.business.vo.SaveNodeVO;
|
|
|
+import org.springblade.common.utils.SnowFlakeUtil;
|
|
|
import org.springblade.core.mp.support.Condition;
|
|
|
import org.springblade.core.mp.support.Query;
|
|
|
import org.springblade.core.tool.api.R;
|
|
@@ -42,17 +44,16 @@ import org.springblade.manager.feign.ContractClient;
|
|
|
import org.springblade.manager.feign.WbsTreeContractClient;
|
|
|
import org.springblade.manager.feign.WbsTreePrivateClient;
|
|
|
import org.springblade.manager.vo.WbsTreeContractTreeVOS;
|
|
|
-import org.springblade.manager.vo.WbsTreePrivateVO;
|
|
|
import org.springblade.system.entity.DictBiz;
|
|
|
import org.springblade.system.feign.IDictBizClient;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
|
import org.springblade.business.entity.InformationQuery;
|
|
|
import org.springblade.business.service.IInformationQueryService;
|
|
|
import org.springblade.core.boot.ctrl.BladeController;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* 资料填报及查询控制器
|
|
@@ -100,7 +101,7 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
//获取合同段,检查是否是监理合同段
|
|
|
ContractInfo contractInfo = this.contractClient.getContractById(Long.parseLong(contractId));
|
|
|
|
|
|
- if(new Integer("2").equals(contractInfo.getContractType())){
|
|
|
+ if(contractInfo.getContractType() != null && new Integer("2").equals(contractInfo.getContractType())){
|
|
|
//监理合同段
|
|
|
List<WbsTreeContractTreeVOS> childList = this.wbsTreeContractClient.lazyTree(StringUtils.isNotEmpty(parentId) ? Long.parseLong(parentId) : 0, contractId, contractIdRelation, contractInfo.getContractType());
|
|
|
if(childList != null && childList.size() == 1){
|
|
@@ -208,26 +209,136 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
return R.data(this.wbsTreeContractClient.removeContractTreeNode(ids));
|
|
|
}
|
|
|
|
|
|
-// /**
|
|
|
-// * 新增子节点
|
|
|
-// * @param contractNodePrimaryKeyId 新增的节点所在位置,即当前点出菜单栏的节点PrimaryKeyId
|
|
|
-// * @param projectNodePrimaryKeyId 被选中的新增节点
|
|
|
-// * @return 新增结果
|
|
|
-// */
|
|
|
-// @PostMapping("/saveContractTreeNode")
|
|
|
-// @ApiOperationSupport(order = 10)
|
|
|
-// @ApiOperation(value = "新增节点及其子节点")
|
|
|
-// @ApiImplicitParams({
|
|
|
-// @ApiImplicitParam(name = "contractNodePrimaryKeyId", value = "新增的节点所在位置,即当前点出菜单栏的节点PrimaryKeyId", required = true),
|
|
|
-// @ApiImplicitParam(name = "projectNodePrimaryKeyId", value = "被选中的新增节点", required = true)
|
|
|
-// })
|
|
|
-// public R<Boolean> saveContractTreeNode(@RequestParam String contractNodePrimaryKeyId, @RequestParam String projectNodePrimaryKeyId){
|
|
|
-// //先获取当前节点的信息
|
|
|
-// WbsTreeContract treeContract = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(contractNodePrimaryKeyId));
|
|
|
-// //检查当前节点下是否添加了子节点
|
|
|
-//
|
|
|
-// return null;
|
|
|
-// }
|
|
|
+ /**
|
|
|
+ * 新增子节点
|
|
|
+ * @return 新增结果
|
|
|
+ */
|
|
|
+ @PostMapping("/saveContractTreeNode")
|
|
|
+ @ApiOperationSupport(order = 10)
|
|
|
+ @ApiOperation(value = "新增节点及其子节点")
|
|
|
+ public R<Boolean> saveContractTreeNode(@RequestBody SaveNodeVO vo){
|
|
|
+ //先获取当前节点的信息
|
|
|
+ WbsTreeContract treeContract = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(vo.getCurrentNodePrimaryKeyId()));
|
|
|
+
|
|
|
+ //半选
|
|
|
+ List<String> halfSelectedList = vo.getHalfSelectedList();
|
|
|
+ //全选
|
|
|
+ List<String> allSelectedList = vo.getAllSelectedList();
|
|
|
+ //所有相关节点集合
|
|
|
+ List<WbsTreePrivate> selectedNodeList = new ArrayList<>();
|
|
|
+
|
|
|
+ //检查新增类型
|
|
|
+ if("1".equals(vo.getSaveType())){
|
|
|
+ //todo 当前节点及其子节点
|
|
|
+ //当前节点及其子节点时,半选说明其下的子节点并不是全部选中的,所以这时候只需要根据全选的查询其全部子节点即可
|
|
|
+ if(allSelectedList != null && allSelectedList.size() > 0){
|
|
|
+ selectedNodeList = this.wbsTreePrivateClient.queryByPKeyIds(allSelectedList);
|
|
|
+ //剔除与当前操作节点相同的ID
|
|
|
+ selectedNodeList.removeIf(wbsTreePrivate -> vo.getCurrentNodePrimaryKeyId().equals(wbsTreePrivate.getId().toString()));
|
|
|
+
|
|
|
+ //全选的集合则进一步向下查询
|
|
|
+ List<WbsTreePrivate> childList = new ArrayList<>();
|
|
|
+ this.foreachQueryChild(selectedNodeList, childList);
|
|
|
+
|
|
|
+ if(childList.size() > 0){
|
|
|
+ //处理重复的数据
|
|
|
+ Iterator<WbsTreePrivate> iterator = childList.iterator();
|
|
|
+ while (iterator.hasNext()){
|
|
|
+ WbsTreePrivate next = iterator.next();
|
|
|
+ for(WbsTreePrivate treePrivate : selectedNodeList){
|
|
|
+ if(treePrivate.getPKeyId().equals(next.getPKeyId())){
|
|
|
+ //删掉重复数据
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //处理完重复数据后,设置进集合中
|
|
|
+ selectedNodeList.addAll(childList);
|
|
|
+ }
|
|
|
+ //处理半选
|
|
|
+ if(halfSelectedList != null && halfSelectedList.size() > 0){
|
|
|
+ List<WbsTreePrivate> halfSelectedNodeList = this.wbsTreePrivateClient.queryByPKeyIds(halfSelectedList);
|
|
|
+ //剔除与当前操作节点相同的ID
|
|
|
+ halfSelectedNodeList.removeIf(wbsTreePrivate -> vo.getCurrentNodePrimaryKeyId().equals(wbsTreePrivate.getId().toString()));
|
|
|
+ //设置到集合中
|
|
|
+ selectedNodeList.addAll(halfSelectedNodeList);
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ //todo 仅当前节点操作
|
|
|
+ if(halfSelectedList != null && halfSelectedList.size() > 0){
|
|
|
+ selectedNodeList = this.wbsTreePrivateClient.queryByPKeyIds(halfSelectedList);
|
|
|
+ //剔除与当前操作节点相同的ID
|
|
|
+ selectedNodeList.removeIf(wbsTreePrivate -> vo.getCurrentNodePrimaryKeyId().equals(wbsTreePrivate.getId().toString()));
|
|
|
+ }
|
|
|
+
|
|
|
+ if(allSelectedList != null && allSelectedList.size() > 0){
|
|
|
+ List<WbsTreePrivate> allSelectedNodeList = this.wbsTreePrivateClient.queryByPKeyIds(allSelectedList);
|
|
|
+ //剔除与当前操作节点相同的ID
|
|
|
+ allSelectedNodeList.removeIf(wbsTreePrivate -> vo.getCurrentNodePrimaryKeyId().equals(wbsTreePrivate.getId().toString()));
|
|
|
+ //设置到集合中
|
|
|
+ selectedNodeList.addAll(allSelectedNodeList);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //保存集合
|
|
|
+ List<WbsTreeContract> saveList = new ArrayList<>();
|
|
|
+ if(selectedNodeList.size() > 0){
|
|
|
+ //重塑关键信息
|
|
|
+ Map<Long, Long> OldIdToNewIdMap = new HashMap<>();
|
|
|
+ selectedNodeList.forEach(half -> OldIdToNewIdMap.put(half.getId(), SnowFlakeUtil.getId()));
|
|
|
+
|
|
|
+ //处理数据
|
|
|
+ selectedNodeList.forEach(half -> {
|
|
|
+ //处理合同段数据
|
|
|
+ WbsTreeContract newData = new WbsTreeContract();
|
|
|
+ BeanUtils.copyProperties(half, newData);
|
|
|
+
|
|
|
+ //重塑pKeyId、id和parentId
|
|
|
+ newData.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ newData.setId(OldIdToNewIdMap.containsKey(half.getId()) ? OldIdToNewIdMap.get(half.getId()) : SnowFlakeUtil.getId());
|
|
|
+ newData.setParentId(OldIdToNewIdMap.containsKey(half.getParentId()) ? OldIdToNewIdMap.get(half.getParentId()) : treeContract.getId().equals(half.getParentId()) ? treeContract.getId() : SnowFlakeUtil.getId());
|
|
|
+ //记录旧ID
|
|
|
+ newData.setOldId(half.getId().toString());
|
|
|
+ //设置合同段等信息
|
|
|
+ newData.setWbsType(treeContract.getWbsType());
|
|
|
+ newData.setContractId(vo.getContractId());
|
|
|
+ newData.setContractIdRelation(treeContract.getContractIdRelation());
|
|
|
+ newData.setContractType(treeContract.getContractType());
|
|
|
+ newData.setCreateTime(new Date());
|
|
|
+ //设置到保存集合中
|
|
|
+ saveList.add(newData);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ if(saveList.size() > 0){
|
|
|
+ this.wbsTreeContractClient.saveBatch(saveList);
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.data(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 循环查询子节点
|
|
|
+ * @param parentList 父节点集合
|
|
|
+ * @param childList 保存集合
|
|
|
+ */
|
|
|
+ private void foreachQueryChild(List<WbsTreePrivate> parentList, List<WbsTreePrivate> childList){
|
|
|
+ parentList.forEach(parent -> {
|
|
|
+ if(!new Integer("6").equals(parent.getDeptCategory())){
|
|
|
+ //查询子节点
|
|
|
+ List<WbsTreePrivate> childs = this.wbsTreePrivateClient.queryChildByParentId(parent);
|
|
|
+ if(childs != null && childs.size() > 0){
|
|
|
+ //添加入结果集
|
|
|
+ childList.addAll(childs);
|
|
|
+ //还有子级,继续向下
|
|
|
+ this.foreachQueryChild(childs, childList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 懒加载项目级工程划分树
|
|
@@ -242,7 +353,7 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
@ApiImplicitParam(name = "projectId", value = "项目ID"),
|
|
|
@ApiImplicitParam(name = "id", value = "点击节点ID")
|
|
|
})
|
|
|
- public R<List<WbsTreePrivateVO>> queryWbsTreePrivateByProjectIdAndId(@RequestParam String projectId, @RequestParam String id){
|
|
|
+ public R<List<WbsTreeContractTreeVOS>> queryWbsTreePrivateByProjectIdAndId(@RequestParam String projectId, @RequestParam String id){
|
|
|
return R.data(this.wbsTreePrivateClient.queryWbsTreePrivateByProjectIdAndId(projectId, Long.parseLong(id)));
|
|
|
}
|
|
|
|