diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java index 1f4e4e7..a308168 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java @@ -3,6 +3,7 @@ package cd.casic.ci.process.process.service.stage.impl; import cd.casic.ci.common.pipeline.req.stage.StageCreateReq; import cd.casic.ci.common.pipeline.req.stage.StageReq; +import cd.casic.ci.common.pipeline.req.stage.StageUpdateReq; import cd.casic.ci.common.pipeline.req.task.TaskCreateReq; import cd.casic.ci.common.pipeline.resp.stage.StageResp; @@ -27,10 +28,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; import static cd.casic.ci.process.constant.PipelineFinalConstant.TASK_TYPE_CODE; @@ -84,7 +82,6 @@ public class StageServiceImpl extends ServiceImpl impleme updateBatchById(otherStageList); } save(firstStage); -// firstStage } else { PipStage stageQuery = new PipStage(); stageQuery.setStageId(firstStageId); @@ -306,8 +303,52 @@ public class StageServiceImpl extends ServiceImpl impleme } @Override + @Transactional public void copyStage(String stageId) { // 查询当前stage(阶段下所有) + PipStage firstStage = getById(stageId); + Long loginUserId = WebFrameworkUtils.getLoginUserId(); + List allMainStage = findAllMainStage(firstStage.getPipelineId()); + List updateStageList = new ArrayList<>(allMainStage.size()); + for (PipStage stage : allMainStage) { + if (stage.getStageSort()>firstStage.getStageSort()) { + stage.setStageSort(stage.getStageSort()+1); + updateStageList.add(stage); + } + } + // 保存复制后的阶段,除了id和sort其他都一样 + firstStage.setStageId(null); + firstStage.setStageSort(firstStage.getStageSort()+1); + save(firstStage); + updateBatchById(updateStageList); + // 查询阶段下所有分支 + List secondStageList = findSecondStage(stageId); + if (!CollectionUtils.isEmpty(secondStageList)) { + List stageIdList = secondStageList.stream().map(PipStage::getStageId).toList(); + List taskList = taskService.listByIds(stageIdList); + Map> stageIdMap = taskList.stream().collect(Collectors.groupingBy(PipTask::getStageId)); + for (PipStage secondStage : secondStageList) { + secondStage.setCreateUserId(loginUserId); + secondStage.setCreateTime(LocalDateTime.now()); + secondStage.setUpdateTime(LocalDateTime.now()); + secondStage.setUpdateUserId(loginUserId); + secondStage.setParentId(firstStage.getStageId()); + String secondStageId = secondStage.getStageId(); + List childTask = stageIdMap.get(secondStageId); + secondStage.setStageId(null); + save(secondStage); + for (PipTask pipTask : childTask) { + pipTask.setStageId(secondStage.getStageId()); + pipTask.setTaskId(null); + pipTask.setCreateUserId(loginUserId); + pipTask.setCreateTime(LocalDateTime.now()); + pipTask.setUpdateTime(LocalDateTime.now()); + pipTask.setUpdateUserId(loginUserId); + } + taskService.saveBatch(childTask); + } + } + } public List findOtherStageNoTask(String stagesId){ diff --git a/ops-server/src/main/java/cd/casic/server/controller/StageController.java b/ops-server/src/main/java/cd/casic/server/controller/StageController.java index 202e7d4..c25a649 100644 --- a/ops-server/src/main/java/cd/casic/server/controller/StageController.java +++ b/ops-server/src/main/java/cd/casic/server/controller/StageController.java @@ -90,7 +90,8 @@ public class StageController { * */ @PostMapping(path="/copyStage") public CommonResult copyStage(@NotEmpty String stageId){ - return null; + stageService.copyStage(stageId); + return CommonResult.success(); } }