From f9a795448673af72fadf01a3d8cd68797ba6a3ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E5=85=B6=E5=85=B5?= Date: Wed, 8 Jan 2025 14:27:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=AD=E4=BB=A3=E5=A4=9A=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zentao/controller/ZtStoryController.java | 7 +- .../com/sa/zentao/entity/ZtProjectstory.java | 2 +- .../sa/zentao/service/IZtProjectService.java | 2 +- .../service/IZtProjectstoryService.java | 4 +- .../sa/zentao/service/IZtStoryService.java | 4 +- .../zentao/service/impl/IZtCountService.java | 5 +- .../service/impl/ZtProjectServiceImpl.java | 34 +- .../impl/ZtProjectstoryServiceImpl.java | 5 + .../service/impl/ZtReleaseServiceImpl.java | 24 +- .../service/impl/ZtStoryServiceImpl.java | 429 +++++++++++------- .../service/impl/ZtTaskServiceImpl.java | 27 +- 11 files changed, 320 insertions(+), 223 deletions(-) diff --git a/src/main/java/com/sa/zentao/controller/ZtStoryController.java b/src/main/java/com/sa/zentao/controller/ZtStoryController.java index c201f7e..22b4564 100644 --- a/src/main/java/com/sa/zentao/controller/ZtStoryController.java +++ b/src/main/java/com/sa/zentao/controller/ZtStoryController.java @@ -3,6 +3,7 @@ package com.sa.zentao.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.BusinessException; import com.sa.zentao.dao.Result; import com.sa.zentao.dao.ZtProjectDTO; import com.sa.zentao.dao.ZtStoryDTO; @@ -146,7 +147,7 @@ public class ZtStoryController { //获取需求 根据id @RequestMapping(value = "/getStoryById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") public Result getStoryById(@RequestBody ZtStoryDTO dto){ - ZtStoryDTO storyDTO = ztStoryService.getStoryById(dto.getId()); + ZtStoryDTO storyDTO = ztStoryService.getStoryById(dto.getId(),dto.getExecution()); return Result.success(storyDTO); } @@ -159,8 +160,8 @@ public class ZtStoryController { //切换执行 @RequestMapping(value = "/changeExecution", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") public Result changeExecution(@RequestBody ZtStoryDTO dto){ - ztStoryService.changeExecution(dto); - return Result.success(); +// ztStoryService.changeExecution(dto); + throw new BusinessException("弃用"); } //切换指派 @RequestMapping(value = "/changeAssignedTo", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") diff --git a/src/main/java/com/sa/zentao/entity/ZtProjectstory.java b/src/main/java/com/sa/zentao/entity/ZtProjectstory.java index 9f955d8..ee37587 100644 --- a/src/main/java/com/sa/zentao/entity/ZtProjectstory.java +++ b/src/main/java/com/sa/zentao/entity/ZtProjectstory.java @@ -33,7 +33,7 @@ public class ZtProjectstory implements Serializable { @TableField("`order`") private Integer order; - //execution + //execution project @TableField("`type`") private String type; // private Integer execution; diff --git a/src/main/java/com/sa/zentao/service/IZtProjectService.java b/src/main/java/com/sa/zentao/service/IZtProjectService.java index 339dc9d..2501bdf 100644 --- a/src/main/java/com/sa/zentao/service/IZtProjectService.java +++ b/src/main/java/com/sa/zentao/service/IZtProjectService.java @@ -101,5 +101,5 @@ public interface IZtProjectService extends IService { List execListByProject(Integer project); - void removeExecutionStory(Integer id,Integer execution); + void removeExecutionStory(Integer id,List execList); } diff --git a/src/main/java/com/sa/zentao/service/IZtProjectstoryService.java b/src/main/java/com/sa/zentao/service/IZtProjectstoryService.java index 6e37b36..3b8a124 100644 --- a/src/main/java/com/sa/zentao/service/IZtProjectstoryService.java +++ b/src/main/java/com/sa/zentao/service/IZtProjectstoryService.java @@ -21,6 +21,6 @@ public interface IZtProjectstoryService extends IService { List projectStoryList(List projectIds, ProjectTypeEnums type); //根据需求查找项目 或者迭代 List projectListByStory(List storyIds, ProjectTypeEnums type); - - + //一个项目只能关联一个story + ZtProjectstory getProject(Integer storyId); } diff --git a/src/main/java/com/sa/zentao/service/IZtStoryService.java b/src/main/java/com/sa/zentao/service/IZtStoryService.java index d75ea6b..ffa5f45 100644 --- a/src/main/java/com/sa/zentao/service/IZtStoryService.java +++ b/src/main/java/com/sa/zentao/service/IZtStoryService.java @@ -64,7 +64,7 @@ public interface IZtStoryService extends IService { void storyYs(ZtStoryDTO dto); - ZtStoryDTO getStoryById(Integer id); + ZtStoryDTO getStoryById(Integer id,Integer execution); List execListByProject(ZtStoryDTO dto); @@ -80,5 +80,5 @@ public interface IZtStoryService extends IService { List myStoryList(ZtProjectQo qo); - public Map getExecutionMapByStory(List list); + Map> getExecutionMapByStory(List list); } diff --git a/src/main/java/com/sa/zentao/service/impl/IZtCountService.java b/src/main/java/com/sa/zentao/service/impl/IZtCountService.java index a8f44b7..b433cf0 100644 --- a/src/main/java/com/sa/zentao/service/impl/IZtCountService.java +++ b/src/main/java/com/sa/zentao/service/impl/IZtCountService.java @@ -15,6 +15,7 @@ import com.sa.zentao.conf.LoginRiskUser; import com.sa.zentao.conf.RiskUserThreadLocal; import com.sa.zentao.dao.*; import com.sa.zentao.entity.*; +import com.sa.zentao.enums.ProjectTypeEnums; import com.sa.zentao.enums.TaskStatus; import com.sa.zentao.enums.TaskType; import com.sa.zentao.enums.UserType; @@ -655,8 +656,8 @@ public class IZtCountService { List storyList = this.projectstoryService.list(new QueryWrapper().lambda() - .in(ZtProjectstory::getExecution, ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList())) - .in(ZtProjectstory::getStory,storyIds) + .in(ZtProjectstory::getProject, ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList())) + .in(ZtProjectstory::getStory,storyIds).eq(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue()) ); List ztStories = CollectionUtils.isEmpty(storyList)?new ArrayList<>():this.storyService.listByIds(storyList.stream().map(o -> o.getStory()).collect(Collectors.toList())); diff --git a/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java index c1d4785..51fcc8b 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java @@ -176,7 +176,7 @@ public class ZtProjectServiceImpl extends ServiceImpl projectList = dto.getProjectList(); + List projectList = new ArrayList<>(Arrays.asList(dto.getProject())); List saveList=new ArrayList(); for (Integer pId :projectList) { ZtExecutionproject p=new ZtExecutionproject(); @@ -185,15 +185,7 @@ public class ZtProjectServiceImpl extends ServiceImpl().lambda() -// .eq(ZtProjectproduct::getProject, ztProject.getParent())); -// ZtProjectproduct p=new ZtProjectproduct(); -// p.setProject(ztProject.getId()); -// p.setProduct(projectproduct.getProduct()); -// this.projectproductService.save(p); - // addKanbanLane 执行 三行 - //addColumn 几十列 int index=5; @@ -1238,17 +1230,25 @@ public class ZtProjectServiceImpl extends ServiceImpl execList) { + + List list = projectstoryService.list(new QueryWrapper().lambda() + .eq(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue()) + .in(ZtProjectstory::getProject, execList) + .eq(ZtProjectstory::getStory, storyId) + ); + - List list = this.projectstoryService.list(new QueryWrapper().lambda() - .eq(ZtProjectstory::getStory, id).eq(ZtProjectstory::getProject, execution)); if(!CollectionUtils.isEmpty(list)){ + for (ZtProjectstory d:list) { + //删除迭代 + this.projectstoryService.remove(new QueryWrapper().lambda() + .eq(ZtProjectstory::getStory,storyId).eq(ZtProjectstory::getProject,d.getProject())); + //删除看板 + this.kanbanlaneService.removeExecutionStory(d.getProject(),storyId); + } - //删除迭代 - this.projectstoryService.remove(new QueryWrapper().lambda() - .eq(ZtProjectstory::getStory,id).eq(ZtProjectstory::getProject,execution)); - //删除看板 - this.kanbanlaneService.removeExecutionStory(execution,id); } } diff --git a/src/main/java/com/sa/zentao/service/impl/ZtProjectstoryServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtProjectstoryServiceImpl.java index 15367f6..f6210f4 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtProjectstoryServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtProjectstoryServiceImpl.java @@ -51,4 +51,9 @@ public class ZtProjectstoryServiceImpl extends ServiceImpl().lambda().eq(ZtProjectstory::getStory,storyId).eq(ZtProjectstory::getType,ProjectTypeEnums.project.getValue())); + } } diff --git a/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java index 57140d4..6ab5a5b 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java @@ -294,7 +294,7 @@ public class ZtReleaseServiceImpl extends ServiceImpl executionMapByStory = this.storyService.getExecutionMapByStory(list); +// Map> executionMapByStory = this.storyService.getExecutionMapByStory(list); for (ZtStoryDTO d : list) { @@ -308,11 +308,11 @@ public class ZtReleaseServiceImpl extends ServiceImpl ztProject = executionMapByStory.get(d.getId()); +// if(ztProject!=null){ +// d.setExecution(ztProject.getId()); +// d.setExecutionName(ztProject.getName()); +// } } return new PageInfo(list); } @@ -362,7 +362,7 @@ public class ZtReleaseServiceImpl extends ServiceImpl executionMapByStory = this.storyService.getExecutionMapByStory(storyList); +// Map executionMapByStory = this.storyService.getExecutionMapByStory(storyList); for (ZtStoryDTO d : storyList) { @@ -375,11 +375,11 @@ public class ZtReleaseServiceImpl extends ServiceImpl(storyList); } diff --git a/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java index c85a868..02fc8c7 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java @@ -109,7 +109,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl Map> rMap = getReviewMap(list); - Map executionMapByStory = getExecutionMapByStory(list); + Map> executionMapByStory = getExecutionMapByStory(list); for (ZtStoryDTO d : list) { @@ -124,10 +124,10 @@ public class ZtStoryServiceImpl extends ServiceImpl impl if(ztUser!=null){ d.setOpenedbyName(ztUser.getNickname()); } - ZtProject ztProject = executionMapByStory.get(d.getId()); - if(ztProject!=null){ - d.setExecution(ztProject.getId()); - d.setExecutionName(ztProject.getName()); + List ztProjectList = executionMapByStory.get(d.getId()); + if(!CollectionUtils.isEmpty(ztProjectList)){ +// d.setExecution(ztProject.getId()); + d.setExecutionName(ztProjectList.stream().map(o->o.getName()).collect(Collectors.joining(","))); } } } @@ -266,47 +266,55 @@ public class ZtStoryServiceImpl extends ServiceImpl impl this.projectstoryService.save(ztProjectstory); } - // 1.如果是产品 那么关联 项目 执行 2.如果是项目 关联执行 - if(dto.getExecution()!=null&&dto.getExecution()!=0){ - List syncList = this.projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, s.getId()) - .eq(ZtProjectstory::getExecution, dto.getExecution())); - if(CollectionUtils.isEmpty(syncList)){ - if (s.getProduct() != null&&s.getProduct()!=0) { - - List execlist = this.executionprojectService.list(new QueryWrapper().lambda() - .eq(ZtExecutionproject::getExecution, dto.getExecution())); - if(CollectionUtils.isEmpty(execlist)){ - List list = this.projectproductService.list(new QueryWrapper() - .lambda().eq(ZtProjectproduct::getProduct, s.getProduct())); - ZtProjectproduct ztProjectproduct = list.get(0); - - - ZtProjectstory ztProjectstory = new ZtProjectstory(); - ztProjectstory.setOrder(1); - ztProjectstory.setStory(s.getId()); - ztProjectstory.setProject(ztProjectproduct.getProject()); - this.projectstoryService.save(ztProjectstory); - //添加执行 - }else{ - - ZtProjectstory ztProjectstory = new ZtProjectstory(); - ztProjectstory.setOrder(1); - ztProjectstory.setStory(s.getId()); - ztProjectstory.setProject(execlist.get(0).getProject()); - this.projectstoryService.save(ztProjectstory); - } - - - - } - } - - ZtProjectDTO d=new ZtProjectDTO(); - d.setExcludeId(dto.getExecution()); - d.setStoryIds(new ArrayList<>(){{add(s.getId());}}); - projectService.executionSyncStory(d); + List executions = dto.getExecutions(); + if(!CollectionUtils.isEmpty(executions)){ +// this.projectproductService.getOne(new QueryWrapper<>().lambda().eq()); + //拿执行的项目id +// this.executionprojectService.getOne(new QueryWrapper().lambda().eq()) + this.executionBindStory(s,executions); } + // 1.如果是产品 那么关联 项目 执行 2.如果是项目 关联执行 +// if(dto.getExecution()!=null&&dto.getExecution()!=0){ +// List syncList = this.projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, s.getId()) +// .eq(ZtProjectstory::getExecution, dto.getExecution())); +// if(CollectionUtils.isEmpty(syncList)){ +// if (s.getProduct() != null&&s.getProduct()!=0) { +// +// List execlist = this.executionprojectService.list(new QueryWrapper().lambda() +// .eq(ZtExecutionproject::getExecution, dto.getExecution())); +// if(CollectionUtils.isEmpty(execlist)){ +// List list = this.projectproductService.list(new QueryWrapper() +// .lambda().eq(ZtProjectproduct::getProduct, s.getProduct())); +// ZtProjectproduct ztProjectproduct = list.get(0); +// +// +// ZtProjectstory ztProjectstory = new ZtProjectstory(); +// ztProjectstory.setOrder(1); +// ztProjectstory.setStory(s.getId()); +// ztProjectstory.setProject(ztProjectproduct.getProject()); +// this.projectstoryService.save(ztProjectstory); +// //添加执行 +// }else{ +// +// ZtProjectstory ztProjectstory = new ZtProjectstory(); +// ztProjectstory.setOrder(1); +// ztProjectstory.setStory(s.getId()); +// ztProjectstory.setProject(execlist.get(0).getProject()); +// this.projectstoryService.save(ztProjectstory); +// } +// +// +// +// } +// } +// +// ZtProjectDTO d=new ZtProjectDTO(); +// d.setExcludeId(dto.getExecution()); +// d.setStoryIds(new ArrayList<>(){{add(s.getId());}}); +// projectService.executionSyncStory(d); +// } + } @@ -329,7 +337,6 @@ public class ZtStoryServiceImpl extends ServiceImpl impl if(!CollectionUtils.isEmpty(executions)){ List oldExecIds = pList.stream().map(o -> o.getProject()).collect(Collectors.toList()); //查找需求管理的项目 需求只会被项目关联一次 - List projectList = this.projectstoryService.projectListByStory(Arrays.asList(id), ProjectTypeEnums.project); List execList=new ArrayList(); for (Integer exec:executions) { @@ -339,7 +346,8 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } } - executionBindStory(ztStory.getId(),projectList.get(0).getProject(),execList); + //迭代关联 + executionBindStory(ztStory,execList); execList.clear(); for (Integer oldExec:oldExecIds) { if(!executions.contains(oldExec)){ @@ -347,7 +355,8 @@ public class ZtStoryServiceImpl extends ServiceImpl impl execList.add(oldExec); } } - executionUnBindStory(ztStory.getId(),projectList.get(0).getProject(),execList); + //取消关联 + executionUnBindStory(ztStory.getId(),execList); } @@ -488,22 +497,33 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } - private void executionBindStory(Integer storyId,Integer project,List execList){ + private void executionBindStory(ZtStory story,List execList){ + Integer storyId=story.getId(); if(CollectionUtils.isEmpty(execList)){ return; } - List list = this.projectstoryService.list(new QueryWrapper().lambda() - .eq(ZtProjectstory::getProject, project) - .eq(ZtProjectstory::getStory, storyId) - ); - if(CollectionUtils.isEmpty(list)){ - ZtProjectDTO d=new ZtProjectDTO(); - d.setStoryIds(new ArrayList<>(Arrays.asList(storyId))); - d.setProject(project); - this.projectService.projectSyncStory(d); - } + List execProjectList = this.executionprojectService.list(new QueryWrapper().lambda().eq(ZtExecutionproject::getProject, execList)); + + + + for (Integer execId:execList) { + List fProjectList = execProjectList.stream().filter(o -> o.getExecution().intValue() == execId.intValue()).collect(Collectors.toList()); + Integer project = fProjectList.get(0).getProject(); + + List list = this.projectstoryService.list(new QueryWrapper().lambda() + .eq(ZtProjectstory::getProject, project) + .eq(ZtProjectstory::getStory, storyId) + ); + + if(CollectionUtils.isEmpty(list)){ + ZtProjectDTO d=new ZtProjectDTO(); + d.setStoryIds(new ArrayList<>(Arrays.asList(storyId))); + d.setProject(project); + this.projectService.projectSyncStory(d); + } + ZtProjectDTO d=new ZtProjectDTO(); d.setStoryIds(new ArrayList<>(Arrays.asList(storyId))); d.setExcludeId(execId); @@ -511,27 +531,85 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } } - private void executionUnBindStory(Integer storyId,Integer project,List execList){ + private void executionUnBindStory(Integer storyId,List execList){ if(CollectionUtils.isEmpty(execList)){ return; + }else{ + List list = this.taskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory, storyId) + .in(ZtTask::getExecution, execList) + ); + + if(!CollectionUtils.isEmpty(list)){ + throw new BusinessException("当前迭代已开始任务,无法取消关联 迭代Id:"+list.get(0).getId()); + } } - List list = this.projectstoryService.list(new QueryWrapper().lambda() - .eq(ZtProjectstory::getProject, project) - .eq(ZtProjectstory::getStory, storyId) - ); - if(CollectionUtils.isEmpty(list)){ - ZtProjectDTO d=new ZtProjectDTO(); - d.setStoryIds(new ArrayList<>(Arrays.asList(storyId))); - d.setProject(project); - this.projectService.projectSyncStory(d); - } - for (Integer execId:execList) { - ZtProjectDTO d=new ZtProjectDTO(); - d.setStoryIds(new ArrayList<>(Arrays.asList(storyId))); - d.setExcludeId(execId); - this.projectService.executionSyncStory(d); - } + projectService.removeExecutionStory(storyId,execList); + +// if(dto.getExecution()!=null&&dto.getExecution()!=0){ +// //1.没有绑定 解绑 +// ZtProjectstory execStory = this.projectstoryService.getOne(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, ztStory.getId()) +// .ne(ZtProjectstory::getExecution, 0)); +// //如果没有关联过迭代 去关联 第一次 +// if(execStory==null){ +// //如果是产品型需求 加项目 加迭代 如果是项目型产品 加迭代 +// +// if (ztStory.getProduct() != null&&ztStory.getProduct()!=0) { +// List execlist = this.executionprojectService.list(new QueryWrapper().lambda() +// .eq(ZtExecutionproject::getExecution, dto.getExecution())); +// if(CollectionUtils.isEmpty(execlist)){ +// List list = this.projectproductService.list(new QueryWrapper() +// .lambda().eq(ZtProjectproduct::getProduct, ztStory.getProduct())); +// ZtProjectproduct ztProjectproduct = list.get(0); +// +// +// ZtProjectstory ztProjectstory = new ZtProjectstory(); +// ztProjectstory.setOrder(1); +// ztProjectstory.setStory(ztStory.getId()); +// ztProjectstory.setProject(ztProjectproduct.getProject()); +// this.projectstoryService.save(ztProjectstory); +// //添加执行 +// }else{ +// +// ZtProjectstory ztProjectstory = new ZtProjectstory(); +// ztProjectstory.setOrder(1); +// ztProjectstory.setStory(ztStory.getId()); +// ztProjectstory.setProject(execlist.get(0).getProject()); +// this.projectstoryService.save(ztProjectstory); +// } +// } +// ZtProjectDTO d=new ZtProjectDTO(); +// d.setExcludeId(dto.getExecution()); +// d.setStoryIds(new ArrayList<>(){{add(ztStory.getId());}}); +// projectService.executionSyncStory(d); +// } +// else if(dto.getExecution().intValue()==pList.get(0).getExecution().intValue()){ +// //编辑没动 不用管 +// }else{ +// +// +// +// //2.绑定了 切换 +// //1. 删除projectStory 迭代的 删除看板 +// projectService.removeExecutionStory(ztStory.getId(),dto.getExecution()); +// //2. 新增 +// ZtProjectDTO d=new ZtProjectDTO(); +// d.setExcludeId(dto.getExecution()); +// d.setStoryIds(new ArrayList<>(){{add(ztStory.getId());}}); +// projectService.executionSyncStory(d); +// } +// +// } +// else{ +// List list = this.taskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory, ztStory.getId())); +// if(!CollectionUtils.isEmpty(list)){ +// throw new BusinessException("当前任务已开始无法更换迭代"); +// } +// //3可能解绑 查询是否以前关联过 +// projectService.removeExecutionStory(ztStory.getId()); +// } +// + } @Override @@ -542,13 +620,13 @@ public class ZtStoryServiceImpl extends ServiceImpl impl Integer projectId=null; Integer executionId=null; if(!CollectionUtils.isEmpty(list)){ - List projectList = list.stream().filter(o -> o.getProject() != null && o.getProject() != 0).collect(Collectors.toList()); + List projectList = list.stream().filter(o -> o.getType().equals("project")).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(projectList)){ projectId=projectList.get(0).getProject(); } - List executionList = list.stream().filter(o -> o.getProject() != null && o.getProject() != 0).collect(Collectors.toList()); + List executionList = list.stream().filter(o -> o.getType().equals("execution")).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(executionList)){ - executionId=executionList.get(0).getExecution(); + executionId=executionList.get(0).getProject(); } } actionService.addAction(ActionType.XQ, ActionStatus.TJBZ, dto.getId(), ztStory.getProduct() + "", projectId, executionId, @@ -583,7 +661,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl Map> rMap = getReviewMap(list); - Map execMap= getExecutionMapByStory(list); + Map> execMap= getExecutionMapByStory(list); List userIds = list.stream().map(o -> o.getAssignedTo()).collect(Collectors.toList()); userIds.addAll(list.stream().map(o -> o.getOpenedby()).collect(Collectors.toList())); @@ -594,10 +672,14 @@ public class ZtStoryServiceImpl extends ServiceImpl impl for (ZtStoryDTO d : list) { d.setRevieweUser(d.getReviewedby().replaceAll(",", " ")); d.setViews(rMap.get(d.getId())); - ZtProject ztProject = execMap.get(d.getId()); - if(ztProject!=null){ - d.setPlan(ztProject.getName()); + + List ztProjectList = execMap.get(d.getId()); + + + if(!CollectionUtils.isEmpty(ztProjectList)){ + d.setPlan(ztProjectList.stream().map(o->o.getName()).collect(Collectors.joining(","))); } + ZtUser ztUser = userMap.get(d.getAssignedTo()); if(ztUser!=null){ d.setAssignedToName(ztUser.getNickname()); @@ -614,8 +696,8 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } //需求id 执行 - public Map getExecutionMapByStory(List list) { - List pStoryList = projectstoryService.list(new QueryWrapper().lambda().ne(ZtProjectstory::getExecution, 0) + public Map> getExecutionMapByStory(List list) { + List pStoryList = projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue()) .in(ZtProjectstory::getStory, list.stream().map(o -> o.getId()).collect(Collectors.toList())) ); @@ -623,15 +705,24 @@ public class ZtStoryServiceImpl extends ServiceImpl impl return new HashMap<>(); } - List execIds = pStoryList.stream().map(o -> o.getExecution()).collect(Collectors.toList()); + List execIds = pStoryList.stream().map(o -> o.getProject()).collect(Collectors.toList()); List ztProjects = this.projectService.listByIds(execIds); - Map result =new HashMap<>(); + Map> result =new HashMap<>(); for (ZtProjectstory st:pStoryList) { - Integer execution = st.getExecution(); + Integer execution = st.getProject(); List fExecution = ztProjects.stream().filter(o -> o.getId().intValue() == execution.intValue()).collect(Collectors.toList()); ZtProject ztProject = fExecution.get(0); - result.put(st.getStory(),ztProject); + + List mpList = result.get(st.getStory()); + if(CollectionUtils.isEmpty(mpList)){ + List mList=new ArrayList<>(); + mList.add(ztProject); + result.put(st.getStory(),mList); + }else{ + mpList.add(ztProject); + } + } @@ -655,17 +746,18 @@ public class ZtStoryServiceImpl extends ServiceImpl impl List allList = this.projectstoryService .list(new QueryWrapper().lambda() .in(ZtProjectstory::getProject, execList.stream().map(o->o.getProject()).collect(Collectors.toList())) - .eq(ZtProjectstory::getExecution,0) + .eq(ZtProjectstory::getType,ProjectTypeEnums.project.getValue()) ); if(CollectionUtils.isEmpty(allList)){ return new ArrayList<>(); } + //需求已经被绑定的列表 List syncList = this.projectstoryService .list(new QueryWrapper().lambda() .in(ZtProjectstory::getStory, allList.stream().map(o->o.getStory()).collect(Collectors.toList())) - .ne(ZtProjectstory::getExecution,0) + .ne(ZtProjectstory::getProject,execution) ); List syncIds = syncList.stream().map(o -> o.getStory()).collect(Collectors.toList()); @@ -868,6 +960,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } + //发布 @Override @Transactional public void releaseStory(Integer story) { @@ -890,6 +983,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl if(!"tested".equals(ztStory.getStage())){ throw new BusinessException("当前无法更改发布状态"); } + //这个需求被多少执行关联 List execIds = getExecutionId(ztStory); if(CollectionUtils.isEmpty(execIds)){ throw new BusinessException("当前无迭代,不可以更改"); @@ -907,15 +1001,6 @@ public class ZtStoryServiceImpl extends ServiceImpl impl String newStatus ="released"; ztStory.setStage(newStatus); - if("released".equals(newStatus)){ - List execList = this.projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, story).ne(ZtProjectstory::getExecution, 0)); - Integer execId=null; - if(!CollectionUtils.isEmpty(execList)){ - execId=execList.get(0).getExecution(); - } - actionService.addAction(ActionType.XQ, ActionStatus.FB, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), execId, - RiskUserThreadLocal.get().getName(), null, ""); - } this.baseMapper.updateById(ztStory); for (Integer execId : execIds) { @@ -933,7 +1018,10 @@ public class ZtStoryServiceImpl extends ServiceImpl impl this.productService.productChangeStatus(ztStory.getProduct(), oldPStatus, newPStatus); } } + } + actionService.addAction(ActionType.XQ, ActionStatus.FB, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), execIds.get(0), + RiskUserThreadLocal.get().getName(), null, ""); } @Override @@ -1087,61 +1175,61 @@ public class ZtStoryServiceImpl extends ServiceImpl impl @Override @Transactional public void changeExecution(ZtStoryDTO dto) { - List idList = dto.getIdList(); - for (Integer i : idList) { - ZtStory ztStory = this.baseMapper.selectById(i); - if("closed".equals(ztStory.getStatus())){ - throw new BusinessException("当前已关闭"); - } - ztStory.setLasteditedby(RiskUserThreadLocal.get().getName()); - ztStory.setLastediteddate(new Date()); - this.baseMapper.updateById(ztStory); - - - // 1.如果是产品 那么关联 项目 执行 2.如果是项目 关联执行 - if(dto.getExecution()!=null&&dto.getExecution()!=0){ - - - ZtProjectstory execStory = this.projectstoryService.getOne(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, ztStory.getId()) - .ne(ZtProjectstory::getExecution, 0)); - //如果没有关联过迭代 - if(execStory==null){ - //如果是产品型需求 加项目 加迭代 如果是项目型产品 加迭代 - - if (ztStory.getProduct() != null&&ztStory.getProduct()!=0) { - List execlist = this.executionprojectService.list(new QueryWrapper().lambda() - .eq(ZtExecutionproject::getExecution, dto.getExecution())); - if(CollectionUtils.isEmpty(execlist)){ - List list = this.projectproductService.list(new QueryWrapper() - .lambda().eq(ZtProjectproduct::getProduct, ztStory.getProduct())); - ZtProjectproduct ztProjectproduct = list.get(0); - - - ZtProjectstory ztProjectstory = new ZtProjectstory(); - ztProjectstory.setOrder(1); - ztProjectstory.setStory(ztStory.getId()); - ztProjectstory.setProject(ztProjectproduct.getProject()); - this.projectstoryService.save(ztProjectstory); - //添加执行 - }else{ - - ZtProjectstory ztProjectstory = new ZtProjectstory(); - ztProjectstory.setOrder(1); - ztProjectstory.setStory(ztStory.getId()); - ztProjectstory.setProject(execlist.get(0).getProject()); - this.projectstoryService.save(ztProjectstory); - } - } - ZtProjectDTO d=new ZtProjectDTO(); - d.setExcludeId(dto.getExecution()); - d.setStoryIds(new ArrayList<>(){{add(ztStory.getId());}}); - projectService.executionSyncStory(d); - } - - - } - - } +// List idList = dto.getIdList(); +// for (Integer i : idList) { +// ZtStory ztStory = this.baseMapper.selectById(i); +// if("closed".equals(ztStory.getStatus())){ +// throw new BusinessException("当前已关闭"); +// } +// ztStory.setLasteditedby(RiskUserThreadLocal.get().getName()); +// ztStory.setLastediteddate(new Date()); +// this.baseMapper.updateById(ztStory); +// +// +// // 1.如果是产品 那么关联 项目 执行 2.如果是项目 关联执行 +// if(dto.getExecution()!=null&&dto.getExecution()!=0){ +// +// +// ZtProjectstory execStory = this.projectstoryService.getOne(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, ztStory.getId()) +// .ne(ZtProjectstory::getExecution, 0)); +// //如果没有关联过迭代 +// if(execStory==null){ +// //如果是产品型需求 加项目 加迭代 如果是项目型产品 加迭代 +// +// if (ztStory.getProduct() != null&&ztStory.getProduct()!=0) { +// List execlist = this.executionprojectService.list(new QueryWrapper().lambda() +// .eq(ZtExecutionproject::getExecution, dto.getExecution())); +// if(CollectionUtils.isEmpty(execlist)){ +// List list = this.projectproductService.list(new QueryWrapper() +// .lambda().eq(ZtProjectproduct::getProduct, ztStory.getProduct())); +// ZtProjectproduct ztProjectproduct = list.get(0); +// +// +// ZtProjectstory ztProjectstory = new ZtProjectstory(); +// ztProjectstory.setOrder(1); +// ztProjectstory.setStory(ztStory.getId()); +// ztProjectstory.setProject(ztProjectproduct.getProject()); +// this.projectstoryService.save(ztProjectstory); +// //添加执行 +// }else{ +// +// ZtProjectstory ztProjectstory = new ZtProjectstory(); +// ztProjectstory.setOrder(1); +// ztProjectstory.setStory(ztStory.getId()); +// ztProjectstory.setProject(execlist.get(0).getProject()); +// this.projectstoryService.save(ztProjectstory); +// } +// } +// ZtProjectDTO d=new ZtProjectDTO(); +// d.setExcludeId(dto.getExecution()); +// d.setStoryIds(new ArrayList<>(){{add(ztStory.getId());}}); +// projectService.executionSyncStory(d); +// } +// +// +// } +// +// } } @Override @@ -1206,7 +1294,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl Map> rMap = getReviewMap(list); - Map execMap= getExecutionMapByStory(list); + Map> execMap= getExecutionMapByStory(list); List userIds = list.stream().map(o -> o.getAssignedTo()).collect(Collectors.toList()); userIds.addAll(list.stream().map(o -> o.getOpenedby()).collect(Collectors.toList())); @@ -1217,9 +1305,9 @@ public class ZtStoryServiceImpl extends ServiceImpl impl for (ZtStoryDTO d : list) { d.setRevieweUser(d.getReviewedby().replaceAll(",", " ")); d.setViews(rMap.get(d.getId())); - ZtProject ztProject = execMap.get(d.getId()); - if(ztProject!=null){ - d.setPlan(ztProject.getName()); + List ztProjectList = execMap.get(d.getId()); + if(!CollectionUtils.isEmpty(ztProjectList)){ + d.setPlan(ztProjectList.stream().map(o->o.getName()).collect(Collectors.joining(","))); } ZtUser ztUser = userMap.get(d.getAssignedTo()); if(ztUser!=null){ @@ -1268,12 +1356,12 @@ public class ZtStoryServiceImpl extends ServiceImpl impl List list = this.projectstoryService.list(new QueryWrapper().lambda() .eq(ZtProjectstory::getStory, ztStory.getId()) - .ne(ZtProjectstory::getExecution, 0) + .ne(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue()) ); if(CollectionUtils.isEmpty(list)){ return new ArrayList<>(); }else{ - return list.stream().map(o->o.getExecution()).collect(Collectors.toList()); + return list.stream().map(o->o.getProject()).collect(Collectors.toList()); } } @@ -1394,8 +1482,9 @@ public class ZtStoryServiceImpl extends ServiceImpl impl RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStory.getAssignedTo()); } +// @Override - public ZtStoryDTO getStoryById(Integer id) { + public ZtStoryDTO getStoryById(Integer id,Integer execution) { ZtStory ztStory = this.baseMapper.selectById(id); ZtStoryDTO d=new ZtStoryDTO(); @@ -1413,13 +1502,15 @@ public class ZtStoryServiceImpl extends ServiceImpl impl d.setProjectId(ztProject.getId()); d.setProjectName(ztProject.getName()); } - ZtProjectstory execstory = this.projectstoryService.getOne(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, ztStory.getId()).ne(ZtProjectstory::getExecution,0)); - if(execstory!=null){ - ZtProject ztProject = this.projectService.getById(execstory.getExecution()); - - d.setImplementId(ztProject.getId()); - d.setImplementName(ztProject.getName()); + if(execution!=null){ + ZtProject ztProject = this.projectService.getById(execution); + if(ztProject!=null){ + d.setImplementId(ztProject.getId()); + d.setImplementName(ztProject.getName()); + } } + + List userIds = new ArrayList<>(); userIds.add(ztStory.getAssignedTo()); userIds.add(ztStory.getOpenedby()); @@ -1600,7 +1691,9 @@ public class ZtStoryServiceImpl extends ServiceImpl impl @Override public List storyListByExecution(ZtProjectQo qo) { - List list = projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getExecution, qo.getId())); + List list = projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getProject, qo.getId()) + .eq(ZtProjectstory::getType,ProjectTypeEnums.execution.getValue()) + ); if (CollectionUtils.isEmpty(list)) { return new ArrayList<>(); diff --git a/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java index 67317be..f89497f 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java @@ -188,23 +188,17 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme Integer projectId=null; Integer execution=null; if(task.getStory()!=null&&task.getStory()!=0){ - ZtStory story = this.storyService.getById(task.getStory()); - List list = this.projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, task.getStory())); - if(!CollectionUtils.isEmpty(list)){ - List projectList = list.stream().filter(o -> o.getProject() != null && o.getProject() != 0).collect(Collectors.toList()); - if(!CollectionUtils.isEmpty(projectList)){ - projectId=projectList.get(0).getProject(); - } - List executionList = list.stream().filter(o -> o.getProject() != null && o.getProject() != 0) - .collect(Collectors.toList()); - if(!CollectionUtils.isEmpty(executionList)){ - execution=executionList.get(0).getExecution(); + execution=task.getExecution(); + projectId=task.getProject(); + if(task.getStory()!=null&&task.getStory()!=0){ + ZtStory story = this.storyService.getById(task.getStory()); + if(story!=null){ + productId=story.getProduct(); } } } - actionService.addAction(ActionType.RW, ActionStatus.TJBZ, dto.getId(), productId==null?"":productId+"", projectId, task.getExecution(), RiskUserThreadLocal.get().getName(), dto.getRemark(), ""); } @@ -217,9 +211,12 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme } ZtTaskDTO dto=new ZtTaskDTO(); BeanUtils.copyProperties(ztTask,dto); - ZtProject project = this.ztProjectService.getById(ztTask.getExecution()); - dto.setImplementId(project.getId()); - dto.setImplementName(project.getName()); + if(ztTask.getExecution()!=null&&ztTask.getExecution()!=0){ + ZtProject project = this.ztProjectService.getById(ztTask.getExecution()); + dto.setImplementId(project.getId()); + dto.setImplementName(project.getName()); + + } return dto; }