This commit is contained in:
even 2025-06-17 16:11:13 +08:00
commit 0cdbcbf4b0
9 changed files with 647 additions and 4 deletions

View File

@ -124,9 +124,7 @@ public class TargetController {
@PostMapping(path="/fileUpload")
public CommonResult<String> fileUpload(@RequestParam("file") MultipartFile file) throws SftpUploadUtil.SftpUploadException {
TargetUploadReq req = new TargetUploadReq();
public CommonResult<String> fileUpload(@RequestBody TargetUploadReq req, @RequestParam("file") MultipartFile file) throws SftpUploadUtil.SftpUploadException {
req.setFile(file);
String filePath = targetManagerService.fileUpload(req);

View File

@ -0,0 +1,87 @@
package cd.casic.ci.api;
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
import cd.casic.ci.process.dto.req.resource.ResourceReq;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp;
import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
import cd.casic.ci.process.process.service.taskResource.TaskResourceManagerService;
import cd.casic.framework.commons.pojo.CommonResult;
import cd.casic.framework.commons.pojo.PageResult;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.jetbrains.annotations.NotNull;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @ClassName ResourceController
* @Author hopeli
* @Date 2025/5/10 10:57
* @Version 1.0
*/
@RestController
@RequestMapping("/taskResource")
public class TaskResourceManagerController {
@Resource
private TaskResourceManagerService resourceManagerService;
@PostMapping(path="/createResource")
public CommonResult<String> createResource(@RequestBody @Valid ResourceReq resourceReq){
String resourceId = resourceManagerService.createResource(resourceReq);
return CommonResult.success(resourceId);
}
@PostMapping(path="/deleteResource")
public CommonResult<Void> deleteResource(@RequestBody @Valid BaseIdReq req){
resourceManagerService.deleteResource(req.getId());
return CommonResult.success();
}
@PostMapping(path="/findResourceList")
public CommonResult<List<ResourceFindResp>> findResourceList(@RequestBody @Valid ResourceQueryReq req){
List<ResourceFindResp> ResourceFindRespList = resourceManagerService.findResourceList(req);
return CommonResult.success(ResourceFindRespList);
}
@PostMapping(path="/updateResource")
public CommonResult<Void> updateResource(@RequestBody @NotNull @Valid ResourceReq resourceReq){
resourceManagerService.updateResource(resourceReq);
return CommonResult.success();
}
@PostMapping(path="/findResourcePage")
public CommonResult<PageResult<ResourceFindResp>> findResourcePage(@RequestBody @NotNull @Valid ResourceQueryReq req){
PageResult<ResourceFindResp> respPage = resourceManagerService.findResourcePage(req);
return CommonResult.success(respPage);
}
@PostMapping(path="/findResourceById")
public CommonResult<ResourceFindResp> findResourceById(@RequestBody @Valid BaseIdReq req){
ResourceFindResp resp = resourceManagerService.findResourceById(req.getId());
return CommonResult.success(resp);
}
}

View File

@ -21,7 +21,7 @@ public class ReportAssetTaskReq {
//检测任务ID
private Integer scaTaskId;
//报告类型 5-excel 1-word 2-pdf 3-html 4-json默认为5-excel
//报告类型 5-excel 1-word 2-pdf 3-html 4-json默认为2-pdf
private Integer type = 2;
//报告名称如果不填则会自动生成

View File

@ -0,0 +1,47 @@
package cd.casic.ci.process.dto.req.taskResource;
import cd.casic.framework.commons.pojo.PageParam;
import lombok.Data;
import java.util.List;
@Data
public class TaskResourceQueryReq extends PageParam {
/**
* 主键id
*/
private String id;
private List<String> idList;
/**
* docker镜像服务器信息id
*/
private String dockerId;
/**
* k8s服务器信息id
*/
private String k8sId;
/**
* 机器服务器信息id
*/
private String machineId;
/**
* 弹性云服务器信息id
*/
private String cloudId;
/**
* 资源名称
*/
private String resourceName;
/**
* 创建人用户id
*/
private String creator;
}

View File

@ -0,0 +1,44 @@
package cd.casic.ci.process.dto.req.taskResource;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
import lombok.Data;
@Data
public class TaskResourceReq {
private String id;
/**
* docker镜像服务器信息id
*/
private String dockerId;
/**
* k8s服务器信息id
*/
private String k8sId;
/**
* 机器服务器信息id
*/
private String machineId;
/**
* 弹性云服务器信息id
*/
private String cloudId;
/**
* 资源名称
*/
private String resourceName;
private PipResourceMachine resourceMachine;
private DockerEndpointDo dockerEndpoint;
private PipResourceK8S pipResourceK8S;
private PipResourceCloud pipResourceCloud;
}

View File

@ -0,0 +1,63 @@
package cd.casic.ci.process.dto.resp.taskResource;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
import lombok.Data;
@Data
public class TaskResourceFindResp {
/**
* 主键id
*/
private String id;
/**
* docker镜像服务器信息id
*/
private String dockerId;
/**
* k8s服务器信息id
*/
private String k8sId;
/**
* 机器服务器信息id
*/
private String machineId;
/**
* 弹性云服务器信息id
*/
private String cloudId;
/**
* 资源名称
*/
private String resourceName;
//创建人id
private String creator;
//创建人姓名
private String creatorName;
//最后修改人id
private String updater;
//最后修改人姓名
private String updaterName;
private String remark;
private PipResourceMachine resourceMachine;
private DockerEndpointDo dockerEndpoint;
private PipResourceK8S pipResourceK8S;
private PipResourceCloud pipResourceCloud;
}

View File

@ -0,0 +1,60 @@
package cd.casic.ci.process.dto.resp.taskResource;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.dataObject.resource.PipelineDockerEndpoint;
import lombok.Data;
@Data
public class TaskResourceResp {
/**
* 主键id
*/
private String id;
/**
* docker镜像服务器信息id
*/
private String dockerId;
/**
* k8s服务器信息id
*/
private String k8sId;
/**
* 机器服务器信息id
*/
private String machineId;
/**
* 弹性云服务器信息id
*/
private String cloudId;
/**
* 资源名称
*/
private String resourceName;
//创建人id
private String creator;
//创建人姓名
private String creatorName;
//最后修改人id
private String updater;
//最后修改人姓名
private String updaterName;
private String remark;
private PipResourceMachine resourceMachine;
private PipelineDockerEndpoint dockerEndpoint;
private PipResourceK8S pipResourceK8S;
}

View File

@ -0,0 +1,32 @@
package cd.casic.ci.process.process.service.taskResource;
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
import cd.casic.ci.process.dto.req.resource.ResourceReq;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp;
import cd.casic.ci.process.process.dataObject.resource.PipResourceManager;
import cd.casic.framework.commons.pojo.PageResult;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.validation.Valid;
import java.util.List;
/**
* @author HopeLi
* @version v1.0
* @ClassName ResourceService
* @Date: 2025/5/13 10:27
* @Description:
*/
public interface TaskResourceManagerService extends IService<PipResourceManager> {
String createResource(@Valid ResourceReq resourceReq);
void deleteResource(String id);
void updateResource(@Valid ResourceReq resourceReq);
ResourceFindResp findResourceById(String id);
List<ResourceFindResp> findResourceList(@Valid ResourceQueryReq req);
PageResult<ResourceFindResp> findResourcePage(@Valid ResourceQueryReq req);
}

View File

@ -0,0 +1,312 @@
package cd.casic.ci.process.process.service.taskResource.impl;
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
import cd.casic.ci.process.dto.req.resource.ResourceReq;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp;
import cd.casic.ci.process.process.converter.ResourceConverter;
import cd.casic.ci.process.process.dao.pipeline.PipResourceCloudDao;
import cd.casic.ci.process.process.dao.pipeline.PipResourceK8SDao;
import cd.casic.ci.process.process.dao.pipeline.PipResourceMachineDao;
import cd.casic.ci.process.process.dao.pipeline.PipResourceManagerDao;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.dataObject.resource.PipResourceManager;
import cd.casic.ci.process.process.service.resource.ResourceManagerService;
import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import cd.casic.framework.commons.pojo.PageResult;
import cd.casic.framework.security.dal.user.AdminUserDO;
import cd.casic.framework.tenant.core.service.AdminUserServiceImpl;
import cd.casic.module.execute.docker.dao.DockerEndpointDao;
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
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;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @author HopeLi
* @version v1.0
* @ClassName ResourceServiceImpl
* @Date: 2025/5/13 10:31
* @Description:
*/
@Service
@Slf4j
public class TaskResourceManagerServiceImpl extends ServiceImpl<PipResourceManagerDao, PipResourceManager> implements ResourceManagerService {
@Resource
private PipResourceManagerDao resourceManagerDao;
@Resource
private PipResourceMachineDao machineDao;
@Resource
private DockerEndpointDao dockerEndpointDao;
@Resource
private PipResourceK8SDao k8SDao;
@Resource
private PipResourceCloudDao cloudDao;
@Resource
private AdminUserServiceImpl adminUserService;
@Override
@Transactional(rollbackFor = Exception.class)
public String createResource(ResourceReq resourceReq) {
PipResourceManager pipResourceManager = ResourceConverter.INSTANCE.toBean(resourceReq);
//如果资源类型不属于弹性云则新增如果属于弹性云则走申请流程
if (!ObjectUtils.isEmpty(resourceReq.getResourceMachine())){
PipResourceMachine resourceMachine = resourceReq.getResourceMachine();
machineDao.insert(resourceMachine);
pipResourceManager.setMachineId(resourceMachine.getId());
}
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceK8S())) {
PipResourceK8S pipResourceK8S = resourceReq.getPipResourceK8S();
k8SDao.insert(pipResourceK8S);
pipResourceManager.setK8sId(pipResourceK8S.getId());
}
if (!ObjectUtils.isEmpty(resourceReq.getDockerEndpoint())) {
DockerEndpointDo dockerEndpoint = resourceReq.getDockerEndpoint();
dockerEndpointDao.insert(dockerEndpoint);
pipResourceManager.setDockerId(dockerEndpoint.getId());
}
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceCloud())) {
PipResourceCloud pipResourceCloud = resourceReq.getPipResourceCloud();
cloudDao.insert(pipResourceCloud);
pipResourceManager.setCloudId(pipResourceCloud.getId());
}
resourceManagerDao.insert(pipResourceManager);
return pipResourceManager.getId();
}
@Override
public void deleteResource(String id) {
PipResourceManager pipResourceManager = resourceManagerDao.selectById(id);
if (!StringUtils.isEmpty(pipResourceManager.getMachineId())){
machineDao.deleteById(pipResourceManager.getMachineId());
}
if (!StringUtils.isEmpty(pipResourceManager.getK8sId())){
k8SDao.deleteById(pipResourceManager.getK8sId());
}
if (!StringUtils.isEmpty(pipResourceManager.getDockerId())){
dockerEndpointDao.deleteById(pipResourceManager.getDockerId());
}
if (!StringUtils.isEmpty(pipResourceManager.getCloudId())){
cloudDao.deleteById(pipResourceManager.getCloudId());
}
resourceManagerDao.deleteById(id);
}
@Override
public void updateResource(ResourceReq resourceReq) {
PipResourceManager temp = resourceManagerDao.selectById(resourceReq.getId());
temp.setResourceName(resourceReq.getResourceName());
//先删除旧的资源信息
if (!StringUtils.isEmpty(temp.getMachineId())){
machineDao.deleteById(temp.getMachineId());
}
if (!StringUtils.isEmpty(temp.getK8sId())){
k8SDao.deleteById(temp.getK8sId());
}
if (!StringUtils.isEmpty(temp.getDockerId())){
dockerEndpointDao.deleteById(temp.getDockerId());
}
if (!StringUtils.isEmpty(temp.getCloudId())){
cloudDao.deleteById(temp.getCloudId());
}
//根据新资源信息新增
if (!ObjectUtils.isEmpty(resourceReq.getResourceMachine())){
PipResourceMachine resourceMachine = resourceReq.getResourceMachine();
machineDao.insert(resourceMachine);
temp.setMachineId(resourceMachine.getId());
}
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceK8S())) {
PipResourceK8S pipResourceK8S = resourceReq.getPipResourceK8S();
k8SDao.insert(pipResourceK8S);
temp.setK8sId(pipResourceK8S.getId());
}
if (!ObjectUtils.isEmpty(resourceReq.getDockerEndpoint())) {
DockerEndpointDo dockerEndpoint = resourceReq.getDockerEndpoint();
dockerEndpointDao.insert(dockerEndpoint);
temp.setDockerId(dockerEndpoint.getId());
}
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceCloud())) {
PipResourceCloud pipResourceCloud = resourceReq.getPipResourceCloud();
cloudDao.insert(pipResourceCloud);
temp.setCloudId(pipResourceCloud.getId());
}
resourceManagerDao.updateById(temp);
}
@Override
public ResourceFindResp findResourceById(String id) {
PipResourceManager pipResourceManager = resourceManagerDao.selectById(id);
if (ObjectUtils.isEmpty(pipResourceManager)){
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源不存在");
}
ResourceFindResp resp = ResourceConverter.INSTANCE.toResp(pipResourceManager);
setResource(resp);
setUserName(resp);
return resp;
}
@Override
public List<ResourceFindResp> findResourceList(ResourceQueryReq query) {
QueryWrapper<PipResourceManager> 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.getResourceName())){
wrapper.like("resource_name",query.getResourceName());
}
if (!ObjectUtils.isEmpty(query.getMachineId())){
wrapper.eq("machine_id",query.getMachineId());
}
if (!ObjectUtils.isEmpty(query.getK8sId())){
wrapper.eq("k8s_id",query.getK8sId());
}
if (!ObjectUtils.isEmpty(query.getDockerId())){
wrapper.eq("docker_id",query.getDockerId());
}
if (!ObjectUtils.isEmpty(query.getCloudId())){
wrapper.eq("cloud_id",query.getCloudId());
}
if (!ObjectUtils.isEmpty(query.getCreator())){
wrapper.eq("creator",query.getCreator());
}
List<PipResourceManager> pipResourceManagerList = resourceManagerDao.selectList(wrapper);
if (ObjectUtils.isEmpty(pipResourceManagerList)){
return new ArrayList<>(0);
}
List<ResourceFindResp> respList = ResourceConverter.INSTANCE.toRespList(pipResourceManagerList);
//对资源进行赋值
respList.forEach(this::setResource);
respList.forEach(this::setUserName);
return respList;
}
@Override
public PageResult<ResourceFindResp> findResourcePage(ResourceQueryReq query) {
QueryWrapper<PipResourceManager> 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.getResourceName())){
wrapper.like("resource_name",query.getResourceName());
}
if (!ObjectUtils.isEmpty(query.getMachineId())){
wrapper.eq("machine_id",query.getMachineId());
}
if (!ObjectUtils.isEmpty(query.getK8sId())){
wrapper.eq("k8s_id",query.getK8sId());
}
if (!ObjectUtils.isEmpty(query.getDockerId())){
wrapper.eq("docker_id",query.getDockerId());
}
if (!ObjectUtils.isEmpty(query.getCloudId())){
wrapper.eq("cloud_id",query.getCloudId());
}
if (!ObjectUtils.isEmpty(query.getCreator())){
wrapper.eq("creator",query.getCreator());
}
Page<PipResourceManager> pipResourceTempPage = resourceManagerDao.selectPage(new Page<>(query.getPageNo(), query.getPageSize()), wrapper);
if (ObjectUtils.isEmpty(pipResourceTempPage)){
return new PageResult<>();
}
List<ResourceFindResp> respList = ResourceConverter.INSTANCE.toRespList(pipResourceTempPage.getRecords());
//对资源进行赋值
respList.forEach(this::setResource);
respList.forEach(this::setUserName);
PageResult<ResourceFindResp> pageResult = new PageResult<>(respList,pipResourceTempPage.getTotal(),pipResourceTempPage.getCurrent(),pipResourceTempPage.getSize());
return pageResult;
}
private void setResource(ResourceFindResp resourceFindResp) {
if (!StringUtils.isEmpty(resourceFindResp.getMachineId())){
PipResourceMachine resourceMachine = machineDao.selectById(resourceFindResp.getMachineId());
resourceFindResp.setResourceMachine(resourceMachine);
}
if (!StringUtils.isEmpty(resourceFindResp.getK8sId())) {
PipResourceK8S pipResourceK8S = k8SDao.selectById(resourceFindResp.getK8sId());
resourceFindResp.setPipResourceK8S(pipResourceK8S);
}
if (!StringUtils.isEmpty(resourceFindResp.getDockerId())) {
DockerEndpointDo dockerEndpoint = dockerEndpointDao.selectById(resourceFindResp.getDockerId());
resourceFindResp.setDockerEndpoint(dockerEndpoint);
}
if (!StringUtils.isEmpty(resourceFindResp.getCloudId())) {
PipResourceCloud resourceCloud = cloudDao.selectById(resourceFindResp.getCloudId());
resourceFindResp.setPipResourceCloud(resourceCloud);
}
}
private void setUserName(ResourceFindResp resp) {
if (!StringUtils.isEmpty(resp.getCreator())){
AdminUserDO user = adminUserService.getUser(Long.valueOf(resp.getCreator()));
if (!ObjectUtils.isEmpty(user)){
resp.setCreatorName(user.getUsername());
}
}
if (!StringUtils.isEmpty(resp.getUpdater())){
AdminUserDO user = adminUserService.getUser(Long.valueOf(resp.getUpdater()));
if (!ObjectUtils.isEmpty(user)){
resp.setUpdaterName(user.getUsername());
}
}
}
}