From 11cec800ef41f15ec7cac260b275025d4b408054 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E5=85=B6=E5=85=B5?= Date: Fri, 14 Mar 2025 08:55:41 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9C=80=E6=B1=82=E4=BB=BB=E5=8A=A1=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0bug=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zentao/controller/ZtStoryController.java | 13 +- .../controller/ZtStoryUserController.java | 1 + .../java/com/sa/zentao/dao/ZtStoryDTO.java | 1 + .../java/com/sa/zentao/dao/ZtTaskDTO.java | 2 +- .../sa/zentao/service/IZtStoryService.java | 3 + .../service/impl/ZtProductServiceImpl.java | 15 +- .../service/impl/ZtProjectServiceImpl.java | 27 +- .../service/impl/ZtStoryServiceImpl.java | 861 ++++++++++-------- .../service/impl/ZtStoryUserServiceImpl.java | 4 +- .../service/impl/ZtTaskServiceImpl.java | 27 + src/main/resources/mapper/ZtStoryMapper.xml | 9 +- 11 files changed, 556 insertions(+), 407 deletions(-) diff --git a/src/main/java/com/sa/zentao/controller/ZtStoryController.java b/src/main/java/com/sa/zentao/controller/ZtStoryController.java index b52c0b8..a1ecf43 100644 --- a/src/main/java/com/sa/zentao/controller/ZtStoryController.java +++ b/src/main/java/com/sa/zentao/controller/ZtStoryController.java @@ -3,10 +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; +import com.sa.zentao.dao.*; import com.sa.zentao.entity.ZtProject; import com.sa.zentao.entity.ZtProjectproduct; import com.sa.zentao.qo.ZtProjectQo; @@ -181,6 +178,14 @@ public class ZtStoryController { return Result.success(); } + //切换指派 + @RequestMapping(value = "/storyListByUserStory", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result storyListByUserStory(@RequestBody ZtStoryDTO dto){ + List list = ztStoryService.storyListByUserStory(dto); + return Result.success(list); + } + + //迭代列表根据项目id @RequestMapping(value = "/execListByProject", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") diff --git a/src/main/java/com/sa/zentao/controller/ZtStoryUserController.java b/src/main/java/com/sa/zentao/controller/ZtStoryUserController.java index cbd34b5..c7dd9c9 100644 --- a/src/main/java/com/sa/zentao/controller/ZtStoryUserController.java +++ b/src/main/java/com/sa/zentao/controller/ZtStoryUserController.java @@ -113,4 +113,5 @@ public class ZtStoryUserController { } + } diff --git a/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java b/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java index 7a9f632..e0faa2a 100644 --- a/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java +++ b/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java @@ -257,4 +257,5 @@ public class ZtStoryDTO implements Serializable { private Integer releaseFlag=0; + private List bugList; } diff --git a/src/main/java/com/sa/zentao/dao/ZtTaskDTO.java b/src/main/java/com/sa/zentao/dao/ZtTaskDTO.java index 7f691eb..f5bc8cf 100644 --- a/src/main/java/com/sa/zentao/dao/ZtTaskDTO.java +++ b/src/main/java/com/sa/zentao/dao/ZtTaskDTO.java @@ -200,5 +200,5 @@ public class ZtTaskDTO implements Serializable { private BigDecimal useTime; - + private List bugList; } diff --git a/src/main/java/com/sa/zentao/service/IZtStoryService.java b/src/main/java/com/sa/zentao/service/IZtStoryService.java index 9918696..8031ad8 100644 --- a/src/main/java/com/sa/zentao/service/IZtStoryService.java +++ b/src/main/java/com/sa/zentao/service/IZtStoryService.java @@ -2,6 +2,7 @@ package com.sa.zentao.service; import com.github.pagehelper.PageInfo; import com.sa.zentao.dao.ZtStoryDTO; +import com.sa.zentao.dao.ZtStoryUserDTO; import com.sa.zentao.entity.ZtProject; import com.sa.zentao.entity.ZtStory; import com.baomidou.mybatisplus.extension.service.IService; @@ -83,4 +84,6 @@ public interface IZtStoryService extends IService { Map> getExecutionMapByStory(List list); void batchAddStory(ZtStoryDTO dto); + + List storyListByUserStory(ZtStoryDTO dto); } diff --git a/src/main/java/com/sa/zentao/service/impl/ZtProductServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtProductServiceImpl.java index 4f8e0c8..cbe356a 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtProductServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtProductServiceImpl.java @@ -489,7 +489,7 @@ public class ZtProductServiceImpl extends ServiceImpl productList = this.projectproductService.list(new QueryWrapper().lambda().in(ZtProjectproduct::getProject - , pList.stream().map(o -> o.getProject()).collect(Collectors.toList()))); + , pList.stream().map(o -> o.getId()).collect(Collectors.toList()))); if(CollectionUtils.isEmpty(productList)){ result.put("product",Arrays.asList()); }else{ @@ -503,7 +503,7 @@ public class ZtProductServiceImpl extends ServiceImpl execList = this.projectService.listByIds(list.stream().map(o -> o.getExecution()).collect(Collectors.toList())); result.put("execution",execList); } - }else{ - result.put("story",null); + List list = this.taskService.list(new QueryWrapper().lambda() + .eq(ZtTask::getStory, storyId)); + result.put("task",list); } 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 f204ff2..ca4a344 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java @@ -604,7 +604,32 @@ public class ZtProjectServiceImpl extends ServiceImpl executionListByProduct(ZtProjectQo qo) { - return this.baseMapper.executionListByProduct(qo); + + Integer productId = qo.getProductId(); + Integer project = qo.getProject(); + + + if(project!=null&&project!=0){ + List list = this.executionprojectService.list(new QueryWrapper().lambda().eq(ZtExecutionproject::getProject, project)); + if(!CollectionUtils.isEmpty(list)){ + return this.listByIds(list.stream().map(o->o.getExecution()).collect(Collectors.toList())); + } + } + + if(productId!=null&&productId!=0){ + List list = this.projectproductService.list(new QueryWrapper() + .lambda().eq(ZtProjectproduct::getProduct, productId)); + if(!CollectionUtils.isEmpty(list)){ + List eList = this.executionprojectService.list(new QueryWrapper().lambda(). + in(ZtExecutionproject::getProject, list.stream().map(o->o.getProject()).collect(Collectors.toList()))); + if(!CollectionUtils.isEmpty(eList)){ + return this.listByIds(eList.stream().map(o->o.getExecution()).collect(Collectors.toList())); + } + } + } + + + return new ArrayList<>(); } @Override 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 fb39364..95c9187 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java @@ -94,8 +94,6 @@ public class ZtStoryServiceImpl extends ServiceImpl impl private IZtStoryUserService storyUserService; - - @Override public PageInfo pageList(ZtProjectQo qo) { Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); @@ -118,31 +116,31 @@ public class ZtStoryServiceImpl extends ServiceImpl impl d.setRevieweUser(d.getReviewedby().replaceAll(",", "")); d.setViews(rMap.get(d.getId())); ZtUser ztUser = userMap.get(d.getAssignedTo()); - if(ztUser!=null){ + if (ztUser != null) { d.setAssignedToName(ztUser.getNickname()); } ztUser = userMap.get(d.getOpenedby()); - if(ztUser!=null){ + if (ztUser != null) { d.setOpenedbyName(ztUser.getNickname()); } ztUser = userMap.get(d.getYsUser()); - if(ztUser!=null){ + if (ztUser != null) { d.setYsUserName(ztUser.getNickname()); } List ztProjectList = executionMapByStory.get(d.getId()); - if(!CollectionUtils.isEmpty(ztProjectList)){ + if (!CollectionUtils.isEmpty(ztProjectList)) { // d.setExecution(ztProject.getId()); - d.setExecutionName(ztProjectList.stream().map(o->o.getName()).collect(Collectors.joining(","))); - d.setExecutions(ztProjectList.stream().map(o->o.getId()).collect(Collectors.toList())); + d.setExecutionName(ztProjectList.stream().map(o -> o.getName()).collect(Collectors.joining(","))); + d.setExecutions(ztProjectList.stream().map(o -> o.getId()).collect(Collectors.toList())); } - if(!StringUtils.isEmpty(d.getReviewedby())){ + if (!StringUtils.isEmpty(d.getReviewedby())) { String[] split = d.getReviewedby().split(","); - StringBuilder b=new StringBuilder(); - for (String s:split) { + StringBuilder b = new StringBuilder(); + for (String s : split) { ZtUser u = userMap.get(s); - if(u!=null){ - b.append(u.getNickname()+","); + if (u != null) { + b.append(u.getNickname() + ","); } } @@ -157,26 +155,26 @@ public class ZtStoryServiceImpl extends ServiceImpl impl private Map> getReviewMap(List list) { List list1 = storyreviewService.list(new QueryWrapper().lambda().in(ZtStoryreview::getStory , list.stream().map(o -> o.getId()).collect(Collectors.toList()) - ).eq(ZtStoryreview::getType,"story")); + ).eq(ZtStoryreview::getType, "story")); if (CollectionUtils.isEmpty(list1)) { return new HashMap<>(); } else { list1 = list1.stream().filter(o -> StringUtils.isEmpty(o.getResult())).collect(Collectors.toList()); - if(CollectionUtils.isEmpty(list1)){ + if (CollectionUtils.isEmpty(list1)) { return new HashMap<>(); } Map userMap = this.userService.userMapByIds(null); List ztStoryreviewDTOS = BeanCopyUtil.copyListProperties(list1, ZtStoryreviewDTO::new); - for (ZtStoryreviewDTO view:ztStoryreviewDTOS) { + for (ZtStoryreviewDTO view : ztStoryreviewDTOS) { ZtUser ztUser = userMap.get(view.getReviewer()); - if(ztUser!=null){ + if (ztUser != null) { view.setReviewerName(ztUser.getNickname()); } } - return ztStoryreviewDTOS.stream().collect(Collectors.groupingBy(ZtStoryreviewDTO::getStory)); + return ztStoryreviewDTOS.stream().collect(Collectors.groupingBy(ZtStoryreviewDTO::getStory)); } } @@ -189,14 +187,14 @@ public class ZtStoryServiceImpl extends ServiceImpl impl ZtStory s = buildStory(dto); this.baseMapper.insert(s); - ZtStoryspec spec = buildSpec(dto,s); + ZtStoryspec spec = buildSpec(dto, s); storyspecService.save(spec); - fileService.updateFile(dto.getFiles(),s.getId(), FileTypes.story); + fileService.updateFile(dto.getFiles(), s.getId(), FileTypes.story); - if(dto.getFeedbackId()!=null&&dto.getFeedbackId()!=0){ - ZtStoryFeedback storyFeedback = this.storyFeedbackService.getById(dto.getFeedbackId()); - if(!storyFeedback.getStatus().equals("wait")){ + if (dto.getFeedback() != null && dto.getFeedback() != 0) { + ZtStoryFeedback storyFeedback = this.storyFeedbackService.getById(dto.getFeedback()); + if (!storyFeedback.getStatus().equals("wait")) { throw new BusinessException("问题反馈已被处理"); } // storyFeedback.setStatus("doing"); @@ -205,17 +203,17 @@ public class ZtStoryServiceImpl extends ServiceImpl impl // storyFeedback.setUpdateUser(RiskUserThreadLocal.get().getName()); // this.storyFeedbackService.updateById(storyFeedback); } - if(dto.getUserStory()!=null&&dto.getUserStory()!=0){ - ZtStoryUser storyUser = storyUserService.getById(dto.getUserStory()); - if(storyUser!=null&&"wait".equals(storyUser.getStatus())){ - storyUser.setStatus("active"); - }else if(storyUser!=null&&"active".equals(storyUser.getStatus())){ - if(storyUser.getStatus().equals("active")&&storyUser.getStage().equals("wait")){ - storyUser.setStage("projected"); - } - } - storyUserService.updateById(storyUser); - } + if (dto.getUserStory() != null && dto.getUserStory() != 0) { + ZtStoryUser storyUser = storyUserService.getById(dto.getUserStory()); + if (storyUser != null && "wait".equals(storyUser.getStatus())) { + storyUser.setStatus("active"); + } else if (storyUser != null && "active".equals(storyUser.getStatus())) { + if (storyUser.getStatus().equals("active") && storyUser.getStage().equals("wait")) { + storyUser.setStage("projected"); + } + } + storyUserService.updateById(storyUser); + } actionService.addAction(ActionType.XQ, ActionStatus.XJ, s.getId(), "", dto.getProduct(), null, RiskUserThreadLocal.get().getName(), "", ""); @@ -235,11 +233,11 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } - if (s.getProduct() != null&&s.getProduct()!=0) { + if (s.getProduct() != null && s.getProduct() != 0) { ZtProduct product = productService.getById(s.getProduct()); - if("draft".equals(dto.getStatus())){ - product.setDraftStories(product.getDraftStories()+1); - }else{ + if ("draft".equals(dto.getStatus())) { + product.setDraftStories(product.getDraftStories() + 1); + } else { product.setReviewingStories(product.getReviewingStories() + 1); } @@ -248,12 +246,11 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } List executions = dto.getExecutions(); - if(!CollectionUtils.isEmpty(executions)){ - this.executionBindStory(s,executions); + if (!CollectionUtils.isEmpty(executions)) { + this.executionBindStory(s, executions); } - } private ZtStoryspec buildSpec(ZtStoryDTO dto, ZtStory s) { @@ -275,15 +272,15 @@ public class ZtStoryServiceImpl extends ServiceImpl impl s.setVersion(1); s.setOpenedby(RiskUserThreadLocal.get().getName()); s.setOpenedDate(new Date()); - if(!"draft".equals(dto.getStatus())){ - if(dto.getPsFlag()!=null&&dto.getPsFlag()){ + if (!"draft".equals(dto.getStatus())) { + if (dto.getPsFlag() != null && dto.getPsFlag()) { s.setStatus("active"); - }else{ + } else { s.setStatus("reviewing"); } } - s.setFeedback(dto.getFeedbackId()); + s.setFeedback(dto.getFeedback()); s.setStage("wait"); return s; } @@ -292,14 +289,14 @@ public class ZtStoryServiceImpl extends ServiceImpl impl public void batchAddStory(ZtStoryDTO dto) { ZtStory s = buildStory(dto); this.baseMapper.insert(s); - ZtStoryspec spec = buildSpec(dto,s); + ZtStoryspec spec = buildSpec(dto, s); storyspecService.save(spec); - fileService.updateFile(dto.getFiles(),s.getId(), FileTypes.story); + fileService.updateFile(dto.getFiles(), s.getId(), FileTypes.story); - if(dto.getFeedbackId()!=null&&dto.getFeedbackId()!=0){ + if (dto.getFeedbackId() != null && dto.getFeedbackId() != 0) { ZtStoryFeedback storyFeedback = this.storyFeedbackService.getById(dto.getFeedbackId()); - if(!storyFeedback.getStatus().equals("wait")){ + if (!storyFeedback.getStatus().equals("wait")) { throw new BusinessException("问题反馈已被处理"); } storyFeedback.setStatus("doing"); @@ -308,9 +305,9 @@ public class ZtStoryServiceImpl extends ServiceImpl impl storyFeedback.setUpdateUser(RiskUserThreadLocal.get().getName()); this.storyFeedbackService.updateById(storyFeedback); } - if(dto.getUserStory()!=null&&dto.getUserStory()!=0){ + if (dto.getUserStory() != null && dto.getUserStory() != 0) { ZtStoryUser storyUser = storyUserService.getById(dto.getUserStory()); - if(storyUser!=null&&"wait".equals(storyUser.getStatus())){ + if (storyUser != null && "wait".equals(storyUser.getStatus())) { storyUser.setStatus("active"); storyUserService.updateById(storyUser); } @@ -335,11 +332,11 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } - if (s.getProduct() != null&&s.getProduct()!=0) { + if (s.getProduct() != null && s.getProduct() != 0) { ZtProduct product = productService.getById(s.getProduct()); - if("draft".equals(dto.getStatus())){ - product.setDraftStories(product.getDraftStories()+1); - }else{ + if ("draft".equals(dto.getStatus())) { + product.setDraftStories(product.getDraftStories() + 1); + } else { product.setReviewingStories(product.getReviewingStories() + 1); } @@ -348,19 +345,74 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } List executions = dto.getExecutions(); - if(!CollectionUtils.isEmpty(executions)){ - this.executionBindStory(s,executions); + if (!CollectionUtils.isEmpty(executions)) { + this.executionBindStory(s, executions); } } + @Override + public List storyListByUserStory(ZtStoryDTO dto) { + + Integer id = dto.getId(); + List list = this.list(new QueryWrapper().lambda().eq(ZtStory::getUserStory, id)); + if (!CollectionUtils.isEmpty(list)) { + List storyDTOList = BeanCopyUtil.copyListProperties(list, ZtStoryDTO::new); + Map userMap = this.userService.userMapByIds(null); + + + Map> rMap = getReviewMap(storyDTOList); + + Map> executionMapByStory = getExecutionMapByStory(storyDTOList); + + for (ZtStoryDTO d : storyDTOList) { + d.setRevieweUser(d.getReviewedby().replaceAll(",", "")); + d.setViews(rMap.get(d.getId())); + ZtUser ztUser = userMap.get(d.getAssignedTo()); + if (ztUser != null) { + d.setAssignedToName(ztUser.getNickname()); + } + + ztUser = userMap.get(d.getOpenedby()); + if (ztUser != null) { + d.setOpenedbyName(ztUser.getNickname()); + } + ztUser = userMap.get(d.getYsUser()); + if (ztUser != null) { + d.setYsUserName(ztUser.getNickname()); + } + 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(","))); + d.setExecutions(ztProjectList.stream().map(o -> o.getId()).collect(Collectors.toList())); + } + if (!StringUtils.isEmpty(d.getReviewedby())) { + String[] split = d.getReviewedby().split(","); + StringBuilder b = new StringBuilder(); + for (String s : split) { + ZtUser u = userMap.get(s); + if (u != null) { + b.append(u.getNickname() + ","); + } + + } + d.setReviewedbyName(b.toString()); + } + } + return storyDTOList; + } + + return new ArrayList<>(); + } + @Override @Transactional public void editStory(ZtStoryDTO dto) { Integer id = dto.getId(); ZtStory ztStory = this.baseMapper.selectById(id); - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } //老的迭代 @@ -370,99 +422,98 @@ public class ZtStoryServiceImpl extends ServiceImpl impl //如果关联了迭代 执行 List executions = dto.getExecutions(); - if(!CollectionUtils.isEmpty(executions)){ + if (!CollectionUtils.isEmpty(executions)) { List oldExecIds = pList.stream().map(o -> o.getProject()).collect(Collectors.toList()); //查找需求管理的项目 需求只会被项目关联一次 - List execList=new ArrayList(); - for (Integer exec:executions) { - if(!oldExecIds.contains(exec)){ + List execList = new ArrayList(); + for (Integer exec : executions) { + if (!oldExecIds.contains(exec)) { //新增迭代关联 execList.add(exec); } } //迭代关联 - if(!CollectionUtils.isEmpty(execList)){ - executionBindStory(ztStory,execList); + if (!CollectionUtils.isEmpty(execList)) { + executionBindStory(ztStory, execList); } execList.clear(); - for (Integer oldExec:oldExecIds) { - if(!executions.contains(oldExec)){ + for (Integer oldExec : oldExecIds) { + if (!executions.contains(oldExec)) { //删除迭代关联 execList.add(oldExec); } } //取消关联 - if(!CollectionUtils.isEmpty(execList)){ - executionUnBindStory(ztStory.getId(),execList); + if (!CollectionUtils.isEmpty(execList)) { + executionUnBindStory(ztStory.getId(), execList); } - }else{ - if(Arrays.asList("closed","released","tested","verified").contains(ztStory.getStage())){ + } else { + if (Arrays.asList("closed", "released", "tested", "verified").contains(ztStory.getStage())) { throw new BusinessException("当前需求无法更换迭代,请检查需求状态"); } Integer storyId = ztStory.getId(); List execList = this.projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, storyId) .eq(ZtProjectstory::getType, "execution") ); - if(!CollectionUtils.isEmpty(execList)){ - executionUnBindStory(storyId,execList.stream().map(o->o.getProject()).collect(Collectors.toList())); + if (!CollectionUtils.isEmpty(execList)) { + executionUnBindStory(storyId, execList.stream().map(o -> o.getProject()).collect(Collectors.toList())); } } - BeanUtils.copyProperties(dto, ztStory,"stage"); - if("draft".equalsIgnoreCase(ztStory.getStatus())){ + BeanUtils.copyProperties(dto, ztStory, "stage"); + if ("draft".equalsIgnoreCase(ztStory.getStatus())) { ztStory.setStatus("active"); - if (ztStory.getProduct() != null&&ztStory.getProduct()!=0) { + if (ztStory.getProduct() != null && ztStory.getProduct() != 0) { ZtProduct product = productService.getById(ztStory.getProduct()); product.setDraftStories(product.getDraftStories() - 1); product.setActiveStories(product.getReviewingStories() + 1); this.productService.updateById(product); } } - ZtStoryspec spec = this.storyspecService.getOne(new QueryWrapper().lambda().eq(ZtStoryspec::getStory, id)); - if(spec==null){ - spec = new ZtStoryspec(); - spec.setStory(id); - spec.setVersion(1); - spec.setTitle(ztStory.getTitle()); - spec.setSpec(dto.getSpec()); - spec.setVerify(dto.getVerify()); - spec.setFiles(dto.getFileUrl()); - storyspecService.save(spec); - }else{ - spec.setVersion(1); - spec.setTitle(ztStory.getTitle()); - spec.setSpec(dto.getSpec()); - spec.setVerify(dto.getVerify()); - spec.setFiles(dto.getFileUrl()); - storyspecService.update(new UpdateWrapper().lambda().eq(ZtStoryspec::getStory,id) - .set(ZtStoryspec::getSpec,dto.getSpec()) - .set(ZtStoryspec::getVerify,dto.getVerify()) - .set(ZtStoryspec::getFiles,dto.getFileUrl()) - ); - } - + ZtStoryspec spec = this.storyspecService.getOne(new QueryWrapper().lambda().eq(ZtStoryspec::getStory, id)); + if (spec == null) { + spec = new ZtStoryspec(); + spec.setStory(id); + spec.setVersion(1); + spec.setTitle(ztStory.getTitle()); + spec.setSpec(dto.getSpec()); + spec.setVerify(dto.getVerify()); + spec.setFiles(dto.getFileUrl()); + storyspecService.save(spec); + } else { + spec.setVersion(1); + spec.setTitle(ztStory.getTitle()); + spec.setSpec(dto.getSpec()); + spec.setVerify(dto.getVerify()); + spec.setFiles(dto.getFileUrl()); + storyspecService.update(new UpdateWrapper().lambda().eq(ZtStoryspec::getStory, id) + .set(ZtStoryspec::getSpec, dto.getSpec()) + .set(ZtStoryspec::getVerify, dto.getVerify()) + .set(ZtStoryspec::getFiles, dto.getFileUrl()) + ); + } String stage = ztStory.getStage(); - if(!StringUtils.isEmpty(stage)&&!StringUtils.isEmpty(dto.getStage())&&!stage.equals(dto.getStage())){ - ZtStoryDTO s =new ZtStoryDTO(); + if (!StringUtils.isEmpty(stage) && !StringUtils.isEmpty(dto.getStage()) && !stage.equals(dto.getStage())) { + ZtStoryDTO s = new ZtStoryDTO(); s.setIdList(Arrays.asList(ztStory.getId())); s.setStage(dto.getStage()); this.changeStatus(s); } this.baseMapper.updateById(ztStory); - fileService.updateFile(dto.getFiles(),ztStory.getId(), FileTypes.story); + fileService.updateFile(dto.getFiles(), ztStory.getId(), FileTypes.story); List userViewId = dto.getUserViewId(); - if(!CollectionUtils.isEmpty(userViewId)){ - storyreviewService.remove(new QueryWrapper().lambda().eq(ZtStoryreview::getStory - , id).eq(ZtStoryreview::getType,"story")); + if (!CollectionUtils.isEmpty(userViewId)) { + storyreviewService.remove(new QueryWrapper().lambda().eq(ZtStoryreview::getStory + , id).eq(ZtStoryreview::getType, "story")); for (String str : dto.getUserViewId()) { ZtStoryreview v = new ZtStoryreview(); @@ -477,23 +528,21 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } - if(!StringUtils.isEmpty(dto.getRemark())){ + if (!StringUtils.isEmpty(dto.getRemark())) { actionService.addAction(ActionType.XQ, ActionStatus.TJBZ, dto.getId(), dto.getProduct() + "", dto.getProject(), null, RiskUserThreadLocal.get().getName(), dto.getRemark(), ""); - }else{ + } else { actionService.addAction(ActionType.XQ, ActionStatus.BJ, dto.getId(), dto.getProduct() + "", dto.getProject(), null, RiskUserThreadLocal.get().getName(), dto.getRemark(), ""); } - - } - private void executionBindStory(ZtStory story,List execList){ - Integer storyId=story.getId(); - if(CollectionUtils.isEmpty(execList)){ + private void executionBindStory(ZtStory story, List execList) { + Integer storyId = story.getId(); + if (CollectionUtils.isEmpty(execList)) { return; } @@ -501,9 +550,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl .in(ZtExecutionproject::getExecution, execList)); - - - for (Integer execId: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(); @@ -513,21 +560,21 @@ public class ZtStoryServiceImpl extends ServiceImpl impl .eq(ZtProjectstory::getStory, storyId) ); - if(CollectionUtils.isEmpty(list)){ - ZtProjectDTO d=new ZtProjectDTO(); + 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(); + ZtProjectDTO d = new ZtProjectDTO(); d.setStoryIds(new ArrayList<>(Arrays.asList(storyId))); d.setExcludeId(execId); this.projectService.executionSyncStory(d); } } - private void executionUnBindStory(Integer storyId,List execList){ + private void executionUnBindStory(Integer storyId, List execList) { // if(CollectionUtils.isEmpty(execList)){ // return; // }else{ @@ -540,7 +587,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl // } // } - projectService.removeExecutionStory(storyId,execList); + projectService.removeExecutionStory(storyId, execList); // if(dto.getExecution()!=null&&dto.getExecution()!=0){ // //1.没有绑定 解绑 @@ -613,16 +660,16 @@ public class ZtStoryServiceImpl extends ServiceImpl impl ZtStory ztStory = this.baseMapper.selectById(dto.getId()); List list = this.projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, dto.getId())); - Integer projectId=null; - Integer executionId=null; - if(!CollectionUtils.isEmpty(list)){ + Integer projectId = null; + Integer executionId = null; + if (!CollectionUtils.isEmpty(list)) { List projectList = list.stream().filter(o -> o.getType().equals("project")).collect(Collectors.toList()); - if(!CollectionUtils.isEmpty(projectList)){ - projectId=projectList.get(0).getProject(); + if (!CollectionUtils.isEmpty(projectList)) { + projectId = projectList.get(0).getProject(); } List executionList = list.stream().filter(o -> o.getType().equals("execution")).collect(Collectors.toList()); - if(!CollectionUtils.isEmpty(executionList)){ - executionId=executionList.get(0).getProject(); + if (!CollectionUtils.isEmpty(executionList)) { + executionId = executionList.get(0).getProject(); } } actionService.addAction(ActionType.XQ, ActionStatus.TJBZ, dto.getId(), ztStory.getProduct() + "", projectId, executionId, @@ -641,24 +688,24 @@ public class ZtStoryServiceImpl extends ServiceImpl impl ); List storyDTOList = BeanCopyUtil.copyListProperties(closed, ZtStoryDTO::new); - if(userType==UserType.CP){ + if (userType == UserType.CP) { List uStory = this.storyUserService.list(new QueryWrapper().lambda().ne(ZtStoryUser::getStatus, "closed") .or().eq(ZtStoryUser::getOpenedby, RiskUserThreadLocal.get().getName()) ); - if(!CollectionUtils.isEmpty(uStory)){ + if (!CollectionUtils.isEmpty(uStory)) { List storyDTOList1 = BeanCopyUtil.copyListProperties(uStory, ZtStoryDTO::new); storyDTOList.addAll(storyDTOList1); } } - if(!CollectionUtils.isEmpty(storyDTOList)){ + if (!CollectionUtils.isEmpty(storyDTOList)) { Map> executionMapByStory = getExecutionMapByStory(storyDTOList); - for (ZtStoryDTO d:storyDTOList ) { + for (ZtStoryDTO d : storyDTOList) { List ztProjectList = executionMapByStory.get(d.getId()); - if(!CollectionUtils.isEmpty(ztProjectList)){ + if (!CollectionUtils.isEmpty(ztProjectList)) { // d.setExecution(ztProject.getId()); - d.setExecutionName(ztProjectList.stream().map(o->o.getName()).collect(Collectors.joining(","))); - d.setExecutions(ztProjectList.stream().map(o->o.getId()).collect(Collectors.toList())); + d.setExecutionName(ztProjectList.stream().map(o -> o.getName()).collect(Collectors.joining(","))); + d.setExecutions(ztProjectList.stream().map(o -> o.getId()).collect(Collectors.toList())); } } @@ -671,7 +718,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl public PageInfo projectStoryPageList(ZtProjectQo qo) { Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); Integer productId = qo.getProductId(); - if(!"admin".equals(RiskUserThreadLocal.get().getName())){ + if (!"admin".equals(RiskUserThreadLocal.get().getName())) { qo.setUserName(RiskUserThreadLocal.get().getName()); } qo.setUserName(RiskUserThreadLocal.get().getName()); @@ -681,7 +728,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())); @@ -696,22 +743,22 @@ public class ZtStoryServiceImpl extends ServiceImpl impl List ztProjectList = execMap.get(d.getId()); - if(!CollectionUtils.isEmpty(ztProjectList)){ - d.setPlan(ztProjectList.stream().map(o->o.getName()).collect(Collectors.joining(","))); - d.setExecutions(ztProjectList.stream().map(o->o.getId()).collect(Collectors.toList())); + if (!CollectionUtils.isEmpty(ztProjectList)) { + d.setPlan(ztProjectList.stream().map(o -> o.getName()).collect(Collectors.joining(","))); + d.setExecutions(ztProjectList.stream().map(o -> o.getId()).collect(Collectors.toList())); } ZtUser ztUser = userMap.get(d.getAssignedTo()); - if(ztUser!=null){ + if (ztUser != null) { d.setAssignedToName(ztUser.getNickname()); } ztUser = userMap.get(d.getOpenedby()); - if(ztUser!=null){ + if (ztUser != null) { d.setOpenedbyName(ztUser.getNickname()); } ztUser = userMap.get(d.getYsUser()); - if(ztUser!=null){ + if (ztUser != null) { d.setYsUserName(ztUser.getNickname()); } } @@ -721,30 +768,30 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } //需求id 执行 - public Map> getExecutionMapByStory(List list) { + 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())) ); - if(CollectionUtils.isEmpty(pStoryList)){ + if (CollectionUtils.isEmpty(pStoryList)) { return new HashMap<>(); } List execIds = pStoryList.stream().map(o -> o.getProject()).collect(Collectors.toList()); List ztProjects = this.projectService.listByIds(execIds); - Map> result =new HashMap<>(); - for (ZtProjectstory st:pStoryList) { + Map> result = new HashMap<>(); + for (ZtProjectstory st : pStoryList) { Integer execution = st.getProject(); List fExecution = ztProjects.stream().filter(o -> o.getId().intValue() == execution.intValue()).collect(Collectors.toList()); ZtProject ztProject = fExecution.get(0); List mpList = result.get(st.getStory()); - if(CollectionUtils.isEmpty(mpList)){ - List mList=new ArrayList<>(); + if (CollectionUtils.isEmpty(mpList)) { + List mList = new ArrayList<>(); mList.add(ztProject); - result.put(st.getStory(),mList); - }else{ + result.put(st.getStory(), mList); + } else { mpList.add(ztProject); } @@ -755,8 +802,6 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } - - @Override public List execNoSyncProject(ZtProjectQo qo) { String execution = qo.getExecution(); @@ -765,17 +810,17 @@ public class ZtStoryServiceImpl extends ServiceImpl impl .eq(ZtExecutionproject::getExecution, execution)); - if(CollectionUtils.isEmpty(execList)){ + if (CollectionUtils.isEmpty(execList)) { return new ArrayList<>(); } //项目下所有需求 List allList = this.projectstoryService .list(new QueryWrapper().lambda() - .in(ZtProjectstory::getProject, execList.stream().map(o->o.getProject()).collect(Collectors.toList())) - .eq(ZtProjectstory::getType,ProjectTypeEnums.project.getValue()) + .in(ZtProjectstory::getProject, execList.stream().map(o -> o.getProject()).collect(Collectors.toList())) + .eq(ZtProjectstory::getType, ProjectTypeEnums.project.getValue()) ); - if(CollectionUtils.isEmpty(allList)){ + if (CollectionUtils.isEmpty(allList)) { return new ArrayList<>(); } @@ -783,24 +828,24 @@ public class ZtStoryServiceImpl extends ServiceImpl impl List syncList = this.projectstoryService .list(new QueryWrapper().lambda() .in(ZtProjectstory::getStory, - allList.stream().map(o->o.getStory()).collect(Collectors.toList())) - .eq(ZtProjectstory::getProject,execution) + allList.stream().map(o -> o.getStory()).collect(Collectors.toList())) + .eq(ZtProjectstory::getProject, execution) ); List syncIds = syncList.stream().map(o -> o.getStory()).collect(Collectors.toList()); - List resultIds=new ArrayList<>(); - for (ZtProjectstory all:allList) { - if(!syncIds.contains(all.getStory())){ + List resultIds = new ArrayList<>(); + for (ZtProjectstory all : allList) { + if (!syncIds.contains(all.getStory())) { resultIds.add(all.getStory()); } } - if(CollectionUtils.isEmpty(resultIds)){ + if (CollectionUtils.isEmpty(resultIds)) { return new ArrayList<>(); } LambdaQueryWrapper lambda = new QueryWrapper().lambda(); lambda.eq(ZtStory::getStatus, "active"); - lambda.notIn(ZtStory::getStage,"released","verified"); - lambda.in(ZtStory::getId,resultIds); + lambda.notIn(ZtStory::getStage, "released", "verified"); + lambda.in(ZtStory::getId, resultIds); List ztStories = this.baseMapper.selectList(lambda); if (CollectionUtils.isEmpty(ztStories)) { return new ArrayList<>(); @@ -836,12 +881,12 @@ public class ZtStoryServiceImpl extends ServiceImpl impl @Override @Transactional public void startStory(Integer id) { - if(id==null||id==0){ + if (id == null || id == 0) { return; } ZtStory ztStory = this.baseMapper.selectById(id); - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("需求当前已关闭"); } @@ -859,11 +904,11 @@ public class ZtStoryServiceImpl extends ServiceImpl impl ztStory.setStartDate(new Date()); this.baseMapper.updateById(ztStory); List executionId = getExecutionId(ztStory); - for (Integer execution:executionId) { - kanbanlaneService.changeStatus(execution,id,"story","developing"); + for (Integer execution : executionId) { + kanbanlaneService.changeStatus(execution, id, "story", "developing"); } - if(ztStory.getFeedback()!=null&&ztStory.getFeedback()!=0){ + if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) { this.storyFeedbackService.feedbackStart(ztStory.getFeedback()); } @@ -874,114 +919,114 @@ public class ZtStoryServiceImpl extends ServiceImpl impl @Override @Transactional - public void finishStory(Integer id,String finishBy) { + public void finishStory(Integer id, String finishBy) { - if(id==null||id==0){ + if (id == null || id == 0) { return; } ZtStory ztStory = this.baseMapper.selectById(id); - if(ztStory.getFeedback()!=null&&ztStory.getFeedback()!=0){ + if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) { this.storyFeedbackService.feedbackStart(ztStory.getFeedback()); } - if(ztStory==null){ + if (ztStory == null) { throw new BusinessException("未查询到需求"); } List taskList = taskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory, id) - .in(ZtTask::getStatus, Arrays.asList("reviewing","wait", "doing", "pause")) - .eq(ZtTask::getType,"devel") + .in(ZtTask::getStatus, Arrays.asList("reviewing", "wait", "doing", "pause")) + .eq(ZtTask::getType, "devel") ); //任务没有做完 如果任务还没开始 - if(!CollectionUtils.isEmpty(taskList)){ - if(Arrays.asList("wait","projected").contains(ztStory.getStage())){ + if (!CollectionUtils.isEmpty(taskList)) { + if (Arrays.asList("wait", "projected").contains(ztStory.getStage())) { this.startStory(id); } return; } //developed 研发完毕 testing 测试中 tested测试完毕 released已发布 verified已验收 closed - if( Arrays.asList("developed","tested","released","verified","closed").contains(ztStory.getStage())){ + if (Arrays.asList("developed", "tested", "released", "verified", "closed").contains(ztStory.getStage())) { return; } - if("testing".equals(ztStory.getStage())){ - List list = taskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory, id) - .in(ZtTask::getStatus, Arrays.asList("wait", "doing", "pause")) - .in(ZtTask::getType,"devel","test") - ); - if (!CollectionUtils.isEmpty(list)) { - return; - }else{ - ztStory.setStage("tested"); - this.baseMapper.updateById(ztStory); - List executionId = this.getExecutionId(ztStory); - for (Integer execution:executionId ) { - kanbanlaneService.changeStatus(execution,id,"story","tested"); - } - - actionService.addAction(ActionType.XQ, ActionStatus.CSWC, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, - RiskUserThreadLocal.get().getName(), null, ""); - } + if ("testing".equals(ztStory.getStage())) { + List list = taskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory, id) + .in(ZtTask::getStatus, Arrays.asList("wait", "doing", "pause")) + .in(ZtTask::getType, "devel", "test") + ); + if (!CollectionUtils.isEmpty(list)) { return; - } + } else { + ztStory.setStage("tested"); + this.baseMapper.updateById(ztStory); + List executionId = this.getExecutionId(ztStory); + for (Integer execution : executionId) { + kanbanlaneService.changeStatus(execution, id, "story", "tested"); + } - if(Arrays.asList("wait").contains(ztStory.getStage())&&!CollectionUtils.isEmpty(taskList)){ + actionService.addAction(ActionType.XQ, ActionStatus.CSWC, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, + RiskUserThreadLocal.get().getName(), null, ""); + } + return; + } + + if (Arrays.asList("wait").contains(ztStory.getStage()) && !CollectionUtils.isEmpty(taskList)) { this.startStory(id); - return ; + return; } ztStory.setStage("developed"); - if(ztStory.getStartDate()==null){ + if (ztStory.getStartDate() == null) { ztStory.setStartDate(new Date()); } this.baseMapper.updateById(ztStory); List executionId = this.getExecutionId(ztStory); - for (Integer execution:executionId ) { - kanbanlaneService.changeStatus(execution,id,"story","developed"); + for (Integer execution : executionId) { + kanbanlaneService.changeStatus(execution, id, "story", "developed"); } actionService.addAction(ActionType.XQ, ActionStatus.KFWC, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, - StringUtils.isEmpty(finishBy)?RiskUserThreadLocal.get().getName():finishBy, null, ""); + StringUtils.isEmpty(finishBy) ? RiskUserThreadLocal.get().getName() : finishBy, null, ""); } @Override - public void testedStory(Integer story,String finishBy) { + public void testedStory(Integer story, String finishBy) { - if(story==null||story==0){ + if (story == null || story == 0) { return; } ZtStory ztStory = this.baseMapper.selectById(story); - if(ztStory.getFeedback()!=null&&ztStory.getFeedback()!=0){ + if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) { this.storyFeedbackService.feedbackStart(ztStory.getFeedback()); } - if(ztStory==null){ + if (ztStory == null) { throw new BusinessException("未查询到数据-需求"); } - if(!Arrays.asList("wait","projected","developing","developed","testing").contains(ztStory.getStage())){ + if (!Arrays.asList("wait", "projected", "developing", "developed", "testing").contains(ztStory.getStage())) { return; } - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } // if(!"testing".equals(ztStory.getStage())){ // throw new BusinessException("当前无法更改测试状态"); // } List execIds = getExecutionId(ztStory); - if(CollectionUtils.isEmpty(execIds)){ + if (CollectionUtils.isEmpty(execIds)) { throw new BusinessException("当前无迭代,不可以更改"); } List list = taskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory, story) .in(ZtTask::getStatus, Arrays.asList("wait", "doing", "pause")) - .in(ZtTask::getType,"test","devel") + .in(ZtTask::getType, "test", "devel") ); if (!CollectionUtils.isEmpty(list)) { - if(Arrays.asList("wait","projected","developing","developed").contains(ztStory.getStage())){ + if (Arrays.asList("wait", "projected", "developing", "developed").contains(ztStory.getStage())) { this.testingStory(story); } return; @@ -989,23 +1034,23 @@ public class ZtStoryServiceImpl extends ServiceImpl impl String oldStatus = ztStory.getStage(); - String newStatus ="tested"; + String newStatus = "tested"; ztStory.setStage(newStatus); - if("tested".equals(newStatus)&&ztStory.getStartDate()==null){ + if ("tested".equals(newStatus) && ztStory.getStartDate() == null) { actionService.addAction(ActionType.XQ, ActionStatus.CSWC, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, RiskUserThreadLocal.get().getName(), null, ""); } - if(ztStory.getStartDate()==null){ + if (ztStory.getStartDate() == null) { ztStory.setStartDate(new Date()); } ztStory.setEndDate(new Date()); this.baseMapper.updateById(ztStory); for (Integer execId : execIds) { - if(execId!=null){ - this.kanbanlaneService.changeStatus(execId, ztStory.getId(), "story","tested"); - if (!oldStatus.equalsIgnoreCase(newStatus)&&ztStory.getProduct()!=0) { + if (execId != null) { + this.kanbanlaneService.changeStatus(execId, ztStory.getId(), "story", "tested"); + if (!oldStatus.equalsIgnoreCase(newStatus) && ztStory.getProduct() != 0) { ProductStoryStatus oldPStatus = null; ProductStoryStatus newPStatus = null; @@ -1026,37 +1071,37 @@ public class ZtStoryServiceImpl extends ServiceImpl impl @Override @Transactional public void releaseStory(Integer story) { - if(story==null||story==0){ + if (story == null || story == 0) { return; } ZtStory ztStory = this.baseMapper.selectById(story); - if(ztStory.getFeedback()!=null&&ztStory.getFeedback()!=0){ + if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) { this.storyFeedbackService.feedbackFinished(ztStory.getFeedback()); } - if(ztStory==null){ + if (ztStory == null) { throw new BusinessException("未查询到数据-需求"); } - if(!Arrays.asList("wait","projected","developing","developed","testing","tested").contains(ztStory.getStage())){ + if (!Arrays.asList("wait", "projected", "developing", "developed", "testing", "tested").contains(ztStory.getStage())) { return; } - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } - if(!"tested".equals(ztStory.getStage())){ + if (!"tested".equals(ztStory.getStage())) { throw new BusinessException("当前无法更改发布状态"); } //这个需求被多少执行关联 List execIds = getExecutionId(ztStory); - if(CollectionUtils.isEmpty(execIds)){ + if (CollectionUtils.isEmpty(execIds)) { throw new BusinessException("当前无迭代,不可以更改"); } List list = taskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory, story) .in(ZtTask::getStatus, Arrays.asList("wait", "doing", "pause")) - .in(ZtTask::getType,"test","devel") + .in(ZtTask::getType, "test", "devel") ); if (!CollectionUtils.isEmpty(list)) { throw new BusinessException("当前有存在的任务未完成"); @@ -1064,18 +1109,18 @@ public class ZtStoryServiceImpl extends ServiceImpl impl String oldStatus = ztStory.getStage(); - String newStatus ="released"; + String newStatus = "released"; ztStory.setStage(newStatus); - if(ztStory.getEndDate()==null){ + if (ztStory.getEndDate() == null) { ztStory.setEndDate(new Date()); } this.baseMapper.updateById(ztStory); for (Integer execId : execIds) { - if(execId!=null){ - this.kanbanlaneService.changeStatus(execId, ztStory.getId(), "story","released"); - if (!oldStatus.equalsIgnoreCase(newStatus)&&ztStory.getProduct()!=0) { + if (execId != null) { + this.kanbanlaneService.changeStatus(execId, ztStory.getId(), "story", "released"); + if (!oldStatus.equalsIgnoreCase(newStatus) && ztStory.getProduct() != 0) { ProductStoryStatus oldPStatus = null; ProductStoryStatus newPStatus = null; @@ -1090,7 +1135,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } - if(ztStory.getFeedback()!=null&&ztStory.getFeedback()!=0){ + if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) { this.storyFeedbackService.feedbackFinished(ztStory.getFeedback()); } @@ -1102,50 +1147,50 @@ public class ZtStoryServiceImpl extends ServiceImpl impl @Override public void testingStory(Integer story) { - if(story==null||story==0){ + if (story == null || story == 0) { return; } ZtStory ztStory = this.baseMapper.selectById(story); - if(ztStory==null){ + if (ztStory == null) { throw new BusinessException("未查询到数据-需求"); } - if(ztStory.getFeedback()!=null&&ztStory.getFeedback()!=0){ + if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) { this.storyFeedbackService.feedbackStart(ztStory.getFeedback()); } - if(!Arrays.asList("wait","projected","developing","developed").contains(ztStory.getStage())){ + if (!Arrays.asList("wait", "projected", "developing", "developed").contains(ztStory.getStage())) { return; } - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } // if(!"developed".equals(ztStory.getStage())){ // throw new BusinessException("当前无法更改测试状态"); // } List execIds = getExecutionId(ztStory); - if(CollectionUtils.isEmpty(execIds)){ + if (CollectionUtils.isEmpty(execIds)) { throw new BusinessException("当前无迭代,不可以更改"); } String oldStatus = ztStory.getStage(); - String newStatus ="testing"; + String newStatus = "testing"; ztStory.setStage(newStatus); - if("testing".equals(newStatus)&&ztStory.getStartDate()==null){ + if ("testing".equals(newStatus) && ztStory.getStartDate() == null) { actionService.addAction(ActionType.XQ, ActionStatus.KSCE, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, RiskUserThreadLocal.get().getName(), null, ""); } - if(ztStory.getStartDate()==null){ + if (ztStory.getStartDate() == null) { ztStory.setStartDate(new Date()); } this.baseMapper.updateById(ztStory); for (Integer execId : execIds) { - if(execId!=null){ - this.kanbanlaneService.changeStatus(execId, ztStory.getId(), "story","testing"); - if (!oldStatus.equalsIgnoreCase(newStatus)&&ztStory.getProduct()!=0) { + if (execId != null) { + this.kanbanlaneService.changeStatus(execId, ztStory.getId(), "story", "testing"); + if (!oldStatus.equalsIgnoreCase(newStatus) && ztStory.getProduct() != 0) { ProductStoryStatus oldPStatus = null; ProductStoryStatus newPStatus = null; @@ -1177,24 +1222,24 @@ public class ZtStoryServiceImpl extends ServiceImpl impl List idList = dto.getIdList(); for (Integer i : idList) { ZtStory ztStory = this.baseMapper.selectById(i); - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } ztStory.setStatus("active"); List execIds = getExecutionId(ztStory); - if(CollectionUtils.isEmpty(execIds)&&!"closed".equalsIgnoreCase(dto.getStage())){ + if (CollectionUtils.isEmpty(execIds) && !"closed".equalsIgnoreCase(dto.getStage())) { throw new BusinessException("当前无迭代,不可以更改"); } String oldStatus = ztStory.getStage(); - String newStatus =dto.getStage(); - if(newStatus.equals("wait")){ - newStatus="ready"; + String newStatus = dto.getStage(); + if (newStatus.equals("wait")) { + newStatus = "ready"; } - if("closed".equalsIgnoreCase(newStatus)){ + if ("closed".equalsIgnoreCase(newStatus)) { ztStory.setStatus("closed"); ztStory.setStage("closed"); ztStory.setClosedby(RiskUserThreadLocal.get().getName()); @@ -1203,29 +1248,29 @@ public class ZtStoryServiceImpl extends ServiceImpl impl this.closeTaskBug(i); actionService.addAction(ActionType.XQ, ActionStatus.GB, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, RiskUserThreadLocal.get().getName(), null, ""); - }else{ + } else { ztStory.setStage(dto.getStage()); } - if("released".equals(newStatus)&&ztStory.getEndDate()==null){ + if ("released".equals(newStatus) && ztStory.getEndDate() == null) { ztStory.setEndDate(new Date()); actionService.addAction(ActionType.XQ, ActionStatus.FBCG, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, RiskUserThreadLocal.get().getName(), null, ""); } - if("developing".equals(newStatus)&&ztStory.getStartDate()==null){ + if ("developing".equals(newStatus) && ztStory.getStartDate() == null) { ztStory.setStartDate(new Date()); actionService.addAction(ActionType.XQ, ActionStatus.KS, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, RiskUserThreadLocal.get().getName(), null, ""); } - if("verified".equals(newStatus)){ + if ("verified".equals(newStatus)) { ztStory.setStatus("finished"); } this.baseMapper.updateById(ztStory); for (Integer execId : execIds) { - if(execId!=null){ + if (execId != null) { this.kanbanlaneService.changeStatus(execId, i, "story", newStatus); - if (!oldStatus.equalsIgnoreCase(newStatus)&&ztStory.getProduct()!=0) { + if (!oldStatus.equalsIgnoreCase(newStatus) && ztStory.getProduct() != 0) { ProductStoryStatus oldPStatus = null; ProductStoryStatus newPStatus = null; @@ -1249,7 +1294,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl List idList = dto.getIdList(); for (Integer i : idList) { ZtStory ztStory = this.baseMapper.selectById(i); - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } ztStory.setAssignedTo(dto.getAssignedTo()); @@ -1264,23 +1309,21 @@ public class ZtStoryServiceImpl extends ServiceImpl impl public void changeExecution(ZtStoryDTO dto) { - - List idList = dto.getIdList(); - if(CollectionUtils.isEmpty(idList)){ + if (CollectionUtils.isEmpty(idList)) { throw new BusinessException("请选择"); } List storyList = this.listByIds(idList); List list = this.projectstoryService.list(new QueryWrapper().lambda() - .eq(ZtProjectstory::getProject, dto.getExecution()).in(ZtProjectstory::getStory, idList).eq(ZtProjectstory::getType,"execution")); - if(!CollectionUtils.isEmpty(list)){ - throw new BusinessException("需求 "+list.get(0).getStory()+" 已关联"); + .eq(ZtProjectstory::getProject, dto.getExecution()).in(ZtProjectstory::getStory, idList).eq(ZtProjectstory::getType, "execution")); + if (!CollectionUtils.isEmpty(list)) { + throw new BusinessException("需求 " + list.get(0).getStory() + " 已关联"); } - for (ZtStory s:storyList) { - executionBindStory(s,new ArrayList<>(Arrays.asList(dto.getExecution()))); + for (ZtStory s : storyList) { + executionBindStory(s, new ArrayList<>(Arrays.asList(dto.getExecution()))); } @@ -1354,52 +1397,48 @@ public class ZtStoryServiceImpl extends ServiceImpl impl // // } qo.setUserName(loginRiskUser.getName()); - List list =null; + List list = null; //首页根据id查询的 - if(!StringUtils.isEmpty(qo.getIds())){ + if (!StringUtils.isEmpty(qo.getIds())) { // page= PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); String[] split = qo.getIds().split(","); - List ids =new ArrayList<>(Arrays.asList(split)); + List ids = new ArrayList<>(Arrays.asList(split)); qo.setObjIds(ids); // list=this.baseMapper.storyPageListByIds(ids); } // else{ - if(UserType.KFZ==loginRiskUser.getUserType()||UserType.CS==loginRiskUser.getUserType()){ + if (UserType.KFZ == loginRiskUser.getUserType() || UserType.CS == loginRiskUser.getUserType()) { - page= PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); - qo.setKfz(1); - list=this.baseMapper.projectStoryPageList(qo); - } + page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + qo.setKfz(1); + list = this.baseMapper.projectStoryPageList(qo); + } // else if(UserType.GSGC==loginRiskUser.getUserType()){ // //全部 // page= PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); // list=this.baseMapper.allStoryPageList(qo); // } - else{ - //自己有权限的 产品集 - List integers = this.projectService.authProductList(); - - if(!CollectionUtils.isEmpty(integers)){ - qo.setProductIds(integers); - page= PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); - list=this.baseMapper.myStoryPageList(qo); - }else{ - list=new ArrayList<>(); - } + else { + //自己有权限的 产品集 + List integers = this.projectService.authProductList(); + if (!CollectionUtils.isEmpty(integers)) { + qo.setProductIds(integers); + page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + list = this.baseMapper.myStoryPageList(qo); + } else { + list = new ArrayList<>(); } - - - + } if (!CollectionUtils.isEmpty(list)) { 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())); @@ -1411,20 +1450,20 @@ public class ZtStoryServiceImpl extends ServiceImpl impl d.setRevieweUser(d.getReviewedby().replaceAll(",", "")); d.setViews(rMap.get(d.getId())); List ztProjectList = execMap.get(d.getId()); - if(!CollectionUtils.isEmpty(ztProjectList)){ - d.setPlan(ztProjectList.stream().map(o->o.getName()).collect(Collectors.joining(","))); + if (!CollectionUtils.isEmpty(ztProjectList)) { + d.setPlan(ztProjectList.stream().map(o -> o.getName()).collect(Collectors.joining(","))); } ZtUser ztUser = userMap.get(d.getAssignedTo()); - if(ztUser!=null){ + if (ztUser != null) { d.setAssignedToName(ztUser.getNickname()); } ztUser = userMap.get(d.getOpenedby()); - if(ztUser!=null){ + if (ztUser != null) { d.setOpenedbyName(ztUser.getNickname()); } ztUser = userMap.get(d.getYsUser()); - if(ztUser!=null){ + if (ztUser != null) { d.setYsUserName(ztUser.getNickname()); } } @@ -1434,23 +1473,22 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } - private void closeTaskBug(Integer i) { - List taskList = this.taskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory,i).ne(ZtTask::getStatus,"closed")); + List taskList = this.taskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory, i).ne(ZtTask::getStatus, "closed")); - if(!CollectionUtils.isEmpty(taskList)){ - for (ZtTask t:taskList) { + if (!CollectionUtils.isEmpty(taskList)) { + for (ZtTask t : taskList) { - ZtTaskDTO dto=new ZtTaskDTO(); + ZtTaskDTO dto = new ZtTaskDTO(); dto.setId(t.getId()); this.taskService.closeTask(dto); } } - List bugList = this.bugService.list(new QueryWrapper().lambda().eq(ZtBug::getStory,i).ne(ZtBug::getStatus,"closed")); - for (ZtBug bug:bugList) { - ZtBugQo qo=new ZtBugQo(); + List bugList = this.bugService.list(new QueryWrapper().lambda().eq(ZtBug::getStory, i).ne(ZtBug::getStatus, "closed")); + for (ZtBug bug : bugList) { + ZtBugQo qo = new ZtBugQo(); qo.setId(bug.getId()); qo.setStatus("closed"); this.bugService.changeStatus(qo); @@ -1467,10 +1505,10 @@ public class ZtStoryServiceImpl extends ServiceImpl impl .eq(ZtProjectstory::getStory, ztStory.getId()) .eq(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue()) ); - if(CollectionUtils.isEmpty(list)){ + if (CollectionUtils.isEmpty(list)) { return new ArrayList<>(); - }else{ - return list.stream().map(o->o.getProject()).collect(Collectors.toList()); + } else { + return list.stream().map(o -> o.getProject()).collect(Collectors.toList()); } } @@ -1481,7 +1519,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl if (ztStory == null) { throw new BusinessException("未查询到"); } - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } String status = ztStory.getStatus(); @@ -1493,7 +1531,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl this.baseMapper.updateById(ztStory); actionService.addAction(ActionType.XQ, ActionStatus.GB, ztStory.getId(), ztStory.getProduct() + "", null, null, RiskUserThreadLocal.get().getName(), dto.getClosedreason(), "Done|draft"); - if(ztStory.getProduct()!=null&&ztStory.getProduct().intValue()!=0){ + if (ztStory.getProduct() != null && ztStory.getProduct().intValue() != 0) { ProductStoryStatus oldPStatus = getProductStatus(status); this.productService.productChangeStatus(ztStory.getProduct(), oldPStatus, ProductStoryStatus.GB); } @@ -1508,7 +1546,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl if (ztStory == null) { throw new BusinessException("未查询到"); } - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } ztStory.setAssignedTo(StringUtils.isEmpty(dto.getAssignedTo()) ? "" : dto.getAssignedTo()); @@ -1525,12 +1563,12 @@ public class ZtStoryServiceImpl extends ServiceImpl impl public void cancelReview(ZtStoryDTO dto) { ZtStory ztStory = this.baseMapper.selectById(dto.getId()); - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } //删除评审表 this.storyreviewService.remove(new QueryWrapper().lambda() - .eq(ZtStoryreview::getStory, ztStory.getId()).eq(ZtStoryreview::getType,"story")); + .eq(ZtStoryreview::getStory, ztStory.getId()).eq(ZtStoryreview::getType, "story")); //更新表 this.baseMapper.update(new UpdateWrapper() @@ -1545,7 +1583,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl @Override public void addReview(ZtStoryDTO dto) { ZtStory ztStory = this.baseMapper.selectById(dto.getId()); - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } if (!"draft".equalsIgnoreCase(ztStory.getStatus())) { @@ -1567,21 +1605,22 @@ public class ZtStoryServiceImpl extends ServiceImpl impl actionService.addAction(ActionType.XQ, ActionStatus.PS, ztStory.getId(), ztStory.getProduct() + "", null, null, RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStory.getAssignedTo()); } + //验收 @Override @Transactional public void storyYs(ZtStoryDTO dto) { ZtStory ztStory = this.baseMapper.selectById(dto.getId()); - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } String stage = ztStory.getStage(); - if(!"verified".equals(stage)){ + if (!"verified".equals(stage)) { ZtProduct product = this.productService.getById(ztStory.getProduct()); - product.setYss(product.getYss()+1); - product.setReleases(product.getReleases()-1); + product.setYss(product.getYss() + 1); + product.setReleases(product.getReleases() - 1); this.productService.updateById(product); } @@ -1592,27 +1631,27 @@ public class ZtStoryServiceImpl extends ServiceImpl impl ztStory.setYsRemark(dto.getDesc()); ActionStatus status; - if(revieweResult==1){ - status=ActionStatus.YSTG; + if (revieweResult == 1) { + status = ActionStatus.YSTG; //如果研发需求验收完毕 那么用户需求也需要变更 - if(ztStory.getUserStory()!=null&&ztStory.getUserStory()!=0){ + if (ztStory.getUserStory() != null && ztStory.getUserStory() != 0) { List storyList = this.baseMapper.selectList(new QueryWrapper().lambda() - .ne(ZtStory::getId,ztStory.getId()) - .in(ZtStory::getStage,"wait","projected","developing","developed","testing","tested","released") + .ne(ZtStory::getId, ztStory.getId()) + .in(ZtStory::getStage, "wait", "projected", "developing", "developed", "testing", "tested", "released") .eq(ZtStory::getUserStory, ztStory.getUserStory())); - if(CollectionUtils.isEmpty(storyList)){ + if (CollectionUtils.isEmpty(storyList)) { ZtStoryUser ztStoryUser = this.storyUserService.getById(ztStory.getUserStory()); ztStoryUser.setStatus("finished"); this.storyUserService.updateById(ztStoryUser); } } ztStory.setStatus("finished"); - }else{ - status=ActionStatus.YSBTG; + } else { + status = ActionStatus.YSBTG; } this.baseMapper.updateById(ztStory); - if(revieweResult==1&&ztStory.getFeedback()!=null&&ztStory.getFeedback()!=0){ + if (revieweResult == 1 && ztStory.getFeedback() != null && ztStory.getFeedback() != 0) { this.storyFeedbackService.ysFeedback(ztStory.getFeedback()); } @@ -1621,123 +1660,168 @@ public class ZtStoryServiceImpl extends ServiceImpl impl RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStory.getAssignedTo()); } -// + // @Override - public ZtStoryDTO getStoryById(Integer id,Integer execution) { + public ZtStoryDTO getStoryById(Integer id, Integer execution) { ZtStory ztStory = this.baseMapper.selectById(id); - if(ztStory==null){ + if (ztStory == null) { throw new BusinessException("未查询到数据"); } - ZtStoryDTO d=new ZtStoryDTO(); + ZtStoryDTO d = new ZtStoryDTO(); - BeanUtils.copyProperties(ztStory,d); - if(d.getProduct()!=null&&d.getProduct()!=0){ + BeanUtils.copyProperties(ztStory, d); + if (d.getProduct() != null && d.getProduct() != 0) { ZtProduct product = this.productService.getById(d.getProduct()); d.setProductId(product.getId()); d.setProductName(product.getName()); } ZtProjectstory projectstory = this.projectstoryService.getOne(new QueryWrapper().lambda() - .eq(ZtProjectstory::getStory, ztStory.getId()).eq(ZtProjectstory::getType,ProjectTypeEnums.project.getValue())); - if(projectstory!=null){ + .eq(ZtProjectstory::getStory, ztStory.getId()).eq(ZtProjectstory::getType, ProjectTypeEnums.project.getValue())); + if (projectstory != null) { ZtProject ztProject = this.projectService.getById(projectstory.getProject()); d.setProjectId(ztProject.getId()); d.setProjectName(ztProject.getName()); } - if(execution!=null){ + if (execution != null) { ZtProject ztProject = this.projectService.getById(execution); - if(ztProject!=null){ + if (ztProject != null) { d.setImplementId(ztProject.getId()); d.setImplementName(ztProject.getName()); } } - - Map userMap = this.userService.userMapByIds(null); + Map userMap = this.userService.userMapByIds(null); - Map> rMap = getReviewMap(Arrays.asList(d)); + Map> rMap = getReviewMap(Arrays.asList(d)); // d.setRevieweUser(d.getReviewedby().replaceAll(",", " ")); - if(!StringUtils.isEmpty(d.getReviewedby())){ + if (!StringUtils.isEmpty(d.getReviewedby())) { String[] split = d.getReviewedby().split(","); - StringBuilder b=new StringBuilder(); - for (String s:split) { + StringBuilder b = new StringBuilder(); + for (String s : split) { ZtUser u = userMap.get(s); - if(u!=null){ - b.append(u.getNickname()+","); + if (u != null) { + b.append(u.getNickname() + ","); } } d.setReviewedbyName(b.toString()); } - d.setViews(rMap.get(d.getId())); - ZtUser ztUser = userMap.get(d.getAssignedTo()); - if(ztUser!=null){ - d.setAssignedToName(ztUser.getNickname()); - } + d.setViews(rMap.get(d.getId())); + ZtUser ztUser = userMap.get(d.getAssignedTo()); + if (ztUser != null) { + d.setAssignedToName(ztUser.getNickname()); + } - ztUser = userMap.get(d.getOpenedby()); - if(ztUser!=null){ - d.setOpenedbyName(ztUser.getNickname()); - } + ztUser = userMap.get(d.getOpenedby()); + if (ztUser != null) { + d.setOpenedbyName(ztUser.getNickname()); + } ztUser = userMap.get(d.getYsUser()); - if(ztUser!=null){ + if (ztUser != null) { d.setYsUserName(ztUser.getNickname()); } ZtStoryspec storyspec = this.storyspecService.getOne(new QueryWrapper().lambda().eq(ZtStoryspec::getStory, d.getId())); - if(storyspec!=null){ + if (storyspec != null) { d.setFiles(storyspec.getFiles()); d.setFileUrl(storyspec.getFiles()); d.setSpec(storyspec.getSpec()); d.setVerify(storyspec.getVerify()); } List list = this.projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, d.getId()).eq(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue())); - if(!CollectionUtils.isEmpty(list)){ - d.setExecutions(list.stream().map(o->o.getProject()).collect(Collectors.toList())); + if (!CollectionUtils.isEmpty(list)) { + d.setExecutions(list.stream().map(o -> o.getProject()).collect(Collectors.toList())); } Integer userStory = d.getUserStory(); - if(userStory!=null&&userStory!=0){ + if (userStory != null && userStory != 0) { ZtStoryUser storyUser = this.storyUserService.getById(userStory); - if(storyUser!=null){ + if (storyUser != null) { d.setUserStoryName(storyUser.getTitle()); } } - if(d.getParent()!=null&&d.getParent()!=0){ + if (d.getParent() != null && d.getParent() != 0) { ZtStory pStory = this.getById(d.getParent()); - if(pStory!=null){ + if (pStory != null) { d.setParentName(pStory.getTitle()); } } - if(d.getModule()!=null&&d.getModule()!=0){ + if (d.getModule() != null && d.getModule() != 0) { ZtModule ztModule = this.moduleService.getById(d.getModule()); - if(ztModule!=null){ + if (ztModule != null) { d.setModuleName(ztModule.getName()); } } - if(d.getUserStory()!=null&&d.getUserStory()!=0){ + if (d.getUserStory() != null && d.getUserStory() != 0) { ZtStoryUser storyUser = this.storyUserService.getById(d.getUserStory()); ZtStoryUserDTO ztStoryUserDTO = new ZtStoryUserDTO(); - BeanUtils.copyProperties(storyUser,ztStoryUserDTO); + BeanUtils.copyProperties(storyUser, ztStoryUserDTO); ztUser = userMap.get(ztStoryUserDTO.getOpenedby()); - if(ztUser!=null){ + if (ztUser != null) { ztStoryUserDTO.setOpenedbyName(ztUser.getNickname()); } ztUser = userMap.get(ztStoryUserDTO.getAssignedto()); - if(ztUser!=null){ + if (ztUser != null) { ztStoryUserDTO.setAssignedtoName(ztUser.getNickname()); } + Integer parent = ztStoryUserDTO.getParent(); + if(parent!=null&&parent!=0){ + ZtStoryUser ztStoryUser = this.storyUserService.getById(parent); + if(ztStoryUser!=null){ + ztStoryUserDTO.setParentName(ztStoryUser.getTitle()); + } + } + + Integer product = ztStoryUserDTO.getProduct(); + if(product!=null&&product!=0){ + ZtProduct ztProduct = this.productService.getById(product); + + ztStoryUserDTO.setProductName(ztProduct.getName()); + } + + Integer module = ztStoryUserDTO.getModule(); + if(module!=null&&module!=0){ + + ZtModule ztModule = this.moduleService.getById(module); + + ztStoryUserDTO.setModuleName(ztModule.getName()); + } d.setUserStoryInfo(ztStoryUserDTO); } + List bugs = this.bugService.list(new QueryWrapper().lambda().eq(ZtBug::getTostory, d.getId())); + if(!CollectionUtils.isEmpty(bugs)){ + List ztBugDTOS = BeanCopyUtil.copyListProperties(bugs, ZtBugDTO::new); + if(!CollectionUtils.isEmpty(ztBugDTOS)){ + for (ZtBugDTO bug:ztBugDTOS) { + ztUser = userMap.get(bug.getOpenedby()); + if(ztUser!=null){ + bug.setOpenedbyName(ztUser.getNickname()); + } + ztUser = userMap.get(bug.getAssignedTo()); + + if(ztUser!=null){ + bug.setAssignedToName(ztUser.getNickname()); + } + ztUser = userMap.get(bug.getYsUser()); + + if(ztUser!=null){ + bug.setYsUserName(ztUser.getNickname()); + } + } + } + d.setBugList(ztBugDTOS); + } + return d; } @@ -1749,28 +1833,27 @@ public class ZtStoryServiceImpl extends ServiceImpl impl List list = this.executionprojectService.list(new QueryWrapper().lambda() .in(ZtExecutionproject::getProject, projects)); - if(CollectionUtils.isEmpty(list)){ + if (CollectionUtils.isEmpty(list)) { return new ArrayList<>(); } - return this.projectService.list(new QueryWrapper().lambda().in(ZtProject::getId,list.stream().map(o->o.getExecution()).collect(Collectors.toList())) - .ne(ZtProject::getStatus,"closed").orderByDesc(ZtProject::getId) - ); + return this.projectService.list(new QueryWrapper().lambda().in(ZtProject::getId, list.stream().map(o -> o.getExecution()).collect(Collectors.toList())) + .ne(ZtProject::getStatus, "closed").orderByDesc(ZtProject::getId) + ); } - @Override public void userReview(ZtStoryDTO dto) { ZtStory ztStory = this.baseMapper.selectById(dto.getId()); - if("closed".equals(ztStory.getStatus())){ + if ("closed".equals(ztStory.getStatus())) { throw new BusinessException("当前已关闭"); } ZtStoryreview view = this.storyreviewService.getOne(new QueryWrapper().lambda() .eq(ZtStoryreview::getStory, ztStory.getId()) .eq(ZtStoryreview::getReviewer, RiskUserThreadLocal.get().getName()) - .eq(ZtStoryreview::getType,"story") + .eq(ZtStoryreview::getType, "story") ); if (view == null) { throw new BusinessException("当前无评审"); @@ -1781,24 +1864,24 @@ public class ZtStoryServiceImpl extends ServiceImpl impl if (dto.getRevieweResult() == 1) { //通过 lambda.set(ZtStoryreview::getResult, "pass"); - actionStatus=ActionStatus.PSTG; + actionStatus = ActionStatus.PSTG; } else if (dto.getRevieweResult() == 2) { lambda.set(ZtStoryreview::getResult, "reject"); - actionStatus=ActionStatus.PSYDMQ; + actionStatus = ActionStatus.PSYDMQ; } else { lambda.set(ZtStoryreview::getResult, "reject"); - actionStatus=ActionStatus.PSBTG; + actionStatus = ActionStatus.PSBTG; } lambda.set(ZtStoryreview::getReviewdate, new Date()); lambda.eq(ZtStoryreview::getStory, ztStory.getId()); lambda.eq(ZtStoryreview::getReviewer, RiskUserThreadLocal.get().getName()); - lambda.eq(ZtStoryreview::getType,"story"); + lambda.eq(ZtStoryreview::getType, "story"); this.storyreviewService.update(lambda); ztStory.setReviewedby(StringUtils.isEmpty(ztStory.getReviewedby()) ? "," + RiskUserThreadLocal.get().getName() : ztStory.getReviewedby() + "," + RiskUserThreadLocal.get().getName()); List list = this.storyreviewService.list(new QueryWrapper().lambda() - .eq(ZtStoryreview::getStory, ztStory.getId()).eq(ZtStoryreview::getType,"story") + .eq(ZtStoryreview::getStory, ztStory.getId()).eq(ZtStoryreview::getType, "story") ); if (list.stream().filter(o -> o.getReviewdate() != null).collect(Collectors.toList()).size() >= list.size()) { @@ -1825,15 +1908,15 @@ public class ZtStoryServiceImpl extends ServiceImpl impl RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStory.getAssignedTo()); - if("active".equalsIgnoreCase(ztStory.getStatus())||"closed".equalsIgnoreCase(ztStory.getStatus())){ + if ("active".equalsIgnoreCase(ztStory.getStatus()) || "closed".equalsIgnoreCase(ztStory.getStatus())) { Integer product = ztStory.getProduct(); - if(product!=null&&product!=0){ + if (product != null && product != 0) { ZtProduct ztProduct = this.productService.getById(product); - ztProduct.setReviewingStories(ztProduct.getReviewingStories()-1); - if("active".equalsIgnoreCase(ztStory.getStatus())){ - ztProduct.setActiveStories(ztProduct.getActiveStories()+1); - }else{ - ztProduct.setClosedStories(ztProduct.getClosedStories()+1); + ztProduct.setReviewingStories(ztProduct.getReviewingStories() - 1); + if ("active".equalsIgnoreCase(ztStory.getStatus())) { + ztProduct.setActiveStories(ztProduct.getActiveStories() + 1); + } else { + ztProduct.setClosedStories(ztProduct.getClosedStories() + 1); } this.productService.updateById(ztProduct); } @@ -1888,19 +1971,18 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } - @Override public List storyListByExecution(ZtProjectQo qo) { List list = projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getProject, qo.getId()) - .eq(ZtProjectstory::getType,ProjectTypeEnums.execution.getValue()) + .eq(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue()) ); if (CollectionUtils.isEmpty(list)) { return new ArrayList<>(); } List ztStories = IZtStoryService.list( - new QueryWrapper().lambda().in(ZtStory::getId,list.stream().map(o -> o.getStory()).collect(Collectors.toList())) - .ne(ZtStory::getStatus,"closed")); + new QueryWrapper().lambda().in(ZtStory::getId, list.stream().map(o -> o.getStory()).collect(Collectors.toList())) + .ne(ZtStory::getStatus, "closed")); List storyList = BeanCopyUtil.copyListProperties(ztStories, ZtStoryDTO::new); @@ -1908,7 +1990,6 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } - public ProductStoryStatus getProductStatus(String status) { @@ -1921,13 +2002,13 @@ public class ZtStoryServiceImpl extends ServiceImpl impl // ,{key:'已关闭',value:'closed'} ProductStoryStatus oldPStatus = null; - if (status.equalsIgnoreCase("developing")||status.equalsIgnoreCase("testing") - ||status.equalsIgnoreCase("tested")||status.equalsIgnoreCase("developed") + if (status.equalsIgnoreCase("developing") || status.equalsIgnoreCase("testing") + || status.equalsIgnoreCase("tested") || status.equalsIgnoreCase("developed") ) { oldPStatus = ProductStoryStatus.JH; } - if (status.equalsIgnoreCase("released")||status.equalsIgnoreCase("verified")) { + if (status.equalsIgnoreCase("released") || status.equalsIgnoreCase("verified")) { oldPStatus = ProductStoryStatus.WC; } if (status.equalsIgnoreCase("closed")) { diff --git a/src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java index ec2c4a1..d982fc7 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java @@ -171,7 +171,6 @@ public class ZtStoryUserServiceImpl extends ServiceImpl> storyUserMap = getStoryUserMap(list); Map> rMap = getReviewMap(list); - for (ZtStoryUserDTO d : list) { if(!StringUtils.isEmpty(d.getReviewedby())){ @@ -375,6 +374,7 @@ public class ZtStoryUserServiceImpl extends ServiceImpl impleme @Autowired private IZtExecutionprojectService executionprojectService; + @Autowired + private IZtBugService bugService; + @Override public PageInfo taskPageList(ZtProjectQo qo) { @@ -233,6 +236,30 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme if (ztUser != null) { dto.setAssignedToName(ztUser.getNickname()); } + List list = this.bugService.list(new QueryWrapper().lambda().eq(ZtBug::getTotask, id)); + + if(!CollectionUtils.isEmpty(list)){ + List ztBugDTOS = BeanCopyUtil.copyListProperties(list, ZtBugDTO::new); + for (ZtBugDTO bug:ztBugDTOS) { + ztUser = userMap.get(bug.getOpenedby()); + if(ztUser!=null){ + bug.setOpenedbyName(ztUser.getNickname()); + } + ztUser = userMap.get(bug.getAssignedTo()); + + if(ztUser!=null){ + bug.setAssignedToName(ztUser.getNickname()); + } + ztUser = userMap.get(bug.getYsUser()); + + if(ztUser!=null){ + bug.setYsUserName(ztUser.getNickname()); + } + } + dto.setBugList(ztBugDTOS); + }else{ + dto.setBugList(Arrays.asList()); + } return dto; } diff --git a/src/main/resources/mapper/ZtStoryMapper.xml b/src/main/resources/mapper/ZtStoryMapper.xml index 6dca255..5ef9523 100644 --- a/src/main/resources/mapper/ZtStoryMapper.xml +++ b/src/main/resources/mapper/ZtStoryMapper.xml @@ -175,13 +175,14 @@ - select s.*,sp.spec ,sp.verify,sp.files,pt.name productName from (zt_story s,zt_projectstory ps ) left join zt_storyspec sp on s.id = sp.story + select s.*,sp.spec ,sp.verify,sp.files,pt.name productName from zt_story s left join zt_storyspec sp on s.id = sp.story left join zt_storyreview v on s.id = v.story and s.version = v.version left join zt_projectstory pstory on s.id = pstory.story and pstory.execution =0 left join zt_project pj on pstory.project = pj.id left join zt_product pt on s.product = pt.id - WHERE s.id = ps.story + left join zt_projectstory ps on s.id = ps.story + WHERE 1=1 @@ -199,9 +200,11 @@ and ps.project =#{qo.project} + and ps.type= 'project' and ps.project =#{qo.execution} + and ps.type= 'execution' and s.module =#{qo.module} @@ -271,7 +274,7 @@ and s.status ='closed' - and closedBy =#{qo.userName} + and s.closedBy =#{qo.userName}