From 2ac1feb8e7dcc16ccf275efcfc0a6ade0e542d79 Mon Sep 17 00:00:00 2001 From: lijiahang Date: Thu, 2 Jun 2022 14:18:19 +0800 Subject: [PATCH] import application vcs. --- .../consts/app/ApplicationVcsFieldConst.java | 129 ++++++++++++++++++ .../orion/ops/consts/export/ImportType.java | 5 +- .../service/impl/DataImportServiceImpl.java | 126 ++++++++--------- .../app-profile-import-template.xlsx | Bin 0 -> 9276 bytes .../templates/app-vcs-import-template.xlsx | Bin 0 -> 9450 bytes .../application-import-template.xlsx | Bin 0 -> 9126 bytes .../command-template-import-template.xlsx | Bin 0 -> 9099 bytes .../templates/machine-import-template.xlsx | Bin 9166 -> 9424 bytes .../machine-proxy-import-template.xlsx | Bin 0 -> 9360 bytes .../templates/tail-file-import-template.xlsx | Bin 0 -> 9285 bytes 10 files changed, 196 insertions(+), 64 deletions(-) create mode 100644 orion-ops-service/src/main/java/com/orion/ops/consts/app/ApplicationVcsFieldConst.java create mode 100644 orion-ops-service/src/main/resources/templates/app-profile-import-template.xlsx create mode 100644 orion-ops-service/src/main/resources/templates/app-vcs-import-template.xlsx create mode 100644 orion-ops-service/src/main/resources/templates/application-import-template.xlsx create mode 100644 orion-ops-service/src/main/resources/templates/command-template-import-template.xlsx create mode 100644 orion-ops-service/src/main/resources/templates/machine-proxy-import-template.xlsx create mode 100644 orion-ops-service/src/main/resources/templates/tail-file-import-template.xlsx diff --git a/orion-ops-service/src/main/java/com/orion/ops/consts/app/ApplicationVcsFieldConst.java b/orion-ops-service/src/main/java/com/orion/ops/consts/app/ApplicationVcsFieldConst.java new file mode 100644 index 00000000..17de6102 --- /dev/null +++ b/orion-ops-service/src/main/java/com/orion/ops/consts/app/ApplicationVcsFieldConst.java @@ -0,0 +1,129 @@ +package com.orion.ops.consts.app; + +import com.orion.ops.entity.dto.importer.ApplicationVcsImportDTO; +import com.orion.ops.utils.Valid; +import com.orion.ops.utils.ValueMix; +import com.orion.utils.Exceptions; +import com.orion.utils.Strings; + +/** + * 应用版本仓库表字段常量 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2022/6/2 10:02 + */ +public class ApplicationVcsFieldConst { + + private ApplicationVcsFieldConst() { + } + + public static final int NAME_MAX_LEN = 32; + + public static final int URL_MAX_LEN = 1024; + + public static final int USERNAME_MAX_LEN = 128; + + public static final int TOKEN_MAX_LEN = 256; + + public static final int PASSWORD_MAX_LEN = 128; + + public static final int DESCRIPTION_MAX_LEN = 64; + + public static final String NAME_EMPTY_MESSAGE = "名称不能为空"; + + public static final String NAME_LEN_MESSAGE = "名称长度不能大于 " + NAME_MAX_LEN + "位"; + + public static final String URL_EMPTY_MESSAGE = "url 不能为空"; + + public static final String URL_LEN_MESSAGE = "url 长度不能大于 " + URL_MAX_LEN + "位"; + + public static final String AUTH_TYPE_EMPTY_MESSAGE = "认证方式不能为空"; + + public static final String AUTH_TYPE_VALUE_MESSAGE = "认证方式只能为 " + VcsAuthType.PASSWORD.getLabel() + "和" + VcsAuthType.TOKEN.getLabel(); + + public static final String TOKEN_TYPE_EMPTY_MESSAGE = "认证方式为" + VcsAuthType.TOKEN.getLabel() + "时 令牌类型不能为空"; + + public static final String TOKEN_TYPE_VALUE_MESSAGE = "令牌类型只能为 " + VcsTokenType.GITHUB.getLabel() + "," + VcsTokenType.GITEE.getLabel() + "," + VcsTokenType.GITLAB.getLabel(); + + public static final String PASSWORD_TOKEN_DECRYPT_MESSAGE = "密码/令牌密文解密失败"; + + public static final String USERNAME_PASSWORD_MESSAGE = "用户名和密码必须同时存在"; + + public static final String TOKEN_EMPTY_MESSAGE = "令牌不能为空"; + + public static final String USERNAME_TOKEN_MESSAGE = "令牌类型为 " + VcsTokenType.GITEE.getLabel() + " 时 用户名和秘钥必须同时存在"; + + public static final String USERNAME_LEN_MESSAGE = "用户名长度不能大于 " + USERNAME_MAX_LEN + "位"; + + public static final String TOKEN_LEN_MESSAGE = "秘钥长度不能大于 " + TOKEN_MAX_LEN + "位"; + + public static final String PASSWORD_LEN_MESSAGE = "密码长度不能大于 " + PASSWORD_MAX_LEN + "位"; + + public static final String DESCRIPTION_LEN_MESSAGE = "描述长度不能大于 " + DESCRIPTION_MAX_LEN + "位"; + + /** + * 验证数据合法性 + * + * @param o o + */ + public static void validData(Object o) { + if (o instanceof ApplicationVcsImportDTO) { + validImport((ApplicationVcsImportDTO) o); + } + } + + /** + * 验证导入数据 + * + * @param row row + */ + public static void validImport(ApplicationVcsImportDTO row) { + String name = row.getName(); + String url = row.getUrl(); + String authTypeValue = row.getAuthType(); + String tokenTypeValue = row.getTokenType(); + String username = row.getUsername(); + String encryptAuthValue = row.getEncryptAuthValue(); + String importAuthValue = row.getImportAuthValue(); + String description = row.getDescription(); + Valid.notBlank(name, NAME_EMPTY_MESSAGE); + Valid.validLengthLte(name, NAME_MAX_LEN, NAME_LEN_MESSAGE); + Valid.notBlank(url, URL_EMPTY_MESSAGE); + Valid.validLengthLte(url, URL_MAX_LEN, URL_LEN_MESSAGE); + Valid.notBlank(authTypeValue, AUTH_TYPE_EMPTY_MESSAGE); + VcsAuthType authType = VcsAuthType.of(authTypeValue); + Valid.notNull(authType, AUTH_TYPE_VALUE_MESSAGE); + if (!Strings.isEmpty(encryptAuthValue)) { + String decryptValue = ValueMix.decrypt(encryptAuthValue); + Valid.notNull(decryptValue, PASSWORD_TOKEN_DECRYPT_MESSAGE); + row.setDecryptAuthValue(decryptValue); + } + if (VcsAuthType.PASSWORD.equals(authType)) { + // 密码验证 + if (!Strings.isEmpty(importAuthValue)) { + Valid.validLengthLte(importAuthValue, PASSWORD_MAX_LEN, PASSWORD_LEN_MESSAGE); + } + if (Strings.isEmpty(username) ^ (Strings.isEmpty(row.getDecryptAuthValue()) && Strings.isEmpty(importAuthValue))) { + throw Exceptions.argument(USERNAME_PASSWORD_MESSAGE); + } + } else { + // 令牌验证 + Valid.notBlank(tokenTypeValue, TOKEN_TYPE_EMPTY_MESSAGE); + VcsTokenType tokenType = VcsTokenType.of(tokenTypeValue); + Valid.notNull(tokenType, TOKEN_TYPE_VALUE_MESSAGE); + if (!Strings.isEmpty(importAuthValue)) { + Valid.validLengthLte(importAuthValue, TOKEN_MAX_LEN, TOKEN_LEN_MESSAGE); + } + Valid.isTrue(!Strings.isBlank(importAuthValue) || !Strings.isBlank(row.getDecryptAuthValue()), TOKEN_EMPTY_MESSAGE); + if (VcsTokenType.GITEE.equals(tokenType)) { + Valid.notBlank(username, USERNAME_TOKEN_MESSAGE); + Valid.validLengthLte(username, USERNAME_MAX_LEN, USERNAME_LEN_MESSAGE); + } + } + if (!Strings.isBlank(description)) { + Valid.validLengthLte(description, DESCRIPTION_MAX_LEN, DESCRIPTION_LEN_MESSAGE); + } + } + +} diff --git a/orion-ops-service/src/main/java/com/orion/ops/consts/export/ImportType.java b/orion-ops-service/src/main/java/com/orion/ops/consts/export/ImportType.java index 57a56f42..089fba80 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/consts/export/ImportType.java +++ b/orion-ops-service/src/main/java/com/orion/ops/consts/export/ImportType.java @@ -2,6 +2,7 @@ package com.orion.ops.consts.export; import com.orion.ops.consts.app.ApplicationFieldConst; import com.orion.ops.consts.app.ApplicationProfileFieldConst; +import com.orion.ops.consts.app.ApplicationVcsFieldConst; import com.orion.ops.consts.command.CommandTemplateFieldConst; import com.orion.ops.consts.machine.MachineFieldConst; import com.orion.ops.consts.machine.MachineProxyFieldConst; @@ -54,7 +55,7 @@ public enum ImportType { * 导入日志文件 */ MACHINE_TAIL_FILE(130, - "/templates/machine-tail-file-import-template.xlsx", + "/templates/tail-file-import-template.xlsx", "日志文件导入模板.xlsx", MachineTailFileImportDTO.class, FileTailFieldConst::validData, @@ -93,7 +94,7 @@ public enum ImportType { "/templates/app-vcs-import-template.xlsx", "应用仓库导入模板.xlsx", ApplicationVcsImportDTO.class, - FileTailFieldConst::validData, + ApplicationVcsFieldConst::validData, ApplicationVcsDO.class, MessageType.APP_VCS_IMPORT_SUCCESS, MessageType.APP_VCS_IMPORT_FAILURE), diff --git a/orion-ops-service/src/main/java/com/orion/ops/service/impl/DataImportServiceImpl.java b/orion-ops-service/src/main/java/com/orion/ops/service/impl/DataImportServiceImpl.java index ac3905b8..f4cb8bb9 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/service/impl/DataImportServiceImpl.java +++ b/orion-ops-service/src/main/java/com/orion/ops/service/impl/DataImportServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.orion.id.UUIds; import com.orion.office.excel.reader.ExcelBeanReader; import com.orion.ops.consts.KeyConst; @@ -44,6 +45,7 @@ import java.io.File; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -110,18 +112,8 @@ public class DataImportServiceImpl implements DataImportService { // 检查数据合法性 this.validImportRows(ImportType.MACHINE, rows); // 通过唯一标识查询机器 - List presentMachines; - List tagList = rows.stream() - .filter(s -> Objects.isNull(s.getIllegalMessage())) - .map(MachineInfoImportDTO::getTag) - .collect(Collectors.toList()); - if (tagList.isEmpty()) { - presentMachines = Lists.empty(); - } else { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper() - .in(MachineInfoDO::getMachineTag, tagList); - presentMachines = machineInfoDAO.selectList(wrapper); - } + List presentMachines = this.getImportRowsPresentValues(rows, MachineInfoImportDTO::getTag, + machineInfoDAO, MachineInfoDO::getMachineTag); // 检查数据是否存在 this.checkImportRowsPresent(rows, MachineInfoImportDTO::getTag, presentMachines, MachineInfoDO::getMachineTag, MachineInfoDO::getId); @@ -149,18 +141,8 @@ public class DataImportServiceImpl implements DataImportService { MachineTailFileImportDTO::setMachineId, MessageConst.UNKNOWN_MACHINE_TAG); // 通过别名查询文件 - List presentFiles; - List nameList = rows.stream() - .filter(s -> Objects.isNull(s.getIllegalMessage())) - .map(MachineTailFileImportDTO::getName) - .collect(Collectors.toList()); - if (nameList.isEmpty()) { - presentFiles = Lists.empty(); - } else { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper() - .in(FileTailListDO::getAliasName, nameList); - presentFiles = fileTailListDAO.selectList(wrapper); - } + List presentFiles = this.getImportRowsPresentValues(rows, MachineTailFileImportDTO::getName, + fileTailListDAO, FileTailListDO::getAliasName); // 检查数据是否存在 this.checkImportRowsPresent(rows, MachineTailFileImportDTO::getName, presentFiles, FileTailListDO::getAliasName, FileTailListDO::getId); @@ -173,18 +155,9 @@ public class DataImportServiceImpl implements DataImportService { // 检查数据合法性 this.validImportRows(ImportType.PROFILE, rows); // 通过唯一标识查询环境 - List presentProfiles; - List tagList = rows.stream() - .filter(s -> Objects.isNull(s.getIllegalMessage())) - .map(ApplicationProfileImportDTO::getTag) - .collect(Collectors.toList()); - if (tagList.isEmpty()) { - presentProfiles = Lists.empty(); - } else { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper() - .in(ApplicationProfileDO::getProfileTag, tagList); - presentProfiles = applicationProfileDAO.selectList(wrapper); - } + List presentProfiles = this.getImportRowsPresentValues(rows, + ApplicationProfileImportDTO::getTag, + applicationProfileDAO, ApplicationProfileDO::getProfileTag); // 检查数据是否存在 this.checkImportRowsPresent(rows, ApplicationProfileImportDTO::getTag, presentProfiles, ApplicationProfileDO::getProfileTag, ApplicationProfileDO::getId); @@ -204,18 +177,9 @@ public class DataImportServiceImpl implements DataImportService { ApplicationImportDTO::setVcsId, MessageConst.UNKNOWN_APP_VCS); // 通过唯一标识查询应用 - List presentApps; - List tagList = rows.stream() - .filter(s -> Objects.isNull(s.getIllegalMessage())) - .map(ApplicationImportDTO::getTag) - .collect(Collectors.toList()); - if (tagList.isEmpty()) { - presentApps = Lists.empty(); - } else { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper() - .in(ApplicationInfoDO::getAppTag, tagList); - presentApps = applicationInfoDAO.selectList(wrapper); - } + List presentApps = this.getImportRowsPresentValues(rows, + ApplicationImportDTO::getTag, + applicationInfoDAO, ApplicationInfoDO::getAppTag); // 检查数据是否存在 this.checkImportRowsPresent(rows, ApplicationImportDTO::getTag, presentApps, ApplicationInfoDO::getAppTag, ApplicationInfoDO::getId); @@ -225,7 +189,17 @@ public class DataImportServiceImpl implements DataImportService { @Override public DataImportCheckVO checkAppVcsImportData(List rows) { - return null; + // 检查数据合法性 + this.validImportRows(ImportType.VCS, rows); + // 通过唯一标识查询应用 + List presentVcsList = this.getImportRowsPresentValues(rows, + ApplicationVcsImportDTO::getName, + applicationVcsDAO, ApplicationVcsDO::getVcsName); + // 检查数据是否存在 + this.checkImportRowsPresent(rows, ApplicationVcsImportDTO::getName, + presentVcsList, ApplicationVcsDO::getVcsName, ApplicationVcsDO::getId); + // 设置导入检查数据 + return this.setImportCheckRows(ImportType.VCS, rows); } @Override @@ -233,18 +207,9 @@ public class DataImportServiceImpl implements DataImportService { // 检查数据合法性 this.validImportRows(ImportType.COMMAND_TEMPLATE, rows); // 通过名称查询模板 - List presentTemplates; - List nameList = rows.stream() - .filter(s -> Objects.isNull(s.getIllegalMessage())) - .map(CommandTemplateImportDTO::getName) - .collect(Collectors.toList()); - if (nameList.isEmpty()) { - presentTemplates = Lists.empty(); - } else { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper() - .in(CommandTemplateDO::getTemplateName, nameList); - presentTemplates = commandTemplateDAO.selectList(wrapper); - } + List presentTemplates = this.getImportRowsPresentValues(rows, + CommandTemplateImportDTO::getName, + commandTemplateDAO, CommandTemplateDO::getTemplateName); // 检查数据是否存在 this.checkImportRowsPresent(rows, CommandTemplateImportDTO::getName, presentTemplates, CommandTemplateDO::getTemplateName, CommandTemplateDO::getId); @@ -256,7 +221,15 @@ public class DataImportServiceImpl implements DataImportService { @Override public void importMachineInfoData(DataImportDTO importData) { - this.doImportData(importData, machineInfoDAO); + this.doImportData(importData, machineInfoDAO, v -> { + // ignore + }, v -> { + // 检查是否有代理 + Optional.ofNullable(v.getId()) + .map(machineInfoDAO::selectById) + .map(MachineInfoDO::getProxyId) + .ifPresent(v::setProxyId); + }); } @Override @@ -406,6 +379,35 @@ public class DataImportServiceImpl implements DataImportService { } } + /** + * 获取导入行已存在的数据 + * + * @param rows rows + * @param rowSymbolGetter rowSymbolGetter + * @param mapper mapper + * @param domainSymbolGetter domainSymbolGetter + * @param row type + * @param domain type + * @return present domain + */ + private List getImportRowsPresentValues(List rows, + Function rowSymbolGetter, + BaseMapper mapper, + SFunction domainSymbolGetter) { + List symbolList = rows.stream() + .filter(s -> Objects.isNull(s.getIllegalMessage())) + .map(rowSymbolGetter) + .collect(Collectors.toList()); + if (symbolList.isEmpty()) { + return Lists.empty(); + } else { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .in(domainSymbolGetter, symbolList); + return mapper.selectList(wrapper); + } + } + + /** * 检查导入行是否存在 * diff --git a/orion-ops-service/src/main/resources/templates/app-profile-import-template.xlsx b/orion-ops-service/src/main/resources/templates/app-profile-import-template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8fabfc58c5f6ac33864dab91aae24fb7ed0099ab GIT binary patch literal 9276 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 LL2@Ld&wBp{cB2go literal 0 HcmV?d00001 diff --git a/orion-ops-service/src/main/resources/templates/app-vcs-import-template.xlsx b/orion-ops-service/src/main/resources/templates/app-vcs-import-template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..526bace5e26d2b36dfbce3a125d4f09affaaaeda GIT binary patch literal 9450 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
f#@IPe!f1dog(EsH7J8K31 c%lD7$FDC{4R3AJJ&7gt7KH3cuKmGRq0LTw+WB>pF literal 0 HcmV?d00001 diff --git a/orion-ops-service/src/main/resources/templates/application-import-template.xlsx b/orion-ops-service/src/main/resources/templates/application-import-template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4a3b74b140a7aa114863aee8c68b8e1c400acb04 GIT binary patch literal 9126 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 P2L=TEqg)ut)3^Tz2#3CF literal 0 HcmV?d00001 diff --git a/orion-ops-service/src/main/resources/templates/command-template-import-template.xlsx b/orion-ops-service/src/main/resources/templates/command-template-import-template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..912a5ff3ff32c150237c9c08afe9d13d2e352e1e GIT binary patch literal 9099 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 diff --git a/orion-ops-service/src/main/resources/templates/machine-proxy-import-template.xlsx b/orion-ops-service/src/main/resources/templates/machine-proxy-import-template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..73f89ac2e7c5812c38b03fa0ee2a2ec66f1bb121 GIT binary patch literal 9360 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 literal 0 HcmV?d00001 diff --git a/orion-ops-service/src/main/resources/templates/tail-file-import-template.xlsx b/orion-ops-service/src/main/resources/templates/tail-file-import-template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a5906c5bab260235cbbe8c9bd4a8c72f5c7345a7 GIT binary patch literal 9285 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 O(