diff --git a/src/main/java/com/sa/zentao/controller/ZtReleaseController.java b/src/main/java/com/sa/zentao/controller/ZtReleaseController.java index 5afe306..f8cea92 100644 --- a/src/main/java/com/sa/zentao/controller/ZtReleaseController.java +++ b/src/main/java/com/sa/zentao/controller/ZtReleaseController.java @@ -40,6 +40,13 @@ public class ZtReleaseController { return Result.success(); } + @RequestMapping(value = "/getById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result getById(@RequestBody ZtReleaseQo qo){ + ZtReleaseDTO ztRelease = releaseService.getReleaseById(qo.getId()); + return Result.success(ztRelease); + } + + @RequestMapping(value = "/modifyRelease", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") public Result modifyRelease(@RequestBody ZtReleaseDTO dto){ releaseService.modifyRelease(dto); diff --git a/src/main/java/com/sa/zentao/controller/ZtTaskController.java b/src/main/java/com/sa/zentao/controller/ZtTaskController.java index a5b53ca..de71fff 100644 --- a/src/main/java/com/sa/zentao/controller/ZtTaskController.java +++ b/src/main/java/com/sa/zentao/controller/ZtTaskController.java @@ -44,6 +44,32 @@ public class ZtTaskController { @Autowired private IZtTaskService ztTaskService; + @Autowired + private IZtProjectService projectService; + @Autowired + private IZtStoryService storyService; + @Autowired + private IZtUserService userService; + @Autowired + private IZtProjectstoryService projectstoryService; + @Autowired + private IZtKanbanlaneService kanbanlaneService; + + @Autowired + private com.sa.zentao.service.IZtStoryService IZtStoryService; + + + @Autowired + private IZtExecutionprojectService executionprojectService; + + @Autowired + private IZtProjectproductService projectproductService; + + + @Autowired + private IZtStoryspecService storyspecService; + + @RequestMapping(value = "/taskPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") public Result> taskPageList(@RequestBody ZtProjectQo qo){ @@ -160,16 +186,7 @@ public class ZtTaskController { return Result.success(list); } - @Autowired - private IZtProjectService projectService; - @Autowired - private IZtStoryService storyService; - @Autowired - private IZtUserService userService; - @Autowired - private IZtProjectstoryService projectstoryService; - @Autowired - private IZtKanbanlaneService kanbanlaneService; + @RequestMapping(value = "/uploadTask", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") @@ -256,19 +273,6 @@ public class ZtTaskController { - @Autowired - private com.sa.zentao.service.IZtStoryService IZtStoryService; - - - @Autowired - private IZtExecutionprojectService executionprojectService; - - @Autowired - private IZtProjectproductService projectproductService; - - - @Autowired - private IZtStoryspecService storyspecService; //同步中道 @@ -421,6 +425,87 @@ public class ZtTaskController { + //同步中道 + @RequestMapping(value = "/syncZdTaskByExecution", method = RequestMethod.GET, produces = "application/json; charset=UTF-8") + public Result syncZdTaskByExecution(@RequestParam("implementName")String implementName){ + + + if(StringUtils.isEmpty(implementName)){ + return Result.success(); + } + List list1 = this.projectService.list(new QueryWrapper().lambda().eq(ZtProject::getName, implementName) + .eq(ZtProject::getType,"sprint") + ); + if(CollectionUtils.isEmpty(list1)){ + throw new BusinessException("未查询到"); + } + ZtProject sprint = this.projectService.getOne(new QueryWrapper().lambda().eq(ZtProject::getName, implementName) + .eq(ZtProject::getType, "sprint")); + + ZtProjectDTO d=projectService.selectPrdByName(implementName); + if(d!=null){ + // 新系统执行id + Integer myExecId = list1.get(0).getId(); + //执行id + Integer id = d.getId(); + + List taskDTOS=this.ztTaskService.taskListPrd(id); + + for (ZtTaskDTO task:taskDTOS) { + List list = this.ztTaskService.list(new QueryWrapper().lambda().eq(ZtTask::getName, task.getName())); +// if(!CollectionUtils.isEmpty(list)){ +// continue; +// } + + //老的 + ZtTask ztTask = new ZtTask(); + BeanUtils.copyProperties(task,ztTask,"id"); + if(ztTask.getDeadline()!=null){ + ztTask.setDeadlineTime(ztTask.getDeadline().getTime()/1000); + } + ZtExecutionproject project = this.executionprojectService.getOne(new QueryWrapper().lambda() + .eq(ZtExecutionproject::getExecution, myExecId)); + Integer projectId = project.getProject(); + ztTask.setExecution(myExecId); + ztTask.setProject(projectId); + this.ztTaskService.save(ztTask); + + kanbanlaneService.addTask( myExecId, Arrays.asList(ztTask)); + if(ztTask.getStatus().equals("closed")){ + kanbanlaneService.changeStatus(myExecId,ztTask.getId(),"task","closed"); + } + if(ztTask.getStatus().equals("doing")){ + try { + kanbanlaneService.changeStatus(myExecId,ztTask.getId(),"task","developing"); + }catch (Exception e){ + log.error("",e); + } + + } + if(ztTask.getStatus().equals("done")){ + kanbanlaneService.changeStatus(myExecId,ztTask.getId(),"task","developed"); + } + if(ztTask.getStatus().equals("cancel")){ + kanbanlaneService.changeStatus(myExecId,ztTask.getId(),"task","canceled"); + } + if(ztTask.getStatus().equals("wait")){ + kanbanlaneService.changeStatus(myExecId,ztTask.getId(),"task","wait"); + } + if(ztTask.getStatus().equals("pause")){ + kanbanlaneService.changeStatus(myExecId,ztTask.getId(),"task","pause"); + } + + } + + } + + return Result.success(); + } + + + + + //同步中道 @RequestMapping(value = "/test", method = RequestMethod.GET, produces = "application/json; charset=UTF-8") public Result test(@RequestParam("implementName")String implementName){ diff --git a/src/main/java/com/sa/zentao/controller/ZtUserController.java b/src/main/java/com/sa/zentao/controller/ZtUserController.java index a91cabb..45b5a69 100644 --- a/src/main/java/com/sa/zentao/controller/ZtUserController.java +++ b/src/main/java/com/sa/zentao/controller/ZtUserController.java @@ -171,7 +171,8 @@ public class ZtUserController { .set(ZtUser::getUserType,user.getUserType()) .set(ZtUser::getEmail,user.getEmail()) .set(ZtUser::getProductIds,ztUser.getProductIds()) - .set(ZtUser::getPhone,ztUser.getPhone()) + .set(ZtUser::getColor,user.getColor()) + .set(ZtUser::getPhone,ztUser.getPhone()) .eq(ZtUser::getId,ztUser.getId()) ); this.actionService.addAction(ActionType.USER, ActionStatus.BJ,ztUser.getId(),null,null,null,RiskUserThreadLocal.get().getName(),null,user.getAccount()); diff --git a/src/main/java/com/sa/zentao/dao/ZtReleaseDTO.java b/src/main/java/com/sa/zentao/dao/ZtReleaseDTO.java index df7874f..0775155 100644 --- a/src/main/java/com/sa/zentao/dao/ZtReleaseDTO.java +++ b/src/main/java/com/sa/zentao/dao/ZtReleaseDTO.java @@ -30,10 +30,10 @@ public class ZtReleaseDTO implements Serializable { @TableId(value = "id", type = IdType.AUTO) private Integer id; - private String project; - + private Integer project; + private String projectName; private Integer product; - + private String productName; private String branch; private Integer shadow; diff --git a/src/main/java/com/sa/zentao/entity/ZtProject.java b/src/main/java/com/sa/zentao/entity/ZtProject.java index 90b814f..5466bd1 100644 --- a/src/main/java/com/sa/zentao/entity/ZtProject.java +++ b/src/main/java/com/sa/zentao/entity/ZtProject.java @@ -29,6 +29,9 @@ public class ZtProject implements Serializable { private Integer project; + @TableField(exist = false) + private String projectName; + private Integer charter; private String model; diff --git a/src/main/java/com/sa/zentao/entity/ZtRelease.java b/src/main/java/com/sa/zentao/entity/ZtRelease.java index 2226ca7..e584065 100644 --- a/src/main/java/com/sa/zentao/entity/ZtRelease.java +++ b/src/main/java/com/sa/zentao/entity/ZtRelease.java @@ -28,7 +28,7 @@ public class ZtRelease implements Serializable { @TableId(value = "id", type = IdType.AUTO) private Integer id; - private String project; + private Integer project; private Integer product; diff --git a/src/main/java/com/sa/zentao/entity/ZtReleaseDetails.java b/src/main/java/com/sa/zentao/entity/ZtReleaseDetails.java index a8bdd0f..118965d 100644 --- a/src/main/java/com/sa/zentao/entity/ZtReleaseDetails.java +++ b/src/main/java/com/sa/zentao/entity/ZtReleaseDetails.java @@ -27,7 +27,7 @@ public class ZtReleaseDetails implements Serializable { private Integer releaseId; private Integer objectId; - + //story private String objectType; // released已发布 closed 关闭 private String status; diff --git a/src/main/java/com/sa/zentao/enums/ActionStatus.java b/src/main/java/com/sa/zentao/enums/ActionStatus.java index 2cd9f64..bca4e10 100644 --- a/src/main/java/com/sa/zentao/enums/ActionStatus.java +++ b/src/main/java/com/sa/zentao/enums/ActionStatus.java @@ -28,6 +28,7 @@ public enum ActionStatus { KSCE(21, "tested","开始测试"), CSWC(20, "tested","测试完成"), + LOGIN(100, "login","登录"), ; diff --git a/src/main/java/com/sa/zentao/enums/ActionType.java b/src/main/java/com/sa/zentao/enums/ActionType.java index 56e2c5d..7e3f2dc 100644 --- a/src/main/java/com/sa/zentao/enums/ActionType.java +++ b/src/main/java/com/sa/zentao/enums/ActionType.java @@ -11,6 +11,8 @@ public enum ActionType { XQ(4, "story","需求"), + FB(4, "release","发布"), + USERXQ(14, "user-story","用户需求"), WTFK(15, "story-feedback","问题反馈"), @@ -21,6 +23,8 @@ public enum ActionType { LOGIN(7, "LOGIN","登录"), USER(8, "user","用户"), + + ; diff --git a/src/main/java/com/sa/zentao/mapper/ZtTaskMapper.java b/src/main/java/com/sa/zentao/mapper/ZtTaskMapper.java index 0f41b51..1a21457 100644 --- a/src/main/java/com/sa/zentao/mapper/ZtTaskMapper.java +++ b/src/main/java/com/sa/zentao/mapper/ZtTaskMapper.java @@ -1,5 +1,6 @@ package com.sa.zentao.mapper; +import com.baomidou.dynamic.datasource.annotation.DS; import com.sa.zentao.dao.ZtTaskDTO; import com.sa.zentao.entity.ZtTask; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -19,4 +20,7 @@ import java.util.List; public interface ZtTaskMapper extends BaseMapper { List taskPageList(@Param("qo") ZtProjectQo qo); + + @DS("slave") + List taskListPrd(@Param("id") Integer id); } diff --git a/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java b/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java index 3ea2279..81dfc8f 100644 --- a/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java +++ b/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java @@ -27,6 +27,8 @@ public class ZtReleaseQo extends BaseQo { @TableId(value = "id", type = IdType.AUTO) private Integer id; + + private String assignedTo; private Integer project; diff --git a/src/main/java/com/sa/zentao/service/IZtReleaseService.java b/src/main/java/com/sa/zentao/service/IZtReleaseService.java index ad07cb1..1765a5c 100644 --- a/src/main/java/com/sa/zentao/service/IZtReleaseService.java +++ b/src/main/java/com/sa/zentao/service/IZtReleaseService.java @@ -46,4 +46,6 @@ public interface IZtReleaseService extends IService { void removeStory(ZtReleaseQo qo); void batchSyncStory(ZtReleaseQo qo); + + ZtReleaseDTO getReleaseById(Integer id); } diff --git a/src/main/java/com/sa/zentao/service/IZtStoryService.java b/src/main/java/com/sa/zentao/service/IZtStoryService.java index ffa5f45..4c59daa 100644 --- a/src/main/java/com/sa/zentao/service/IZtStoryService.java +++ b/src/main/java/com/sa/zentao/service/IZtStoryService.java @@ -46,9 +46,9 @@ public interface IZtStoryService extends IService { List storyNoSyncProject(ZtProjectQo qo); - void startStory(Integer story,Integer execution); + void startStory(Integer story); - void finishStory(Integer story,Integer execution); + void finishStory(Integer story); //测试完毕 void testedStory(Integer story); //测试中 diff --git a/src/main/java/com/sa/zentao/service/IZtTaskService.java b/src/main/java/com/sa/zentao/service/IZtTaskService.java index dbdd644..cde19b4 100644 --- a/src/main/java/com/sa/zentao/service/IZtTaskService.java +++ b/src/main/java/com/sa/zentao/service/IZtTaskService.java @@ -52,4 +52,5 @@ public interface IZtTaskService extends IService { ZtTaskDTO getTaskById(Integer id); + List taskListPrd(Integer id); } 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 484fc31..48932b6 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtProductServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtProductServiceImpl.java @@ -141,7 +141,7 @@ public class ZtProductServiceImpl extends ServiceImplo.getProgram()==d.getId()).collect(Collectors.toList())); + d.setChildren(result.stream().filter(o->o.getProgram().equals(d.getId())).collect(Collectors.toList())); d.setId(100000000+d.getId()); if(!StringUtils.isEmpty(d.getPm())){ ZtUser ztUser = userMap.get(d.getPm()); 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 51fcc8b..d75eae5 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java @@ -139,6 +139,7 @@ public class ZtProjectServiceImpl extends ServiceImpl sMap = getStoryMap(storyIds); + + for (Integer sId:storyIds) { ZtProjectstory ztProjectstory = new ZtProjectstory(); ztProjectstory.setOrder(order); ztProjectstory.setStory(sId); - ztProjectstory.setProduct(ztProject.getParent()); + ZtStory ztStory = sMap.get(sId); + if(ztStory!=null){ + ztProjectstory.setProduct(ztStory.getProduct()); + } + ztProjectstory.setType(ProjectTypeEnums.project.getValue()); ztProjectstory.setProject(project); saveList.add(ztProjectstory); order+=5; @@ -636,6 +645,18 @@ public class ZtProjectServiceImpl extends ServiceImpl getStoryMap(List storyIds) { + if(CollectionUtils.isEmpty(storyIds)){ + return new HashMap<>(); + } + List storyList = this.storyService.listByIds(storyIds); + if(CollectionUtils.isEmpty(storyList)){ + return new HashMap<>(); + }else{ + return storyList.stream().collect(Collectors.toMap(ZtStory::getId,o->o)); + } + } + @Override public List implementByProject(ZtProjectQo qo) { @@ -790,7 +811,7 @@ public class ZtProjectServiceImpl extends ServiceImpl syncStoryList = this.projectstoryService.list(new QueryWrapper() - .lambda().ne(ZtProjectstory::getProject, excludeId) + .lambda().eq(ZtProjectstory::getProject, excludeId) .in(ZtProjectstory::getStory, storyIds) ); 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 6ab5a5b..b81d29f 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java @@ -8,6 +8,8 @@ import com.github.pagehelper.PageInfo; import com.sa.zentao.conf.RiskUserThreadLocal; import com.sa.zentao.dao.*; import com.sa.zentao.entity.*; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; import com.sa.zentao.enums.ProjectTypeEnums; import com.sa.zentao.enums.StoryStageEnums; import com.sa.zentao.mapper.ZtReleaseMapper; @@ -43,11 +45,29 @@ public class ZtReleaseServiceImpl extends ServiceImpl().lambda() + .eq(ZtProjectproduct::getProject, project)); + if(projectproduct!=null){ + ztRelease.setProduct(projectproduct.getProduct()); + } + this.baseMapper.insert(ztRelease); @@ -71,7 +97,7 @@ public class ZtReleaseServiceImpl extends ServiceImpl sList = this.storyService.list(new QueryWrapper() .lambda().eq(ZtStory::getStatus, "active") - .in(ZtStory::getId,list.stream().map(o->o.getStory()).collect(Collectors.toList())) + .in(ZtStory::getId,list.stream().map(o->o.getStory()).distinct().collect(Collectors.toList())) .eq(ZtStory::getStage, StoryStageEnums.tested.getValue())); if(!CollectionUtils.isEmpty(sList)){ List releaseStoryList = this.releaseDetailsService.list(new QueryWrapper().lambda() @@ -95,12 +121,17 @@ public class ZtReleaseServiceImpl extends ServiceImpl execIds = new ArrayList(Arrays.asList(execStr.split(","))); + + List list = this.projectstoryService.list(new QueryWrapper().lambda() + .in(ZtProjectstory::getProject, execIds) + .eq(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue()) + ); + + + if(!CollectionUtils.isEmpty(list)){ + List sList = this.storyService.list(new QueryWrapper() + .lambda().eq(ZtStory::getStatus, "active") + .in(ZtStory::getId,list.stream().map(o->o.getStory()).distinct().collect(Collectors.toList())) + .eq(ZtStory::getStage, StoryStageEnums.tested.getValue())); + if(!CollectionUtils.isEmpty(sList)){ + List releaseStoryList = this.releaseDetailsService.list(new QueryWrapper().lambda() + .in(ZtReleaseDetails::getObjectId, sList.stream().map(o -> o.getId()).collect(Collectors.toList()))); + List sIds = releaseStoryList.stream().map(o -> o.getObjectId().intValue()).collect(Collectors.toList()); + this.releaseDetailsService.remove(new QueryWrapper().lambda().eq(ZtReleaseDetails::getReleaseId,ztRelease.getId())); + + List saveBatch=new ArrayList<>(); + for (ZtStory s:sList) { + if(!sIds.contains(s.getId())){ + ZtReleaseDetails e=new ZtReleaseDetails(); + e.setObjectId(s.getId()); + e.setObjectType("story"); + e.setReleaseId(ztRelease.getId()); + e.setStatus("wait"); + saveBatch.add(e); + } + } + releaseDetailsService.saveBatch(saveBatch); + } + } + } + + actionService.addAction(ActionType.FB, ActionStatus.BJ, ztRelease.getId(), ztRelease.getProduct() + "", ztRelease.getProject(), null, + RiskUserThreadLocal.get().getName(),danger==null?null: danger.equals(dto.getDanger())?"":dto.getDanger(), ""); } @Override @@ -157,9 +228,12 @@ public class ZtReleaseServiceImpl extends ServiceImpl projectStoryPageList(ZtReleaseQo qo) { ZtRelease ztRelease = this.baseMapper.selectById(qo.getId()); - String project = ztRelease.getProject(); + Integer project = ztRelease.getProject(); // 项目查找所有迭代 List execList = this.executionprojectService.list(new QueryWrapper().lambda().eq(ZtExecutionproject::getProject, project)); @@ -340,7 +412,8 @@ public class ZtReleaseServiceImpl extends ServiceImpl ztReleases = this.baseMapper.selectList(new QueryWrapper().lambda().eq(ZtRelease::getProject, project)); List list = this.releaseDetailsService.list(new QueryWrapper().lambda() - .in(ZtReleaseDetails::getReleaseId, ztReleases.stream().map(o -> o.getId()).collect(Collectors.toList())).ne(ZtReleaseDetails::getStatus, "closed") + .ne(ZtReleaseDetails::getStatus, "closed") + .in(ZtReleaseDetails::getObjectId,storyIdList) .eq(ZtReleaseDetails::getObjectType, "story") ); if(!CollectionUtils.isEmpty(list)){ @@ -355,6 +428,9 @@ public class ZtReleaseServiceImpl extends ServiceImplo.getStory()).collect(Collectors.toList())); + if(CollectionUtils.isEmpty(execStorys)){ + return new PageInfo(); + } Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); List storyList = this.releaseDetailsService.storyPageList(qo); @@ -385,17 +461,23 @@ public class ZtReleaseServiceImpl extends ServiceImpl().lambda().eq(ZtReleaseDetails::getReleaseId, id) - .eq(ZtReleaseDetails::getObjectId, storyId)); - releaseDetails.setStatus("closed"); - this.releaseDetailsService.updateById(releaseDetails); + List releaseDetails = this.releaseDetailsService.list(new QueryWrapper().lambda() + .eq(ZtReleaseDetails::getReleaseId, id) + .in(ZtReleaseDetails::getObjectId, qo.getStoryList()).eq(ZtReleaseDetails::getObjectType,"story")); + for (ZtReleaseDetails d:releaseDetails) { + d.setStatus("closed"); + } + this.releaseDetailsService.saveOrUpdateBatch(releaseDetails); + actionService.addAction(ActionType.FB, ActionStatus.BJ, ztRelease.getId(), ztRelease.getProduct() + "", ztRelease.getProject(), null, + RiskUserThreadLocal.get().getName(), "", ""); } @Override @@ -403,11 +485,12 @@ public class ZtReleaseServiceImpl extends ServiceImpl storyList = qo.getStoryList(); List list = this.releaseDetailsService.list(new QueryWrapper().lambda() - .eq(ZtReleaseDetails::getObjectType, "story").ne(ZtReleaseDetails::getStatus, "closed") + .eq(ZtReleaseDetails::getObjectType, "story") + .ne(ZtReleaseDetails::getStatus, "closed") .in(ZtReleaseDetails::getObjectId, storyList) ); if(!CollectionUtils.isEmpty(list)){ - throw new BusinessException("需求已被关联需求id :"+ list.get(0).getId()); + throw new BusinessException("需求已被关联需求id :"+ list.get(0).getObjectId()); } List saveBatch=new ArrayList<>(); for (Integer story:storyList) { @@ -421,5 +504,41 @@ public class ZtReleaseServiceImpl extends ServiceImpl userMap = this.userService.userMapByIds(null); + + + + + + ZtUser ztUser = userMap.get(d.getAssignedTo()); + if(ztUser!=null){ + d.setAssignedToName(ztUser.getNickname()); + } + Integer productId = d.getProduct(); + if(productId!=null&&productId!=0){ + ZtProduct p = this.productService.getById(productId); + d.setProductName(p.getName()); + } + ZtProject ztProject = this.projectService.getById(d.getProject()); + if(ztProject!=null){ + d.setProjectName(ztProject.getName()); + } + + ztUser = userMap.get(d.getCreatedby()); + if(ztUser!=null){ + d.setCreatedby(ztUser.getNickname()); + } + return d; } } 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 c537e0a..55288f6 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java @@ -134,6 +134,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl return new PageInfo(list); } + private Map> getReviewMap(List list) { List list1 = storyreviewService.list(new QueryWrapper().lambda().in(ZtStoryreview::getStory , list.stream().map(o -> o.getId()).collect(Collectors.toList()) @@ -432,68 +433,6 @@ public class ZtStoryServiceImpl extends ServiceImpl impl -// 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()); -// } } @@ -503,13 +442,15 @@ public class ZtStoryServiceImpl extends ServiceImpl impl return; } - List execProjectList = this.executionprojectService.list(new QueryWrapper().lambda().eq(ZtExecutionproject::getProject, execList)); + List execProjectList = this.executionprojectService.list(new QueryWrapper().lambda() + .in(ZtExecutionproject::getExecution, execList)); for (Integer execId:execList) { - List fProjectList = execProjectList.stream().filter(o -> o.getExecution().intValue() == execId.intValue()).collect(Collectors.toList()); + 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() @@ -647,6 +588,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl return BeanCopyUtil.copyListProperties(closed,ZtStoryDTO::new); } + @Override public PageInfo projectStoryPageList(ZtProjectQo qo) { Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); @@ -757,7 +699,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl .list(new QueryWrapper().lambda() .in(ZtProjectstory::getStory, allList.stream().map(o->o.getStory()).collect(Collectors.toList())) - .ne(ZtProjectstory::getProject,execution) + .eq(ZtProjectstory::getProject,execution) ); List syncIds = syncList.stream().map(o -> o.getStory()).collect(Collectors.toList()); @@ -804,9 +746,10 @@ public class ZtStoryServiceImpl extends ServiceImpl impl return BeanCopyUtil.copyListProperties(ztStories, ZtStoryDTO::new); } + @Override @Transactional - public void startStory(Integer id, Integer execution) { + public void startStory(Integer id) { if(id==null||id==0){ return; } @@ -829,23 +772,27 @@ public class ZtStoryServiceImpl extends ServiceImpl impl ztStory.setStage("developing"); ztStory.setStartDate(new Date()); this.baseMapper.updateById(ztStory); - if(execution!=null&&execution!=0){ - //查 ready - //backlog - ZtKanbancell backlog = this.kanbanlaneService.getZtKanbanlane("story", "backlog", execution); - ZtKanbancell ready = this.kanbanlaneService.getZtKanbanlane("story", "ready", execution); - ZtKanbancell toCell = this.kanbanlaneService.getZtKanbanlane("story", "developing", execution); - Integer fromId = backlog.getCards().contains(id.toString()) ? backlog.getColumn() : ready.getColumn(); - - - KanbanQo qo = new KanbanQo(); - qo.setStatusType("developing"); - qo.setTabType("story"); - qo.setId(ztStory.getId()); - qo.setFromId(fromId); - qo.setToId(toCell.getColumn()); - kanbanlaneService.changeStatus(qo); + List executionId = getExecutionId(ztStory); + for (Integer execution:executionId) { + kanbanlaneService.changeStatus(execution,id,"story","developing"); } +// if(execution!=null&&execution!=0){ +// //查 ready +// //backlog +// ZtKanbancell backlog = this.kanbanlaneService.getZtKanbanlane("story", "backlog", execution); +// ZtKanbancell ready = this.kanbanlaneService.getZtKanbanlane("story", "ready", execution); +// ZtKanbancell toCell = this.kanbanlaneService.getZtKanbanlane("story", "developing", execution); +// Integer fromId = backlog.getCards().contains(id.toString()) ? backlog.getColumn() : ready.getColumn(); +// +// +// KanbanQo qo = new KanbanQo(); +// qo.setStatusType("developing"); +// qo.setTabType("story"); +// qo.setId(ztStory.getId()); +// qo.setFromId(fromId); +// qo.setToId(toCell.getColumn()); +// kanbanlaneService.changeStatus(qo); +// } actionService.addAction(ActionType.XQ, ActionStatus.KS, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, RiskUserThreadLocal.get().getName(), null, ""); @@ -853,7 +800,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl @Override @Transactional - public void finishStory(Integer id, Integer execution) { + public void finishStory(Integer id) { if(id==null||id==0){ return; @@ -873,7 +820,11 @@ public class ZtStoryServiceImpl extends ServiceImpl impl }else{ ztStory.setStage("tested"); this.baseMapper.updateById(ztStory); - kanbanlaneService.changeStatus(execution,id,"story","tested"); + 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, ""); } @@ -884,13 +835,20 @@ public class ZtStoryServiceImpl extends ServiceImpl impl .in(ZtTask::getStatus, Arrays.asList("wait", "doing", "pause")) .eq(ZtTask::getType,"devel") ); - + if(Arrays.asList("wait").contains(ztStory.getStage())){ + this.startStory(id); + return ; + } if (!CollectionUtils.isEmpty(list)) { return; } ztStory.setStage("developed"); this.baseMapper.updateById(ztStory); - kanbanlaneService.changeStatus(execution,id,"story","developed"); + List executionId = this.getExecutionId(ztStory); + for (Integer execution:executionId ) { + kanbanlaneService.changeStatus(execution,id,"story","developed"); + } + actionService.addAction(ActionType.XQ, ActionStatus.WC, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, RiskUserThreadLocal.get().getName(), null, ""); } @@ -914,9 +872,9 @@ public class ZtStoryServiceImpl extends ServiceImpl impl if("closed".equals(ztStory.getStatus())){ throw new BusinessException("当前已关闭"); } - if(!"testing".equals(ztStory.getStage())){ - throw new BusinessException("当前无法更改测试状态"); - } +// if(!"testing".equals(ztStory.getStage())){ +// throw new BusinessException("当前无法更改测试状态"); +// } List execIds = getExecutionId(ztStory); if(CollectionUtils.isEmpty(execIds)){ throw new BusinessException("当前无迭代,不可以更改"); @@ -926,6 +884,9 @@ public class ZtStoryServiceImpl extends ServiceImpl impl .in(ZtTask::getType,"test","devel") ); if (!CollectionUtils.isEmpty(list)) { + if("developed".equals(ztStory.getStage())){ + this.testingStory(story); + } return; } String oldStatus = ztStory.getStage(); @@ -1024,6 +985,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl RiskUserThreadLocal.get().getName(), null, ""); } + @Override public void testingStory(Integer story) { if(story==null||story==0){ @@ -1356,7 +1318,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl List list = this.projectstoryService.list(new QueryWrapper().lambda() .eq(ZtProjectstory::getStory, ztStory.getId()) - .ne(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue()) + .eq(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue()) ); if(CollectionUtils.isEmpty(list)){ return new ArrayList<>(); @@ -1486,6 +1448,9 @@ public class ZtStoryServiceImpl extends ServiceImpl impl @Override public ZtStoryDTO getStoryById(Integer id,Integer execution) { ZtStory ztStory = this.baseMapper.selectById(id); + if(ztStory==null){ + throw new BusinessException("未查询到数据"); + } ZtStoryDTO d=new ZtStoryDTO(); BeanUtils.copyProperties(ztStory,d); @@ -1545,6 +1510,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl return d; } + @Override public List execListByProject(ZtStoryDTO dto) { @@ -1689,7 +1655,6 @@ public class ZtStoryServiceImpl extends ServiceImpl impl - @Override public List storyListByExecution(ZtProjectQo qo) { List list = projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getProject, qo.getId()) @@ -1707,6 +1672,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } + public ProductStoryStatus getProductStatus(String status) { 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 f89497f..a781c71 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java @@ -221,6 +221,11 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme return dto; } + @Override + public List taskListPrd(Integer id) { + return this.baseMapper.taskListPrd(id); + } + @Override public PageInfo myTaskPageList(ZtProjectQo qo) { @@ -467,11 +472,21 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme } if("devel".equals(ztTask.getType())){ //处理需求 - this.storyService.startStory(ztTask.getStory(),ztTask.getExecution()); + + if("done".equals(ztTask.getStatus())){ + this.storyService.finishStory(ztTask.getStory()); + }else if("doing".equals(ztTask.getStatus())){ + this.storyService.startStory(ztTask.getStory()); + } } if("test".equals(ztTask.getType())){ //处理需求 - this.storyService.testingStory(ztTask.getStory()); + if("done".equals(ztTask.getStatus())){ + this.storyService.testedStory(ztTask.getStory()); + }else if("doing".equals(ztTask.getStatus())){ + this.storyService.testingStory(ztTask.getStory()); + } + } @@ -489,7 +504,7 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme }else if("devel".equals(type)){ //开发 - this.storyService.finishStory(ztTask.getStory(),ztTask.getExecution()); + this.storyService.finishStory(ztTask.getStory()); } } @@ -566,7 +581,7 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme }else if("devel".equals(type)){ //开发 - this.storyService.finishStory(ztTask.getStory(),ztTask.getExecution()); + this.storyService.finishStory(ztTask.getStory()); } } diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index f3c05be..9c511d7 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -22,12 +22,12 @@ spring: strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: - url: jdbc:mysql://192.168.1.161:3306/zentao?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true - username: devgps - password: dev@2021GPS -# url: jdbc:mysql://192.168.3.200:3306/zentao_dev?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true -# username: root -# password: PX4fTAAsJ#T!1 +# url: jdbc:mysql://192.168.1.161:3306/zentao?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true +# username: devgps +# password: dev@2021GPS + url: jdbc:mysql://192.168.3.200:3306/zentao_dev?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true + username: root + password: PX4fTAAsJ#T!1 driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置 slave: diff --git a/src/main/resources/mapper/ZtStoryMapper.xml b/src/main/resources/mapper/ZtStoryMapper.xml index f7d32b6..89525bd 100644 --- a/src/main/resources/mapper/ZtStoryMapper.xml +++ b/src/main/resources/mapper/ZtStoryMapper.xml @@ -184,7 +184,7 @@ and ps.project =#{qo.project} - and ps.execution =#{qo.execution} + and ps.project =#{qo.execution} and s.module =#{qo.module} diff --git a/src/main/resources/mapper/ZtTaskMapper.xml b/src/main/resources/mapper/ZtTaskMapper.xml index cce7ddd..160322b 100644 --- a/src/main/resources/mapper/ZtTaskMapper.xml +++ b/src/main/resources/mapper/ZtTaskMapper.xml @@ -206,6 +206,11 @@ + +