Merge branch 'master' of http://1.14.125.6:3000/mianbin/ops-pro
# Conflicts: # modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java # modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java # modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java
This commit is contained in:
commit
cd90dd7e28
@ -24,10 +24,17 @@
|
|||||||
<groupId>cd.casic.boot</groupId>
|
<groupId>cd.casic.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-security</artifactId>
|
<artifactId>spring-boot-starter-security</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!--加解密-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.antherd</groupId>
|
<groupId>com.antherd</groupId>
|
||||||
<artifactId>sm-crypto</artifactId>
|
<artifactId>sm-crypto</artifactId>
|
||||||
<version>0.3.2.1-RELEASE</version>
|
<version>0.3.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openjdk.nashorn</groupId>
|
||||||
|
<artifactId>nashorn-core</artifactId>
|
||||||
|
<version>15.4</version>
|
||||||
|
</dependency>
|
||||||
|
<!--加解密-->
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.Operation;
|
|||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@ -64,6 +65,13 @@ public class SecretKeyController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除密钥")
|
||||||
|
@PreAuthorize("@ss.hasPermission('ci:secretKey:delete')")
|
||||||
|
public CommonResult deleteSecretKeyList(@RequestParam("id") Long id) {
|
||||||
|
return success(secretKeyService.deleteById(id));
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@Operation(summary = "获取密钥信息列表")
|
@Operation(summary = "获取密钥信息列表")
|
||||||
public CommonResult<PageResult<SecretKeyVO>> getSecretKeyPage(@Valid @RequestBody SecretKeyVO secretKeyVO) {
|
public CommonResult<PageResult<SecretKeyVO>> getSecretKeyPage(@Valid @RequestBody SecretKeyVO secretKeyVO) {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cd.casic.module.machine.service;
|
package cd.casic.module.machine.service;
|
||||||
|
|
||||||
|
import cd.casic.framework.commons.pojo.CommonResult;
|
||||||
import cd.casic.framework.commons.pojo.PageResult;
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
|
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
|
||||||
import cd.casic.module.machine.dal.dataobject.SecretKeyDO;
|
import cd.casic.module.machine.dal.dataobject.SecretKeyDO;
|
||||||
@ -30,6 +31,9 @@ public interface SecretKeyService {
|
|||||||
*/
|
*/
|
||||||
void deleteSecretKeyList(List<Long> ids);
|
void deleteSecretKeyList(List<Long> ids);
|
||||||
|
|
||||||
|
|
||||||
|
Integer deleteById(Long id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据id获取密钥对象
|
* 根据id获取密钥对象
|
||||||
*/
|
*/
|
||||||
|
@ -10,6 +10,7 @@ import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
|
|||||||
import cd.casic.module.machine.enums.MachineInfoStatus;
|
import cd.casic.module.machine.enums.MachineInfoStatus;
|
||||||
import cd.casic.module.machine.service.MachineInfoService;
|
import cd.casic.module.machine.service.MachineInfoService;
|
||||||
import cd.casic.module.machine.service.SecretKeyService;
|
import cd.casic.module.machine.service.SecretKeyService;
|
||||||
|
import cd.casic.module.machine.utils.CryptogramUtil;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -47,6 +48,9 @@ public class MachineInfoServiceImpl implements MachineInfoService {
|
|||||||
throw exception(SECRET_KEY_NOT_EXISTS);
|
throw exception(SECRET_KEY_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Objects.nonNull(machineInfoDO.getPassword())) {
|
||||||
|
machineInfoDO.setPassword(CryptogramUtil.doEncrypt(machineInfoDO.getPassword()));
|
||||||
|
}
|
||||||
machineInfoMapper.insert(machineInfoDO);
|
machineInfoMapper.insert(machineInfoDO);
|
||||||
return machineInfoDO.getId();
|
return machineInfoDO.getId();
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cd.casic.module.machine.service.impl;
|
package cd.casic.module.machine.service.impl;
|
||||||
|
|
||||||
|
import cd.casic.framework.commons.pojo.CommonResult;
|
||||||
import cd.casic.framework.commons.pojo.PageResult;
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
import cd.casic.framework.commons.util.object.BeanUtils;
|
import cd.casic.framework.commons.util.object.BeanUtils;
|
||||||
import cd.casic.module.machine.controller.vo.SecretKeyVO;
|
import cd.casic.module.machine.controller.vo.SecretKeyVO;
|
||||||
@ -54,14 +55,11 @@ public class SecretKeyServiceImpl implements SecretKeyService {
|
|||||||
public Long createSecretKey(SecretKeyVO secretKeyVO) {
|
public Long createSecretKey(SecretKeyVO secretKeyVO) {
|
||||||
validateSecretKeyAdd(secretKeyVO);
|
validateSecretKeyAdd(secretKeyVO);
|
||||||
SecretKeyDO secretKeyDO = BeanUtils.toBean(secretKeyVO, SecretKeyDO.class);
|
SecretKeyDO secretKeyDO = BeanUtils.toBean(secretKeyVO, SecretKeyDO.class);
|
||||||
try {
|
//密码加密
|
||||||
//密码加密
|
secretKeyDO.setPassword(CryptogramUtil.doEncrypt(secretKeyVO.getPassword()));
|
||||||
secretKeyDO.setPassword(CryptogramUtil.doEncrypt(secretKeyVO.getPassword()));
|
//公私钥加密
|
||||||
//公钥加密
|
secretKeyDO.setPublicKey(CryptogramUtil.doEncrypt(secretKeyVO.getPublicKey()));
|
||||||
secretKeyDO.setPublicKey(CryptogramUtil.doEncrypt(secretKeyVO.getPublicKey()));
|
secretKeyDO.setPrivateKey(CryptogramUtil.doEncrypt(secretKeyVO.getPrivateKey()));
|
||||||
} catch (ScriptException e) {
|
|
||||||
throw exception(ENCRYPT_OR_DECRYPT_FAIL);
|
|
||||||
}
|
|
||||||
secretKeyMapper.insert(secretKeyDO);
|
secretKeyMapper.insert(secretKeyDO);
|
||||||
return secretKeyDO.getId();
|
return secretKeyDO.getId();
|
||||||
}
|
}
|
||||||
@ -108,4 +106,8 @@ public class SecretKeyServiceImpl implements SecretKeyService {
|
|||||||
}
|
}
|
||||||
return secretKeyDO;
|
return secretKeyDO;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public Integer deleteById(Long id){
|
||||||
|
return secretKeyMapper.deleteById(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cd.casic.module.machine.utils;
|
package cd.casic.module.machine.utils;
|
||||||
|
|
||||||
|
|
||||||
import cd.casic.module.machine.dal.model.Keypair;
|
import cd.casic.module.machine.dal.model.Keypair;
|
||||||
import cn.hutool.log.Log;
|
import cn.hutool.log.Log;
|
||||||
import com.antherd.smcrypto.sm2.Sm2;
|
import com.antherd.smcrypto.sm2.Sm2;
|
||||||
@ -7,8 +8,12 @@ import com.antherd.smcrypto.sm3.Sm3;
|
|||||||
import com.antherd.smcrypto.sm4.Sm4;
|
import com.antherd.smcrypto.sm4.Sm4;
|
||||||
import com.antherd.smcrypto.sm4.Sm4Options;
|
import com.antherd.smcrypto.sm4.Sm4Options;
|
||||||
|
|
||||||
import javax.script.ScriptException;
|
/**
|
||||||
|
* 加密工具类,本框架目前使用 https://github.com/antherd/sm-crypto 项目中一些加解密方式
|
||||||
|
* 使用小伙伴需要过等保密评相关,请在此处更改为自己的加密方法,或加密机,使用加密机同时需要替换公钥,私钥在内部无法导出,提供加密的方法
|
||||||
|
*
|
||||||
|
* @author yubaoshan
|
||||||
|
*/
|
||||||
public class CryptogramUtil {
|
public class CryptogramUtil {
|
||||||
|
|
||||||
private static final Log log = Log.get();
|
private static final Log log = Log.get();
|
||||||
@ -16,11 +21,11 @@ public class CryptogramUtil {
|
|||||||
/**
|
/**
|
||||||
* 加密方法(Sm2 的专门针对前后端分离,非对称秘钥对的方式,暴露出去的公钥,对传输过程中的密码加个密)
|
* 加密方法(Sm2 的专门针对前后端分离,非对称秘钥对的方式,暴露出去的公钥,对传输过程中的密码加个密)
|
||||||
*
|
*
|
||||||
|
* @author yubaoshan
|
||||||
* @param str 待加密数据
|
* @param str 待加密数据
|
||||||
* @return 加密后的密文
|
* @return 加密后的密文
|
||||||
* @author yubaoshan
|
|
||||||
*/
|
*/
|
||||||
public static String doSm2Encrypt(String str) throws ScriptException {
|
public static String doSm2Encrypt (String str) {
|
||||||
return Sm2.doEncrypt(str, Keypair.PUBLIC_KEY);
|
return Sm2.doEncrypt(str, Keypair.PUBLIC_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,11 +33,11 @@ public class CryptogramUtil {
|
|||||||
* 解密方法
|
* 解密方法
|
||||||
* 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可
|
* 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可
|
||||||
*
|
*
|
||||||
|
* @author yubaoshan
|
||||||
* @param str 密文
|
* @param str 密文
|
||||||
* @return 解密后的明文
|
* @return 解密后的明文
|
||||||
* @author yubaoshan
|
|
||||||
*/
|
*/
|
||||||
public static String doSm2Decrypt(String str) throws ScriptException {
|
public static String doSm2Decrypt (String str) {
|
||||||
// 解密
|
// 解密
|
||||||
return Sm2.doDecrypt(str, Keypair.PRIVATE_KEY);
|
return Sm2.doDecrypt(str, Keypair.PRIVATE_KEY);
|
||||||
}
|
}
|
||||||
@ -40,11 +45,11 @@ public class CryptogramUtil {
|
|||||||
/**
|
/**
|
||||||
* 加密方法
|
* 加密方法
|
||||||
*
|
*
|
||||||
|
* @author yubaoshan
|
||||||
* @param str 待加密数据
|
* @param str 待加密数据
|
||||||
* @return 加密后的密文
|
* @return 加密后的密文
|
||||||
* @author yubaoshan
|
|
||||||
*/
|
*/
|
||||||
public static String doEncrypt(String str) throws ScriptException {
|
public static String doEncrypt (String str) {
|
||||||
// SM4 加密 cbc模式
|
// SM4 加密 cbc模式
|
||||||
Sm4Options sm4Options4 = new Sm4Options();
|
Sm4Options sm4Options4 = new Sm4Options();
|
||||||
sm4Options4.setMode("cbc");
|
sm4Options4.setMode("cbc");
|
||||||
@ -56,17 +61,17 @@ public class CryptogramUtil {
|
|||||||
* 解密方法
|
* 解密方法
|
||||||
* 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可
|
* 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可
|
||||||
*
|
*
|
||||||
|
* @author yubaoshan
|
||||||
* @param str 密文
|
* @param str 密文
|
||||||
* @return 解密后的明文
|
* @return 解密后的明文
|
||||||
* @author yubaoshan
|
|
||||||
*/
|
*/
|
||||||
public static String doDecrypt(String str) throws ScriptException {
|
public static String doDecrypt (String str) {
|
||||||
// 解密,cbc 模式,输出 utf8 字符串
|
// 解密,cbc 模式,输出 utf8 字符串
|
||||||
Sm4Options sm4Options8 = new Sm4Options();
|
Sm4Options sm4Options8 = new Sm4Options();
|
||||||
sm4Options8.setMode("cbc");
|
sm4Options8.setMode("cbc");
|
||||||
sm4Options8.setIv("fedcba98765432100123456789abcdef");
|
sm4Options8.setIv("fedcba98765432100123456789abcdef");
|
||||||
String docString = Sm4.decrypt(str, Keypair.KEY, sm4Options8);
|
String docString = Sm4.decrypt(str, Keypair.KEY, sm4Options8);
|
||||||
if (docString.isEmpty()) {
|
if (docString.equals("")) {
|
||||||
log.warn(">>> 字段解密失败,返回原文值:{}", str);
|
log.warn(">>> 字段解密失败,返回原文值:{}", str);
|
||||||
return str;
|
return str;
|
||||||
} else {
|
} else {
|
||||||
@ -77,34 +82,34 @@ public class CryptogramUtil {
|
|||||||
/**
|
/**
|
||||||
* 纯签名
|
* 纯签名
|
||||||
*
|
*
|
||||||
|
* @author yubaoshan
|
||||||
* @param str 待签名数据
|
* @param str 待签名数据
|
||||||
* @return 签名结果
|
* @return 签名结果
|
||||||
* @author yubaoshan
|
|
||||||
*/
|
*/
|
||||||
public static String doSignature(String str) throws ScriptException {
|
public static String doSignature (String str) {
|
||||||
return Sm2.doSignature(str, Keypair.PRIVATE_KEY);
|
return Sm2.doSignature(str, Keypair.PRIVATE_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 验证签名结果
|
* 验证签名结果
|
||||||
*
|
*
|
||||||
* @param originalStr 签名原文数据
|
|
||||||
* @param str 签名结果
|
|
||||||
* @return 是否通过
|
|
||||||
* @author yubaoshan
|
* @author yubaoshan
|
||||||
|
* @param originalStr 签名原文数据
|
||||||
|
* @param str 签名结果
|
||||||
|
* @return 是否通过
|
||||||
*/
|
*/
|
||||||
public static boolean doVerifySignature(String originalStr, String str) throws ScriptException {
|
public static boolean doVerifySignature (String originalStr, String str) {
|
||||||
return Sm2.doVerifySignature(originalStr, str, Keypair.PUBLIC_KEY);
|
return Sm2.doVerifySignature(originalStr, str, Keypair.PUBLIC_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过杂凑算法取得hash值,用于做数据完整性保护
|
* 通过杂凑算法取得hash值,用于做数据完整性保护
|
||||||
*
|
*
|
||||||
|
* @author yubaoshan
|
||||||
* @param str 字符串
|
* @param str 字符串
|
||||||
* @return hash 值
|
* @return hash 值
|
||||||
* @author yubaoshan
|
|
||||||
*/
|
*/
|
||||||
public static String doHashValue(String str) throws ScriptException {
|
public static String doHashValue (String str) {
|
||||||
return Sm3.sm3(str);
|
return Sm3.sm3(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ import cd.casic.ci.process.dto.resp.pipeline.PipelineFindResp;
|
|||||||
import cd.casic.ci.process.engine.executor.PipelineExecutor;
|
import cd.casic.ci.process.engine.executor.PipelineExecutor;
|
||||||
import cd.casic.ci.process.engine.runContext.PipelineRunContext;
|
import cd.casic.ci.process.engine.runContext.PipelineRunContext;
|
||||||
import cd.casic.ci.process.enums.PiplineTriggerModeEnum;
|
import cd.casic.ci.process.enums.PiplineTriggerModeEnum;
|
||||||
|
import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
|
||||||
import cd.casic.ci.process.process.service.pipeline.PipelineService;
|
import cd.casic.ci.process.process.service.pipeline.PipelineService;
|
||||||
import cd.casic.framework.commons.pojo.CommonResult;
|
import cd.casic.framework.commons.pojo.CommonResult;
|
||||||
import cd.casic.framework.commons.pojo.PageResult;
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
@ -117,4 +118,12 @@ public class PipelineController {
|
|||||||
pipelineExecutor.traversePipelineContext(pipelineId);
|
pipelineExecutor.traversePipelineContext(pipelineId);
|
||||||
return CommonResult.success();
|
return CommonResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(path="/transformTemplateByPipeline")
|
||||||
|
public CommonResult<Void> transformTemplateByPipeline(@RequestBody @Valid BaseIdReq req){
|
||||||
|
|
||||||
|
pipelineService.transformTemplateByPipeline(req);
|
||||||
|
|
||||||
|
return CommonResult.success();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cd.casic.ci.api;
|
package cd.casic.ci.api;
|
||||||
|
|
||||||
|
|
||||||
|
import cd.casic.ci.process.dto.req.template.TemplateCreateByDataReq;
|
||||||
import cd.casic.ci.process.dto.req.template.TemplateCreateReq;
|
import cd.casic.ci.process.dto.req.template.TemplateCreateReq;
|
||||||
import cd.casic.ci.process.dto.req.template.TemplateQueryReq;
|
import cd.casic.ci.process.dto.req.template.TemplateQueryReq;
|
||||||
import cd.casic.ci.process.dto.req.template.TemplateUpdateReq;
|
import cd.casic.ci.process.dto.req.template.TemplateUpdateReq;
|
||||||
@ -38,6 +39,16 @@ public class TemplateManagerController {
|
|||||||
String templateId = templateManagerService.createTemplateManager(req);
|
String templateId = templateManagerService.createTemplateManager(req);
|
||||||
return CommonResult.success(templateId);
|
return CommonResult.success(templateId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping(path="/createTemplateByData")
|
||||||
|
public CommonResult<String> createTemplateByData(@RequestBody @Valid TemplateCreateByDataReq req){
|
||||||
|
String templateId = templateManagerService.createTemplateByData(req);
|
||||||
|
return CommonResult.success(templateId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@PostMapping(path="/updateTemplateManager")
|
@PostMapping(path="/updateTemplateManager")
|
||||||
public CommonResult<String> updateTemplateManager(@RequestBody TemplateUpdateReq req){
|
public CommonResult<String> updateTemplateManager(@RequestBody TemplateUpdateReq req){
|
||||||
String templateId = templateManagerService.updateTemplateManager(req);
|
String templateId = templateManagerService.updateTemplateManager(req);
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
package cd.casic.ci.process.dto.req.template;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author HopeLi
|
||||||
|
* @version v1.0
|
||||||
|
* @ClassName TemplateCreateReq
|
||||||
|
* @Date: 2025/5/29 10:41
|
||||||
|
* @Description:
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class TemplateCreateByDataReq {
|
||||||
|
/**
|
||||||
|
* 模板名称
|
||||||
|
*/
|
||||||
|
private String templateName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模板分类
|
||||||
|
*/
|
||||||
|
private String templateType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
private List<TemplateStageCreateByDataReq> stageCreateByDataReqList;
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package cd.casic.ci.process.dto.req.template;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName TemplateStageCreateByDataReq
|
||||||
|
* @Author hopeli
|
||||||
|
* @Date 2025/7/20 18:34
|
||||||
|
* @Version 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class TemplateStageCreateByDataReq {
|
||||||
|
/**
|
||||||
|
* 阶段名称
|
||||||
|
*/
|
||||||
|
private String stageName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流水线模板ID
|
||||||
|
*/
|
||||||
|
private String templateId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 阶段排序
|
||||||
|
*/
|
||||||
|
private Integer stageSort;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 父级阶段ID
|
||||||
|
*/
|
||||||
|
private String parentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否是代码阶段
|
||||||
|
*/
|
||||||
|
private Boolean code = false;
|
||||||
|
|
||||||
|
private List<TemplateStageCreateByDataReq> stageCreateByDataReqList;
|
||||||
|
|
||||||
|
private List<TemplateTaskCreateByDataReq> taskCreateByDataReqList;
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package cd.casic.ci.process.dto.req.template;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.apache.ibatis.type.JdbcType;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName TemplateTaskCreateByDataReq
|
||||||
|
* @Author hopeli
|
||||||
|
* @Date 2025/7/20 18:50
|
||||||
|
* @Version 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class TemplateTaskCreateByDataReq {
|
||||||
|
/**
|
||||||
|
* 阶段ID
|
||||||
|
*/
|
||||||
|
private String stageId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务名称
|
||||||
|
*/
|
||||||
|
private String taskName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流水线模板ID
|
||||||
|
*/
|
||||||
|
private String templateId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务类型
|
||||||
|
*/
|
||||||
|
private String taskType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务排序
|
||||||
|
*/
|
||||||
|
private Integer taskSort;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 后置处理器ID
|
||||||
|
*/
|
||||||
|
private String postprocessId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务配置(JSON格式存储)
|
||||||
|
*/
|
||||||
|
@TableField(typeHandler = JacksonTypeHandler.class,jdbcType = JdbcType.VARCHAR)
|
||||||
|
private Map<String, Object> taskProperties;
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package cd.casic.ci.process.process.converter;
|
package cd.casic.ci.process.process.converter;
|
||||||
|
|
||||||
|
import cd.casic.ci.process.dto.req.template.TemplateCreateByDataReq;
|
||||||
import cd.casic.ci.process.dto.req.template.TemplateCreateReq;
|
import cd.casic.ci.process.dto.req.template.TemplateCreateReq;
|
||||||
import cd.casic.ci.process.dto.req.template.TemplateUpdateReq;
|
import cd.casic.ci.process.dto.req.template.TemplateUpdateReq;
|
||||||
import cd.casic.ci.process.dto.resp.template.TemplateFindResp;
|
import cd.casic.ci.process.dto.resp.template.TemplateFindResp;
|
||||||
@ -31,4 +32,6 @@ public interface TemplateConverter {
|
|||||||
PipTask templateTaskToTask(TemplateTasksResp resp);
|
PipTask templateTaskToTask(TemplateTasksResp resp);
|
||||||
TemplateManager managerCreateReqToManager(TemplateCreateReq req);
|
TemplateManager managerCreateReqToManager(TemplateCreateReq req);
|
||||||
TemplateManager managerUpdateReqToManager(TemplateUpdateReq req);
|
TemplateManager managerUpdateReqToManager(TemplateUpdateReq req);
|
||||||
|
|
||||||
|
TemplateManager managerDataToManagerModule(TemplateCreateByDataReq req);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
package cd.casic.ci.process.process.converter;
|
package cd.casic.ci.process.process.converter;
|
||||||
|
|
||||||
import cd.casic.ci.process.dto.resp.stage.StageResp;
|
import cd.casic.ci.process.dto.req.template.TemplateStageCreateByDataReq;
|
||||||
import cd.casic.ci.process.dto.resp.template.TemplateStageResp;
|
import cd.casic.ci.process.dto.resp.template.TemplateStageResp;
|
||||||
import cd.casic.ci.process.process.dataObject.stage.PipStage;
|
|
||||||
import cd.casic.ci.process.process.dataObject.template.TemplateStage;
|
import cd.casic.ci.process.process.dataObject.template.TemplateStage;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
@ -15,4 +14,5 @@ public interface TemplateStageConverter {
|
|||||||
public TemplateStageResp converter(TemplateStage stage);
|
public TemplateStageResp converter(TemplateStage stage);
|
||||||
public List<TemplateStageResp> converter(List<TemplateStage> stage);
|
public List<TemplateStageResp> converter(List<TemplateStage> stage);
|
||||||
|
|
||||||
|
TemplateStage stageDataToStageModule(TemplateStageCreateByDataReq o);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
package cd.casic.ci.process.process.converter;
|
package cd.casic.ci.process.process.converter;
|
||||||
|
|
||||||
import cd.casic.ci.process.dto.resp.task.TasksResp;
|
import cd.casic.ci.process.dto.req.template.TemplateTaskCreateByDataReq;
|
||||||
import cd.casic.ci.process.dto.resp.template.TemplateTasksResp;
|
import cd.casic.ci.process.dto.resp.template.TemplateTasksResp;
|
||||||
import cd.casic.ci.process.process.dataObject.task.PipTask;
|
|
||||||
import cd.casic.ci.process.process.dataObject.template.TemplateTask;
|
import cd.casic.ci.process.process.dataObject.template.TemplateTask;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
@ -11,4 +10,6 @@ import org.mapstruct.factory.Mappers;
|
|||||||
public interface TemplateTaskConverter {
|
public interface TemplateTaskConverter {
|
||||||
TemplateTaskConverter INSTANCE = Mappers.getMapper(TemplateTaskConverter.class);
|
TemplateTaskConverter INSTANCE = Mappers.getMapper(TemplateTaskConverter.class);
|
||||||
TemplateTasksResp doToResp(TemplateTask task);
|
TemplateTasksResp doToResp(TemplateTask task);
|
||||||
|
|
||||||
|
TemplateTask taskDataToTaskModule(TemplateTaskCreateByDataReq k);
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ public class TemplateStage extends PipBaseElement {
|
|||||||
/**
|
/**
|
||||||
* 是否为源码(0-否,1-是)
|
* 是否为源码(0-否,1-是)
|
||||||
*/
|
*/
|
||||||
private String code;
|
private Boolean code = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 触发方式(0-手动触发,1-自动触发)
|
* 触发方式(0-手动触发,1-自动触发)
|
||||||
|
@ -7,6 +7,7 @@ import cd.casic.ci.process.dto.req.pipeline.PipelineReq;
|
|||||||
import cd.casic.ci.process.dto.req.pipeline.PipelineUpdateReq;
|
import cd.casic.ci.process.dto.req.pipeline.PipelineUpdateReq;
|
||||||
import cd.casic.ci.process.dto.resp.context.TreeRunContextResp;
|
import cd.casic.ci.process.dto.resp.context.TreeRunContextResp;
|
||||||
import cd.casic.ci.process.dto.resp.pipeline.PipelineFindResp;
|
import cd.casic.ci.process.dto.resp.pipeline.PipelineFindResp;
|
||||||
|
import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
|
||||||
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
|
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
|
||||||
import cd.casic.framework.commons.pojo.PageResult;
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
@ -38,5 +39,7 @@ public interface PipelineService extends IService<PipPipeline> {
|
|||||||
|
|
||||||
TreeRunContextResp getPipelineRunState(String pipelineId);
|
TreeRunContextResp getPipelineRunState(String pipelineId);
|
||||||
Long getGroupCount(String groupId);
|
Long getGroupCount(String groupId);
|
||||||
|
|
||||||
|
void transformTemplateByPipeline(@Valid BaseIdReq req);
|
||||||
Boolean targetVersionInUse(List<String> targetVersionId);
|
Boolean targetVersionInUse(List<String> targetVersionId);
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,9 @@ import cd.casic.ci.process.dto.req.pipeline.PipelineCreateReq;
|
|||||||
import cd.casic.ci.process.dto.req.pipeline.PipelineQueryReq;
|
import cd.casic.ci.process.dto.req.pipeline.PipelineQueryReq;
|
||||||
import cd.casic.ci.process.dto.req.pipeline.PipelineReq;
|
import cd.casic.ci.process.dto.req.pipeline.PipelineReq;
|
||||||
import cd.casic.ci.process.dto.req.pipeline.PipelineUpdateReq;
|
import cd.casic.ci.process.dto.req.pipeline.PipelineUpdateReq;
|
||||||
|
import cd.casic.ci.process.dto.req.template.TemplateCreateByDataReq;
|
||||||
|
import cd.casic.ci.process.dto.req.template.TemplateStageCreateByDataReq;
|
||||||
|
import cd.casic.ci.process.dto.req.template.TemplateTaskCreateByDataReq;
|
||||||
import cd.casic.ci.process.dto.resp.context.TreeRunContextResp;
|
import cd.casic.ci.process.dto.resp.context.TreeRunContextResp;
|
||||||
import cd.casic.ci.process.dto.resp.pipeline.PipelineFindResp;
|
import cd.casic.ci.process.dto.resp.pipeline.PipelineFindResp;
|
||||||
import cd.casic.ci.process.dto.resp.stage.StageResp;
|
import cd.casic.ci.process.dto.resp.stage.StageResp;
|
||||||
@ -19,6 +22,7 @@ import cd.casic.ci.process.process.dao.pipeline.PipStageDao;
|
|||||||
import cd.casic.ci.process.process.dao.pipeline.PipTaskDao;
|
import cd.casic.ci.process.process.dao.pipeline.PipTaskDao;
|
||||||
import cd.casic.ci.process.process.dao.pipeline.PipelineDao;
|
import cd.casic.ci.process.process.dao.pipeline.PipelineDao;
|
||||||
import cd.casic.ci.process.process.dao.pipeline.TargetVersionDao;
|
import cd.casic.ci.process.process.dao.pipeline.TargetVersionDao;
|
||||||
|
import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
|
||||||
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
|
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
|
||||||
import cd.casic.ci.process.process.dataObject.stage.PipStage;
|
import cd.casic.ci.process.process.dataObject.stage.PipStage;
|
||||||
import cd.casic.ci.process.process.dataObject.target.TargetVersion;
|
import cd.casic.ci.process.process.dataObject.target.TargetVersion;
|
||||||
@ -48,7 +52,13 @@ import org.springframework.util.ObjectUtils;
|
|||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -156,8 +166,6 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
|
|||||||
PipStage pipStage = templateConverter.respToStage(o);
|
PipStage pipStage = templateConverter.respToStage(o);
|
||||||
pipStage.setId(idWork.nextUUID(null));
|
pipStage.setId(idWork.nextUUID(null));
|
||||||
pipStage.setPipelineId(pipeline.getId());
|
pipStage.setPipelineId(pipeline.getId());
|
||||||
pipStage.setCreateTime(LocalDateTime.now());
|
|
||||||
pipStage.setCreator(String.valueOf(WebFrameworkUtils.getLoginUserId()));
|
|
||||||
if (o.isCode()){
|
if (o.isCode()){
|
||||||
pipStage.setCode(true);
|
pipStage.setCode(true);
|
||||||
}else {
|
}else {
|
||||||
@ -540,6 +548,73 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
|
|||||||
return pipelineDao.selectCount(wrapper);
|
return pipelineDao.selectCount(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void transformTemplateByPipeline(BaseIdReq req) {
|
||||||
|
if (ObjectUtils.isEmpty(req.getId())){
|
||||||
|
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"id不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
PipelineQueryReq pipelineQueryReq = new PipelineQueryReq();
|
||||||
|
pipelineQueryReq.setId(req.getId());
|
||||||
|
PipelineFindResp pipeline = this.findPipelineById(pipelineQueryReq);
|
||||||
|
|
||||||
|
if (ObjectUtils.isEmpty(pipeline)){
|
||||||
|
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"数据错误,请联系管理员");
|
||||||
|
}
|
||||||
|
|
||||||
|
TemplateCreateByDataReq templateCreateByDataReq = new TemplateCreateByDataReq();
|
||||||
|
|
||||||
|
templateCreateByDataReq.setTemplateName(pipeline.getName());
|
||||||
|
templateCreateByDataReq.setTemplateType(pipeline.getTargetType());
|
||||||
|
templateCreateByDataReq.setRemark(pipeline.getRemark());
|
||||||
|
|
||||||
|
if (!ObjectUtils.isEmpty(pipeline.getStageList())){
|
||||||
|
List<TemplateStageCreateByDataReq> parentTemplateStageList = new ArrayList<>();
|
||||||
|
pipeline.getStageList().forEach(o->{
|
||||||
|
TemplateStageCreateByDataReq parentTemplateStage = new TemplateStageCreateByDataReq();
|
||||||
|
parentTemplateStage.setStageName(o.getStageName());
|
||||||
|
parentTemplateStage.setStageSort(o.getStageSort());
|
||||||
|
if (o.isCode()){
|
||||||
|
parentTemplateStage.setCode(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ObjectUtils.isEmpty(o.getStageList())){
|
||||||
|
List<TemplateStageCreateByDataReq> childTemplateStageList = new ArrayList<>();
|
||||||
|
o.getStageList().forEach(j->{
|
||||||
|
TemplateStageCreateByDataReq childTemplateStage = new TemplateStageCreateByDataReq();
|
||||||
|
childTemplateStage.setStageName(j.getStageName());
|
||||||
|
childTemplateStage.setStageSort(j.getStageSort());
|
||||||
|
if (j.isCode()){
|
||||||
|
childTemplateStage.setCode(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ObjectUtils.isEmpty(j.getTaskValues())){
|
||||||
|
List<TemplateTaskCreateByDataReq> templateTaskList = new ArrayList<>();
|
||||||
|
j.getTaskValues().forEach(k->{
|
||||||
|
TemplateTaskCreateByDataReq templateTaskCreateByDataReq = new TemplateTaskCreateByDataReq();
|
||||||
|
templateTaskCreateByDataReq.setTaskName(k.getTaskName());
|
||||||
|
templateTaskCreateByDataReq.setTaskType(k.getTaskType());
|
||||||
|
templateTaskCreateByDataReq.setTaskSort(k.getTaskSort());
|
||||||
|
templateTaskCreateByDataReq.setTaskProperties(k.getTaskProperties());
|
||||||
|
templateTaskList.add(templateTaskCreateByDataReq);
|
||||||
|
});
|
||||||
|
childTemplateStage.setTaskCreateByDataReqList(templateTaskList);
|
||||||
|
}
|
||||||
|
|
||||||
|
childTemplateStageList.add(childTemplateStage);
|
||||||
|
});
|
||||||
|
|
||||||
|
parentTemplateStage.setStageCreateByDataReqList(childTemplateStageList);
|
||||||
|
}
|
||||||
|
|
||||||
|
parentTemplateStageList.add(parentTemplateStage);
|
||||||
|
});
|
||||||
|
|
||||||
|
templateCreateByDataReq.setStageCreateByDataReqList(parentTemplateStageList);
|
||||||
|
}
|
||||||
|
templateService.createTemplateByData(templateCreateByDataReq);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean targetVersionInUse(List<String> targetVersionId) {
|
public Boolean targetVersionInUse(List<String> targetVersionId) {
|
||||||
if (CollectionUtils.isEmpty(targetVersionId)) {
|
if (CollectionUtils.isEmpty(targetVersionId)) {
|
||||||
|
@ -6,9 +6,11 @@ import cd.casic.ci.process.dto.resp.target.TargetManagerResp;
|
|||||||
import cd.casic.ci.process.dto.resp.target.TargetVersionResp;
|
import cd.casic.ci.process.dto.resp.target.TargetVersionResp;
|
||||||
import cd.casic.ci.process.process.converter.TargetConverter;
|
import cd.casic.ci.process.process.converter.TargetConverter;
|
||||||
import cd.casic.ci.process.process.converter.TargetVersionConverter;
|
import cd.casic.ci.process.process.converter.TargetVersionConverter;
|
||||||
|
import cd.casic.ci.process.process.dao.pipeline.PipelineDao;
|
||||||
import cd.casic.ci.process.process.dao.pipeline.TargetManagerDao;
|
import cd.casic.ci.process.process.dao.pipeline.TargetManagerDao;
|
||||||
import cd.casic.ci.process.process.dao.pipeline.TargetVersionDao;
|
import cd.casic.ci.process.process.dao.pipeline.TargetVersionDao;
|
||||||
import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
|
import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
|
||||||
|
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
|
||||||
import cd.casic.ci.process.process.dataObject.target.TargetManager;
|
import cd.casic.ci.process.process.dataObject.target.TargetManager;
|
||||||
import cd.casic.ci.process.process.dataObject.target.TargetVersion;
|
import cd.casic.ci.process.process.dataObject.target.TargetVersion;
|
||||||
import cd.casic.ci.process.process.service.pipeline.PipelineService;
|
import cd.casic.ci.process.process.service.pipeline.PipelineService;
|
||||||
@ -65,6 +67,10 @@ public class TargetManagerServiceImpl extends ServiceImpl<TargetManagerDao, Targ
|
|||||||
private AdminUserServiceImpl adminUserService;
|
private AdminUserServiceImpl adminUserService;
|
||||||
@Resource
|
@Resource
|
||||||
private TargetFileUploadProperties fileUploadProperties;
|
private TargetFileUploadProperties fileUploadProperties;
|
||||||
|
@Resource
|
||||||
|
private PipelineDao pipelineDao;
|
||||||
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PipelineService pipelineService;
|
private PipelineService pipelineService;
|
||||||
@Override
|
@Override
|
||||||
@ -123,9 +129,6 @@ public class TargetManagerServiceImpl extends ServiceImpl<TargetManagerDao, Targ
|
|||||||
//删除对应的version版本
|
//删除对应的version版本
|
||||||
List<TargetVersionResp> versionList = targetVersionService.selectListByManagerId(targetManager.getId());
|
List<TargetVersionResp> versionList = targetVersionService.selectListByManagerId(targetManager.getId());
|
||||||
List<String> versionIdList = versionList.stream().map(TargetVersionResp::getId).toList();
|
List<String> versionIdList = versionList.stream().map(TargetVersionResp::getId).toList();
|
||||||
if (pipelineService.targetVersionInUse(versionIdList)) {
|
|
||||||
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"当前目标正在被流水线使用无法删除");
|
|
||||||
}
|
|
||||||
targetVersionDao.deleteByIds(versionIdList);
|
targetVersionDao.deleteByIds(versionIdList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cd.casic.ci.process.process.service.template;
|
package cd.casic.ci.process.process.service.template;
|
||||||
|
|
||||||
|
|
||||||
|
import cd.casic.ci.process.dto.req.template.TemplateCreateByDataReq;
|
||||||
import cd.casic.ci.process.dto.req.template.TemplateCreateReq;
|
import cd.casic.ci.process.dto.req.template.TemplateCreateReq;
|
||||||
import cd.casic.ci.process.dto.req.template.TemplateQueryReq;
|
import cd.casic.ci.process.dto.req.template.TemplateQueryReq;
|
||||||
import cd.casic.ci.process.dto.req.template.TemplateUpdateReq;
|
import cd.casic.ci.process.dto.req.template.TemplateUpdateReq;
|
||||||
@ -28,4 +29,6 @@ public interface TemplateManagerService extends IService<TemplateManager> {
|
|||||||
List<TemplateFindResp> findTemplateList(@Valid TemplateQueryReq query);
|
List<TemplateFindResp> findTemplateList(@Valid TemplateQueryReq query);
|
||||||
|
|
||||||
TemplateFindResp findTemplateById(String id);
|
TemplateFindResp findTemplateById(String id);
|
||||||
|
|
||||||
|
String createTemplateByData(@Valid TemplateCreateByDataReq req);
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
package cd.casic.ci.process.process.service.template.impl;
|
package cd.casic.ci.process.process.service.template.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import cd.casic.ci.process.dto.req.template.TemplateCreateByDataReq;
|
||||||
import cd.casic.ci.process.dto.req.template.TemplateCreateReq;
|
import cd.casic.ci.process.dto.req.template.TemplateCreateReq;
|
||||||
import cd.casic.ci.process.dto.req.template.TemplateQueryReq;
|
import cd.casic.ci.process.dto.req.template.TemplateQueryReq;
|
||||||
import cd.casic.ci.process.dto.req.template.TemplateUpdateReq;
|
import cd.casic.ci.process.dto.req.template.TemplateUpdateReq;
|
||||||
import cd.casic.ci.process.dto.resp.template.TemplateFindResp;
|
import cd.casic.ci.process.dto.resp.template.TemplateFindResp;
|
||||||
import cd.casic.ci.process.dto.resp.template.TemplateStageResp;
|
import cd.casic.ci.process.dto.resp.template.TemplateStageResp;
|
||||||
import cd.casic.ci.process.process.converter.TemplateConverter;
|
import cd.casic.ci.process.process.converter.TemplateConverter;
|
||||||
|
import cd.casic.ci.process.process.converter.TemplateStageConverter;
|
||||||
|
import cd.casic.ci.process.process.converter.TemplateTaskConverter;
|
||||||
import cd.casic.ci.process.process.dao.template.TemplateManagerDao;
|
import cd.casic.ci.process.process.dao.template.TemplateManagerDao;
|
||||||
import cd.casic.ci.process.process.dao.template.TemplateStageDao;
|
import cd.casic.ci.process.process.dao.template.TemplateStageDao;
|
||||||
import cd.casic.ci.process.process.dao.template.TemplateTaskDao;
|
import cd.casic.ci.process.process.dao.template.TemplateTaskDao;
|
||||||
@ -15,14 +18,12 @@ import cd.casic.ci.process.process.dataObject.template.TemplateStage;
|
|||||||
import cd.casic.ci.process.process.dataObject.template.TemplateTask;
|
import cd.casic.ci.process.process.dataObject.template.TemplateTask;
|
||||||
import cd.casic.ci.process.process.service.template.TemplateManagerService;
|
import cd.casic.ci.process.process.service.template.TemplateManagerService;
|
||||||
import cd.casic.ci.process.process.service.template.TemplateStageService;
|
import cd.casic.ci.process.process.service.template.TemplateStageService;
|
||||||
import cd.casic.ci.process.process.service.template.TemplateTaskService;
|
|
||||||
import cd.casic.ci.process.util.snowflake.SnowflakeIdentifierGenerator;
|
import cd.casic.ci.process.util.snowflake.SnowflakeIdentifierGenerator;
|
||||||
import cd.casic.framework.commons.exception.ServiceException;
|
import cd.casic.framework.commons.exception.ServiceException;
|
||||||
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
|
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
|
||||||
import cd.casic.framework.commons.pojo.PageResult;
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
import cd.casic.framework.security.dal.user.AdminUserDO;
|
import cd.casic.framework.security.dal.user.AdminUserDO;
|
||||||
import cd.casic.framework.tenant.core.service.AdminUserServiceImpl;
|
import cd.casic.framework.tenant.core.service.AdminUserServiceImpl;
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
@ -67,6 +68,8 @@ public class TemplateManagerServiceImpl extends ServiceImpl<TemplateManagerDao,
|
|||||||
private TemplateStageService templateStageService;
|
private TemplateStageService templateStageService;
|
||||||
@Resource
|
@Resource
|
||||||
private SnowflakeIdentifierGenerator idWork;
|
private SnowflakeIdentifierGenerator idWork;
|
||||||
|
@Resource
|
||||||
|
private TemplateStageConverter templateStageConverter;
|
||||||
|
|
||||||
public String createTemplateManager(TemplateCreateReq req){
|
public String createTemplateManager(TemplateCreateReq req){
|
||||||
TemplateManager templateManager = templateConverter.managerCreateReqToManager(req);
|
TemplateManager templateManager = templateConverter.managerCreateReqToManager(req);
|
||||||
@ -188,6 +191,48 @@ public class TemplateManagerServiceImpl extends ServiceImpl<TemplateManagerDao,
|
|||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String createTemplateByData(TemplateCreateByDataReq req) {
|
||||||
|
TemplateManager templateManager = templateConverter.managerDataToManagerModule(req);
|
||||||
|
templateManager.setId(idWork.nextUUID(null));
|
||||||
|
templateManagerDao.insert(templateManager);
|
||||||
|
|
||||||
|
List<TemplateStage> stageList = new ArrayList<>();
|
||||||
|
List<TemplateTask> taskList = new ArrayList<>();
|
||||||
|
if (!ObjectUtils.isEmpty(req.getStageCreateByDataReqList())){
|
||||||
|
req.getStageCreateByDataReqList().forEach(o->{
|
||||||
|
TemplateStage templateStage = templateStageConverter.stageDataToStageModule(o);
|
||||||
|
templateStage.setId(idWork.nextUUID(null));
|
||||||
|
templateStage.setTemplateId(templateManager.getId());
|
||||||
|
templateStage.setParentId("-1");
|
||||||
|
stageList.add(templateStage);
|
||||||
|
|
||||||
|
if (!ObjectUtils.isEmpty(o.getStageCreateByDataReqList())){
|
||||||
|
o.getStageCreateByDataReqList().forEach(j->{
|
||||||
|
TemplateStage childTemplateStage = templateStageConverter.stageDataToStageModule(j);
|
||||||
|
childTemplateStage.setId(idWork.nextUUID(null));
|
||||||
|
childTemplateStage.setParentId(templateStage.getId());
|
||||||
|
childTemplateStage.setTemplateId(templateStage.getTemplateId());
|
||||||
|
stageList.add(childTemplateStage);
|
||||||
|
|
||||||
|
if (!ObjectUtils.isEmpty(j.getTaskCreateByDataReqList())){
|
||||||
|
j.getTaskCreateByDataReqList().forEach(k->{
|
||||||
|
TemplateTask templateTask = TemplateTaskConverter.INSTANCE.taskDataToTaskModule(k);
|
||||||
|
templateTask.setId(idWork.nextUUID(null));
|
||||||
|
templateTask.setStageId(childTemplateStage.getId());
|
||||||
|
templateTask.setTemplateId(templateManager.getId());
|
||||||
|
taskList.add(templateTask);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
templateStageDao.insertBatch(stageList);
|
||||||
|
templateTaskDao.insertBatch(taskList);
|
||||||
|
return templateManager.getId();
|
||||||
|
}
|
||||||
|
|
||||||
private void setUserName(TemplateFindResp templateFindResp) {
|
private void setUserName(TemplateFindResp templateFindResp) {
|
||||||
if (!StringUtils.isEmpty(templateFindResp.getCreator())){
|
if (!StringUtils.isEmpty(templateFindResp.getCreator())){
|
||||||
AdminUserDO user = adminUserService.getUser(Long.valueOf(templateFindResp.getCreator()));
|
AdminUserDO user = adminUserService.getUser(Long.valueOf(templateFindResp.getCreator()));
|
||||||
|
@ -18,7 +18,7 @@ import lombok.NoArgsConstructor;
|
|||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
//@DesensitizeObject 、、todo 自动脱敏的注解
|
//@DesensitizeObject 自动脱敏的注解
|
||||||
@Schema(name = "TerminalAccessDTO", description = "终端访问参数")
|
@Schema(name = "TerminalAccessDTO", description = "终端访问参数")
|
||||||
public class TerminalAccessDTO {
|
public class TerminalAccessDTO {
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cd.casic.module.terminal.host.jsch;
|
package cd.casic.module.terminal.host.jsch;
|
||||||
|
|
||||||
|
|
||||||
|
import cd.casic.module.machine.utils.CryptogramUtil;
|
||||||
import cd.casic.module.terminal.common.AesEncryptUtils;
|
import cd.casic.module.terminal.common.AesEncryptUtils;
|
||||||
import cd.casic.module.terminal.common.AppConst;
|
import cd.casic.module.terminal.common.AppConst;
|
||||||
import cd.casic.module.terminal.controller.dto.TerminalConnectDTO;
|
import cd.casic.module.terminal.controller.dto.TerminalConnectDTO;
|
||||||
@ -72,13 +73,13 @@ public class SessionStores {
|
|||||||
if (useKey) {
|
if (useKey) {
|
||||||
// 加载密钥
|
// 加载密钥
|
||||||
String publicKey = Optional.ofNullable(conn.getPublicKey())
|
String publicKey = Optional.ofNullable(conn.getPublicKey())
|
||||||
.map(AesEncryptUtils::decryptAsString)
|
.map(CryptogramUtil::doDecrypt)
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
String privateKey = Optional.ofNullable(conn.getPrivateKey())
|
String privateKey = Optional.ofNullable(conn.getPrivateKey())
|
||||||
.map(AesEncryptUtils::decryptAsString)
|
.map(CryptogramUtil::doDecrypt)
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
String password = Optional.ofNullable(conn.getPrivateKeyPassword())
|
String password = Optional.ofNullable(conn.getPrivateKeyPassword())
|
||||||
.map(AesEncryptUtils::decryptAsString)
|
.map(CryptogramUtil::doDecrypt)
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
sessionHolder.addIdentityValue(String.valueOf(conn.getKeyId()),
|
sessionHolder.addIdentityValue(String.valueOf(conn.getKeyId()),
|
||||||
privateKey,
|
privateKey,
|
||||||
@ -91,8 +92,7 @@ public class SessionStores {
|
|||||||
if (!useKey) {
|
if (!useKey) {
|
||||||
String password = conn.getPassword();
|
String password = conn.getPassword();
|
||||||
if (!Strings.isEmpty(password)) {
|
if (!Strings.isEmpty(password)) {
|
||||||
// session.password(AesEncryptUtils.decryptAsString(password));
|
session.password(CryptogramUtil.doDecrypt(password));
|
||||||
session.password(password);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 超时时间
|
// 超时时间
|
||||||
|
@ -5,6 +5,7 @@ import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
|
|||||||
import cd.casic.module.machine.dal.dataobject.SecretKeyDO;
|
import cd.casic.module.machine.dal.dataobject.SecretKeyDO;
|
||||||
import cd.casic.module.machine.dal.mysql.MachineInfoMapper;
|
import cd.casic.module.machine.dal.mysql.MachineInfoMapper;
|
||||||
import cd.casic.module.machine.dal.mysql.SecretKeyMapper;
|
import cd.casic.module.machine.dal.mysql.SecretKeyMapper;
|
||||||
|
import cd.casic.module.machine.utils.CryptogramUtil;
|
||||||
import cd.casic.module.terminal.common.ErrorMessage;
|
import cd.casic.module.terminal.common.ErrorMessage;
|
||||||
import cd.casic.module.terminal.controller.dto.TerminalConnectDTO;
|
import cd.casic.module.terminal.controller.dto.TerminalConnectDTO;
|
||||||
import cd.casic.module.terminal.enums.*;
|
import cd.casic.module.terminal.enums.*;
|
||||||
@ -64,7 +65,7 @@ public class HostConnectServiceImpl implements HostConnectService {
|
|||||||
CONFIG.setUsername(host.getUsername());
|
CONFIG.setUsername(host.getUsername());
|
||||||
if (host.getAuthenticationType().equals(1)){
|
if (host.getAuthenticationType().equals(1)){
|
||||||
CONFIG.setAuthType(HostSshAuthTypeEnum.PASSWORD.name());
|
CONFIG.setAuthType(HostSshAuthTypeEnum.PASSWORD.name());
|
||||||
CONFIG.setPassword(host.getPassword());
|
CONFIG.setPassword(CryptogramUtil.doDecrypt(host.getPassword()));
|
||||||
}else {
|
}else {
|
||||||
CONFIG.setKeyId(host.getSecretKeyId());
|
CONFIG.setKeyId(host.getSecretKeyId());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user