|
@@ -62,7 +62,7 @@ import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
- * 资料填报及查询控制器
|
|
|
+ * 资料填报及查询控制器
|
|
|
*
|
|
|
* @author BladeX
|
|
|
* @since 2022-06-08
|
|
@@ -73,1025 +73,1041 @@ import java.util.stream.Collectors;
|
|
|
@Api(tags = "资料查询接口")
|
|
|
public class InformationWriteQueryController extends BladeController {
|
|
|
|
|
|
- private final ContractClient contractClient;
|
|
|
-
|
|
|
- private final WbsTreeContractClient wbsTreeContractClient;
|
|
|
-
|
|
|
- private final WbsTreePrivateClient wbsTreePrivateClient;
|
|
|
-
|
|
|
- private final IInformationQueryService informationQueryService;
|
|
|
-
|
|
|
- private final IDictBizClient dictBizClient;
|
|
|
-
|
|
|
- private final IContractTreeDrawingsService contractTreeDrawingsService;
|
|
|
-
|
|
|
- private final ClientTreePublicCodeClientImpl clientTreePublicCodeClient;
|
|
|
-
|
|
|
- private final ITreeContractFirstService treeContractFirstService;
|
|
|
-
|
|
|
- private final IConstructionLedgerService constructionLedgerService;
|
|
|
-
|
|
|
- private final TaskClient taskClient;
|
|
|
-
|
|
|
- private final OperationLogClient operationLogClient;
|
|
|
-
|
|
|
- /**
|
|
|
- * 本地验签
|
|
|
- */
|
|
|
- @PostMapping("/localVerify")
|
|
|
- @ApiOperationSupport(order = 21)
|
|
|
- @ApiOperation(value = "本地验签")
|
|
|
- public R<Boolean> localVerify(@RequestParam String ids){
|
|
|
- return R.data(false);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 在线验签
|
|
|
- */
|
|
|
- @PostMapping("/onlineVerify")
|
|
|
- @ApiOperationSupport(order = 21)
|
|
|
- @ApiOperation(value = "在线验签")
|
|
|
- public R<Boolean> onlineVerify(@RequestParam String ids){
|
|
|
- return R.data(false);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量打印
|
|
|
- */
|
|
|
- @PostMapping("/batchPrint")
|
|
|
- @ApiOperationSupport(order = 20)
|
|
|
- @ApiOperation(value = "批量打印")
|
|
|
- public R<String> batchPrint(@RequestParam String ids){
|
|
|
- return R.data(null);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量下载
|
|
|
- */
|
|
|
- @PostMapping("/batchDownloadFileToZip")
|
|
|
- @ApiOperationSupport(order = 19)
|
|
|
- @ApiOperation(value = "批量下载")
|
|
|
- public void batchDownloadFileToZip(String ids, HttpServletResponse response){
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量废除
|
|
|
- */
|
|
|
- @PostMapping("/batchAbolish")
|
|
|
- @ApiOperationSupport(order = 18)
|
|
|
- @ApiOperation(value = "批量废除")
|
|
|
- public R<Boolean> batchAbolish(@RequestParam String ids){
|
|
|
- //获取所有相关任务记录
|
|
|
- List<Task> taskList = this.taskClient.queryTaskListByFormDataId(ids);
|
|
|
- if(taskList != null && taskList.size() > 0){
|
|
|
- //执行废除
|
|
|
- for(Task task : taskList){
|
|
|
- if(new Integer("1").equals(task.getStatus())){
|
|
|
- //正在审批,调用废除
|
|
|
- this.taskClient.abolishTask(task);
|
|
|
- } else if(new Integer("2").equals(task.getStatus())) {
|
|
|
- //已审批的任务,修改业务数据的审批状态为未上报并撤签即可
|
|
|
- this.informationQueryService.update(Wrappers.<InformationQuery>lambdaUpdate().set(InformationQuery::getStatus, 3).in(InformationQuery::getId, Arrays.asList(task.getFormDataId().split(","))));
|
|
|
- // todo ================== 调用撤签
|
|
|
- // todo ================== 调用撤签
|
|
|
- }
|
|
|
- //保存操作记录
|
|
|
- this.operationLogClient.saveUserOperationLog(6, "资料管理", "工序资料", task.getFormDataId());
|
|
|
- }
|
|
|
- }
|
|
|
- return R.data(true);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量上报
|
|
|
- */
|
|
|
- @PostMapping("/batchTask")
|
|
|
- @ApiOperationSupport(order = 17)
|
|
|
- @ApiOperation(value = "批量上报")
|
|
|
- public R<Boolean> batchTask(@RequestBody StartTaskVO startTaskVO){
|
|
|
- if(StringUtils.isNotEmpty(startTaskVO.getIds())){
|
|
|
- //获取数据源id
|
|
|
- String[] ids = startTaskVO.getIds().split(",");
|
|
|
- if(ids.length > 0){
|
|
|
- for(String id : ids){
|
|
|
- //生成任务实体
|
|
|
- TaskVO taskVO = new TaskVO();
|
|
|
- BeanUtils.copyProperties(startTaskVO, taskVO);
|
|
|
- //设置数据源指向
|
|
|
- taskVO.setFormDataId(id);
|
|
|
- //设置上报类型
|
|
|
- taskVO.setApprovalType(1);
|
|
|
- //上报
|
|
|
- if(this.taskClient.startTask(taskVO).getData()){
|
|
|
- //查询审批人
|
|
|
- List<TaskParallel> taskUsers = this.taskClient.queryApprovalUser(id);
|
|
|
- if(taskUsers.size() > 0){
|
|
|
- //生成审批人信息
|
|
|
- StringBuilder stringBuilder = new StringBuilder();
|
|
|
- taskUsers.forEach(users -> stringBuilder.append(",").append(users.getTaskUser()).append("-").append(users.getTaskUserName()));
|
|
|
- //修改记录
|
|
|
- this.informationQueryService.update(Wrappers.<InformationQuery>lambdaUpdate().set(InformationQuery::getStatus, 1).set(InformationQuery::getAuditUserIdAndName, stringBuilder.substring(1)).eq(InformationQuery::getId, id));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //保存操作记录
|
|
|
- this.operationLogClient.saveUserOperationLog(5, "资料管理", "工序资料", startTaskVO.getIds());
|
|
|
- return R.data(true);
|
|
|
- }
|
|
|
- }
|
|
|
- return R.data(false);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 自定义排序
|
|
|
- */
|
|
|
- @PostMapping("/diySort")
|
|
|
- @ApiOperationSupport(order = 16)
|
|
|
- @ApiOperation(value = "自定义排序")
|
|
|
- public R<Boolean> diySort(@RequestBody DiySortVO vo){
|
|
|
- //获取排序集合
|
|
|
- List<String> sortList = vo.getSortList();
|
|
|
- if(sortList.size() > 0){
|
|
|
- for(int i = 0, l = sortList.size(); i < l; i ++){
|
|
|
- try{
|
|
|
- WbsTreeContract newData = new WbsTreeContract();
|
|
|
- newData.setPKeyId(Long.parseLong(sortList.get(i)));
|
|
|
- newData.setSort(i);
|
|
|
- //修改排序
|
|
|
- this.wbsTreeContractClient.updateContractNodeParameter(newData);
|
|
|
- }catch (Exception e){
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return R.data(false);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 复制节点
|
|
|
- */
|
|
|
- @PostMapping("/copyContractTreeNode")
|
|
|
- @ApiOperationSupport(order = 15)
|
|
|
- @ApiOperation(value = "复制节点")
|
|
|
- public R<Boolean> copyContractTreeNode(@RequestBody CopyContractTreeNodeVO vo){
|
|
|
-
|
|
|
- //首先查询需要复制的节点及其下级所有子节点的信息
|
|
|
- WbsTreeContract needCopyNode = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
|
|
|
-
|
|
|
- List<WbsTreeContract> parentList = new ArrayList<>(), childList = new ArrayList<>(), allList = new ArrayList<>(), saveList = new ArrayList<>();
|
|
|
- //新增施工台账
|
|
|
- List<ConstructionLedger> saveLedger = new ArrayList<>();
|
|
|
-
|
|
|
- parentList.add(needCopyNode);
|
|
|
- //查询所有有效子节点
|
|
|
- this.foreachQueryChildContract(parentList, childList);
|
|
|
- allList.addAll(parentList);
|
|
|
- allList.addAll(childList);
|
|
|
-
|
|
|
- if("1".equals(vo.getCopyType())){
|
|
|
- if(StringUtils.isNotEmpty(vo.getNeedCopyPrimaryKeyId())){
|
|
|
- WbsTreeContract parent = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getParentPrimaryKeyId());
|
|
|
- //重塑关键信息
|
|
|
- Map<Long,Long> oldToNewIdMap = new HashMap<>();
|
|
|
- allList.forEach(node -> oldToNewIdMap.put(node.getId(), SnowFlakeUtil.getId()));
|
|
|
- //todo 单份复制
|
|
|
- allList.forEach(node -> {
|
|
|
- WbsTreeContract newData = new WbsTreeContract();
|
|
|
- BeanUtils.copyProperties(node, newData);
|
|
|
-
|
|
|
- //重塑关键信息
|
|
|
- //重塑primaryKeyId
|
|
|
- newData.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- //设置旧ID
|
|
|
- newData.setOldId(node.getId().toString());
|
|
|
- //设置新ID
|
|
|
- newData.setId(oldToNewIdMap.containsKey(node.getId()) ? oldToNewIdMap.get(node.getId()) : SnowFlakeUtil.getId());
|
|
|
- //设置父节点ID
|
|
|
- if(vo.getNeedCopyPrimaryKeyId().equals(node.getPKeyId().toString())){
|
|
|
- //找到复制的节点,将parentId更改为 parent.getId()
|
|
|
- newData.setParentId(parent.getId());
|
|
|
- //设置新名称
|
|
|
- newData.setDeptName(vo.getNeedCopyNodeName());
|
|
|
- newData.setFullName(vo.getNeedCopyNodeName());
|
|
|
- } else {
|
|
|
- newData.setParentId(oldToNewIdMap.containsKey(node.getParentId()) ? oldToNewIdMap.get(node.getParentId()) : SnowFlakeUtil.getId());
|
|
|
- }
|
|
|
- newData.setCreateTime(new Date());
|
|
|
- newData.setUpdateTime(new Date());
|
|
|
- newData.setCreateUser(AuthUtil.getUserId());
|
|
|
- //保存到集合中
|
|
|
- saveList.add(newData);
|
|
|
-
|
|
|
- if(new Integer("6").equals(node.getDeptCategory())){
|
|
|
- //生成施工日志
|
|
|
- this.createLedger(newData, saveLedger);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
- //todo 多份复制
|
|
|
- //获取需要复制到的位置集合
|
|
|
- List<CopyContractTreeNodeVO.CopyBatch> copyBatches = vo.getCopyBatchToPaths();
|
|
|
- if(copyBatches.size() > 0){
|
|
|
- copyBatches.forEach(copyBatch -> {
|
|
|
- //查询复制到的位置信息
|
|
|
- WbsTreeContract copyPath = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(copyBatch.getPrimaryKeyId());
|
|
|
-
|
|
|
- //重塑关键信息
|
|
|
- Map<Long,Long> oldToNewIdMap = new HashMap<>();
|
|
|
- allList.forEach(node -> oldToNewIdMap.put(node.getId(), SnowFlakeUtil.getId()));
|
|
|
-
|
|
|
- allList.forEach(node -> {
|
|
|
- WbsTreeContract newData = new WbsTreeContract();
|
|
|
- BeanUtils.copyProperties(node, newData);
|
|
|
-
|
|
|
- //重塑关键信息
|
|
|
- //设置旧ID
|
|
|
- newData.setOldId(node.getId().toString());
|
|
|
- //重塑primaryKeyId
|
|
|
- newData.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- //设置新ID
|
|
|
- newData.setId(oldToNewIdMap.containsKey(node.getId()) ? oldToNewIdMap.get(node.getId()) : SnowFlakeUtil.getId());
|
|
|
- //设置父节点ID
|
|
|
- if(vo.getNeedCopyPrimaryKeyId().equals(node.getPKeyId().toString())){
|
|
|
- //找到复制的节点,将parentId更改为 parent.getId()
|
|
|
- newData.setParentId(copyPath.getId());
|
|
|
- //设置新名称
|
|
|
- newData.setDeptName(copyBatch.getNodeName());
|
|
|
- newData.setFullName(copyBatch.getNodeName());
|
|
|
- } else {
|
|
|
- newData.setParentId(oldToNewIdMap.containsKey(node.getParentId()) ? oldToNewIdMap.get(node.getParentId()) : SnowFlakeUtil.getId());
|
|
|
- }
|
|
|
- newData.setCreateTime(new Date());
|
|
|
- newData.setUpdateTime(new Date());
|
|
|
- newData.setCreateUser(AuthUtil.getUserId());
|
|
|
-
|
|
|
- //重塑父节点关联关系
|
|
|
- String ancestors = newData.getAncestors();
|
|
|
- if(StringUtils.isNotEmpty(ancestors)){
|
|
|
- //重组后的链表
|
|
|
- StringBuilder stringBuilder = new StringBuilder();
|
|
|
- //拆分重组
|
|
|
- String[] ancestorsArray = ancestors.split(",");
|
|
|
- for(String oldParentId : ancestorsArray){
|
|
|
- if(StringUtils.isNotEmpty(oldParentId)){
|
|
|
- //获取新的
|
|
|
- Long newParentId = oldToNewIdMap.get(Long.parseLong(oldParentId));
|
|
|
- //如果新的id为空,说明不变
|
|
|
- stringBuilder.append(",").append(newParentId == null ? oldParentId : newParentId);
|
|
|
- }
|
|
|
- }
|
|
|
- //将新链表设置进对象中
|
|
|
- newData.setAncestors(stringBuilder.substring(1));
|
|
|
- }
|
|
|
-
|
|
|
- //保存到集合中
|
|
|
- saveList.add(newData);
|
|
|
-
|
|
|
- if(new Integer("6").equals(node.getDeptCategory())){
|
|
|
- //生成施工日志
|
|
|
- this.createLedger(newData, saveLedger);
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- return this.saveOrCopyNodeTree(saveList, saveLedger);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 生成施工日志记录
|
|
|
- */
|
|
|
- private void createLedger(WbsTreeContract newData, List<ConstructionLedger> saveLedger){
|
|
|
- //工序,需要新增施工台账
|
|
|
- ConstructionLedger ledger = new ConstructionLedger();
|
|
|
- ledger.setSite(newData.getDeptName());
|
|
|
- ledger.setIsBeton(newData.getIsConcrete());
|
|
|
- ledger.setWbsId(newData.getPKeyId());
|
|
|
- ledger.setContractId(Long.parseLong(newData.getContractId()));
|
|
|
- ledger.setProjectId(Long.parseLong(newData.getProjectId()));
|
|
|
- ledger.setCreateTime(new Date());
|
|
|
- ledger.setCreateUser(AuthUtil.getUserId());
|
|
|
- ledger.setIsDeleted(0);
|
|
|
- saveLedger.add(ledger);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 循环查询子节点
|
|
|
- * @param parentList 父节点集合
|
|
|
- * @param childList 保存集合
|
|
|
- */
|
|
|
- private void foreachQueryChildContract(List<WbsTreeContract> parentList, List<WbsTreeContract> childList){
|
|
|
- parentList.forEach(parent -> {
|
|
|
- if(!new Integer("6").equals(parent.getDeptCategory())){
|
|
|
- //查询子节点
|
|
|
- List<WbsTreeContract> childs = this.wbsTreeContractClient.queryChildByParentId(parent, "notQueryTable");
|
|
|
- if(childs != null && childs.size() > 0){
|
|
|
- //添加入结果集
|
|
|
- childList.addAll(childs);
|
|
|
- //还有子级,继续向下
|
|
|
- this.foreachQueryChildContract(childs, childList);
|
|
|
- }
|
|
|
- } else {
|
|
|
- //工序,则查询对应的表格数据
|
|
|
- List<WbsTreeContract> childs = this.wbsTreeContractClient.queryChildByParentId(parent, "queryTable");
|
|
|
- if(childs != null && childs.size() > 0){
|
|
|
- //添加入结果集
|
|
|
- childList.addAll(childs);
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 导图结构树节点查询
|
|
|
- * @return 结果
|
|
|
- */
|
|
|
- @GetMapping("/queryMappingStructureTree")
|
|
|
- @ApiOperationSupport(order = 14)
|
|
|
- @ApiOperation(value = "导图结构树节点查询")
|
|
|
- @ApiImplicitParams({
|
|
|
- @ApiImplicitParam(name = "parentId", value = "父节点,首次进入传0、null、''", required = true),
|
|
|
- @ApiImplicitParam(name = "wbsType", value = "模板类型, 1质检,2试验", required = true),
|
|
|
- @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
- })
|
|
|
- public R<List<WbsTreeContractTreeVOS>> queryMappingStructureTree(@RequestParam String parentId, @RequestParam Integer wbsType, @RequestParam String contractId, @RequestParam String contractIdRelation){
|
|
|
- List<WbsTreeContractTreeVOS> result;
|
|
|
-
|
|
|
- //获取合同段,检查是否是监理合同段
|
|
|
- ContractInfo contractInfo = this.contractClient.getContractById(Long.parseLong(contractId));
|
|
|
-
|
|
|
- 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());
|
|
|
- //设置合同段根节点的名称
|
|
|
- this.setRootNodeName(parentId, childList);
|
|
|
- if(childList != null && childList.size() == 1){
|
|
|
- //需要向下展开
|
|
|
- this.foreachQueryChildNode(childList, childList.get(0).getContractIdRelation(), contractInfo.getContractType());
|
|
|
- }
|
|
|
- if(StringUtils.isEmpty(contractIdRelation) && "0".equals(parentId)){
|
|
|
- //给个顶点
|
|
|
- WbsTreeContractTreeVOS vos = new WbsTreeContractTreeVOS();
|
|
|
- vos.setTitle(contractInfo.getContractName());
|
|
|
- vos.setChildren(childList);
|
|
|
- result = new ArrayList<>();
|
|
|
- result.add(vos);
|
|
|
- } else {
|
|
|
- result = childList;
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
- if(StringUtils.isEmpty(parentId) || "0".equals(parentId)){
|
|
|
- //直接返回
|
|
|
- result = this.clientTreePublicCodeClient.queryContractWbsTreeByContractIdAndType(contractId, wbsType, "0");
|
|
|
- } else {
|
|
|
- //不是根节点,则获取子节点
|
|
|
- result = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, 1, parentId);
|
|
|
- //判断当前节点下是不是只有一个子节点
|
|
|
- if(result != null && result.size() == 1){
|
|
|
- this.foreachQueryChildNode(result, contractId, contractInfo.getContractType());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(result != null){
|
|
|
- //获取当前父节点下所有工序节点及填报资料
|
|
|
- List<QueryProcessDataVO> queryDataResult;
|
|
|
- if(new Integer("2").equals(contractInfo.getContractType())){
|
|
|
- queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 2, contractIdRelation);
|
|
|
- } else {
|
|
|
- queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 1, contractId);
|
|
|
- }
|
|
|
- result.forEach(vos -> {
|
|
|
- if(StringUtils.isEmpty(parentId) || "0".equals(parentId)){
|
|
|
- vos.setTitle(contractInfo.getContractName());
|
|
|
- }
|
|
|
- if(queryDataResult != null && queryDataResult.size() > 0){
|
|
|
- //设置颜色
|
|
|
- this.setNodeColor(vos, queryDataResult, false);
|
|
|
- }
|
|
|
- //处理子节点
|
|
|
- if(vos.getChildren() != null && vos.getChildren().size() > 0){
|
|
|
- //循环处理节点颜色
|
|
|
- this.foreachSetNodeColor(vos.getChildren(), queryDataResult);
|
|
|
- }
|
|
|
-
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- return R.data(result);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 循环处理节点颜色
|
|
|
- */
|
|
|
- private void foreachSetNodeColor(List<WbsTreeContractTreeVOS> children, List<QueryProcessDataVO> queryDataResult){
|
|
|
- children.forEach(vos -> {
|
|
|
- this.setNodeColor(vos, queryDataResult, false);
|
|
|
- if(vos.getChildren() != null && vos.getChildren().size() > 0){
|
|
|
- //进一步处理
|
|
|
- this.foreachSetNodeColor(vos.getChildren(), queryDataResult);
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 监理合同段设置关联合同段的根节点名称
|
|
|
- */
|
|
|
- private void setRootNodeName(@RequestParam String parentId, List<WbsTreeContractTreeVOS> childList) {
|
|
|
- if(StringUtils.isEmpty(parentId) || "0".equals(parentId)){
|
|
|
- if(childList != null && childList.size() > 0){
|
|
|
- childList.forEach(treeNode -> {
|
|
|
- ContractInfo clientContract = this.contractClient.getContractById(Long.parseLong(treeNode.getContractIdRelation()));
|
|
|
- if(clientContract != null){
|
|
|
- treeNode.setTitle(clientContract.getContractName());
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 如果子节点只有一个,则进一步查询该子节点的下级节点
|
|
|
- * @param result 子节点集合
|
|
|
- */
|
|
|
- private void foreachQueryChildNode(List<WbsTreeContractTreeVOS> result, String contractId, Integer initialContractType){
|
|
|
- result.forEach(vos -> {
|
|
|
- String id = new Integer("2").equals(initialContractType) ? vos.getPrimaryKeyId() : vos.getId();
|
|
|
- String primaryKeyId = new Integer("2").equals(initialContractType) ? vos.getId() : vos.getPrimaryKeyId();
|
|
|
-
|
|
|
- List<WbsTreeContractTreeVOS> child = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, 1, id);
|
|
|
- if(child != null && child.size() == 1){
|
|
|
- //如果子节点还是只有一个,则进一步向下查询
|
|
|
- this.foreachQueryChildNode(child, contractId, initialContractType);
|
|
|
- }
|
|
|
- //判断当前节点是否被标记为首件
|
|
|
- TreeContractFirst first = this.treeContractFirstService.getOne(Wrappers.<TreeContractFirst>lambdaQuery().eq(TreeContractFirst::getIsDeleted, 0).eq(TreeContractFirst::getWbsNodeId, primaryKeyId));
|
|
|
- vos.setIsFirst(first != null);
|
|
|
-
|
|
|
- vos.setChildren(child);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 修改节点信息
|
|
|
- * @return 修改结果
|
|
|
- */
|
|
|
- @PostMapping("/updateContractNodeParameter")
|
|
|
- @ApiOperationSupport(order = 13)
|
|
|
- @ApiOperation(value = "修改节点信息")
|
|
|
- @ApiImplicitParams({
|
|
|
- @ApiImplicitParam(name = "pKeyId", value = "节点的primaryKeyId", required = true),
|
|
|
- @ApiImplicitParam(name = "deptName", value = "节点的title", required = true),
|
|
|
- @ApiImplicitParam(name = "partitionCode", value = "划分编号")
|
|
|
- })
|
|
|
- public R<Boolean> updateContractNodeParameter(@RequestParam Long pKeyId, @RequestParam String deptName, @RequestParam String partitionCode){
|
|
|
- WbsTreeContract node = new WbsTreeContract();
|
|
|
- node.setPKeyId(pKeyId);
|
|
|
- node.setDeptName(deptName);
|
|
|
- node.setPartitionCode(partitionCode);
|
|
|
-
|
|
|
- //只允许修改节点名称
|
|
|
- if(StringUtils.isEmpty(node.getDeptName()) || "null".equals(String.valueOf(node.getPKeyId())) || StringUtils.isEmpty(String.valueOf(node.getPKeyId()))){
|
|
|
- return R.data(-1, false , "缺少参数");
|
|
|
- }
|
|
|
- //保存操作记录
|
|
|
- this.operationLogClient.saveUserOperationLog(3, "资料管理", "工序资料", pKeyId);
|
|
|
- return R.data(this.wbsTreeContractClient.updateContractNodeParameter(node));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取节点信息
|
|
|
- * @param primaryKeyId 节点的primaryKeyId
|
|
|
- * @return 节点信息
|
|
|
- */
|
|
|
- @GetMapping("/getContractNodeByPrimaryKeyId")
|
|
|
- @ApiOperationSupport(order = 12)
|
|
|
- @ApiOperation(value = "获取节点信息")
|
|
|
- @ApiImplicitParam(name = "primaryKeyId", value = "节点的primaryKeyId")
|
|
|
- public R<WbsTreeContract> getContractNodeByPrimaryKeyId(@RequestParam String primaryKeyId){
|
|
|
- return R.data(this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(primaryKeyId));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除节点
|
|
|
- * @param ids 节点的primaryKeyId
|
|
|
- * @return 删除结果
|
|
|
- */
|
|
|
- @PostMapping("/removeContractTreeNode")
|
|
|
- @ApiOperationSupport(order = 11)
|
|
|
- @ApiOperation(value = "删除节点")
|
|
|
- @ApiImplicitParam(name = "ids", value = "节点的primaryKeyId")
|
|
|
- public R<Boolean> removeContractTreeNode(@RequestParam String ids){
|
|
|
- //保存操作记录
|
|
|
- this.operationLogClient.saveUserOperationLog(4, "资料管理", "工序资料", ids);
|
|
|
- return R.data(this.wbsTreeContractClient.removeContractTreeNode(ids));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 新增子节点
|
|
|
- * @return 新增结果
|
|
|
- */
|
|
|
- @PostMapping("/saveContractTreeNode")
|
|
|
- @ApiOperationSupport(order = 10)
|
|
|
- @ApiOperation(value = "新增节点及其子节点")
|
|
|
- public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo){
|
|
|
- //先获取当前节点的信息
|
|
|
- WbsTreeContract treeContract = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(vo.getCurrentNodePrimaryKeyId()));
|
|
|
-
|
|
|
- //半选
|
|
|
- List<AddContractTreeNodeVO.Node> halfSelectedNodeList = vo.getHalfSelectedList();
|
|
|
- //全选
|
|
|
- List<AddContractTreeNodeVO.Node> allSelectedNodeList = vo.getAllSelectedList();
|
|
|
- //勾选的数据
|
|
|
- List<AddContractTreeNodeVO.Node> selectList = new ArrayList<>();
|
|
|
- selectList.addAll(halfSelectedNodeList);
|
|
|
- selectList.addAll(allSelectedNodeList);
|
|
|
-
|
|
|
- //所有相关节点集合
|
|
|
- List<WbsTreePrivate> selectedNodeList = new ArrayList<>();
|
|
|
-
|
|
|
- //检查新增类型
|
|
|
- if("1".equals(vo.getSaveType())){
|
|
|
- //todo 当前节点及其子节点
|
|
|
- //当前节点及其子节点时,半选说明其下的子节点并不是全部选中的,所以这时候只需要根据全选的查询其全部子节点即可
|
|
|
- if(allSelectedNodeList.size() > 0){
|
|
|
- //获取主键
|
|
|
- List<String> allSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).distinct().collect(Collectors.toList());
|
|
|
- //查询对应数据
|
|
|
- selectedNodeList = this.wbsTreePrivateClient.queryByPKeyIds(allSelectedList);
|
|
|
- //剔除与当前操作节点相同的ID
|
|
|
- selectedNodeList.removeIf(wbsTreePrivate -> treeContract.getId().equals(wbsTreePrivate.getId()));
|
|
|
-
|
|
|
- //全选的集合则进一步向下查询
|
|
|
- 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);
|
|
|
- }
|
|
|
- //处理半选
|
|
|
- this.disposeHalfSelectList(vo, halfSelectedNodeList, selectedNodeList);
|
|
|
-
|
|
|
- } else {
|
|
|
- //todo 仅当前节点操作
|
|
|
- if(halfSelectedNodeList.size() > 0){
|
|
|
- //获取主键
|
|
|
- List<String> halfSelectedList = halfSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).distinct().collect(Collectors.toList());
|
|
|
- //查询数据
|
|
|
- selectedNodeList = this.wbsTreePrivateClient.queryByPKeyIds(halfSelectedList);
|
|
|
- //剔除与当前操作节点相同的ID
|
|
|
- selectedNodeList.removeIf(wbsTreePrivate -> treeContract.getId().equals(wbsTreePrivate.getId()));
|
|
|
- }
|
|
|
- //处理半选
|
|
|
- this.disposeHalfSelectList(vo, allSelectedNodeList, selectedNodeList);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- //保存集合
|
|
|
- List<WbsTreeContract> saveList = new ArrayList<>();
|
|
|
- List<ConstructionLedger> saveLedger = 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());
|
|
|
-
|
|
|
- //重塑父节点关联关系
|
|
|
- String ancestors = newData.getAncestors();
|
|
|
- if(StringUtils.isNotEmpty(ancestors)){
|
|
|
- //重组后的链表
|
|
|
- StringBuilder stringBuilder = new StringBuilder();
|
|
|
- //拆分重组
|
|
|
- String[] ancestorsArray = ancestors.split(",");
|
|
|
- for(String oldParentId : ancestorsArray){
|
|
|
- if(StringUtils.isNotEmpty(oldParentId)){
|
|
|
- //获取新的
|
|
|
- Long newParentId = OldIdToNewIdMap.get(Long.parseLong(oldParentId));
|
|
|
- //如果新的id为空,说明不变
|
|
|
- stringBuilder.append(",").append(newParentId == null ? oldParentId : newParentId);
|
|
|
- }
|
|
|
- }
|
|
|
- //将新链表设置进对象中
|
|
|
- newData.setAncestors(stringBuilder.substring(1));
|
|
|
- }
|
|
|
-
|
|
|
- //设置名称
|
|
|
- Iterator<AddContractTreeNodeVO.Node> iterator = selectList.iterator();
|
|
|
- while (iterator.hasNext()){
|
|
|
- AddContractTreeNodeVO.Node next = iterator.next();
|
|
|
- if(next.getPrimaryKeyId().equals(half.getPKeyId().toString())){
|
|
|
- newData.setFullName(next.getNodeName());
|
|
|
- iterator.remove();
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //设置到保存集合中
|
|
|
- saveList.add(newData);
|
|
|
-
|
|
|
- if(new Integer("6").equals(newData.getDeptCategory())){
|
|
|
- //生成施工日志
|
|
|
- this.createLedger(newData, saveLedger);
|
|
|
- }
|
|
|
-
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- return this.saveOrCopyNodeTree(saveList, saveLedger);
|
|
|
- }
|
|
|
-
|
|
|
- @NotNull
|
|
|
- private R<Boolean> saveOrCopyNodeTree(List<WbsTreeContract> saveList, List<ConstructionLedger> saveLedger) {
|
|
|
- if(saveList.size() > 0){
|
|
|
- //保存施工日志
|
|
|
- if(saveLedger.size() > 0){
|
|
|
- this.constructionLedgerService.saveBatch(saveLedger);
|
|
|
- }
|
|
|
- try{
|
|
|
- //保存操作记录
|
|
|
- this.operationLogClient.saveUserOperationLog(2, "资料管理", "工序资料", String.join(",", JSONArray.parseArray(JSONObject.toJSONString(saveList.stream().map(WbsTreeContract::getPKeyId).distinct().collect(Collectors.toList())), String.class)));
|
|
|
- }catch (Exception e){
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- //保存节点
|
|
|
- return R.data(this.wbsTreeContractClient.saveBatch(saveList));
|
|
|
- }
|
|
|
-
|
|
|
- return R.data(false);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 处理半选集合
|
|
|
- */
|
|
|
- private void disposeHalfSelectList(@RequestBody AddContractTreeNodeVO vo, List<AddContractTreeNodeVO.Node> allSelectedNodeList, List<WbsTreePrivate> selectedNodeList) {
|
|
|
- if(allSelectedNodeList != null && allSelectedNodeList.size() > 0){
|
|
|
- //获取主键
|
|
|
- List<String> allSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).distinct().collect(Collectors.toList());
|
|
|
- //查询对应数据
|
|
|
- List<WbsTreePrivate> allSelectedNodeLists = this.wbsTreePrivateClient.queryByPKeyIds(allSelectedList);
|
|
|
- //剔除与当前操作节点相同的ID
|
|
|
- allSelectedNodeLists.removeIf(wbsTreePrivate -> vo.getCurrentNodePrimaryKeyId().equals(wbsTreePrivate.getId().toString()));
|
|
|
- //设置到集合中
|
|
|
- selectedNodeList.addAll(allSelectedNodeLists);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 循环查询子节点
|
|
|
- * @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);
|
|
|
- }
|
|
|
- } else {
|
|
|
- //说明是工序,查询这个节点下是否存在表格数据
|
|
|
- List<WbsTreePrivate> exlTables = this.wbsTreePrivateClient.queryExcelTableByParentId(parent);
|
|
|
- if(exlTables != null && exlTables.size() > 0){
|
|
|
- childList.addAll(exlTables);
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 懒加载项目级工程划分树
|
|
|
- * @param projectId 项目ID
|
|
|
- * @param id 节点ID
|
|
|
- * @return 结果集
|
|
|
- */
|
|
|
- @PostMapping("/queryWbsTreePrivateByProjectIdAndId")
|
|
|
- @ApiOperationSupport(order = 9)
|
|
|
- @ApiOperation(value = "懒加载项目级工程划分树")
|
|
|
- @ApiImplicitParams({
|
|
|
- @ApiImplicitParam(name = "projectId", value = "项目ID"),
|
|
|
- @ApiImplicitParam(name = "id", value = "点击节点ID")
|
|
|
- })
|
|
|
- public R<List<WbsTreeContractTreeVOS>> queryWbsTreePrivateByProjectIdAndId(@RequestParam String projectId, @RequestParam String id){
|
|
|
- return R.data(this.wbsTreePrivateClient.queryWbsTreePrivateByProjectIdAndId(projectId, Long.parseLong(id)));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取与当前节点平级的项目级节点
|
|
|
- * @param primaryKeyId 主键
|
|
|
- * @return 结果
|
|
|
- */
|
|
|
- @PostMapping("/queryPeersNode")
|
|
|
- @ApiOperationSupport(order = 8)
|
|
|
- @ApiOperation(value = "获取与当前节点平级的项目级节点")
|
|
|
- @ApiImplicitParam(name = "primaryKeyId", value = "需要新增子节点的节点ID,即当前点出菜单栏的节点ID")
|
|
|
- public R<WbsTreePrivate> queryPeersNode(@RequestParam String primaryKeyId){
|
|
|
- if(StringUtils.isEmpty(primaryKeyId) || "null".equals(primaryKeyId)){
|
|
|
- return R.data(null);
|
|
|
- }
|
|
|
-
|
|
|
- //首先获取当前节点信息
|
|
|
- WbsTreeContract treeContract = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(primaryKeyId));
|
|
|
- //获取与其平级对应的项目级节点
|
|
|
- WbsTreePrivate treePrivate = this.wbsTreePrivateClient.queryPeersNodeByProjectIdAndId(treeContract.getProjectId(), treeContract.getId());
|
|
|
-
|
|
|
- return R.data(treePrivate);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取流程状态分类和文件类型分类
|
|
|
- */
|
|
|
- @GetMapping("/getDictBizClassifyByCode")
|
|
|
- @ApiOperationSupport(order = 7)
|
|
|
- @ApiOperation(value = "获取流程状态分类和文件类型分类")
|
|
|
- @ApiImplicitParam(name = "code", value = "获取流程状态分类:flowTaskStatus;获取文件类型分类:fileType")
|
|
|
- public R<List<DictBiz>> getDictBizClassifyByCode(@RequestParam String code){
|
|
|
- return this.dictBizClient.getList(code, "notRoot");
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取当前合同段下所有的上报批次
|
|
|
- * @param contractId 合同段ID
|
|
|
- * @return 结果
|
|
|
- */
|
|
|
- @GetMapping("/getReportNumberByContractId")
|
|
|
- @ApiOperationSupport(order = 6)
|
|
|
- @ApiOperation(value = "获取当前合同段下所有的上报批次")
|
|
|
- @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
- public R<List<Integer>> getReportNumberByContractId(@RequestParam String contractId){
|
|
|
- //获取合同段信息
|
|
|
- ContractInfo contract = this.contractClient.getContractById(Long.valueOf(contractId));
|
|
|
- return R.data(this.informationQueryService.getReportNumberByContractId(contract.getContractType() == null ? 1 : contract.getContractType(), contractId));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据合同段ID获取所有填报人
|
|
|
- * @param contractId 合同段ID
|
|
|
- * @return 填报人集合
|
|
|
- */
|
|
|
- @GetMapping("/getFileUserByContractId")
|
|
|
- @ApiOperationSupport(order = 5)
|
|
|
- @ApiOperation(value = "根据合同段ID获取所有填报人")
|
|
|
- @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
- public R<List<FileUserVO>> getFileUserByContractId(@RequestParam String contractId){
|
|
|
- //获取合同段信息
|
|
|
- ContractInfo contract = this.contractClient.getContractById(Long.valueOf(contractId));
|
|
|
- return R.data(this.informationQueryService.queryFileUserByContractId(contract.getContractType() == null ? 1 : contract.getContractType(), contractId));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 分页
|
|
|
- * @param vo 查询条件
|
|
|
- * @return 结果
|
|
|
- */
|
|
|
- @PostMapping("/page")
|
|
|
- @ApiOperationSupport(order = 4)
|
|
|
- @ApiOperation(value = "分页")
|
|
|
- @ApiImplicitParams({
|
|
|
- @ApiImplicitParam(name = "size", value = "当前页条数", required = true),
|
|
|
- @ApiImplicitParam(name = "current", value = "当前页", required = true),
|
|
|
- @ApiImplicitParam(name = "wbsId", value = "节点ID", required = true),
|
|
|
- @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
- })
|
|
|
- public R<IPage<InformationQueryVO>> page(@RequestBody InformationQueryVO vo){
|
|
|
- if("null".equals(String.valueOf(vo.getContractId())) || StringUtils.isEmpty(String.valueOf(vo.getContractId()))){
|
|
|
- return R.data(-1, null, "数据查询失败");
|
|
|
- }
|
|
|
- //封装分页信息
|
|
|
- Query query = new Query();
|
|
|
- query.setSize(vo.getSize());
|
|
|
- query.setCurrent(vo.getCurrent());
|
|
|
- //获取合同段信息
|
|
|
- ContractInfo contract = this.contractClient.getContractById(vo.getContractId());
|
|
|
- vo.setClassify(contract.getContractType() == null ? 1 : contract.getContractType());
|
|
|
-
|
|
|
- return R.data(this.informationQueryService.selectInformationQueryPage(Condition.getPage(query), vo));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取当前合同段的划分树
|
|
|
- * @return 结果
|
|
|
- */
|
|
|
- @GetMapping("/queryContractWbsTreeByContractIdAndType")
|
|
|
- @ApiOperationSupport(order = 3)
|
|
|
- @ApiOperation(value = "获取当前合同段的划分树")
|
|
|
- @ApiImplicitParams(value = {
|
|
|
- @ApiImplicitParam(name = "parentId", value = "父节点,为空则查询第一级节点"),
|
|
|
- @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
- })
|
|
|
- public R<List<WbsTreeContractTreeVOS>> queryContractWbsTreeByContractIdAndType(@RequestParam String parentId, @RequestParam String contractId, @RequestParam String contractIdRelation){
|
|
|
- List<WbsTreeContractTreeVOS> rootTreeNode;
|
|
|
-
|
|
|
- //获取合同段,检查是否是监理合同段
|
|
|
- ContractInfo contractInfo = this.contractClient.getContractById(Long.parseLong(contractId));
|
|
|
- if(new Integer("2").equals(contractInfo.getContractType())){
|
|
|
- //监理合同段,需要获取关联的施工方合同段根节点数据
|
|
|
- rootTreeNode = this.wbsTreeContractClient.lazyTree(StringUtils.isNotEmpty(parentId) ? Long.parseLong(parentId) : 0, contractId, contractIdRelation, contractInfo.getContractType());
|
|
|
- //设置合同段根节点的名称
|
|
|
- this.setRootNodeName(parentId, rootTreeNode);
|
|
|
-
|
|
|
- } else {
|
|
|
- if(com.alibaba.nacos.common.utils.StringUtils.isEmpty(parentId)){
|
|
|
- //为空,说明初始化
|
|
|
- //获取根节点
|
|
|
- rootTreeNode = this.clientTreePublicCodeClient.queryContractWbsTreeByContractIdAndType(contractId, 1, "0");
|
|
|
- } else {
|
|
|
- //不为空,获取其下子节点
|
|
|
- rootTreeNode = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, 1, parentId);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //其他参数
|
|
|
- if(rootTreeNode != null && rootTreeNode.size() > 0){
|
|
|
- //获取当前父节点下所有工序节点及填报资料
|
|
|
- List<QueryProcessDataVO> queryDataResult;
|
|
|
- if(new Integer("2").equals(contractInfo.getContractType())){
|
|
|
- queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 2, contractIdRelation);
|
|
|
- } else {
|
|
|
- queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 1, contractId);
|
|
|
- }
|
|
|
-
|
|
|
- rootTreeNode.forEach(vo -> {
|
|
|
- String primaryKeyId = new Integer("2").equals(contractInfo.getContractType()) ? vo.getId() : vo.getPrimaryKeyId();
|
|
|
-
|
|
|
- if(StringUtils.isEmpty(parentId) || "0".equals(parentId)){
|
|
|
- vo.setTitle(contractInfo.getContractName());
|
|
|
- }
|
|
|
-
|
|
|
- //获取上传的图纸
|
|
|
- ContractTreeDrawings drawings = this.contractTreeDrawingsService.queryCurrentNodeDrawings(primaryKeyId);
|
|
|
- if(drawings != null){
|
|
|
- //主键
|
|
|
- vo.setDrawingsId(drawings.getId());
|
|
|
- //文件路径
|
|
|
- vo.setFileUrl(drawings.getFileUrl());
|
|
|
- }
|
|
|
-
|
|
|
- //处理颜色
|
|
|
- if(queryDataResult != null && queryDataResult.size() > 0){
|
|
|
- this.setNodeColor(vo, queryDataResult, true);
|
|
|
- }
|
|
|
-
|
|
|
- //判断当前节点是否被标记为首件
|
|
|
- TreeContractFirst first = this.treeContractFirstService.getOne(Wrappers.<TreeContractFirst>lambdaQuery().eq(TreeContractFirst::getIsDeleted, 0).eq(TreeContractFirst::getWbsNodeId, primaryKeyId));
|
|
|
- vo.setIsFirst(first != null);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- return R.data(rootTreeNode);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置节点颜色
|
|
|
- * 填报节点:
|
|
|
- * 未填报1 < 已填报-未上报2 < 已填报-待审批3 < 已审批4
|
|
|
- *
|
|
|
- * 非填报节点
|
|
|
- * 未填报1(其下所有工序节点均未填报) < 已填报2(未上报和待审批) < 已审批4(其下所有工序节点均审批)
|
|
|
- *
|
|
|
- */
|
|
|
- private void setNodeColor(WbsTreeContractTreeVOS vos, List<QueryProcessDataVO> queryDataResult, boolean isRemove){
|
|
|
- if(queryDataResult != null && queryDataResult.size() > 0){
|
|
|
- Iterator<QueryProcessDataVO> iterator = queryDataResult.iterator();
|
|
|
- //默认均未填报
|
|
|
- StringBuilder colorStatusValue = new StringBuilder();
|
|
|
- while (iterator.hasNext()) {
|
|
|
- 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(query.getStatus() == null || query.getStatus() == -1){
|
|
|
- colorStatusValue.append("1");
|
|
|
- } else {
|
|
|
- switch (query.getStatus()){
|
|
|
- case 0:
|
|
|
- case 3:
|
|
|
- //未上报
|
|
|
- colorStatusValue.append("2");
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- //待审批
|
|
|
- colorStatusValue.append("3");
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- //已审批
|
|
|
- colorStatusValue.append("4");
|
|
|
- break;
|
|
|
- default:
|
|
|
- colorStatusValue.append("1");
|
|
|
- break;
|
|
|
- }
|
|
|
- if(isRemove){
|
|
|
- iterator.remove();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- colorStatusValue.append("1");
|
|
|
- }
|
|
|
- }
|
|
|
- //检查字符串
|
|
|
- if(StringUtils.isNotEmpty(colorStatusValue.toString())){
|
|
|
- if(new Integer("6").equals(vos.getDeptCategory())){
|
|
|
- //工序,则直接使用字符串的判断
|
|
|
- vos.setColorStatus(new Integer(colorStatusValue.toString()));
|
|
|
- } else {
|
|
|
- if(colorStatusValue.toString().contains("1")){
|
|
|
- //含有1
|
|
|
- if(colorStatusValue.toString().contains("2") || colorStatusValue.toString().contains("3") || colorStatusValue.toString().contains("4")){
|
|
|
- //同时含有2/3/4,取2
|
|
|
- vos.setColorStatus(2);
|
|
|
- } else {
|
|
|
- //否则,取1
|
|
|
- vos.setColorStatus(1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- //不含有1
|
|
|
- if(colorStatusValue.toString().contains("4") && !colorStatusValue.toString().contains("2") && !colorStatusValue.toString().contains("3")){
|
|
|
- //只含有4,取4
|
|
|
- vos.setColorStatus(4);
|
|
|
- } else {
|
|
|
- //反之包含2/3,取2
|
|
|
- vos.setColorStatus(2);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- vos.setColorStatus(1);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 修改
|
|
|
- */
|
|
|
- @PostMapping("/update")
|
|
|
- @ApiOperationSupport(order = 1)
|
|
|
- @ApiOperation(value = "修改(只能修改编号和文件名)")
|
|
|
- @ApiImplicitParams({
|
|
|
- @ApiImplicitParam(name = "name", value = "文件名称, 必须有值", required = true),
|
|
|
- @ApiImplicitParam(name = "number", value = "文件编号,可以为空")
|
|
|
- })
|
|
|
- public R<Boolean> update(@Valid @RequestBody InformationQuery informationQuery) {
|
|
|
- if("null".equals(String.valueOf(informationQuery.getId())) || StringUtils.isEmpty(String.valueOf(informationQuery.getId()))){
|
|
|
- return R.data(-1, false, "数据操作失败");
|
|
|
- }
|
|
|
- return R.status(informationQueryService.update(Wrappers.<InformationQuery>lambdaUpdate().set(InformationQuery::getName, informationQuery.getName()).set(InformationQuery::getNumber, informationQuery.getNumber()).eq(InformationQuery::getId, informationQuery.getId())));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除
|
|
|
- */
|
|
|
- @PostMapping("/remove")
|
|
|
- @ApiOperationSupport(order = 2)
|
|
|
- @ApiOperation(value = "逻辑删除", notes = "传入ids")
|
|
|
- public R<Boolean> remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
|
|
|
- return R.status(informationQueryService.deleteLogic(Func.toLongList(ids)));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
+ private final ContractClient contractClient;
|
|
|
+
|
|
|
+ private final WbsTreeContractClient wbsTreeContractClient;
|
|
|
+
|
|
|
+ private final WbsTreePrivateClient wbsTreePrivateClient;
|
|
|
+
|
|
|
+ private final IInformationQueryService informationQueryService;
|
|
|
+
|
|
|
+ private final IDictBizClient dictBizClient;
|
|
|
+
|
|
|
+ private final IContractTreeDrawingsService contractTreeDrawingsService;
|
|
|
+
|
|
|
+ private final ClientTreePublicCodeClientImpl clientTreePublicCodeClient;
|
|
|
+
|
|
|
+ private final ITreeContractFirstService treeContractFirstService;
|
|
|
+
|
|
|
+ private final IConstructionLedgerService constructionLedgerService;
|
|
|
+
|
|
|
+ private final TaskClient taskClient;
|
|
|
+
|
|
|
+ private final OperationLogClient operationLogClient;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 本地验签
|
|
|
+ */
|
|
|
+ @PostMapping("/localVerify")
|
|
|
+ @ApiOperationSupport(order = 21)
|
|
|
+ @ApiOperation(value = "本地验签")
|
|
|
+ public R<Boolean> localVerify(@RequestParam String ids) {
|
|
|
+ return R.data(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 在线验签
|
|
|
+ */
|
|
|
+ @PostMapping("/onlineVerify")
|
|
|
+ @ApiOperationSupport(order = 21)
|
|
|
+ @ApiOperation(value = "在线验签")
|
|
|
+ public R<Boolean> onlineVerify(@RequestParam String ids) {
|
|
|
+ return R.data(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量打印
|
|
|
+ */
|
|
|
+ @PostMapping("/batchPrint")
|
|
|
+ @ApiOperationSupport(order = 20)
|
|
|
+ @ApiOperation(value = "批量打印")
|
|
|
+ public R<String> batchPrint(@RequestParam String ids) {
|
|
|
+ return R.data(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量下载
|
|
|
+ */
|
|
|
+ @PostMapping("/batchDownloadFileToZip")
|
|
|
+ @ApiOperationSupport(order = 19)
|
|
|
+ @ApiOperation(value = "批量下载")
|
|
|
+ public void batchDownloadFileToZip(String ids, HttpServletResponse response) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量废除
|
|
|
+ */
|
|
|
+ @PostMapping("/batchAbolish")
|
|
|
+ @ApiOperationSupport(order = 18)
|
|
|
+ @ApiOperation(value = "批量废除")
|
|
|
+ public R<Boolean> batchAbolish(@RequestParam String ids) {
|
|
|
+ //获取所有相关任务记录
|
|
|
+ List<Task> taskList = this.taskClient.queryTaskListByFormDataId(ids);
|
|
|
+ if (taskList != null && taskList.size() > 0) {
|
|
|
+ //执行废除
|
|
|
+ for (Task task : taskList) {
|
|
|
+ if (new Integer("1").equals(task.getStatus())) {
|
|
|
+ //正在审批,调用废除
|
|
|
+ this.taskClient.abolishTask(task);
|
|
|
+ } else if (new Integer("2").equals(task.getStatus())) {
|
|
|
+ //已审批的任务,修改业务数据的审批状态为未上报并撤签即可
|
|
|
+ this.informationQueryService.update(Wrappers.<InformationQuery>lambdaUpdate().set(InformationQuery::getStatus, 3).in(InformationQuery::getId, Arrays.asList(task.getFormDataId().split(","))));
|
|
|
+ // todo ================== 调用撤签
|
|
|
+ // todo ================== 调用撤签
|
|
|
+ }
|
|
|
+ //保存操作记录
|
|
|
+ this.operationLogClient.saveUserOperationLog(6, "资料管理", "工序资料", task.getFormDataId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.data(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量上报
|
|
|
+ */
|
|
|
+ @PostMapping("/batchTask")
|
|
|
+ @ApiOperationSupport(order = 17)
|
|
|
+ @ApiOperation(value = "批量上报")
|
|
|
+ public R<Boolean> batchTask(@RequestBody StartTaskVO startTaskVO) {
|
|
|
+ if (StringUtils.isNotEmpty(startTaskVO.getIds())) {
|
|
|
+ //获取数据源id
|
|
|
+ String[] ids = startTaskVO.getIds().split(",");
|
|
|
+ if (ids.length > 0) {
|
|
|
+ for (String id : ids) {
|
|
|
+ //生成任务实体
|
|
|
+ TaskVO taskVO = new TaskVO();
|
|
|
+ BeanUtils.copyProperties(startTaskVO, taskVO);
|
|
|
+ //设置数据源指向
|
|
|
+ taskVO.setFormDataId(id);
|
|
|
+ //设置上报类型
|
|
|
+ taskVO.setApprovalType(1);
|
|
|
+ //上报
|
|
|
+ if (this.taskClient.startTask(taskVO).getData()) {
|
|
|
+ //查询审批人
|
|
|
+ List<TaskParallel> taskUsers = this.taskClient.queryApprovalUser(id);
|
|
|
+ if (taskUsers.size() > 0) {
|
|
|
+ //生成审批人信息
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
+ taskUsers.forEach(users -> stringBuilder.append(",").append(users.getTaskUser()).append("-").append(users.getTaskUserName()));
|
|
|
+ //修改记录
|
|
|
+ this.informationQueryService.update(Wrappers.<InformationQuery>lambdaUpdate().set(InformationQuery::getStatus, 1).set(InformationQuery::getAuditUserIdAndName, stringBuilder.substring(1)).eq(InformationQuery::getId, id));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //保存操作记录
|
|
|
+ this.operationLogClient.saveUserOperationLog(5, "资料管理", "工序资料", startTaskVO.getIds());
|
|
|
+ return R.data(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.data(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自定义排序
|
|
|
+ */
|
|
|
+ @PostMapping("/diySort")
|
|
|
+ @ApiOperationSupport(order = 16)
|
|
|
+ @ApiOperation(value = "自定义排序")
|
|
|
+ public R<Boolean> diySort(@RequestBody DiySortVO vo) {
|
|
|
+ //获取排序集合
|
|
|
+ List<String> sortList = vo.getSortList();
|
|
|
+ if (sortList.size() > 0) {
|
|
|
+ for (int i = 0, l = sortList.size(); i < l; i++) {
|
|
|
+ try {
|
|
|
+ WbsTreeContract newData = new WbsTreeContract();
|
|
|
+ newData.setPKeyId(Long.parseLong(sortList.get(i)));
|
|
|
+ newData.setSort(i);
|
|
|
+ //修改排序
|
|
|
+ this.wbsTreeContractClient.updateContractNodeParameter(newData);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.data(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 复制节点
|
|
|
+ */
|
|
|
+ @PostMapping("/copyContractTreeNode")
|
|
|
+ @ApiOperationSupport(order = 15)
|
|
|
+ @ApiOperation(value = "复制节点")
|
|
|
+ public R<Boolean> copyContractTreeNode(@RequestBody CopyContractTreeNodeVO vo) {
|
|
|
+
|
|
|
+ //首先查询需要复制的节点及其下级所有子节点的信息
|
|
|
+ WbsTreeContract needCopyNode = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
|
|
|
+
|
|
|
+ List<WbsTreeContract> parentList = new ArrayList<>(), childList = new ArrayList<>(), allList = new ArrayList<>(), saveList = new ArrayList<>();
|
|
|
+ //新增施工台账
|
|
|
+ List<ConstructionLedger> saveLedger = new ArrayList<>();
|
|
|
+
|
|
|
+ parentList.add(needCopyNode);
|
|
|
+ //查询所有有效子节点
|
|
|
+ this.foreachQueryChildContract(parentList, childList);
|
|
|
+ allList.addAll(parentList);
|
|
|
+ allList.addAll(childList);
|
|
|
+
|
|
|
+ if ("1".equals(vo.getCopyType())) {
|
|
|
+ if (StringUtils.isNotEmpty(vo.getNeedCopyPrimaryKeyId())) {
|
|
|
+ WbsTreeContract parent = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getParentPrimaryKeyId());
|
|
|
+ //重塑关键信息
|
|
|
+ Map<Long, Long> oldToNewIdMap = new HashMap<>();
|
|
|
+ allList.forEach(node -> oldToNewIdMap.put(node.getId(), SnowFlakeUtil.getId()));
|
|
|
+ //todo 单份复制
|
|
|
+ allList.forEach(node -> {
|
|
|
+ WbsTreeContract newData = new WbsTreeContract();
|
|
|
+ BeanUtils.copyProperties(node, newData);
|
|
|
+
|
|
|
+ //重塑关键信息
|
|
|
+ //重塑primaryKeyId
|
|
|
+ newData.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ //设置旧ID
|
|
|
+ newData.setOldId(node.getId().toString());
|
|
|
+ //设置新ID
|
|
|
+ newData.setId(oldToNewIdMap.containsKey(node.getId()) ? oldToNewIdMap.get(node.getId()) : SnowFlakeUtil.getId());
|
|
|
+ //设置父节点ID
|
|
|
+ if (vo.getNeedCopyPrimaryKeyId().equals(node.getPKeyId().toString())) {
|
|
|
+ //找到复制的节点,将parentId更改为 parent.getId()
|
|
|
+ newData.setParentId(parent.getId());
|
|
|
+ //设置新名称
|
|
|
+ newData.setDeptName(vo.getNeedCopyNodeName());
|
|
|
+ newData.setFullName(vo.getNeedCopyNodeName());
|
|
|
+ } else {
|
|
|
+ newData.setParentId(oldToNewIdMap.containsKey(node.getParentId()) ? oldToNewIdMap.get(node.getParentId()) : SnowFlakeUtil.getId());
|
|
|
+ }
|
|
|
+ newData.setCreateTime(new Date());
|
|
|
+ newData.setUpdateTime(new Date());
|
|
|
+ newData.setCreateUser(AuthUtil.getUserId());
|
|
|
+ //保存到集合中
|
|
|
+ saveList.add(newData);
|
|
|
+
|
|
|
+ if (new Integer("6").equals(node.getDeptCategory())) {
|
|
|
+ //生成施工日志
|
|
|
+ this.createLedger(newData, saveLedger);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ //todo 多份复制
|
|
|
+ //获取需要复制到的位置集合
|
|
|
+ List<CopyContractTreeNodeVO.CopyBatch> copyBatches = vo.getCopyBatchToPaths();
|
|
|
+ if (copyBatches.size() > 0) {
|
|
|
+ copyBatches.forEach(copyBatch -> {
|
|
|
+ //查询复制到的位置信息
|
|
|
+ WbsTreeContract copyPath = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(copyBatch.getPrimaryKeyId());
|
|
|
+
|
|
|
+ //重塑关键信息
|
|
|
+ Map<Long, Long> oldToNewIdMap = new HashMap<>();
|
|
|
+ allList.forEach(node -> oldToNewIdMap.put(node.getId(), SnowFlakeUtil.getId()));
|
|
|
+
|
|
|
+ allList.forEach(node -> {
|
|
|
+ WbsTreeContract newData = new WbsTreeContract();
|
|
|
+ BeanUtils.copyProperties(node, newData);
|
|
|
+
|
|
|
+ //重塑关键信息
|
|
|
+ //设置旧ID
|
|
|
+ newData.setOldId(node.getId().toString());
|
|
|
+ //重塑primaryKeyId
|
|
|
+ newData.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ //设置新ID
|
|
|
+ newData.setId(oldToNewIdMap.containsKey(node.getId()) ? oldToNewIdMap.get(node.getId()) : SnowFlakeUtil.getId());
|
|
|
+ //设置父节点ID
|
|
|
+ if (vo.getNeedCopyPrimaryKeyId().equals(node.getPKeyId().toString())) {
|
|
|
+ //找到复制的节点,将parentId更改为 parent.getId()
|
|
|
+ newData.setParentId(copyPath.getId());
|
|
|
+ //设置新名称
|
|
|
+ newData.setDeptName(copyBatch.getNodeName());
|
|
|
+ newData.setFullName(copyBatch.getNodeName());
|
|
|
+ } else {
|
|
|
+ newData.setParentId(oldToNewIdMap.containsKey(node.getParentId()) ? oldToNewIdMap.get(node.getParentId()) : SnowFlakeUtil.getId());
|
|
|
+ }
|
|
|
+ newData.setCreateTime(new Date());
|
|
|
+ newData.setUpdateTime(new Date());
|
|
|
+ newData.setCreateUser(AuthUtil.getUserId());
|
|
|
+
|
|
|
+ //重塑父节点关联关系
|
|
|
+ String ancestors = newData.getAncestors();
|
|
|
+ if (StringUtils.isNotEmpty(ancestors)) {
|
|
|
+ //重组后的链表
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
+ //拆分重组
|
|
|
+ String[] ancestorsArray = ancestors.split(",");
|
|
|
+ for (String oldParentId : ancestorsArray) {
|
|
|
+ if (StringUtils.isNotEmpty(oldParentId)) {
|
|
|
+ //获取新的
|
|
|
+ Long newParentId = oldToNewIdMap.get(Long.parseLong(oldParentId));
|
|
|
+ //如果新的id为空,说明不变
|
|
|
+ stringBuilder.append(",").append(newParentId == null ? oldParentId : newParentId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //将新链表设置进对象中
|
|
|
+ newData.setAncestors(stringBuilder.substring(1));
|
|
|
+ }
|
|
|
+
|
|
|
+ //保存到集合中
|
|
|
+ saveList.add(newData);
|
|
|
+
|
|
|
+ if (new Integer("6").equals(node.getDeptCategory())) {
|
|
|
+ //生成施工日志
|
|
|
+ this.createLedger(newData, saveLedger);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return this.saveOrCopyNodeTree(saveList, saveLedger);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成施工日志记录
|
|
|
+ */
|
|
|
+ private void createLedger(WbsTreeContract newData, List<ConstructionLedger> saveLedger) {
|
|
|
+ //工序,需要新增施工台账
|
|
|
+ ConstructionLedger ledger = new ConstructionLedger();
|
|
|
+ ledger.setSite(newData.getDeptName());
|
|
|
+ ledger.setIsBeton(newData.getIsConcrete());
|
|
|
+ ledger.setWbsId(newData.getPKeyId());
|
|
|
+ ledger.setContractId(Long.parseLong(newData.getContractId()));
|
|
|
+ ledger.setProjectId(Long.parseLong(newData.getProjectId()));
|
|
|
+ ledger.setCreateTime(new Date());
|
|
|
+ ledger.setCreateUser(AuthUtil.getUserId());
|
|
|
+ ledger.setIsDeleted(0);
|
|
|
+ saveLedger.add(ledger);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 循环查询子节点
|
|
|
+ *
|
|
|
+ * @param parentList 父节点集合
|
|
|
+ * @param childList 保存集合
|
|
|
+ */
|
|
|
+ private void foreachQueryChildContract(List<WbsTreeContract> parentList, List<WbsTreeContract> childList) {
|
|
|
+ parentList.forEach(parent -> {
|
|
|
+ if (!new Integer("6").equals(parent.getDeptCategory())) {
|
|
|
+ //查询子节点
|
|
|
+ List<WbsTreeContract> childs = this.wbsTreeContractClient.queryChildByParentId(parent, "notQueryTable");
|
|
|
+ if (childs != null && childs.size() > 0) {
|
|
|
+ //添加入结果集
|
|
|
+ childList.addAll(childs);
|
|
|
+ //还有子级,继续向下
|
|
|
+ this.foreachQueryChildContract(childs, childList);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //工序,则查询对应的表格数据
|
|
|
+ List<WbsTreeContract> childs = this.wbsTreeContractClient.queryChildByParentId(parent, "queryTable");
|
|
|
+ if (childs != null && childs.size() > 0) {
|
|
|
+ //添加入结果集
|
|
|
+ childList.addAll(childs);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导图结构树节点查询
|
|
|
+ *
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @GetMapping("/queryMappingStructureTree")
|
|
|
+ @ApiOperationSupport(order = 14)
|
|
|
+ @ApiOperation(value = "导图结构树节点查询")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "parentId", value = "父节点,首次进入传0、null、''", required = true),
|
|
|
+ @ApiImplicitParam(name = "wbsType", value = "模板类型, 1质检,2试验", required = true),
|
|
|
+ @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
+ })
|
|
|
+ public R<List<WbsTreeContractTreeVOS>> queryMappingStructureTree(@RequestParam String parentId, @RequestParam Integer wbsType, @RequestParam String contractId, @RequestParam String contractIdRelation) {
|
|
|
+ List<WbsTreeContractTreeVOS> result;
|
|
|
+
|
|
|
+ //获取合同段,检查是否是监理合同段
|
|
|
+ ContractInfo contractInfo = this.contractClient.getContractById(Long.parseLong(contractId));
|
|
|
+
|
|
|
+ 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());
|
|
|
+ //设置合同段根节点的名称
|
|
|
+ this.setRootNodeName(parentId, childList);
|
|
|
+ if (childList != null && childList.size() == 1) {
|
|
|
+ //需要向下展开
|
|
|
+ this.foreachQueryChildNode(childList, childList.get(0).getContractIdRelation(), 1);
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(contractIdRelation) && "0".equals(parentId)) {
|
|
|
+ //给个顶点
|
|
|
+ WbsTreeContractTreeVOS vos = new WbsTreeContractTreeVOS();
|
|
|
+ vos.setTitle(contractInfo.getContractName());
|
|
|
+ vos.setChildren(childList);
|
|
|
+ result = new ArrayList<>();
|
|
|
+ result.add(vos);
|
|
|
+ } else {
|
|
|
+ result = childList;
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ if (StringUtils.isEmpty(parentId) || "0".equals(parentId)) {
|
|
|
+ //直接返回
|
|
|
+ result = this.clientTreePublicCodeClient.queryContractWbsTreeByContractIdAndType(contractId, wbsType, "0");
|
|
|
+ } else {
|
|
|
+ //不是根节点,则获取子节点
|
|
|
+ result = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, 1, parentId);
|
|
|
+ //判断当前节点下是不是只有一个子节点
|
|
|
+ if (result != null && result.size() == 1) {
|
|
|
+ this.foreachQueryChildNode(result, contractId, contractInfo.getContractType());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (result != null) {
|
|
|
+ //获取当前父节点下所有工序节点及填报资料
|
|
|
+ List<QueryProcessDataVO> queryDataResult;
|
|
|
+ if (new Integer("2").equals(contractInfo.getContractType())) {
|
|
|
+ queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 2, contractIdRelation);
|
|
|
+ } else {
|
|
|
+ queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 1, contractId);
|
|
|
+ }
|
|
|
+ result.forEach(vos -> {
|
|
|
+ if (StringUtils.isEmpty(parentId) || "0".equals(parentId)) {
|
|
|
+ vos.setTitle(contractInfo.getContractName());
|
|
|
+ }
|
|
|
+ if (queryDataResult != null && queryDataResult.size() > 0) {
|
|
|
+ //设置颜色
|
|
|
+ this.setNodeColor(vos, queryDataResult, false);
|
|
|
+ }
|
|
|
+ //处理子节点
|
|
|
+ if (vos.getChildren() != null && vos.getChildren().size() > 0) {
|
|
|
+ //循环处理节点颜色
|
|
|
+ this.foreachSetNodeColor(vos.getChildren(), queryDataResult);
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.data(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 循环处理节点颜色
|
|
|
+ */
|
|
|
+ private void foreachSetNodeColor(List<WbsTreeContractTreeVOS> children, List<QueryProcessDataVO> queryDataResult) {
|
|
|
+ children.forEach(vos -> {
|
|
|
+ this.setNodeColor(vos, queryDataResult, false);
|
|
|
+ if (vos.getChildren() != null && vos.getChildren().size() > 0) {
|
|
|
+ //进一步处理
|
|
|
+ this.foreachSetNodeColor(vos.getChildren(), queryDataResult);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 监理合同段设置关联合同段的根节点名称
|
|
|
+ */
|
|
|
+ private void setRootNodeName(@RequestParam String parentId, List<WbsTreeContractTreeVOS> childList) {
|
|
|
+ if (StringUtils.isEmpty(parentId) || "0".equals(parentId)) {
|
|
|
+ if (childList != null && childList.size() > 0) {
|
|
|
+ childList.forEach(treeNode -> {
|
|
|
+ ContractInfo clientContract = this.contractClient.getContractById(Long.parseLong(treeNode.getContractIdRelation()));
|
|
|
+ if (clientContract != null) {
|
|
|
+ treeNode.setTitle(clientContract.getContractName());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 如果子节点只有一个,则进一步查询该子节点的下级节点
|
|
|
+ *
|
|
|
+ * @param result 子节点集合
|
|
|
+ */
|
|
|
+ private void foreachQueryChildNode(List<WbsTreeContractTreeVOS> result, String contractId, Integer initialContractType) {
|
|
|
+ result.forEach(vos -> {
|
|
|
+ String id = new Integer("2").equals(initialContractType) ? vos.getPrimaryKeyId() : vos.getId();
|
|
|
+ String primaryKeyId = new Integer("2").equals(initialContractType) ? vos.getId() : vos.getPrimaryKeyId();
|
|
|
+
|
|
|
+ List<WbsTreeContractTreeVOS> child = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, 1, id);
|
|
|
+ if (child != null && child.size() == 1) {
|
|
|
+ //如果子节点还是只有一个,则进一步向下查询
|
|
|
+ this.foreachQueryChildNode(child, contractId, initialContractType);
|
|
|
+ }
|
|
|
+ //判断当前节点是否被标记为首件
|
|
|
+ TreeContractFirst first = this.treeContractFirstService.getOne(Wrappers.<TreeContractFirst>lambdaQuery().eq(TreeContractFirst::getIsDeleted, 0).eq(TreeContractFirst::getWbsNodeId, primaryKeyId));
|
|
|
+ vos.setIsFirst(first != null);
|
|
|
+
|
|
|
+ vos.setChildren(child);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改节点信息
|
|
|
+ *
|
|
|
+ * @return 修改结果
|
|
|
+ */
|
|
|
+ @PostMapping("/updateContractNodeParameter")
|
|
|
+ @ApiOperationSupport(order = 13)
|
|
|
+ @ApiOperation(value = "修改节点信息")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "pKeyId", value = "节点的primaryKeyId", required = true),
|
|
|
+ @ApiImplicitParam(name = "deptName", value = "节点的title", required = true),
|
|
|
+ @ApiImplicitParam(name = "partitionCode", value = "划分编号")
|
|
|
+ })
|
|
|
+ public R<Boolean> updateContractNodeParameter(@RequestParam Long pKeyId, @RequestParam String deptName, @RequestParam String partitionCode) {
|
|
|
+ WbsTreeContract node = new WbsTreeContract();
|
|
|
+ node.setPKeyId(pKeyId);
|
|
|
+ node.setDeptName(deptName);
|
|
|
+ node.setPartitionCode(partitionCode);
|
|
|
+
|
|
|
+ //只允许修改节点名称
|
|
|
+ if (StringUtils.isEmpty(node.getDeptName()) || "null".equals(String.valueOf(node.getPKeyId())) || StringUtils.isEmpty(String.valueOf(node.getPKeyId()))) {
|
|
|
+ return R.data(-1, false, "缺少参数");
|
|
|
+ }
|
|
|
+ //保存操作记录
|
|
|
+ this.operationLogClient.saveUserOperationLog(3, "资料管理", "工序资料", pKeyId);
|
|
|
+ return R.data(this.wbsTreeContractClient.updateContractNodeParameter(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取节点信息
|
|
|
+ *
|
|
|
+ * @param primaryKeyId 节点的primaryKeyId
|
|
|
+ * @return 节点信息
|
|
|
+ */
|
|
|
+ @GetMapping("/getContractNodeByPrimaryKeyId")
|
|
|
+ @ApiOperationSupport(order = 12)
|
|
|
+ @ApiOperation(value = "获取节点信息")
|
|
|
+ @ApiImplicitParam(name = "primaryKeyId", value = "节点的primaryKeyId")
|
|
|
+ public R<WbsTreeContract> getContractNodeByPrimaryKeyId(@RequestParam String primaryKeyId) {
|
|
|
+ return R.data(this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(primaryKeyId));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除节点
|
|
|
+ *
|
|
|
+ * @param ids 节点的primaryKeyId
|
|
|
+ * @return 删除结果
|
|
|
+ */
|
|
|
+ @PostMapping("/removeContractTreeNode")
|
|
|
+ @ApiOperationSupport(order = 11)
|
|
|
+ @ApiOperation(value = "删除节点")
|
|
|
+ @ApiImplicitParam(name = "ids", value = "节点的primaryKeyId")
|
|
|
+ public R<Boolean> removeContractTreeNode(@RequestParam String ids) {
|
|
|
+ //保存操作记录
|
|
|
+ this.operationLogClient.saveUserOperationLog(4, "资料管理", "工序资料", ids);
|
|
|
+ return R.data(this.wbsTreeContractClient.removeContractTreeNode(ids));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增子节点
|
|
|
+ *
|
|
|
+ * @return 新增结果
|
|
|
+ */
|
|
|
+ @PostMapping("/saveContractTreeNode")
|
|
|
+ @ApiOperationSupport(order = 10)
|
|
|
+ @ApiOperation(value = "新增节点及其子节点")
|
|
|
+ public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo) {
|
|
|
+ //先获取当前节点的信息
|
|
|
+ WbsTreeContract treeContract = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(vo.getCurrentNodePrimaryKeyId()));
|
|
|
+
|
|
|
+ //半选
|
|
|
+ List<AddContractTreeNodeVO.Node> halfSelectedNodeList = vo.getHalfSelectedList();
|
|
|
+ //全选
|
|
|
+ List<AddContractTreeNodeVO.Node> allSelectedNodeList = vo.getAllSelectedList();
|
|
|
+ //勾选的数据
|
|
|
+ List<AddContractTreeNodeVO.Node> selectList = new ArrayList<>();
|
|
|
+ selectList.addAll(halfSelectedNodeList);
|
|
|
+ selectList.addAll(allSelectedNodeList);
|
|
|
+
|
|
|
+ //所有相关节点集合
|
|
|
+ List<WbsTreePrivate> selectedNodeList = new ArrayList<>();
|
|
|
+
|
|
|
+ //检查新增类型
|
|
|
+ if ("1".equals(vo.getSaveType())) {
|
|
|
+ //todo 当前节点及其子节点
|
|
|
+ //当前节点及其子节点时,半选说明其下的子节点并不是全部选中的,所以这时候只需要根据全选的查询其全部子节点即可
|
|
|
+ if (allSelectedNodeList.size() > 0) {
|
|
|
+ //获取主键
|
|
|
+ List<String> allSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).distinct().collect(Collectors.toList());
|
|
|
+ //查询对应数据
|
|
|
+ selectedNodeList = this.wbsTreePrivateClient.queryByPKeyIds(allSelectedList);
|
|
|
+ //剔除与当前操作节点相同的ID
|
|
|
+ selectedNodeList.removeIf(wbsTreePrivate -> treeContract.getId().equals(wbsTreePrivate.getId()));
|
|
|
+
|
|
|
+ //全选的集合则进一步向下查询
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ //处理半选
|
|
|
+ this.disposeHalfSelectList(vo, halfSelectedNodeList, selectedNodeList);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ //todo 仅当前节点操作
|
|
|
+ if (halfSelectedNodeList.size() > 0) {
|
|
|
+ //获取主键
|
|
|
+ List<String> halfSelectedList = halfSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).distinct().collect(Collectors.toList());
|
|
|
+ //查询数据
|
|
|
+ selectedNodeList = this.wbsTreePrivateClient.queryByPKeyIds(halfSelectedList);
|
|
|
+ //剔除与当前操作节点相同的ID
|
|
|
+ selectedNodeList.removeIf(wbsTreePrivate -> treeContract.getId().equals(wbsTreePrivate.getId()));
|
|
|
+ }
|
|
|
+ //处理半选
|
|
|
+ this.disposeHalfSelectList(vo, allSelectedNodeList, selectedNodeList);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //保存集合
|
|
|
+ List<WbsTreeContract> saveList = new ArrayList<>();
|
|
|
+ List<ConstructionLedger> saveLedger = 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());
|
|
|
+
|
|
|
+ //重塑父节点关联关系
|
|
|
+ String ancestors = newData.getAncestors();
|
|
|
+ if (StringUtils.isNotEmpty(ancestors)) {
|
|
|
+ //重组后的链表
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
+ //拆分重组
|
|
|
+ String[] ancestorsArray = ancestors.split(",");
|
|
|
+ for (String oldParentId : ancestorsArray) {
|
|
|
+ if (StringUtils.isNotEmpty(oldParentId)) {
|
|
|
+ //获取新的
|
|
|
+ Long newParentId = OldIdToNewIdMap.get(Long.parseLong(oldParentId));
|
|
|
+ //如果新的id为空,说明不变
|
|
|
+ stringBuilder.append(",").append(newParentId == null ? oldParentId : newParentId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //将新链表设置进对象中
|
|
|
+ newData.setAncestors(stringBuilder.substring(1));
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置名称
|
|
|
+ Iterator<AddContractTreeNodeVO.Node> iterator = selectList.iterator();
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ AddContractTreeNodeVO.Node next = iterator.next();
|
|
|
+ if (next.getPrimaryKeyId().equals(half.getPKeyId().toString())) {
|
|
|
+ newData.setFullName(next.getNodeName());
|
|
|
+ iterator.remove();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置到保存集合中
|
|
|
+ saveList.add(newData);
|
|
|
+
|
|
|
+ if (new Integer("6").equals(newData.getDeptCategory())) {
|
|
|
+ //生成施工日志
|
|
|
+ this.createLedger(newData, saveLedger);
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ return this.saveOrCopyNodeTree(saveList, saveLedger);
|
|
|
+ }
|
|
|
+
|
|
|
+ @NotNull
|
|
|
+ private R<Boolean> saveOrCopyNodeTree(List<WbsTreeContract> saveList, List<ConstructionLedger> saveLedger) {
|
|
|
+ if (saveList.size() > 0) {
|
|
|
+ //保存施工日志
|
|
|
+ if (saveLedger.size() > 0) {
|
|
|
+ this.constructionLedgerService.saveBatch(saveLedger);
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ //保存操作记录
|
|
|
+ this.operationLogClient.saveUserOperationLog(2, "资料管理", "工序资料", String.join(",", JSONArray.parseArray(JSONObject.toJSONString(saveList.stream().map(WbsTreeContract::getPKeyId).distinct().collect(Collectors.toList())), String.class)));
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ //保存节点
|
|
|
+ return R.data(this.wbsTreeContractClient.saveBatch(saveList));
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.data(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理半选集合
|
|
|
+ */
|
|
|
+ private void disposeHalfSelectList(@RequestBody AddContractTreeNodeVO vo, List<AddContractTreeNodeVO.Node> allSelectedNodeList, List<WbsTreePrivate> selectedNodeList) {
|
|
|
+ if (allSelectedNodeList != null && allSelectedNodeList.size() > 0) {
|
|
|
+ //获取主键
|
|
|
+ List<String> allSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).distinct().collect(Collectors.toList());
|
|
|
+ //查询对应数据
|
|
|
+ List<WbsTreePrivate> allSelectedNodeLists = this.wbsTreePrivateClient.queryByPKeyIds(allSelectedList);
|
|
|
+ //剔除与当前操作节点相同的ID
|
|
|
+ allSelectedNodeLists.removeIf(wbsTreePrivate -> vo.getCurrentNodePrimaryKeyId().equals(wbsTreePrivate.getId().toString()));
|
|
|
+ //设置到集合中
|
|
|
+ selectedNodeList.addAll(allSelectedNodeLists);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 循环查询子节点
|
|
|
+ *
|
|
|
+ * @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);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //说明是工序,查询这个节点下是否存在表格数据
|
|
|
+ List<WbsTreePrivate> exlTables = this.wbsTreePrivateClient.queryExcelTableByParentId(parent);
|
|
|
+ if (exlTables != null && exlTables.size() > 0) {
|
|
|
+ childList.addAll(exlTables);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 懒加载项目级工程划分树
|
|
|
+ *
|
|
|
+ * @param projectId 项目ID
|
|
|
+ * @param id 节点ID
|
|
|
+ * @return 结果集
|
|
|
+ */
|
|
|
+ @PostMapping("/queryWbsTreePrivateByProjectIdAndId")
|
|
|
+ @ApiOperationSupport(order = 9)
|
|
|
+ @ApiOperation(value = "懒加载项目级工程划分树")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "projectId", value = "项目ID"),
|
|
|
+ @ApiImplicitParam(name = "id", value = "点击节点ID")
|
|
|
+ })
|
|
|
+ public R<List<WbsTreeContractTreeVOS>> queryWbsTreePrivateByProjectIdAndId(@RequestParam String projectId, @RequestParam String id) {
|
|
|
+ return R.data(this.wbsTreePrivateClient.queryWbsTreePrivateByProjectIdAndId(projectId, Long.parseLong(id)));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取与当前节点平级的项目级节点
|
|
|
+ *
|
|
|
+ * @param primaryKeyId 主键
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @PostMapping("/queryPeersNode")
|
|
|
+ @ApiOperationSupport(order = 8)
|
|
|
+ @ApiOperation(value = "获取与当前节点平级的项目级节点")
|
|
|
+ @ApiImplicitParam(name = "primaryKeyId", value = "需要新增子节点的节点ID,即当前点出菜单栏的节点ID")
|
|
|
+ public R<WbsTreePrivate> queryPeersNode(@RequestParam String primaryKeyId) {
|
|
|
+ if (StringUtils.isEmpty(primaryKeyId) || "null".equals(primaryKeyId)) {
|
|
|
+ return R.data(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ //首先获取当前节点信息
|
|
|
+ WbsTreeContract treeContract = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(primaryKeyId));
|
|
|
+ //获取与其平级对应的项目级节点
|
|
|
+ WbsTreePrivate treePrivate = this.wbsTreePrivateClient.queryPeersNodeByProjectIdAndId(treeContract.getProjectId(), treeContract.getId());
|
|
|
+
|
|
|
+ return R.data(treePrivate);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取流程状态分类和文件类型分类
|
|
|
+ */
|
|
|
+ @GetMapping("/getDictBizClassifyByCode")
|
|
|
+ @ApiOperationSupport(order = 7)
|
|
|
+ @ApiOperation(value = "获取流程状态分类和文件类型分类")
|
|
|
+ @ApiImplicitParam(name = "code", value = "获取流程状态分类:flowTaskStatus;获取文件类型分类:fileType")
|
|
|
+ public R<List<DictBiz>> getDictBizClassifyByCode(@RequestParam String code) {
|
|
|
+ return this.dictBizClient.getList(code, "notRoot");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前合同段下所有的上报批次
|
|
|
+ *
|
|
|
+ * @param contractId 合同段ID
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @GetMapping("/getReportNumberByContractId")
|
|
|
+ @ApiOperationSupport(order = 6)
|
|
|
+ @ApiOperation(value = "获取当前合同段下所有的上报批次")
|
|
|
+ @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
+ public R<List<Integer>> getReportNumberByContractId(@RequestParam String contractId) {
|
|
|
+ //获取合同段信息
|
|
|
+ ContractInfo contract = this.contractClient.getContractById(Long.valueOf(contractId));
|
|
|
+ return R.data(this.informationQueryService.getReportNumberByContractId(contract.getContractType() == null ? 1 : contract.getContractType(), contractId));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据合同段ID获取所有填报人
|
|
|
+ *
|
|
|
+ * @param contractId 合同段ID
|
|
|
+ * @return 填报人集合
|
|
|
+ */
|
|
|
+ @GetMapping("/getFileUserByContractId")
|
|
|
+ @ApiOperationSupport(order = 5)
|
|
|
+ @ApiOperation(value = "根据合同段ID获取所有填报人")
|
|
|
+ @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
+ public R<List<FileUserVO>> getFileUserByContractId(@RequestParam String contractId) {
|
|
|
+ //获取合同段信息
|
|
|
+ ContractInfo contract = this.contractClient.getContractById(Long.valueOf(contractId));
|
|
|
+ return R.data(this.informationQueryService.queryFileUserByContractId(contract.getContractType() == null ? 1 : contract.getContractType(), contractId));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分页
|
|
|
+ *
|
|
|
+ * @param vo 查询条件
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @PostMapping("/page")
|
|
|
+ @ApiOperationSupport(order = 4)
|
|
|
+ @ApiOperation(value = "分页")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "size", value = "当前页条数", required = true),
|
|
|
+ @ApiImplicitParam(name = "current", value = "当前页", required = true),
|
|
|
+ @ApiImplicitParam(name = "wbsId", value = "节点ID", required = true),
|
|
|
+ @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
+ })
|
|
|
+ public R<IPage<InformationQueryVO>> page(@RequestBody InformationQueryVO vo) {
|
|
|
+ if ("null".equals(String.valueOf(vo.getContractId())) || StringUtils.isEmpty(String.valueOf(vo.getContractId()))) {
|
|
|
+ return R.data(-1, null, "数据查询失败");
|
|
|
+ }
|
|
|
+ //封装分页信息
|
|
|
+ Query query = new Query();
|
|
|
+ query.setSize(vo.getSize());
|
|
|
+ query.setCurrent(vo.getCurrent());
|
|
|
+ //获取合同段信息
|
|
|
+ ContractInfo contract = this.contractClient.getContractById(vo.getContractId());
|
|
|
+ vo.setClassify(contract.getContractType() == null ? 1 : contract.getContractType());
|
|
|
+
|
|
|
+ return R.data(this.informationQueryService.selectInformationQueryPage(Condition.getPage(query), vo));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前合同段的划分树
|
|
|
+ *
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @GetMapping("/queryContractWbsTreeByContractIdAndType")
|
|
|
+ @ApiOperationSupport(order = 3)
|
|
|
+ @ApiOperation(value = "获取当前合同段的划分树")
|
|
|
+ @ApiImplicitParams(value = {
|
|
|
+ @ApiImplicitParam(name = "parentId", value = "父节点,为空则查询第一级节点"),
|
|
|
+ @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
+ })
|
|
|
+ public R<List<WbsTreeContractTreeVOS>> queryContractWbsTreeByContractIdAndType(@RequestParam String parentId, @RequestParam String contractId, @RequestParam String contractIdRelation) {
|
|
|
+ List<WbsTreeContractTreeVOS> rootTreeNode;
|
|
|
+
|
|
|
+ //获取合同段,检查是否是监理合同段
|
|
|
+ ContractInfo contractInfo = this.contractClient.getContractById(Long.parseLong(contractId));
|
|
|
+ if (new Integer("2").equals(contractInfo.getContractType())) {
|
|
|
+ //监理合同段,需要获取关联的施工方合同段根节点数据
|
|
|
+ rootTreeNode = this.wbsTreeContractClient.lazyTree(StringUtils.isNotEmpty(parentId) ? Long.parseLong(parentId) : 0, contractId, contractIdRelation, contractInfo.getContractType());
|
|
|
+ //设置合同段根节点的名称
|
|
|
+ //this.setRootNodeName(parentId, rootTreeNode);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ if (com.alibaba.nacos.common.utils.StringUtils.isEmpty(parentId)) {
|
|
|
+ //为空,说明初始化
|
|
|
+ //获取根节点
|
|
|
+ rootTreeNode = this.clientTreePublicCodeClient.queryContractWbsTreeByContractIdAndType(contractId, 1, "0");
|
|
|
+ } else {
|
|
|
+ //不为空,获取其下子节点
|
|
|
+ rootTreeNode = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, 1, parentId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //其他参数
|
|
|
+ if (rootTreeNode != null && rootTreeNode.size() > 0) {
|
|
|
+ //获取当前父节点下所有工序节点及填报资料
|
|
|
+ List<QueryProcessDataVO> queryDataResult;
|
|
|
+ if (new Integer("2").equals(contractInfo.getContractType())) {
|
|
|
+ queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 2, contractIdRelation);
|
|
|
+ } else {
|
|
|
+ queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 1, contractId);
|
|
|
+ }
|
|
|
+
|
|
|
+ rootTreeNode.forEach(vo -> {
|
|
|
+ String primaryKeyId = new Integer("2").equals(contractInfo.getContractType()) ? vo.getId() : vo.getPrimaryKeyId();
|
|
|
+
|
|
|
+ //施工修改根节点名称
|
|
|
+ if (new Integer("1").equals(contractInfo.getContractType())) {
|
|
|
+ if (StringUtils.isEmpty(parentId) || "0".equals(parentId)) {
|
|
|
+ vo.setTitle(contractInfo.getContractName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取上传的图纸
|
|
|
+ ContractTreeDrawings drawings = this.contractTreeDrawingsService.queryCurrentNodeDrawings(primaryKeyId);
|
|
|
+ if (drawings != null) {
|
|
|
+ //主键
|
|
|
+ vo.setDrawingsId(drawings.getId());
|
|
|
+ //文件路径
|
|
|
+ vo.setFileUrl(drawings.getFileUrl());
|
|
|
+ }
|
|
|
+
|
|
|
+ //处理颜色
|
|
|
+ if (queryDataResult != null && queryDataResult.size() > 0) {
|
|
|
+ this.setNodeColor(vo, queryDataResult, true);
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断当前节点是否被标记为首件
|
|
|
+ TreeContractFirst first = this.treeContractFirstService.getOne(Wrappers.<TreeContractFirst>lambdaQuery().eq(TreeContractFirst::getIsDeleted, 0).eq(TreeContractFirst::getWbsNodeId, primaryKeyId));
|
|
|
+ vo.setIsFirst(first != null);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.data(rootTreeNode);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置节点颜色
|
|
|
+ * 填报节点:
|
|
|
+ * 未填报1 < 已填报-未上报2 < 已填报-待审批3 < 已审批4
|
|
|
+ * <p>
|
|
|
+ * 非填报节点
|
|
|
+ * 未填报1(其下所有工序节点均未填报) < 已填报2(未上报和待审批) < 已审批4(其下所有工序节点均审批)
|
|
|
+ */
|
|
|
+ private void setNodeColor(WbsTreeContractTreeVOS vos, List<QueryProcessDataVO> queryDataResult, boolean isRemove) {
|
|
|
+ if (queryDataResult != null && queryDataResult.size() > 0) {
|
|
|
+ Iterator<QueryProcessDataVO> iterator = queryDataResult.iterator();
|
|
|
+ //默认均未填报
|
|
|
+ StringBuilder colorStatusValue = new StringBuilder();
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ 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 (query.getStatus() == null || query.getStatus() == -1) {
|
|
|
+ colorStatusValue.append("1");
|
|
|
+ } else {
|
|
|
+ switch (query.getStatus()) {
|
|
|
+ case 0:
|
|
|
+ case 3:
|
|
|
+ //未上报
|
|
|
+ colorStatusValue.append("2");
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ //待审批
|
|
|
+ colorStatusValue.append("3");
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ //已审批
|
|
|
+ colorStatusValue.append("4");
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ colorStatusValue.append("1");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (isRemove) {
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ colorStatusValue.append("1");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //检查字符串
|
|
|
+ if (StringUtils.isNotEmpty(colorStatusValue.toString())) {
|
|
|
+ if (new Integer("6").equals(vos.getDeptCategory())) {
|
|
|
+ //工序,则直接使用字符串的判断
|
|
|
+ vos.setColorStatus(new Integer(colorStatusValue.toString()));
|
|
|
+ } else {
|
|
|
+ if (colorStatusValue.toString().contains("1")) {
|
|
|
+ //含有1
|
|
|
+ if (colorStatusValue.toString().contains("2") || colorStatusValue.toString().contains("3") || colorStatusValue.toString().contains("4")) {
|
|
|
+ //同时含有2/3/4,取2
|
|
|
+ vos.setColorStatus(2);
|
|
|
+ } else {
|
|
|
+ //否则,取1
|
|
|
+ vos.setColorStatus(1);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //不含有1
|
|
|
+ if (colorStatusValue.toString().contains("4") && !colorStatusValue.toString().contains("2") && !colorStatusValue.toString().contains("3")) {
|
|
|
+ //只含有4,取4
|
|
|
+ vos.setColorStatus(4);
|
|
|
+ } else {
|
|
|
+ //反之包含2/3,取2
|
|
|
+ vos.setColorStatus(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ vos.setColorStatus(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改
|
|
|
+ */
|
|
|
+ @PostMapping("/update")
|
|
|
+ @ApiOperationSupport(order = 1)
|
|
|
+ @ApiOperation(value = "修改(只能修改编号和文件名)")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "name", value = "文件名称, 必须有值", required = true),
|
|
|
+ @ApiImplicitParam(name = "number", value = "文件编号,可以为空")
|
|
|
+ })
|
|
|
+ public R<Boolean> update(@Valid @RequestBody InformationQuery informationQuery) {
|
|
|
+ if ("null".equals(String.valueOf(informationQuery.getId())) || StringUtils.isEmpty(String.valueOf(informationQuery.getId()))) {
|
|
|
+ return R.data(-1, false, "数据操作失败");
|
|
|
+ }
|
|
|
+ return R.status(informationQueryService.update(Wrappers.<InformationQuery>lambdaUpdate().set(InformationQuery::getName, informationQuery.getName()).set(InformationQuery::getNumber, informationQuery.getNumber()).eq(InformationQuery::getId, informationQuery.getId())));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除
|
|
|
+ */
|
|
|
+ @PostMapping("/remove")
|
|
|
+ @ApiOperationSupport(order = 2)
|
|
|
+ @ApiOperation(value = "逻辑删除", notes = "传入ids")
|
|
|
+ public R<Boolean> remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
|
|
|
+ return R.status(informationQueryService.deleteLogic(Func.toLongList(ids)));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|