From e68bb01cfd0d26d3032d67a9fab003173ca31ff7 Mon Sep 17 00:00:00 2001 From: HopeLi <1278288511@qq.com> Date: Thu, 15 May 2025 16:17:05 +0800 Subject: [PATCH] 0515 ljc --- .../req/pipeline/PipelineUpdateReq.java | 149 ++++++++++++++++ .../service/pipeline/PipelineService.java | 8 + .../pipeline/impl/PipelineServiceImpl.java | 110 ++++++++++++ .../service/stage/impl/StageServiceImpl.java | 11 +- .../server/controller/PipelineController.java | 159 +----------------- 5 files changed, 277 insertions(+), 160 deletions(-) create mode 100644 modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/req/pipeline/PipelineUpdateReq.java diff --git a/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/req/pipeline/PipelineUpdateReq.java b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/req/pipeline/PipelineUpdateReq.java new file mode 100644 index 0000000..0ea77ce --- /dev/null +++ b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/req/pipeline/PipelineUpdateReq.java @@ -0,0 +1,149 @@ +package cd.casic.ci.common.pipeline.req.pipeline; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @ClassName PipelineReq + * @Author hopeli + * @Date 2025/5/10 10:53 + * @Version 1.0 + */ +@Data +public class PipelineUpdateReq { + private String id; + + private String name; + + private String createUserId; + + private String updateUserId; + + private String envId; + + private String groupId; + + private LocalDateTime createTime; + + private LocalDateTime updateTime; + + /** + * @pi.name:type + * @pi.dataType:Integer + * @pi.desc:流水线类型 1.多任务 2.多阶段 + * @pi.value: 1 + */ + private int type; + + /** + * @pi.name:state + * @pi.dataType:Integer + * @pi.desc:运行状态 1.未运行 2.运行中 + * @pi.value:1 + */ + private int state; + + /** + * @pi.name:power + * @pi.dataType:Integer + * @pi.desc:项目作用域 1.全局 2.项目 + * @pi.value:1 + */ + private int power; + + /** + * @pi.name:color + * @pi.dataType:Integer + * @pi.desc:颜色 1~5随机生成 + * @pi.value:2 + */ + private int color; + + /** + * @pi.name:template + * @pi.dataType:string + * @pi.desc:流水线模板 + * @pi.value:template + */ + private String templateId; + + private String targetId; + + private String targetType; + + private String pipelineTag; + + private String resourceId; + + private String remake; + + /** + * @pi.name:collect + * @pi.dataType:Integer + * @pi.desc:收藏 0.未收藏 1.收藏 + * @pi.value:2 + */ + private int collect; + + private String executeUserId; + + private LocalDateTime executeTime; + + private String pipelineTriggerMode; + + private String executeStatus; + + +// // 以下为统计信息 +// +// +// /** +// * @pi.model:execUser +// * @pi.desc:用户(执行人) +// */ +// private User execUser; +// +// /** +// * @pi.name:number +// * @pi.dataType:Integer +// * @pi.desc:执行次数 +// * @pi.value:2 +// */ +// private Integer number; +// +// /** +// * @pi.name:instanceId +// * @pi.dataType:string +// * @pi.desc:实例id +// * @pi.value:instanceId +// */ +// private String instanceId; +// +// +// /** +// * @pi.name:buildStatus +// * @pi.dataType:string +// * @pi.desc:最近构建状态 +// * @pi.value:buildStatus +// */ +// private String buildStatus; +// +// +// /** +// * @pi.name:lastBuildTime +// * @pi.dataType:string +// * @pi.desc:最近构建时间 +// * @pi.value:lastBuildTime +// */ +// private String lastBuildTime; +// +// +// /** +// * @pi.name:isExec +// * @pi.dataType:boolean +// * @pi.desc:是否可以执行 +// * @pi.value:true +// */ +// private Boolean isExec; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java index 985d350..b8dd8d7 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java @@ -2,8 +2,10 @@ package cd.casic.ci.process.process.service.pipeline; import cd.casic.ci.common.pipeline.req.pipeline.PipelineCreateReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineQueryReq; +import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq; import cd.casic.ci.common.pipeline.resp.pipeline.PipelineFindResp; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import jakarta.validation.Valid; @@ -22,4 +24,10 @@ public interface PipelineService extends IService { List findPipelineList(@Valid PipelineQueryReq pipelineQueryReq); void deletePipeline(String pipelineId); + + void updatePipeline(@Valid PipelineUpdateReq pipeline); + + Page findPipelinePage(@Valid PipelineQueryReq query); + + void pipelineClone(String pipelineId, String pipelineName); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java index b38fa64..1f3e3b2 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java @@ -2,6 +2,7 @@ package cd.casic.ci.process.process.service.pipeline.impl; import cd.casic.ci.common.pipeline.req.pipeline.PipelineCreateReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineQueryReq; +import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq; import cd.casic.ci.common.pipeline.resp.pipeline.PipelineFindResp; import cd.casic.ci.common.pipeline.resp.stage.StageResp; import cd.casic.ci.process.process.converter.PipelineConverter; @@ -22,6 +23,7 @@ import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.util.object.BeanUtils; import cd.casic.framework.commons.util.util.WebFrameworkUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -307,4 +309,112 @@ public class PipelineServiceImpl extends ServiceImpl i pipResourceDao.deleteByIds(list); } } + + @Override + public void updatePipeline(PipelineUpdateReq pipeline) { + PipPipeline pipPipeline = new PipPipeline(); + BeanUtils.copyProperties(pipeline,pipPipeline); + pipelineDao.updateById(pipPipeline); + } + + @Override + public Page findPipelinePage(PipelineQueryReq query) { + Page respPage = new Page<>(); + + QueryWrapper wrapper = new QueryWrapper<>(); + if (!ObjectUtils.isEmpty(query.getId())){ + wrapper.eq("id",query.getId()); + } + if (!ObjectUtils.isEmpty(query.getIdList())){ + wrapper.in("id",query.getId()); + } + if (!ObjectUtils.isEmpty(query.getName())){ + wrapper.like("name",query.getName()); + } + if (!ObjectUtils.isEmpty(query.getCreateUserId())){ + wrapper.eq("create_user_id",query.getCreateUserId()); + } + if (!ObjectUtils.isEmpty(query.getCollect())){ + wrapper.eq("collect",query.getCollect()); + } + if (!ObjectUtils.isEmpty(query.getGroupId())){ + wrapper.eq("group_id",query.getGroupId()); + } + Page page = new Page<>(query.getPageNo(), query.getPageSize()); + Page pipPipelinePage = pipelineDao.selectPage(page, wrapper); + + if (ObjectUtils.isEmpty(pipPipelinePage)){ + return new Page<>(); + } + + List respList = PipelineConverter.INSTANCE.toRespList(pipPipelinePage.getRecords()); + + //对流水线进行流水线信息赋值 + respList.forEach(this::setStageAndTask); + respPage.setRecords(respList); + return respPage; + } + + @Override + public void pipelineClone(String pipelineId, String pipelineName) { + PipPipeline pipeline = pipelineDao.selectById(pipelineId); + if (ObjectUtils.isEmpty(pipeline)){ + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"数据错误,请联系管理员"); + } + + //复制pipeline + pipeline.setId(null); + pipeline.setName(pipelineName); + this.save(pipeline); + + //复制stage + //复制阶段 + PipStage pipStage = new PipStage(); + pipStage.setPipelineId(pipelineId); + pipStage.setParentId("-1"); + List pipStageParentList = stageService.getPipStageList(pipStage); + + if (!CollectionUtils.isEmpty(pipStageParentList)){ + pipStageParentList.forEach(o->{ + + //根据阶段id查询下游并行节点 + PipStage childStage = new PipStage(); + childStage.setPipelineId(pipelineId); + childStage.setParentId(o.getStageId()); + List pipStageChildList = stageService.getPipStageList(pipStage); + + //对查询结束的stage进行复制 + o.setStageId(null); + o.setPipelineId(pipeline.getId()); + stageService.save(o); + + if (!CollectionUtils.isEmpty(pipStageChildList)){ + pipStageChildList.forEach(j->{ + + //根据stageId查询串行节点 + PipTask pipTask = new PipTask(); + pipTask.setPipelineId(pipelineId); + pipTask.setStageId(j.getStageId()); + List taskList = taskService.getTask(pipTask); + + //对查询结束的并行节点进行复制 + j.setStageId(null); + j.setParentId(o.getStageId()); + j.setPipelineId(pipeline.getId()); + stageService.save(j); + + if (!CollectionUtils.isEmpty(taskList)){ + taskList.forEach(k->{ + k.setTaskId(null); + k.setStageId(j.getStageId()); + k.setPipelineId(pipeline.getId()); + }); + taskService.saveBatch(taskList); + } + }); + } + + }); + } + } } 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 30ce829..7379a67 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 @@ -2,10 +2,9 @@ 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; - import cd.casic.ci.process.process.dal.pipeline.PipStageDao; import cd.casic.ci.process.process.dataObject.stage.PipStage; import cd.casic.ci.process.process.dataObject.task.PipTask; @@ -16,7 +15,6 @@ import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.util.object.BeanUtils; import cd.casic.framework.commons.util.util.WebFrameworkUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; @@ -27,14 +25,9 @@ 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; - @Service public class StageServiceImpl extends ServiceImpl implements StageService { @Resource diff --git a/ops-server/src/main/java/cd/casic/server/controller/PipelineController.java b/ops-server/src/main/java/cd/casic/server/controller/PipelineController.java index 450a850..362c07f 100644 --- a/ops-server/src/main/java/cd/casic/server/controller/PipelineController.java +++ b/ops-server/src/main/java/cd/casic/server/controller/PipelineController.java @@ -2,11 +2,9 @@ package cd.casic.server.controller; import cd.casic.ci.common.pipeline.req.pipeline.PipelineCreateReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineQueryReq; -import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq; +import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq; import cd.casic.ci.common.pipeline.resp.pipeline.PipelineFindResp; -import cd.casic.ci.common.pipeline.resp.pipeline.PipelineResp; import cd.casic.ci.process.process.service.pipeline.PipelineService; -import cd.casic.framework.commons.dataobject.User; import cd.casic.framework.commons.pojo.CommonResult; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.annotation.Resource; @@ -18,7 +16,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; import java.util.List; /** @@ -62,172 +59,32 @@ public class PipelineController { return CommonResult.success(); } - @PostMapping(path="/findOnePipeline") - public CommonResult> findOnePipeline(@NotNull String pipelineId){ - -// Pipeline pipeline = pipelineService.findOnePipeline(pipelineId); - List pipelineRespList = new ArrayList<>(0); - PipelineResp pipeline = new PipelineResp(); - pipeline.setId("1"); - pipeline.setName("test数据交互测试"); - pipelineRespList.add(pipeline); - - return CommonResult.success(pipelineRespList); - } - - @PostMapping(path="/findPipelineNoQuery") - public CommonResult findPipelineNoQuery(@NotNull String pipelineId){ - -// Pipeline pipeline = pipelineService.findPipelineNoQuery(pipelineId); - - PipelineResp pipeline = new PipelineResp(); - pipeline.setId("1"); - pipeline.setName("test数据交互测试"); - - return CommonResult.success(pipeline); - } - -// @RequestMapping(path="/updatePipelineRootUser",method = RequestMethod.POST) -// // @ApiMethod(name = "updatePipelineRootUser",desc = "更新流水线负责人") -// // @ApiParam(name = "dmRolePatch",desc = "流水线负责人信息",required = true) -// public Result updatePipelineRootUser(@RequestBody @NotNull @Valid DmRolePatch dmRolePatch){ -// -// pipelineService.updatePipelineRootUser(dmRolePatch); -// -// return Result.ok(); -// } - @PostMapping(path="/updatePipeline") - public CommonResult updatePipeline(@RequestBody @NotNull @Valid PipelineReq pipeline){ + public CommonResult updatePipeline(@RequestBody @NotNull @Valid PipelineUpdateReq pipeline){ -// pipelineService.updatePipeline(pipeline); + pipelineService.updatePipeline(pipeline); return CommonResult.success(); } - @PostMapping(path="/findUserPipelinePage") - public CommonResult> findUserPipelinePage(@RequestBody @NotNull @Valid PipelineQueryReq query){ + @PostMapping(path="/findPipelinePage") + public CommonResult> findPipelinePage(@RequestBody @NotNull @Valid PipelineQueryReq query){ + + Page pipelineRespPage = pipelineService.findPipelinePage(query); -// Pagination userPipeline = pipelineService.findUserPipelinePage(query); - Page pipelineRespPage = new Page<>(); - List pipelineRespList = new ArrayList<>(0); - PipelineResp pipeline = new PipelineResp(); - pipeline.setId("1"); - pipeline.setName("test数据交互测试"); - pipelineRespList.add(pipeline); - pipelineRespPage.setRecords(pipelineRespList); return CommonResult.success(pipelineRespPage); } - @PostMapping(path="/findUserPipeline") - public CommonResult> findAllUserPipeline(@RequestBody @NotNull @Valid PipelineQueryReq query){ -// List userPipeline = pipelineService.findUserPipeline(query); - - List pipelineRespList = new ArrayList<>(0); - PipelineResp pipeline = new PipelineResp(); - pipeline.setId("1"); - pipeline.setName("test数据交互测试"); - pipelineRespList.add(pipeline); - return CommonResult.success(pipelineRespList); - } - - - @PostMapping(path="/findPipelineUser") - public CommonResult> findPipelineUser(@NotNull String pipelineId){ - -// List dmUser = pipelineService.findPipelineUser(pipelineId); - List userList = new ArrayList<>(0); - User user = new User(); - user.setId("1"); - user.setName("test数据交互测试"); - userList.add(user); - return CommonResult.success(userList); - } - - - @PostMapping(path="/pipelineClone") public CommonResult pipelineClone(@NotNull String pipelineId,@NotNull String pipelineName){ -// pipelineService.pipelineClone(pipelineId,pipelineName); + pipelineService.pipelineClone(pipelineId,pipelineName); return CommonResult.success(); } - - @PostMapping(path="/findPipelineCloneName") - public CommonResult findPipelineCloneName(@NotNull String pipelineId){ - -// String name = pipelineService.findPipelineCloneName(pipelineId); - String name = "test"; - - return CommonResult.success(name); - } - - -// /** -// * @pi.name:获取最近打开的流水线 -// * @pi.url:/findRecentlyPipeline -// * @pi.methodType:post -// * @pi.request-type: formdata -// * @pi.param: name=number;dataType=Integer;value=查询数量; -// * @pi.param: name=pipelineId;dataType=String;value=流水线id; -// */ -// @RequestMapping(path="/findRecentlyPipeline",method = RequestMethod.POST) -// public Result findRecentlyPipeline(@NotNull Integer number,@NotNull String pipelineId){ -// -// List pipelineList = pipelineService.findRecentlyPipeline(number,pipelineId); -// -// return Result.ok(pipelineList); -// } - - -// /** -// * @pi.name:流水线导出为Yaml格式 -// * @pi.url:/importPipelineYaml -// * @pi.methodType:post -// * @pi.request-type: formdata -// * @pi.param: name=request;dataType=HttpServletResponse;value=请求; -// * @pi.param: name=response;dataType=HttpServletRequest;value=请求体; -// */ -// @RequestMapping(path="/importPipelineYaml",method = RequestMethod.POST) -// public ResponseEntity importPipelineYaml(HttpServletRequest request, HttpServletResponse response) { -// try { -// Map parameterMap = request.getParameterMap(); -// -// String pipelineId = Arrays.toString(parameterMap.get("pipelineId")).replace("[","").replace("]",""); -// -// String yamlString = yamlService.importPipelineYaml(pipelineId); -// -// Pipeline pipeline = pipelineService.findPipelineById(pipelineId); -// -// String tempFile = PipelineFileUtil.createTempFile(yamlString, ".yaml"); -// File file = new File(tempFile); -// BufferedInputStream in = new BufferedInputStream(new FileInputStream(file)); -// -// ServletOutputStream outputStream = response.getOutputStream(); -// response.setHeader("Content-Disposition", "attachment; filename="+pipeline.getName()); -// response.setContentLength((int) file.length()); -// -// int buf_size = 1024; -// byte[] buffer = new byte[buf_size]; -// int len = 0; -// while (-1 != (len = in.read(buffer, 0, buf_size))) { -// outputStream.write(buffer,0,len); -// } -// in.close(); -// outputStream.close(); -// -// file.delete(); -// -// return ResponseEntity.ok().build(); -// } catch (Exception e) { -// e.printStackTrace(); -// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Result.error(1000,"下载失败")); -// } -// } }