From f27c2e9a17fa2f0d99525f0704b3d98aada788da Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=92=B2=E5=85=88=E7=94=9F?= <821039958@qq.com>
Date: Fri, 18 Jul 2025 10:17:58 +0800
Subject: [PATCH 1/4] =?UTF-8?q?=E4=B8=BB=E6=9C=BA=E7=AE=A1=E7=90=86?=
=?UTF-8?q?=EF=BC=8C=E5=AF=B9=E5=AF=86=E7=A0=81=E7=A7=98=E9=92=A5=20?=
=?UTF-8?q?=E8=BF=9B=E8=A1=8C=E5=8A=A0=E5=AF=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
modules/module-ci-machine/pom.xml | 9 +++-
.../service/impl/MachineInfoServiceImpl.java | 4 ++
.../service/impl/SecretKeyServiceImpl.java | 12 ++---
.../module/machine/utils/CryptogramUtil.java | 45 ++++++++++---------
.../service/impl/HostConnectServiceImpl.java | 3 +-
5 files changed, 43 insertions(+), 30 deletions(-)
diff --git a/modules/module-ci-machine/pom.xml b/modules/module-ci-machine/pom.xml
index e36adc39..506a3bd5 100644
--- a/modules/module-ci-machine/pom.xml
+++ b/modules/module-ci-machine/pom.xml
@@ -24,10 +24,17 @@
cd.casic.boot
spring-boot-starter-security
+
com.antherd
sm-crypto
- 0.3.2.1-RELEASE
+ 0.3.2
+
+ org.openjdk.nashorn
+ nashorn-core
+ 15.4
+
+
diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineInfoServiceImpl.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineInfoServiceImpl.java
index 90428a99..d3137a52 100644
--- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineInfoServiceImpl.java
+++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineInfoServiceImpl.java
@@ -10,6 +10,7 @@ import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import cd.casic.module.machine.enums.MachineInfoStatus;
import cd.casic.module.machine.service.MachineInfoService;
import cd.casic.module.machine.service.SecretKeyService;
+import cd.casic.module.machine.utils.CryptogramUtil;
import com.google.common.annotations.VisibleForTesting;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@@ -47,6 +48,9 @@ public class MachineInfoServiceImpl implements MachineInfoService {
throw exception(SECRET_KEY_NOT_EXISTS);
}
}
+ if (Objects.nonNull(machineInfoDO.getPassword())) {
+ machineInfoDO.setPassword(CryptogramUtil.doEncrypt(machineInfoDO.getPassword()));
+ }
machineInfoMapper.insert(machineInfoDO);
return machineInfoDO.getId();
}
diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java
index b322a954..037c929a 100644
--- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java
+++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java
@@ -54,14 +54,10 @@ public class SecretKeyServiceImpl implements SecretKeyService {
public Long createSecretKey(SecretKeyVO secretKeyVO) {
validateSecretKeyAdd(secretKeyVO);
SecretKeyDO secretKeyDO = BeanUtils.toBean(secretKeyVO, SecretKeyDO.class);
- try {
- //密码加密
- secretKeyDO.setPassword(CryptogramUtil.doEncrypt(secretKeyVO.getPassword()));
- //公钥加密
- secretKeyDO.setPublicKey(CryptogramUtil.doEncrypt(secretKeyVO.getPublicKey()));
- } catch (ScriptException e) {
- throw exception(ENCRYPT_OR_DECRYPT_FAIL);
- }
+ //密码加密
+ secretKeyDO.setPassword(CryptogramUtil.doEncrypt(secretKeyVO.getPassword()));
+ //公钥加密
+ secretKeyDO.setPublicKey(CryptogramUtil.doEncrypt(secretKeyVO.getPublicKey()));
secretKeyMapper.insert(secretKeyDO);
return secretKeyDO.getId();
}
diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/CryptogramUtil.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/CryptogramUtil.java
index 0a91bfd1..421aeef7 100644
--- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/CryptogramUtil.java
+++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/CryptogramUtil.java
@@ -1,5 +1,6 @@
package cd.casic.module.machine.utils;
+
import cd.casic.module.machine.dal.model.Keypair;
import cn.hutool.log.Log;
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.Sm4Options;
-import javax.script.ScriptException;
-
+/**
+ * 加密工具类,本框架目前使用 https://github.com/antherd/sm-crypto 项目中一些加解密方式
+ * 使用小伙伴需要过等保密评相关,请在此处更改为自己的加密方法,或加密机,使用加密机同时需要替换公钥,私钥在内部无法导出,提供加密的方法
+ *
+ * @author yubaoshan
+ */
public class CryptogramUtil {
private static final Log log = Log.get();
@@ -16,11 +21,11 @@ public class CryptogramUtil {
/**
* 加密方法(Sm2 的专门针对前后端分离,非对称秘钥对的方式,暴露出去的公钥,对传输过程中的密码加个密)
*
+ * @author yubaoshan
* @param str 待加密数据
* @return 加密后的密文
- * @author yubaoshan
*/
- public static String doSm2Encrypt(String str) throws ScriptException {
+ public static String doSm2Encrypt (String str) {
return Sm2.doEncrypt(str, Keypair.PUBLIC_KEY);
}
@@ -28,11 +33,11 @@ public class CryptogramUtil {
* 解密方法
* 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可
*
+ * @author yubaoshan
* @param str 密文
* @return 解密后的明文
- * @author yubaoshan
*/
- public static String doSm2Decrypt(String str) throws ScriptException {
+ public static String doSm2Decrypt (String str) {
// 解密
return Sm2.doDecrypt(str, Keypair.PRIVATE_KEY);
}
@@ -40,11 +45,11 @@ public class CryptogramUtil {
/**
* 加密方法
*
+ * @author yubaoshan
* @param str 待加密数据
* @return 加密后的密文
- * @author yubaoshan
*/
- public static String doEncrypt(String str) throws ScriptException {
+ public static String doEncrypt (String str) {
// SM4 加密 cbc模式
Sm4Options sm4Options4 = new Sm4Options();
sm4Options4.setMode("cbc");
@@ -56,17 +61,17 @@ public class CryptogramUtil {
* 解密方法
* 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可
*
+ * @author yubaoshan
* @param str 密文
* @return 解密后的明文
- * @author yubaoshan
*/
- public static String doDecrypt(String str) throws ScriptException {
+ public static String doDecrypt (String str) {
// 解密,cbc 模式,输出 utf8 字符串
Sm4Options sm4Options8 = new Sm4Options();
sm4Options8.setMode("cbc");
sm4Options8.setIv("fedcba98765432100123456789abcdef");
- String docString = Sm4.decrypt(str, Keypair.KEY, sm4Options8);
- if (docString.isEmpty()) {
+ String docString = Sm4.decrypt(str, Keypair.KEY, sm4Options8);
+ if (docString.equals("")) {
log.warn(">>> 字段解密失败,返回原文值:{}", str);
return str;
} else {
@@ -77,34 +82,34 @@ public class CryptogramUtil {
/**
* 纯签名
*
+ * @author yubaoshan
* @param str 待签名数据
* @return 签名结果
- * @author yubaoshan
*/
- public static String doSignature(String str) throws ScriptException {
+ public static String doSignature (String str) {
return Sm2.doSignature(str, Keypair.PRIVATE_KEY);
}
/**
* 验证签名结果
*
- * @param originalStr 签名原文数据
- * @param str 签名结果
- * @return 是否通过
* @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);
}
/**
* 通过杂凑算法取得hash值,用于做数据完整性保护
*
+ * @author yubaoshan
* @param str 字符串
* @return hash 值
- * @author yubaoshan
*/
- public static String doHashValue(String str) throws ScriptException {
+ public static String doHashValue (String str) {
return Sm3.sm3(str);
}
diff --git a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/service/impl/HostConnectServiceImpl.java b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/service/impl/HostConnectServiceImpl.java
index 0056ca1e..d1a5e53a 100644
--- a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/service/impl/HostConnectServiceImpl.java
+++ b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/service/impl/HostConnectServiceImpl.java
@@ -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.mysql.MachineInfoMapper;
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.controller.dto.TerminalConnectDTO;
import cd.casic.module.terminal.enums.*;
@@ -64,7 +65,7 @@ public class HostConnectServiceImpl implements HostConnectService {
CONFIG.setUsername(host.getUsername());
if (host.getAuthenticationType().equals(1)){
CONFIG.setAuthType(HostSshAuthTypeEnum.PASSWORD.name());
- CONFIG.setPassword(host.getPassword());
+ CONFIG.setPassword(CryptogramUtil.doDecrypt(host.getPassword()));
}else {
CONFIG.setKeyId(host.getSecretKeyId());
}
From ebeac52bba1a173e1cc39b0b1e0ca800b2c57d9c Mon Sep 17 00:00:00 2001
From: HopeLi <1278288511@qq.com>
Date: Fri, 18 Jul 2025 16:15:56 +0800
Subject: [PATCH 2/4] =?UTF-8?q?0718=20ljc=20=20=E4=BF=AE=E6=94=B9=E7=9B=AE?=
=?UTF-8?q?=E6=A0=87=E7=AE=A1=E7=90=86=E5=88=A0=E9=99=A4=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../target/impl/TargetManagerServiceImpl.java | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java
index 90788568..c6ebbc67 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java
@@ -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.process.converter.TargetConverter;
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.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.target.TargetManager;
import cd.casic.ci.process.process.dataObject.target.TargetVersion;
import cd.casic.ci.process.process.service.target.TargetManagerService;
@@ -63,6 +65,8 @@ public class TargetManagerServiceImpl extends ServiceImpl pipelineQueryWrapper = new QueryWrapper<>();
+ pipelineQueryWrapper.eq("target_version_id",req.getId());
+ if (!CollectionUtils.isEmpty(pipelineDao.selectList(pipelineQueryWrapper))){
+ throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"目标版本被流水线引用,请先删除流水线");
+ }else {
+ targetVersionDao.deleteById(req.getId());
+ }
+
}
@Override
From ec75b6628199a3544143795599f255de0777bada Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=92=B2=E5=85=88=E7=94=9F?= <821039958@qq.com>
Date: Fri, 18 Jul 2025 17:56:26 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E7=BB=88=E7=AB=AF=20=E5=8F=AF=E7=A7=98?=
=?UTF-8?q?=E9=92=A5=20=E8=BF=9E=E6=8E=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../module/machine/controller/SecretKeyController.java | 8 ++++++++
.../casic/module/machine/service/SecretKeyService.java | 4 ++++
.../machine/service/impl/SecretKeyServiceImpl.java | 8 +++++++-
.../terminal/controller/dto/TerminalAccessDTO.java | 2 +-
.../casic/module/terminal/host/jsch/SessionStores.java | 10 +++++-----
5 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java
index 1624b1c2..c2cea7e2 100644
--- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java
+++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java
@@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -64,6 +65,13 @@ public class SecretKeyController {
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")
@Operation(summary = "获取密钥信息列表")
public CommonResult> getSecretKeyPage(@Valid @RequestBody SecretKeyVO secretKeyVO) {
diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java
index 19326057..08751530 100644
--- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java
+++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java
@@ -1,5 +1,6 @@
package cd.casic.module.machine.service;
+import cd.casic.framework.commons.pojo.CommonResult;
import cd.casic.framework.commons.pojo.PageResult;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import cd.casic.module.machine.dal.dataobject.SecretKeyDO;
@@ -30,6 +31,9 @@ public interface SecretKeyService {
*/
void deleteSecretKeyList(List ids);
+
+ Integer deleteById(Long id);
+
/**
* 根据id获取密钥对象
*/
diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java
index 037c929a..81e44218 100644
--- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java
+++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java
@@ -1,5 +1,6 @@
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.util.object.BeanUtils;
import cd.casic.module.machine.controller.vo.SecretKeyVO;
@@ -56,8 +57,9 @@ public class SecretKeyServiceImpl implements SecretKeyService {
SecretKeyDO secretKeyDO = BeanUtils.toBean(secretKeyVO, SecretKeyDO.class);
//密码加密
secretKeyDO.setPassword(CryptogramUtil.doEncrypt(secretKeyVO.getPassword()));
- //公钥加密
+ //公私钥加密
secretKeyDO.setPublicKey(CryptogramUtil.doEncrypt(secretKeyVO.getPublicKey()));
+ secretKeyDO.setPrivateKey(CryptogramUtil.doEncrypt(secretKeyVO.getPrivateKey()));
secretKeyMapper.insert(secretKeyDO);
return secretKeyDO.getId();
}
@@ -104,4 +106,8 @@ public class SecretKeyServiceImpl implements SecretKeyService {
}
return secretKeyDO;
}
+ @Override
+ public Integer deleteById(Long id){
+ return secretKeyMapper.deleteById(id);
+ }
}
diff --git a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/controller/dto/TerminalAccessDTO.java b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/controller/dto/TerminalAccessDTO.java
index 867c5795..88785d99 100644
--- a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/controller/dto/TerminalAccessDTO.java
+++ b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/controller/dto/TerminalAccessDTO.java
@@ -18,7 +18,7 @@ import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
-//@DesensitizeObject 、、todo 自动脱敏的注解
+//@DesensitizeObject 自动脱敏的注解
@Schema(name = "TerminalAccessDTO", description = "终端访问参数")
public class TerminalAccessDTO {
diff --git a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/host/jsch/SessionStores.java b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/host/jsch/SessionStores.java
index 2f7c264e..31df4aa4 100644
--- a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/host/jsch/SessionStores.java
+++ b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/host/jsch/SessionStores.java
@@ -1,6 +1,7 @@
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.AppConst;
import cd.casic.module.terminal.controller.dto.TerminalConnectDTO;
@@ -72,13 +73,13 @@ public class SessionStores {
if (useKey) {
// 加载密钥
String publicKey = Optional.ofNullable(conn.getPublicKey())
- .map(AesEncryptUtils::decryptAsString)
+ .map(CryptogramUtil::doDecrypt)
.orElse(null);
String privateKey = Optional.ofNullable(conn.getPrivateKey())
- .map(AesEncryptUtils::decryptAsString)
+ .map(CryptogramUtil::doDecrypt)
.orElse(null);
String password = Optional.ofNullable(conn.getPrivateKeyPassword())
- .map(AesEncryptUtils::decryptAsString)
+ .map(CryptogramUtil::doDecrypt)
.orElse(null);
sessionHolder.addIdentityValue(String.valueOf(conn.getKeyId()),
privateKey,
@@ -91,8 +92,7 @@ public class SessionStores {
if (!useKey) {
String password = conn.getPassword();
if (!Strings.isEmpty(password)) {
-// session.password(AesEncryptUtils.decryptAsString(password));
- session.password(password);
+ session.password(CryptogramUtil.doDecrypt(password));
}
}
// 超时时间
From 753cf7b798cbbbb2ddd36c942c478800afe5c3d0 Mon Sep 17 00:00:00 2001
From: Hope Li <1278288511@qq.com>
Date: Sun, 20 Jul 2025 20:15:58 +0800
Subject: [PATCH 4/4] =?UTF-8?q?0720=20=20=20ljc=20=20=20=E6=96=B0=E5=A2=9E?=
=?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=A8=A1=E6=9D=BF=E5=AF=BC=E5=85=A5?=
=?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E7=BC=96=E5=86=99=E6=B5=81=E6=B0=B4?=
=?UTF-8?q?=E7=BA=BF=E8=BD=AC=E6=96=B0=E5=A2=9E=E6=A8=A1=E6=9D=BF=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cd/casic/ci/api/PipelineController.java | 9 +++
.../ci/api/TemplateManagerController.java | 11 +++
.../req/template/TemplateCreateByDataReq.java | 33 ++++++++
.../TemplateStageCreateByDataReq.java | 43 ++++++++++
.../template/TemplateTaskCreateByDataReq.java | 53 ++++++++++++
.../process/converter/TemplateConverter.java | 3 +
.../converter/TemplateStageConverter.java | 4 +-
.../converter/TemplateTaskConverter.java | 5 +-
.../dataObject/template/TemplateStage.java | 2 +-
.../service/pipeline/PipelineService.java | 3 +
.../pipeline/impl/PipelineServiceImpl.java | 81 ++++++++++++++++++-
.../template/TemplateManagerService.java | 3 +
.../impl/TemplateManagerServiceImpl.java | 49 ++++++++++-
13 files changed, 289 insertions(+), 10 deletions(-)
create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateCreateByDataReq.java
create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateStageCreateByDataReq.java
create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateTaskCreateByDataReq.java
diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/PipelineController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/PipelineController.java
index bd6eafb7..04c4401a 100644
--- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/PipelineController.java
+++ b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/PipelineController.java
@@ -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.runContext.PipelineRunContext;
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.framework.commons.pojo.CommonResult;
import cd.casic.framework.commons.pojo.PageResult;
@@ -117,4 +118,12 @@ public class PipelineController {
pipelineExecutor.traversePipelineContext(pipelineId);
return CommonResult.success();
}
+
+ @PostMapping(path="/transformTemplateByPipeline")
+ public CommonResult transformTemplateByPipeline(@RequestBody @Valid BaseIdReq req){
+
+ pipelineService.transformTemplateByPipeline(req);
+
+ return CommonResult.success();
+ }
}
diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TemplateManagerController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TemplateManagerController.java
index 9a965e70..31f7a76a 100644
--- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TemplateManagerController.java
+++ b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TemplateManagerController.java
@@ -1,6 +1,7 @@
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.TemplateQueryReq;
import cd.casic.ci.process.dto.req.template.TemplateUpdateReq;
@@ -38,6 +39,16 @@ public class TemplateManagerController {
String templateId = templateManagerService.createTemplateManager(req);
return CommonResult.success(templateId);
}
+
+
+
+ @PostMapping(path="/createTemplateByData")
+ public CommonResult createTemplateByData(@RequestBody @Valid TemplateCreateByDataReq req){
+ String templateId = templateManagerService.createTemplateByData(req);
+ return CommonResult.success(templateId);
+ }
+
+
@PostMapping(path="/updateTemplateManager")
public CommonResult updateTemplateManager(@RequestBody TemplateUpdateReq req){
String templateId = templateManagerService.updateTemplateManager(req);
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateCreateByDataReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateCreateByDataReq.java
new file mode 100644
index 00000000..7d7a39c3
--- /dev/null
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateCreateByDataReq.java
@@ -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 stageCreateByDataReqList;
+}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateStageCreateByDataReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateStageCreateByDataReq.java
new file mode 100644
index 00000000..9617c2f3
--- /dev/null
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateStageCreateByDataReq.java
@@ -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 stageCreateByDataReqList;
+
+ private List taskCreateByDataReqList;
+}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateTaskCreateByDataReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateTaskCreateByDataReq.java
new file mode 100644
index 00000000..ab478560
--- /dev/null
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateTaskCreateByDataReq.java
@@ -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 taskProperties;
+}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateConverter.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateConverter.java
index f4fdb35e..7738050b 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateConverter.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateConverter.java
@@ -1,5 +1,6 @@
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.TemplateUpdateReq;
import cd.casic.ci.process.dto.resp.template.TemplateFindResp;
@@ -31,4 +32,6 @@ public interface TemplateConverter {
PipTask templateTaskToTask(TemplateTasksResp resp);
TemplateManager managerCreateReqToManager(TemplateCreateReq req);
TemplateManager managerUpdateReqToManager(TemplateUpdateReq req);
+
+ TemplateManager managerDataToManagerModule(TemplateCreateByDataReq req);
}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateStageConverter.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateStageConverter.java
index f83aeb9a..bf09029f 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateStageConverter.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateStageConverter.java
@@ -1,8 +1,7 @@
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.process.dataObject.stage.PipStage;
import cd.casic.ci.process.process.dataObject.template.TemplateStage;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@@ -15,4 +14,5 @@ public interface TemplateStageConverter {
public TemplateStageResp converter(TemplateStage stage);
public List converter(List stage);
+ TemplateStage stageDataToStageModule(TemplateStageCreateByDataReq o);
}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateTaskConverter.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateTaskConverter.java
index 9bfc1181..a5c3409c 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateTaskConverter.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateTaskConverter.java
@@ -1,8 +1,7 @@
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.process.dataObject.task.PipTask;
import cd.casic.ci.process.process.dataObject.template.TemplateTask;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@@ -11,4 +10,6 @@ import org.mapstruct.factory.Mappers;
public interface TemplateTaskConverter {
TemplateTaskConverter INSTANCE = Mappers.getMapper(TemplateTaskConverter.class);
TemplateTasksResp doToResp(TemplateTask task);
+
+ TemplateTask taskDataToTaskModule(TemplateTaskCreateByDataReq k);
}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/template/TemplateStage.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/template/TemplateStage.java
index 8b4e3818..ed55948f 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/template/TemplateStage.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/template/TemplateStage.java
@@ -41,7 +41,7 @@ public class TemplateStage extends PipBaseElement {
/**
* 是否为源码(0-否,1-是)
*/
- private String code;
+ private Boolean code = false;
/**
* 触发方式(0-手动触发,1-自动触发)
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 ba9389e5..ba4c1c04 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
@@ -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.resp.context.TreeRunContextResp;
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.framework.commons.pojo.PageResult;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -38,4 +39,6 @@ public interface PipelineService extends IService {
TreeRunContextResp getPipelineRunState(String pipelineId);
Long getGroupCount(String groupId);
+
+ void transformTemplateByPipeline(@Valid BaseIdReq req);
}
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 39db4e77..89bffb2d 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
@@ -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.PipelineReq;
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.pipeline.PipelineFindResp;
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.PipelineDao;
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.stage.PipStage;
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.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.stream.Collectors;
@@ -156,8 +166,6 @@ public class PipelineServiceImpl extends ServiceImpl i
PipStage pipStage = templateConverter.respToStage(o);
pipStage.setId(idWork.nextUUID(null));
pipStage.setPipelineId(pipeline.getId());
- pipStage.setCreateTime(LocalDateTime.now());
- pipStage.setCreator(String.valueOf(WebFrameworkUtils.getLoginUserId()));
if (o.isCode()){
pipStage.setCode(true);
}else {
@@ -540,6 +548,73 @@ public class PipelineServiceImpl extends ServiceImpl i
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 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 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 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);
+ }
+
private String between(LocalDateTime startTime,LocalDateTime endTime){
if (startTime==null||endTime==null) {
return "";
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/TemplateManagerService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/TemplateManagerService.java
index 35a19bc3..8ff118f5 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/TemplateManagerService.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/TemplateManagerService.java
@@ -1,6 +1,7 @@
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.TemplateQueryReq;
import cd.casic.ci.process.dto.req.template.TemplateUpdateReq;
@@ -28,4 +29,6 @@ public interface TemplateManagerService extends IService {
List findTemplateList(@Valid TemplateQueryReq query);
TemplateFindResp findTemplateById(String id);
+
+ String createTemplateByData(@Valid TemplateCreateByDataReq req);
}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/impl/TemplateManagerServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/impl/TemplateManagerServiceImpl.java
index 56cc7b57..a720e2ff 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/impl/TemplateManagerServiceImpl.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/impl/TemplateManagerServiceImpl.java
@@ -1,12 +1,15 @@
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.TemplateQueryReq;
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.TemplateStageResp;
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.TemplateStageDao;
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.service.template.TemplateManagerService;
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.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 com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -67,6 +68,8 @@ public class TemplateManagerServiceImpl extends ServiceImpl stageList = new ArrayList<>();
+ List 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) {
if (!StringUtils.isEmpty(templateFindResp.getCreator())){
AdminUserDO user = adminUserService.getUser(Long.valueOf(templateFindResp.getCreator()));