This commit is contained in:
HopeLi 2025-05-15 16:17:05 +08:00
parent 82a0f0d341
commit e68bb01cfd
5 changed files with 277 additions and 160 deletions

View File

@ -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;
}

View File

@ -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<PipPipeline> {
List<PipelineFindResp> findPipelineList(@Valid PipelineQueryReq pipelineQueryReq);
void deletePipeline(String pipelineId);
void updatePipeline(@Valid PipelineUpdateReq pipeline);
Page<PipelineFindResp> findPipelinePage(@Valid PipelineQueryReq query);
void pipelineClone(String pipelineId, String pipelineName);
}

View File

@ -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<PipelineDao, PipPipeline> i
pipResourceDao.deleteByIds(list);
}
}
@Override
public void updatePipeline(PipelineUpdateReq pipeline) {
PipPipeline pipPipeline = new PipPipeline();
BeanUtils.copyProperties(pipeline,pipPipeline);
pipelineDao.updateById(pipPipeline);
}
@Override
public Page<PipelineFindResp> findPipelinePage(PipelineQueryReq query) {
Page<PipelineFindResp> respPage = new Page<>();
QueryWrapper<PipPipeline> 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<PipPipeline> page = new Page<>(query.getPageNo(), query.getPageSize());
Page<PipPipeline> pipPipelinePage = pipelineDao.selectPage(page, wrapper);
if (ObjectUtils.isEmpty(pipPipelinePage)){
return new Page<>();
}
List<PipelineFindResp> 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<PipStage> pipStageParentList = stageService.getPipStageList(pipStage);
if (!CollectionUtils.isEmpty(pipStageParentList)){
pipStageParentList.forEach(o->{
//根据阶段id查询下游并行节点
PipStage childStage = new PipStage();
childStage.setPipelineId(pipelineId);
childStage.setParentId(o.getStageId());
List<PipStage> 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<PipTask> 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);
}
});
}
});
}
}
}

View File

@ -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<PipStageDao, PipStage> implements StageService {
@Resource

View File

@ -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<List<PipelineResp>> findOnePipeline(@NotNull String pipelineId){
// Pipeline pipeline = pipelineService.findOnePipeline(pipelineId);
List<PipelineResp> 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<PipelineResp> 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<Void> updatePipelineRootUser(@RequestBody @NotNull @Valid DmRolePatch dmRolePatch){
//
// pipelineService.updatePipelineRootUser(dmRolePatch);
//
// return Result.ok();
// }
@PostMapping(path="/updatePipeline")
public CommonResult<Void> updatePipeline(@RequestBody @NotNull @Valid PipelineReq pipeline){
public CommonResult<Void> updatePipeline(@RequestBody @NotNull @Valid PipelineUpdateReq pipeline){
// pipelineService.updatePipeline(pipeline);
pipelineService.updatePipeline(pipeline);
return CommonResult.success();
}
@PostMapping(path="/findUserPipelinePage")
public CommonResult<Page<PipelineResp>> findUserPipelinePage(@RequestBody @NotNull @Valid PipelineQueryReq query){
@PostMapping(path="/findPipelinePage")
public CommonResult<Page<PipelineFindResp>> findPipelinePage(@RequestBody @NotNull @Valid PipelineQueryReq query){
Page<PipelineFindResp> pipelineRespPage = pipelineService.findPipelinePage(query);
// Pagination<Pipeline> userPipeline = pipelineService.findUserPipelinePage(query);
Page<PipelineResp> pipelineRespPage = new Page<>();
List<PipelineResp> 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<List<PipelineResp>> findAllUserPipeline(@RequestBody @NotNull @Valid PipelineQueryReq query){
// List<Pipeline> userPipeline = pipelineService.findUserPipeline(query);
List<PipelineResp> 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<List<User>> findPipelineUser(@NotNull String pipelineId){
// List<User> dmUser = pipelineService.findPipelineUser(pipelineId);
List<User> 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<Void> pipelineClone(@NotNull String pipelineId,@NotNull String pipelineName){
// pipelineService.pipelineClone(pipelineId,pipelineName);
pipelineService.pipelineClone(pipelineId,pipelineName);
return CommonResult.success();
}
@PostMapping(path="/findPipelineCloneName")
public CommonResult<String> 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<String> findRecentlyPipeline(@NotNull Integer number,@NotNull String pipelineId){
//
// List<Pipeline> 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<Object> importPipelineYaml(HttpServletRequest request, HttpServletResponse response) {
// try {
// Map<String, String[]> 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,"下载失败"));
// }
// }
}