From 972f064c16310e27bad1cdf46f231114d5cb79db Mon Sep 17 00:00:00 2001 From: dengqichen Date: Mon, 29 Dec 2025 11:07:44 +0800 Subject: [PATCH] 1.45 --- backend/pom.xml | 8 +- .../deploy/api/ApplicationApiController.java | 8 +- .../api/ApplicationCategoryApiController.java | 2 +- .../deploy/api/EnvironmentApiController.java | 4 +- .../api/JenkinsSyncHistoryApiController.java | 18 +- .../api/RepositoryGroupApiController.java | 15 +- .../impl/JenkinsServiceIntegrationImpl.java | 95 +++++-- .../repository/IApplicationRepository.java | 13 + .../ApplicationEnabledStatistics.java | 20 ++ .../deploy/service/IApplicationService.java | 11 +- .../service/impl/ApplicationServiceImpl.java | 27 ++ .../backend/framework/dto/PageResult.java | 239 ++++++++++++++++++ .../framework/utils/UserAgentUtil.java | 114 ++++----- .../backend/system/api/RoleApiController.java | 15 +- .../workflow/api/FormDataApiController.java | 15 +- .../db/changelog/init/v1.0.0-data.sql | 107 +++++--- .../db/changelog/sql/20251209141300-01.sql | 10 +- 17 files changed, 552 insertions(+), 169 deletions(-) create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/projection/ApplicationEnabledStatistics.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/framework/dto/PageResult.java diff --git a/backend/pom.xml b/backend/pom.xml index fe0f3fd9..93fade5a 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -137,11 +137,11 @@ provided - + - nl.basjes.parse.useragent - yauaa - 7.26.0 + com.blueconic + browscap-java + 1.4.3 diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationApiController.java index bb5833ba..a91f2392 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationApiController.java @@ -7,10 +7,10 @@ import com.qqchen.deploy.backend.deploy.query.ApplicationQuery; import com.qqchen.deploy.backend.deploy.service.IApplicationService; import com.qqchen.deploy.backend.framework.api.Response; import com.qqchen.deploy.backend.framework.controller.BaseController; +import com.qqchen.deploy.backend.framework.dto.PageResult; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; -import org.springframework.data.domain.Page; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -54,9 +54,9 @@ public class ApplicationApiController extends BaseController> page(ApplicationQuery query) { - return super.page(query); + @GetMapping("/page") + public Response> pageWithStats(ApplicationQuery query) { + return Response.success(applicationService.pageWithStats(query)); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationCategoryApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationCategoryApiController.java index 63117b61..f2846192 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationCategoryApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationCategoryApiController.java @@ -34,7 +34,7 @@ public class ApplicationCategoryApiController extends BaseController update(Long id, @Validated @RequestBody ApplicationCategoryDTO dto) { + public Response update(@PathVariable Long id, @Validated @RequestBody ApplicationCategoryDTO dto) { return super.update(id, dto); } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/EnvironmentApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/EnvironmentApiController.java index 0b3ffcdd..6936a9d3 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/EnvironmentApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/EnvironmentApiController.java @@ -37,12 +37,12 @@ public class EnvironmentApiController extends BaseController delete(@Validated @RequestBody Long id) { + public Response delete(@PathVariable Long id) { return super.delete(id); } @Override - public Response findById(@Validated @RequestBody Long id) { + public Response findById(@PathVariable Long id) { return super.findById(id); } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsSyncHistoryApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsSyncHistoryApiController.java index 712aa362..9f4119d9 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsSyncHistoryApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsSyncHistoryApiController.java @@ -8,8 +8,8 @@ import com.qqchen.deploy.backend.deploy.query.JenkinsSyncHistoryQuery; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import jakarta.servlet.http.HttpServletResponse; import java.util.List; @@ -26,23 +26,23 @@ public class JenkinsSyncHistoryApiController extends BaseController create(JenkinsSyncHistoryDTO dto) { + public Response create(@Validated @RequestBody JenkinsSyncHistoryDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, JenkinsSyncHistoryDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody JenkinsSyncHistoryDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/RepositoryGroupApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/RepositoryGroupApiController.java index 77781ebc..b60d26b9 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/RepositoryGroupApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/RepositoryGroupApiController.java @@ -13,6 +13,7 @@ import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -31,23 +32,23 @@ public class RepositoryGroupApiController extends BaseController create(RepositoryGroupDTO dto) { + public Response create(@Validated @RequestBody RepositoryGroupDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, RepositoryGroupDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody RepositoryGroupDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/JenkinsServiceIntegrationImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/JenkinsServiceIntegrationImpl.java index 36dc5692..3425945e 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/JenkinsServiceIntegrationImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/JenkinsServiceIntegrationImpl.java @@ -57,6 +57,9 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; +import org.springframework.http.client.SimpleClientHttpRequestFactory; @Slf4j @Service @@ -65,12 +68,24 @@ public class JenkinsServiceIntegrationImpl extends BaseExternalSystemIntegration @Resource private IExternalSystemRepository systemRepository; - private final RestTemplate restTemplate = new RestTemplate(); + private final RestTemplate restTemplate; // Jenkins Crumb缓存 - 线程安全 private static final Map CRUMB_CACHE = new ConcurrentHashMap<>(); + + // 每个Jenkins系统独立的锁 - 避免不同系统间互相阻塞 + private static final Map SYSTEM_LOCKS = new ConcurrentHashMap<>(); private static final long CRUMB_EXPIRE_TIME = 25 * 60 * 1000; // 25分钟过期 + private static final long LOCK_TIMEOUT_SECONDS = 3; // 锁超时时间:3秒 + + public JenkinsServiceIntegrationImpl() { + // 配置RestTemplate超时,防止网络故障时长时间阻塞 + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setConnectTimeout(5000); // 连接超时5秒 + factory.setReadTimeout(10000); // 读取超时10秒 + this.restTemplate = new RestTemplate(factory); + } /** * Jenkins Crumb缓存内部类 @@ -95,29 +110,71 @@ public class JenkinsServiceIntegrationImpl extends BaseExternalSystemIntegration /** * 线程安全地获取Jenkins Crumb缓存 + * 使用ReentrantLock + tryLock实现带超时的锁机制,避免死锁 * 如果缓存不存在或已过期,会重新获取和解密 */ - private synchronized JenkinsCrumbCache getCrumbCache(ExternalSystem system) { + private JenkinsCrumbCache getCrumbCache(ExternalSystem system) { Long systemId = system.getId(); + + // 快速路径:如果缓存有效,直接返回 JenkinsCrumbCache cache = CRUMB_CACHE.get(systemId); - - if (cache == null || cache.isExpired()) { - log.debug("Jenkins Crumb缓存失效,重新获取: systemId={}", systemId); - - // 解密系统信息(只在这里解密一次) - ExternalSystem decryptedSystem = decryptSystem(system); - - // 获取新的crumb - JenkinsCrumbIssuerResponse crumb = fetchCrumbFromJenkins(decryptedSystem); - - // 创建新缓存 - cache = new JenkinsCrumbCache(crumb, decryptedSystem); - CRUMB_CACHE.put(systemId, cache); - - log.debug("Jenkins Crumb缓存已更新: systemId={}, expireTime={}", systemId, cache.expireTime); + if (cache != null && !cache.isExpired()) { + return cache; + } + + // 获取该Jenkins系统的独立锁(公平锁,避免线程饥饿) + ReentrantLock lock = SYSTEM_LOCKS.computeIfAbsent(systemId, k -> new ReentrantLock(true)); + + try { + // 尝试获取锁,最多等待3秒 + if (lock.tryLock(LOCK_TIMEOUT_SECONDS, TimeUnit.SECONDS)) { + try { + // 双重检查:获取锁后再次检查缓存 + cache = CRUMB_CACHE.get(systemId); + if (cache != null && !cache.isExpired()) { + log.debug("Jenkins Crumb缓存命中(双重检查): systemId={}", systemId); + return cache; + } + + log.debug("Jenkins Crumb缓存失效,重新获取: systemId={}", systemId); + + // 解密系统信息(只在这里解密一次) + ExternalSystem decryptedSystem = decryptSystem(system); + + // 获取新的crumb(网络I/O,但不持有synchronized锁) + JenkinsCrumbIssuerResponse crumb = fetchCrumbFromJenkins(decryptedSystem); + + // 创建新缓存 + cache = new JenkinsCrumbCache(crumb, decryptedSystem); + CRUMB_CACHE.put(systemId, cache); + + log.debug("Jenkins Crumb缓存已更新: systemId={}, expireTime={}", systemId, cache.expireTime); + return cache; + } finally { + lock.unlock(); + } + } else { + // 获取锁超时,使用降级策略 + log.warn("获取Jenkins Crumb锁超时({}秒),systemId={}", LOCK_TIMEOUT_SECONDS, systemId); + + // 降级策略:使用过期缓存(容忍短暂的认证失败) + cache = CRUMB_CACHE.get(systemId); + if (cache != null) { + log.warn("使用过期的Jenkins Crumb缓存作为降级: systemId={}, 过期时间差={}ms", + systemId, System.currentTimeMillis() - cache.expireTime); + return cache; + } + + // 没有缓存可用,抛出异常 + throw new BusinessException(ResponseCode.JENKINS_API_ERROR, + new Object[]{"CRUMB_LOCK_TIMEOUT", "获取Jenkins认证信息超时,请稍后重试"}); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.error("获取Jenkins Crumb锁被中断: systemId={}", systemId, e); + throw new BusinessException(ResponseCode.JENKINS_API_ERROR, + new Object[]{"CRUMB_LOCK_INTERRUPTED", "获取Jenkins认证信息被中断"}); } - - return cache; } /** diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IApplicationRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IApplicationRepository.java index bef80b10..1e49e302 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IApplicationRepository.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IApplicationRepository.java @@ -1,7 +1,9 @@ package com.qqchen.deploy.backend.deploy.repository; import com.qqchen.deploy.backend.deploy.entity.Application; +import com.qqchen.deploy.backend.deploy.repository.projection.ApplicationEnabledStatistics; import com.qqchen.deploy.backend.framework.repository.IBaseRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.List; @@ -14,4 +16,15 @@ public interface IApplicationRepository extends IBaseRepository countByEnabledGroupBy(); + } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/projection/ApplicationEnabledStatistics.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/projection/ApplicationEnabledStatistics.java new file mode 100644 index 00000000..97118663 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/projection/ApplicationEnabledStatistics.java @@ -0,0 +1,20 @@ +package com.qqchen.deploy.backend.deploy.repository.projection; + +/** + * 应用启用状态统计投影接口 + * 用于Spring Data JPA的查询结果映射 + */ +public interface ApplicationEnabledStatistics { + + /** + * 获取启用状态 + * @return true=已启用,false=已禁用 + */ + Boolean getEnabled(); + + /** + * 获取该状态下的应用数量 + * @return 应用数量 + */ + Long getCount(); +} diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IApplicationService.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IApplicationService.java index f759939a..08b6a1a2 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IApplicationService.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IApplicationService.java @@ -4,15 +4,20 @@ import com.qqchen.deploy.backend.deploy.dto.ApplicationDTO; import com.qqchen.deploy.backend.deploy.dto.DevelopmentLanguageTypeDTO; import com.qqchen.deploy.backend.deploy.entity.Application; import com.qqchen.deploy.backend.deploy.query.ApplicationQuery; +import com.qqchen.deploy.backend.framework.dto.PageResult; import com.qqchen.deploy.backend.framework.service.IBaseService; -import org.springframework.data.domain.Page; import java.util.List; public interface IApplicationService extends IBaseService { - Page page(ApplicationQuery query); - + /** + * 分页查询应用(带统计信息) + * + * @param query 查询条件 + * @return 分页结果,包含已启用和已禁用的总数统计 + */ + PageResult pageWithStats(ApplicationQuery query); List getAllDevelopmentLanguageTypes(); diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ApplicationServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ApplicationServiceImpl.java index 2f535bea..47808470 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ApplicationServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ApplicationServiceImpl.java @@ -19,7 +19,9 @@ import com.qqchen.deploy.backend.deploy.repository.IApplicationRepository; import com.qqchen.deploy.backend.deploy.repository.IExternalSystemRepository; import com.qqchen.deploy.backend.deploy.repository.IRepositoryProjectRepository; import com.qqchen.deploy.backend.deploy.repository.ITeamApplicationRepository; +import com.qqchen.deploy.backend.deploy.repository.projection.ApplicationEnabledStatistics; import com.qqchen.deploy.backend.deploy.service.IApplicationService; +import com.qqchen.deploy.backend.framework.dto.PageResult; import com.qqchen.deploy.backend.framework.enums.ResponseCode; import com.qqchen.deploy.backend.framework.exception.BusinessException; import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl; @@ -109,6 +111,31 @@ public class ApplicationServiceImpl extends BaseServiceImpl pageWithStats(ApplicationQuery query) { + Page page = super.page(query); + fillApplicationRelations(page.getContent()); + + // 一次查询获取启用和禁用状态的应用总数(按enabled分组统计) + List statistics = applicationRepository.countByEnabledGroupBy(); + + // 解析统计结果 + Long enabledCount = 0L; + Long disabledCount = 0L; + for (ApplicationEnabledStatistics stat : statistics) { + if (Boolean.TRUE.equals(stat.getEnabled())) { + enabledCount = stat.getCount(); + } else if (Boolean.FALSE.equals(stat.getEnabled())) { + disabledCount = stat.getCount(); + } + } + + // 构建PageResult并添加统计字段 + return new PageResult<>(page) + .addExtraField("enabledCount", enabledCount) + .addExtraField("disabledCount", disabledCount); + } + @Override public Page page(ApplicationQuery query) { Page page = super.page(query); diff --git a/backend/src/main/java/com/qqchen/deploy/backend/framework/dto/PageResult.java b/backend/src/main/java/com/qqchen/deploy/backend/framework/dto/PageResult.java new file mode 100644 index 00000000..47ea765a --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/framework/dto/PageResult.java @@ -0,0 +1,239 @@ +package com.qqchen.deploy.backend.framework.dto; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +/** + * 通用分页结果包装类 + * 实现Page接口,保留Spring Data Page的所有字段,并支持添加额外的统计字段 + * 额外字段会通过@JsonAnyGetter展开到与totalElements同一层级 + * + * @param 分页数据类型 + */ +public class PageResult implements Page, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 内部Page对象,用于委托所有Page接口方法 + */ + @JsonIgnore + private final Page page; + + /** + * 额外的统计字段,会被展开到JSON的顶层 + */ + @JsonIgnore + private final Map extraFields = new HashMap<>(); + + /** + * 构造函数 + * + * @param page Spring Data Page对象 + */ + public PageResult(Page page) { + this.page = page; + } + + /** + * 添加额外的统计字段 + * + * @param key 字段名 + * @param value 字段值 + * @return 当前对象(支持链式调用) + */ + public PageResult addExtraField(String key, Object value) { + this.extraFields.put(key, value); + return this; + } + + /** + * Jackson注解:将extraFields的内容展开到JSON的顶层 + * 使得额外字段与totalElements等在同一层级 + */ + @JsonAnyGetter + public Map getExtraFields() { + return extraFields; + } + + /** + * Jackson注解:支持反序列化时设置额外字段 + */ + @JsonAnySetter + public void setExtraField(String key, Object value) { + extraFields.put(key, value); + } + + // ==================== 实现Page接口的所有方法 ==================== + + /** + * 获取当前页的数据列表 + */ + @Override + public List getContent() { + return page.getContent(); + } + + /** + * 获取总记录数 + */ + @Override + public long getTotalElements() { + return page.getTotalElements(); + } + + /** + * 获取总页数 + */ + @Override + public int getTotalPages() { + return page.getTotalPages(); + } + + /** + * 获取当前页码(从0开始) + */ + @Override + public int getNumber() { + return page.getNumber(); + } + + /** + * 获取每页大小 + */ + @Override + public int getSize() { + return page.getSize(); + } + + /** + * 获取当前页的实际记录数 + */ + @Override + public int getNumberOfElements() { + return page.getNumberOfElements(); + } + + /** + * 是否有内容 + */ + @Override + public boolean hasContent() { + return page.hasContent(); + } + + /** + * 是否为空 + */ + @Override + public boolean isEmpty() { + return page.isEmpty(); + } + + /** + * 是否为第一页 + */ + @Override + public boolean isFirst() { + return page.isFirst(); + } + + /** + * 是否为最后一页 + */ + @Override + public boolean isLast() { + return page.isLast(); + } + + /** + * 是否有下一页 + */ + @Override + public boolean hasNext() { + return page.hasNext(); + } + + /** + * 是否有上一页 + */ + @Override + public boolean hasPrevious() { + return page.hasPrevious(); + } + + /** + * 获取排序信息 + */ + @Override + public Sort getSort() { + return page.getSort(); + } + + /** + * 获取分页信息 + */ + @Override + public Pageable getPageable() { + return page.getPageable(); + } + + /** + * 获取下一页的分页信息 + */ + @Override + public Pageable nextPageable() { + return page.nextPageable(); + } + + /** + * 获取上一页的分页信息 + */ + @Override + public Pageable previousPageable() { + return page.previousPageable(); + } + + /** + * 转换当前页的数据类型 + * + * @param converter 转换函数 + * @param 目标类型 + * @return 新的PageResult对象 + */ + @Override + public PageResult map(Function converter) { + Page mappedPage = page.map(converter); + PageResult result = new PageResult<>(mappedPage); + // 复制额外字段 + result.extraFields.putAll(this.extraFields); + return result; + } + + /** + * 获取迭代器 + */ + @Override + public Iterator iterator() { + return page.iterator(); + } + + /** + * 获取内部Page对象(用于需要直接访问Page的场景) + */ + @JsonIgnore + public Page getPage() { + return page; + } +} diff --git a/backend/src/main/java/com/qqchen/deploy/backend/framework/utils/UserAgentUtil.java b/backend/src/main/java/com/qqchen/deploy/backend/framework/utils/UserAgentUtil.java index 27b74f67..0338a12c 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/framework/utils/UserAgentUtil.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/framework/utils/UserAgentUtil.java @@ -1,13 +1,16 @@ package com.qqchen.deploy.backend.framework.utils; +import com.blueconic.browscap.Capabilities; +import com.blueconic.browscap.ParseException; +import com.blueconic.browscap.UserAgentParser; +import com.blueconic.browscap.UserAgentService; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; -import nl.basjes.parse.useragent.UserAgent; -import nl.basjes.parse.useragent.UserAgentAnalyzer; import org.springframework.core.task.AsyncTaskExecutor; import org.springframework.stereotype.Component; +import java.io.IOException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -19,20 +22,32 @@ import java.util.concurrent.TimeoutException; * @date 2025-11-20 * * 🔧 死锁修复说明: - * 1. 原问题:UserAgent解析库在持有缓存锁时写日志,导致死锁 - * 2. 解决方案:异步解析 + 超时降级 - * 3. 超时时间:200ms(可配置) - * 4. 降级策略:超时返回"Unknown" + * 1. 原问题:yauaa库在持有缓存锁时写日志,导致死锁 + * 2. 解决方案1:异步解析 + 超时降级 + * 3. 解决方案2:更换为Browscap Java库(无日志依赖,线程安全) + * 4. 超时时间:200ms(可配置) + * 5. 降级策略:超时返回"Unknown" + * + * 📝 2025-12-29更新: + * - 从yauaa更换为Browscap Java + * - Browscap优势:性能更好(~2ms)、活跃维护、无日志依赖问题 */ @Slf4j @Component public class UserAgentUtil { - private static final UserAgentAnalyzer USER_AGENT_ANALYZER = UserAgentAnalyzer - .newBuilder() - .hideMatcherLoadStats() - .withCache(10000) - .build(); + private static final UserAgentParser USER_AGENT_PARSER; + + static { + try { + // 初始化Browscap解析器(使用默认配置) + USER_AGENT_PARSER = new UserAgentService().loadParser(); + log.info("Browscap UserAgent解析器初始化成功"); + } catch (IOException | ParseException e) { + log.error("Browscap UserAgent解析器初始化失败", e); + throw new RuntimeException("Failed to initialize Browscap UserAgent parser", e); + } + } /** * UserAgent解析专用线程池 @@ -85,7 +100,7 @@ public class UserAgentUtil { /** * 同步解析User-Agent信息(内部方法) * - * ⚠️ 此方法可能导致死锁,仅供内部使用 + * ⚠️ 此方法可能耗时,仅供内部使用 * ⚠️ 外部调用请使用 parseUserAgentAsync() * * @param userAgentString User-Agent字符串 @@ -93,14 +108,15 @@ public class UserAgentUtil { */ private UserAgentInfo parseUserAgentSync(String userAgentString) { try { - UserAgent userAgent = USER_AGENT_ANALYZER.parse(userAgentString); + // 使用Browscap解析User-Agent + Capabilities capabilities = USER_AGENT_PARSER.parse(userAgentString); return UserAgentInfo.builder() - .browser(getBrowserName(userAgent)) - .browserVersion(userAgent.getValue(UserAgent.AGENT_VERSION)) - .os(getOperatingSystem(userAgent)) - .osVersion(userAgent.getValue(UserAgent.OPERATING_SYSTEM_VERSION)) - .deviceType(userAgent.getValue(UserAgent.DEVICE_CLASS)) + .browser(getBrowserName(capabilities)) + .browserVersion(capabilities.getBrowserMajorVersion()) + .os(getOperatingSystem(capabilities)) + .osVersion(capabilities.getPlatformVersion()) + .deviceType(capabilities.getDeviceType()) .build(); } catch (Exception e) { log.warn("解析User-Agent失败: {}", userAgentString, e); @@ -111,7 +127,7 @@ public class UserAgentUtil { /** * 解析User-Agent信息(兼容旧代码) * - * ⚠️ 已废弃:此方法可能导致死锁 + * ⚠️ 已废弃:建议使用异步方法 * ⚠️ 请使用 parseUserAgentAsync() 替代 * * @param userAgentString User-Agent字符串 @@ -174,71 +190,39 @@ public class UserAgentUtil { /** * 获取浏览器名称 */ - private String getBrowserName(UserAgent userAgent) { - String agentName = userAgent.getValue(UserAgent.AGENT_NAME); - String agentVersion = userAgent.getValue(UserAgent.AGENT_VERSION); + private String getBrowserName(Capabilities capabilities) { + String browser = capabilities.getBrowser(); + String version = capabilities.getBrowserMajorVersion(); - if ("Unknown".equals(agentName)) { + if (browser == null || browser.isEmpty() || "Unknown".equals(browser)) { return "Unknown"; } // 返回浏览器名称 + 主版本号 - if (agentVersion != null && !agentVersion.isEmpty() && !"Unknown".equals(agentVersion)) { - String majorVersion = agentVersion.split("\\.")[0]; - return agentName + " " + majorVersion; + if (version != null && !version.isEmpty() && !"Unknown".equals(version)) { + return browser + " " + version; } - return agentName; + return browser; } /** * 获取操作系统名称 */ - private String getOperatingSystem(UserAgent userAgent) { - String osName = userAgent.getValue(UserAgent.OPERATING_SYSTEM_NAME); - String osVersion = userAgent.getValue(UserAgent.OPERATING_SYSTEM_VERSION); + private String getOperatingSystem(Capabilities capabilities) { + String platform = capabilities.getPlatform(); + String version = capabilities.getPlatformVersion(); - if ("Unknown".equals(osName)) { + if (platform == null || platform.isEmpty() || "Unknown".equals(platform)) { return "Unknown"; } - // Windows NT 版本号转换为友好名称 - if ("Windows NT".equals(osName) && osVersion != null && !osVersion.isEmpty()) { - return convertWindowsNTVersion(osVersion); - } - // 返回操作系统名称 + 版本 - if (osVersion != null && !osVersion.isEmpty() && !"Unknown".equals(osVersion)) { - return osName + " " + osVersion; + if (version != null && !version.isEmpty() && !"Unknown".equals(version)) { + return platform + " " + version; } - return osName; - } - - /** - * 将Windows NT版本号转换为用户友好的显示名称 - */ - private String convertWindowsNTVersion(String ntVersion) { - switch (ntVersion) { - case "10.0": - return "Windows 10/11"; // Windows 10 和 11 都是 NT 10.0 - case "6.3": - return "Windows 8.1"; - case "6.2": - return "Windows 8"; - case "6.1": - return "Windows 7"; - case "6.0": - return "Windows Vista"; - case "5.2": - return "Windows Server 2003"; - case "5.1": - return "Windows XP"; - case "5.0": - return "Windows 2000"; - default: - return "Windows NT " + ntVersion; // 未知版本保持原样 - } + return platform; } /** diff --git a/backend/src/main/java/com/qqchen/deploy/backend/system/api/RoleApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/system/api/RoleApiController.java index c177df40..b155b2b5 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/system/api/RoleApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/system/api/RoleApiController.java @@ -13,6 +13,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -27,23 +28,23 @@ public class RoleApiController extends BaseController create(RoleDTO dto) { + public Response create(@Validated @RequestBody RoleDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, RoleDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody RoleDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDataApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDataApiController.java index 619a004b..06a12b6e 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDataApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDataApiController.java @@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -33,23 +34,23 @@ public class FormDataApiController extends BaseController create(FormDataDTO dto) { + public Response create(@Validated @RequestBody FormDataDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, FormDataDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody FormDataDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/resources/db/changelog/init/v1.0.0-data.sql b/backend/src/main/resources/db/changelog/init/v1.0.0-data.sql index 27d19c83..464bc317 100644 --- a/backend/src/main/resources/db/changelog/init/v1.0.0-data.sql +++ b/backend/src/main/resources/db/changelog/init/v1.0.0-data.sql @@ -668,7 +668,8 @@ INSERT INTO `deploy-ease-platform`.`workflow_definition` (`id`, `name`, `key`, ` -- -------------------------------------------------------------------------------------- INSERT INTO `deploy-ease-platform`.`deploy_application_category` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `code`, `name`, `description`, `icon`, `enabled`, `sort`) VALUES (1, 'admin', NOW(), 'admin', NOW(), 1, b'0', 'DL-SCP', '需求计划', '', '', b'1', 0); INSERT INTO `deploy-ease-platform`.`deploy_application_category` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `code`, `name`, `description`, `icon`, `enabled`, `sort`) VALUES (2, 'admin', NOW(), 'admin', NOW(), 1, b'0', 'SZ-ISCP', '供应计划', '', '', b'1', 0); -INSERT INTO `deploy-ease-platform`.`deploy_application_category` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `code`, `name`, `description`, `icon`, `enabled`, `sort`) VALUES (3, 'songwei', NOW(), 'songwei', NOW(), 1, b'0', 'OMS-ORDER', '订单', '', '', b'1', 0); +INSERT INTO `deploy-ease-platform`.`deploy_application_category` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `code`, `name`, `description`, `icon`, `enabled`, `sort`) VALUES (3, 'admin', NOW(), 'admin', NOW(), 1, b'0', 'OMS-ORDER', '订单', '', '', b'1', 0); +INSERT INTO `deploy-ease-platform`.`deploy_application_category` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `code`, `name`, `description`, `icon`, `enabled`, `sort`) VALUES (4, 'admin', NOW(), 'admin', NOW(), 1, b'0', 'OMS-ORDER-HP', '订单豪鹏项目', '', '', b'1', 0); INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (1, 'scp-meta', '元数据', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); @@ -685,14 +686,14 @@ INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_ INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (12, 'scp-process', 'scp-process', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (13, 'scp-service-manager', 'scp-service-manager', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (14, 'scp-customization-engine', 'scp-customization-engine', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (15, 'themetis-engine', 'themetis-engine', '', 0, 2, b'1', 0, 'dengqichen', NOW(), 'dengqichen', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (15, 'themetis-engine', 'themetis-engine', '', 0, 2, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (16, 'themetis-scheduler', 'themetis-scheduler', '', 0, 2, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (17, 'scp-xxl-job', 'scp-xxl-job', '', 0, 1, b'1', 0, 'songwei', NOW(), 'songwei', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (18, 'stone-message-center', 'stone-message-center', '', 0, 1, b'1', 0, 'songwei', NOW(), 'songwei', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (19, 'scp-order', 'scp-order', '', 0, 1, b'1', 0, 'songwei', NOW(), 'songwei', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (20, 'datax-admin', 'datax-admin', '', 0, 1, b'1', 0, 'songwei', NOW(), 'songwei', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (21, 'scp-algorithm', 'scp-algorithm', '', 0, 1, b'1', 0, 'songwei', NOW(), 'songwei', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (22, 'scp-forecast-model', 'scp-forecast-model', '', 2, 1, b'1', 0, 'songwei', NOW(), 'songwei', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (17, 'scp-xxl-job', 'scp-xxl-job', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (18, 'stone-message-center', 'stone-message-center', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (19, 'scp-order', 'scp-order', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (20, 'datax-admin', 'datax-admin', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (21, 'scp-algorithm', 'scp-algorithm', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (22, 'scp-forecast-model', 'scp-forecast-model', '', 2, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (23, 'etl-ignite-server', 'etl-ignite-server', '内存数据库', 0, 2, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (24, 'etl-integration-ui-server', 'etl-integration-ui-server', 'UI server', 0, 2, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (25, 'etl-executor', 'etl-executor', 'etl执行器', 0, 2, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); @@ -700,26 +701,61 @@ INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_ INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (27, 'themetis-control-panel-server', 'themetis-control-panel-server', '控制台', 0, 2, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (28, 'themetis-permission-server', 'themetis-permission-server', '权限系统', 0, 2, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (29, 'themetis-gateway', 'themetis-gateway', '网关', 0, 2, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (30, 'lianyu-oms-admin', 'lianyu-oms-admin', 'oms2.0-后台管理服务', 0, 3, b'1', 0, 'songwei', NOW(), 'songwei', NOW(), 2, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (31, 'lianyu-oms-gateway', 'lianyu-oms-gateway', 'oms2.0-网关服务', 0, 3, b'1', 0, 'songwei', NOW(), 'songwei', NOW(), 2, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (32, 'lianyu-oms-job', 'lianyu-oms-job', 'oms2.0-定时任务', 0, 3, b'1', 0, 'songwei', NOW(), 'songwei', NOW(), 2, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (33, 'lianyu-oms-main', 'lianyu-oms-main', 'oms2.0-主业务', 0, 3, b'1', 0, 'songwei', NOW(), 'songwei', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (34, 'lianyu-oms-web', 'lianyu-oms-web', 'oms2.0-前端', 0, 3, b'1', 0, 'songwei', NOW(), 'songwei', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (30, 'lianyu-oms-admin', 'lianyu-oms-admin', 'oms2.0-后台管理服务', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 2, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (31, 'lianyu-oms-gateway', 'lianyu-oms-gateway', 'oms2.0-网关服务', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 2, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (32, 'lianyu-oms-job', 'lianyu-oms-job', 'oms2.0-定时任务', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 2, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (33, 'lianyu-oms-main', 'lianyu-oms-main', 'oms2.0-主业务', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (34, 'lianyu-oms-web', 'lianyu-oms-web', 'oms2.0-前端', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (35, 'service-lianyu-oms-api', 'service-lianyu-oms-api', '链宇OMS 2.0 基础包', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (36, 'service-lianyu-oms-cir', 'service-lianyu-oms-cir', '链宇OMS 2.0 要货需求jar包\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (37, 'service-lianyu-oms-cpq', 'service-lianyu-oms-cpq', '链宇OMS 2.0 cpq的jar包\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (38, 'service-lianyu-oms-ioa', 'service-lianyu-oms-ioa', '链宇OMS 2.0 要货需求jar包\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (39, 'service-lianyu-oms-mdm', 'service-lianyu-oms-mdm', '链宇OMS 2.0 要货需求jar包', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (40, 'service-lianyu-oms-oam', 'service-lianyu-oms-oam', '链宇OMS 2.0 要货需求jar包', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (41, 'service-lianyu-oms-oct', 'service-lianyu-oms-oct', '链宇OMS 2.0 要货需求jar包\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (42, 'service-lianyu-oms-orm', 'service-lianyu-oms-orm', '链宇OMS 2.0 要货需求jar包', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (43, 'service-lianyu-oms-osp', 'service-lianyu-oms-osp', '链宇OMS 2.0 要货需求jar包', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (44, 'service-lianyu-oms-otm', 'service-lianyu-oms-otm', '链宇OMS 2.0 关联交易jar包', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (45, 'service-lianyu-oms-sso', 'service-lianyu-oms-sso', '链宇OMS 2.0 系统服务包', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (46, 'service-lianyu-oms-sys', 'service-lianyu-oms-sys', '链宇OMS 2.0 系统服务包', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (47, 'service-lianyu-oms-wop', 'service-lianyu-oms-wop', '链宇OMS 2.0 要货需求jar包', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (48, 'tools-lianyu-oms-base', 'tools-lianyu-oms-base', '链宇OMS 2.0 基础包\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (49, 'tools-lianyu-oms-config', 'tools-lianyu-oms-config', '链宇OMS 2.0 基础包\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (50, 'tools-lianyu-oms-core', 'tools-lianyu-oms-core', '链宇OMS 2.0 基础包\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (51, 'tools-lianyu-oms-entity', 'tools-lianyu-oms-entity', '链宇OMS 2.0 基础包\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (52, 'tools-lianyu-oms-model', 'tools-lianyu-oms-model', '链宇OMS 2.0 基础包\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (53, 'tools-lianyu-oms-parent', 'tools-lianyu-oms-parent', '链宇OMS 2.0 基础包\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (54, 'tools-lianyu-oms-task', 'tools-lianyu-oms-task', '链宇OMS 2.0 基础包\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (55, 'lianyu-oms-jenkins', 'lianyu-oms-jenkins', '链宇OMS 2.0 标准产品统一环境\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (56, 'lianyu-oms-nacos', 'lianyu-oms-nacos', 'Nacos集群环境配置\n', 0, 3, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (57, 'hp-lianyu-oms-datahub', 'hp-lianyu-oms-datahub', 'OMS 2.0 集成服务', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 2, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (58, 'hp-lianyu-oms-front', 'hp-lianyu-oms-front', 'OMS2.0 豪鹏开发环境前端服务', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 2, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (59, 'hp-lianyu-oms-gateway', 'hp-lianyu-oms-gateway', 'OMS 2.0 豪鹏开发环境网关服务', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 2, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (60, 'hp-lianyu-oms-job', 'hp-lianyu-oms-job', 'OMS 2.0 豪鹏开发环境定时任务', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 2, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (61, 'hp-lianyu-oms-main', 'hp-lianyu-oms-main', 'OMS 2.0 主业务服务任务', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 2, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (62, 'hp-lianyu-oms-starter', 'hp-lianyu-oms-starter', 'OMS 2.0 主查询服务', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 2, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (63, 'hp-lianyu-oms-system', 'hp-lianyu-oms-system', 'OMS 2.0', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 2, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (64, 'hp-tools-lianyu-oms-admin', 'hp-tools-lianyu-oms-admin', '豪鹏工具后台管理服务,提供用户权限、菜单、资源等接口信息。', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (65, 'hp-tools-lianyu-oms-base', 'hp-tools-lianyu-oms-base', '豪鹏基础jar包。', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (66, 'hp-tools-lianyu-oms-core', 'hp-tools-lianyu-oms-core', '豪鹏工具核心包。', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (67, 'hp-tools-lianyu-oms-datacenter', 'hp-tools-lianyu-oms-datacenter', '豪鹏基础类包。', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (68, 'hp-tools-lianyu-oms-parent', 'hp-tools-lianyu-oms-parent', '豪鹏父类包。\n', 0, 4, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (1, NULL, 'LONGI-DEV', '隆基DEV', NULL, b'1', 1, 'admin', NOW(), 'admin', NOW(), 2, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (2, NULL, 'LONGI-UAT', '隆基UAT', NULL, b'1', 1, 'admin', NOW(), 'admin', NOW(), 3, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (5, NULL, 'LOCALIZATION_DEV', '国产化DEV', NULL, b'1', 1, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (6, NULL, 'DEMO1', 'DEMO1', NULL, b'1', 1, 'admin', NOW(), 'admin', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (7, NULL, 'CONVERGENCE', '融合环境', '', b'1', 1, 'songwei', NOW(), 'songwei', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (8, NULL, 'OMS2.0-TEST', '订单2.0测试环境', NULL, b'1', 1, 'songwei', NOW(), 'songwei', NOW(), 1, b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (9, NULL, 'OMS2.0-PROD', '订单2.0生产环境', NULL, b'1', 1, 'songwei', NOW(), 'songwei', NOW(), 3, b'0'); - +INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (7, NULL, 'CONVERGENCE', '融合环境', '', b'1', 1, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (8, NULL, 'OMS2.0-TEST', '订单2.0测试环境', NULL, b'1', 1, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (9, NULL, 'OMS2.0-PROD', '订单2.0生产环境', NULL, b'1', 1, 'admin', NOW(), 'admin', NOW(), 3, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (10, NULL, 'OMS2.0-HP', '订单2.0豪鹏环境', NULL, b'1', 1, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (11, NULL, 'OMS2.0-HP-DEV', '订单2.0郝鹏dev环境', NULL, b'1', 1, 'admin', NOW(), 'admin', NOW(), 1, b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (12, NULL, 'OMS2.0-HP-UPDATE', '订单2.0郝鹏开发环境', NULL, b'1', 1, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_team` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_code`, `team_name`, `description`, `owner_id`, `owner_name`, `enabled`, `sort`, `development_mode`, `enable_git_sync_check`) VALUES (3, 'admin', NOW(), 'admin', NOW(), 1, b'0', 'DP_SCP', '需求计划', '', 1, '超级管理员', b'1', 0, 'STANDARD', b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_team` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_code`, `team_name`, `description`, `owner_id`, `owner_name`, `enabled`, `sort`, `development_mode`, `enable_git_sync_check`) VALUES (4, 'admin', NOW(), 'admin', NOW(), 2, b'0', 'DL_SCP_LONGI', '隆基项目', '', 1, '超级管理员', b'1', 0, 'SYNC_MODE', b'1'); -INSERT INTO `deploy-ease-platform`.`deploy_team` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_code`, `team_name`, `description`, `owner_id`, `owner_name`, `enabled`, `sort`, `development_mode`, `enable_git_sync_check`) VALUES (5, 'admin', NOW(), 'admin', NOW(), 3, b'0', 'LOCALIZATION', '国产化改造', '', 1, '超级管理员', b'1', 0, 'STANDARD', b'0'); -INSERT INTO `deploy-ease-platform`.`deploy_team` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_code`, `team_name`, `description`, `owner_id`, `owner_name`, `enabled`, `sort`, `development_mode`, `enable_git_sync_check`) VALUES (7, 'songwei', NOW(), 'songwei', NOW(), 1, b'0', 'OMS-ORDER', '订单', '', 1, '超级管理员', b'1', 0, 'STANDARD', b'0'); - +INSERT INTO `deploy-ease-platform`.`deploy_team` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_code`, `team_name`, `description`, `owner_id`, `owner_name`, `enabled`, `sort`, `development_mode`, `enable_git_sync_check`) VALUES (4, 'admin', NOW(), 'admin', NOW(), 3, b'0', 'DL_SCP_LONGI', '隆基项目', '', 6, '盛泽强', b'1', 0, 'SYNC_MODE', b'1'); +INSERT INTO `deploy-ease-platform`.`deploy_team` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_code`, `team_name`, `description`, `owner_id`, `owner_name`, `enabled`, `sort`, `development_mode`, `enable_git_sync_check`) VALUES (5, 'admin', NOW(), 'admin', NOW(), 4, b'0', 'LOCALIZATION', '国产化改造', '', 11, '邓骐辰', b'1', 0, 'STANDARD', b'0'); +INSERT INTO `deploy-ease-platform`.`deploy_team` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_code`, `team_name`, `description`, `owner_id`, `owner_name`, `enabled`, `sort`, `development_mode`, `enable_git_sync_check`) VALUES (7, 'admin', NOW(), 'admin', NOW(), 1, b'0', 'OMS-ORDER', '订单', '', 1, '超级管理员', b'1', 0, 'STANDARD', b'0'); INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (25, 'admin', NOW(), 'admin', NOW(), 1, b'0', 5, 5, '汤峰岷', '', NOW()); INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (26, 'admin', NOW(), 'admin', NOW(), 1, b'0', 5, 11, '邓骐辰', '', NOW()); @@ -733,15 +769,16 @@ INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `cre INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (34, 'admin', NOW(), 'admin', NOW(), 1, b'0', 4, 5, '汤峰岷', '', NOW()); INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (35, 'admin', NOW(), 'admin', NOW(), 1, b'0', 3, 5, '汤峰岷', '', NOW()); INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (36, 'admin', NOW(), 'admin', NOW(), 1, b'0', 3, 11, '邓骐辰', '', NOW()); -INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (37, 'songwei', NOW(), 'songwei', NOW(), 1, b'0', 3, 14, '宋伟', '', NOW()); -INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (38, 'songwei', NOW(), 'songwei', NOW(), 1, b'0', 4, 14, '宋伟', '', NOW()); +INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (37, 'admin', NOW(), 'admin', NOW(), 1, b'0', 3, 14, '宋伟', '', NOW()); +INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (38, 'admin', NOW(), 'admin', NOW(), 1, b'0', 4, 14, '宋伟', '', NOW()); INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (39, 'admin', NOW(), 'admin', NOW(), 1, b'0', 5, 15, '路宽', '', NOW()); -INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (40, 'dengqichen', NOW(), 'dengqichen', NOW(), 1, b'0', 7, 11, '邓骐辰', '', NOW()); -INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (41, 'songwei', NOW(), 'songwei', NOW(), 1, b'0', 7, 14, '宋伟', '', NOW()); -INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (42, 'yangfan', NOW(), 'yangfan', NOW(), 1, b'0', 5, 16, '杨帆', '', NOW()); -INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (43, 'songwei', NOW(), 'songwei', NOW(), 1, b'0', 3, 16, '杨帆', '', NOW()); -INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (44, 'songwei', NOW(), 'songwei', NOW(), 1, b'0', 3, 10, '马也', '', NOW()); -INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (45, 'songwei', NOW(), 'songwei', NOW(), 1, b'0', 3, 12, '王栋柱', '', NOW()); +INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (40, 'admin', NOW(), 'admin', NOW(), 1, b'0', 7, 11, '邓骐辰', '', NOW()); +INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (41, 'admin', NOW(), 'admin', NOW(), 1, b'0', 7, 14, '宋伟', '', NOW()); +INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (42, 'admin', NOW(), 'admin', NOW(), 1, b'0', 5, 16, '杨帆', '', NOW()); +INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (43, 'admin', NOW(), 'admin', NOW(), 1, b'0', 3, 16, '杨帆', '', NOW()); +INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (44, 'admin', NOW(), 'admin', NOW(), 1, b'0', 3, 10, '马也', '', NOW()); +INSERT INTO `deploy-ease-platform`.`deploy_team_member` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `user_id`, `user_name`, `role_in_team`, `join_time`) VALUES (45, 'admin', NOW(), 'admin', NOW(), 1, b'0', 3, 12, '王栋柱', '', NOW()); + INSERT INTO `deploy-ease-platform`.`deploy_team_application` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `application_id`, `environment_id`, `build_type`, `source_git_system_id`, `source_git_project_id`, `source_branch`, `target_git_system_id`, `target_git_project_id`, `target_branch`, `deploy_system_id`, `deploy_job`, `workflow_definition_id`, `runtime_type`, `k8s_system_id`, `k8s_namespace_name`, `k8s_deployment_name`, `docker_server_id`, `docker_container_name`, `server_id`, `log_query_command`) VALUES (2, 'admin', NOW(), 'admin', NOW(), 1, b'0', 4, 2, 2, 'JENKINS', 2, 497, 'release/1.4.0', 4, 401, 'release/1.4.1', 3, 'ibp-uat-scp-longi-module', 1, 'K8S', 8, 'ibp-uat', 'backend-longi-scp-longi-module-group-1-v1', NULL, NULL, NULL, NULL); INSERT INTO `deploy-ease-platform`.`deploy_team_application` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `application_id`, `environment_id`, `build_type`, `source_git_system_id`, `source_git_project_id`, `source_branch`, `target_git_system_id`, `target_git_project_id`, `target_branch`, `deploy_system_id`, `deploy_job`, `workflow_definition_id`, `runtime_type`, `k8s_system_id`, `k8s_namespace_name`, `k8s_deployment_name`, `docker_server_id`, `docker_container_name`, `server_id`, `log_query_command`) VALUES (9, 'admin', NOW(), 'admin', NOW(), 1, b'0', 4, 1, 2, 'JENKINS', 4, 413, 'release/1.4.0', NULL, NULL, NULL, 3, 'ibp-uat-scp-meta', 1, 'K8S', 8, 'ibp-uat', 'backend-longi-scp-meta-group-1-v4', NULL, NULL, NULL, NULL); @@ -815,20 +852,24 @@ INSERT INTO `deploy-ease-platform`.`deploy_team_application` (`id`, `create_by`, INSERT INTO `deploy-ease-platform`.`deploy_team_application` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `application_id`, `environment_id`, `build_type`, `source_git_system_id`, `source_git_project_id`, `source_branch`, `target_git_system_id`, `target_git_project_id`, `target_branch`, `deploy_system_id`, `deploy_job`, `workflow_definition_id`, `runtime_type`, `k8s_system_id`, `k8s_namespace_name`, `k8s_deployment_name`, `docker_server_id`, `docker_container_name`, `server_id`, `log_query_command`) VALUES (97, 'admin', NOW(), 'admin', NOW(), 1, b'0', 7, 32, 9, 'JENKINS', 2, 703, 'prod', NULL, NULL, NULL, 1, 'prod-lianyu-oms-job', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); INSERT INTO `deploy-ease-platform`.`deploy_team_application` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `application_id`, `environment_id`, `build_type`, `source_git_system_id`, `source_git_project_id`, `source_branch`, `target_git_system_id`, `target_git_project_id`, `target_branch`, `deploy_system_id`, `deploy_job`, `workflow_definition_id`, `runtime_type`, `k8s_system_id`, `k8s_namespace_name`, `k8s_deployment_name`, `docker_server_id`, `docker_container_name`, `server_id`, `log_query_command`) VALUES (98, 'admin', NOW(), 'admin', NOW(), 1, b'0', 7, 31, 9, 'JENKINS', 2, 691, 'prod', NULL, NULL, NULL, 1, 'prod-lianyu-oms-gateway', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); INSERT INTO `deploy-ease-platform`.`deploy_team_application` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `application_id`, `environment_id`, `build_type`, `source_git_system_id`, `source_git_project_id`, `source_branch`, `target_git_system_id`, `target_git_project_id`, `target_branch`, `deploy_system_id`, `deploy_job`, `workflow_definition_id`, `runtime_type`, `k8s_system_id`, `k8s_namespace_name`, `k8s_deployment_name`, `docker_server_id`, `docker_container_name`, `server_id`, `log_query_command`) VALUES (99, 'admin', NOW(), 'admin', NOW(), 1, b'0', 7, 30, 9, 'JENKINS', 2, 704, 'prod', NULL, NULL, NULL, 1, 'prod-lianyu-oms-admin', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `deploy-ease-platform`.`deploy_team_application` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `application_id`, `environment_id`, `build_type`, `source_git_system_id`, `source_git_project_id`, `source_branch`, `target_git_system_id`, `target_git_project_id`, `target_branch`, `deploy_system_id`, `deploy_job`, `workflow_definition_id`, `runtime_type`, `k8s_system_id`, `k8s_namespace_name`, `k8s_deployment_name`, `docker_server_id`, `docker_container_name`, `server_id`, `log_query_command`) VALUES (100, 'admin', NOW(), 'admin', NOW(), 1, b'0', 7, 56, 10, 'JENKINS', NULL, NULL, '', NULL, NULL, NULL, 1, 'lianyu-oms-nacos', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (8, 'admin', NOW(), 'admin', NOW(), 1, b'0', 5, 5, b'0', NULL, b'0', ''); INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (9, 'admin', NOW(), 'admin', NOW(), 1, b'0', 4, 1, b'0', NULL, b'0', ''); INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (10, 'admin', NOW(), 'admin', NOW(), 1, b'0', 4, 2, b'1', '[6]', b'0', ''); INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (11, 'admin', NOW(), 'admin', NOW(), 1, b'0', 3, 6, b'0', NULL, b'0', ''); -INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (12, 'songwei', NOW(), 'songwei', NOW(), 1, b'0', 3, 7, b'0', NULL, b'0', ''); -INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (13, 'songwei', NOW(), 'songwei', NOW(), 1, b'0', 7, 8, b'0', NULL, b'0', ''); -INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (14, 'songwei', NOW(), 'songwei', NOW(), 1, b'0', 7, 9, b'0', NULL, b'0', ''); +INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (12, 'admin', NOW(), 'admin', NOW(), 1, b'0', 3, 7, b'0', NULL, b'0', ''); +INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (13, 'admin', NOW(), 'admin', NOW(), 1, b'0', 7, 8, b'0', NULL, b'0', ''); +INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (14, 'admin', NOW(), 'admin', NOW(), 1, b'0', 7, 9, b'0', NULL, b'0', ''); +INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (15, 'admin', NOW(), 'admin', NOW(), 1, b'0', 7, 12, b'0', NULL, b'0', ''); +INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (16, 'admin', NOW(), 'admin', NOW(), 1, b'0', 7, 11, b'0', NULL, b'0', ''); +INSERT INTO `deploy-ease-platform`.`deploy_team_environment_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `approval_required`, `approver_user_ids`, `require_code_review`, `remark`) VALUES (17, 'admin', NOW(), 'admin', NOW(), 1, b'0', 7, 10, b'0', NULL, b'0', ''); INSERT INTO `deploy-ease-platform`.`deploy_team_environment_notification_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `notification_channel_id`, `pre_approval_notification_enabled`, `pre_approval_notification_template_id`, `build_notification_enabled`, `build_notification_template_id`, `build_failure_file_enabled`) VALUES (7, 'admin', NOW(), 'admin', NOW(), 2, b'0', 5, 5, 3, b'0', NULL, b'1', 9, b'1'); INSERT INTO `deploy-ease-platform`.`deploy_team_environment_notification_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `notification_channel_id`, `pre_approval_notification_enabled`, `pre_approval_notification_template_id`, `build_notification_enabled`, `build_notification_template_id`, `build_failure_file_enabled`) VALUES (8, 'admin', NOW(), 'admin', NOW(), 2, b'0', 4, 2, 4, b'0', NULL, b'1', 8, b'1'); INSERT INTO `deploy-ease-platform`.`deploy_team_environment_notification_config` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`, `team_id`, `environment_id`, `notification_channel_id`, `pre_approval_notification_enabled`, `pre_approval_notification_template_id`, `build_notification_enabled`, `build_notification_template_id`, `build_failure_file_enabled`) VALUES (9, 'admin', NOW(), 'admin', NOW(), 2, b'0', 4, 1, 4, b'0', NULL, b'1', 8, b'1'); - -- -------------------------------------------------------------------------------------- -- 初始化通知渠道数据 -- -------------------------------------------------------------------------------------- diff --git a/backend/src/main/resources/db/changelog/sql/20251209141300-01.sql b/backend/src/main/resources/db/changelog/sql/20251209141300-01.sql index 3cb7a84b..3202f287 100644 --- a/backend/src/main/resources/db/changelog/sql/20251209141300-01.sql +++ b/backend/src/main/resources/db/changelog/sql/20251209141300-01.sql @@ -12,15 +12,9 @@ INSERT INTO system_release ( ) VALUES ( 'system', NOW(), 'system', NOW(), 1, 0, - 1.43, 'ALL', NOW(), + 1.45, 'ALL', NOW(), '【后端】 -- 优化cleanupSession()方法,先关闭Shell输入输出流强制中断阻塞的read操作 -- 增强readSSHOutput()和readSSHError()的异常处理和线程中断检查 - 【前端】 -- 修改类型定义(types.ts),将k8sNamespaceId: number和k8sDeploymentId: number改为k8sNamespaceName: string和k8sDeploymentName: string -- 更新K8sRuntimeConfig组件,改为基于name进行选择和匹配,通过namespaceName查找对应的namespace ID来加载Deployment列表 -- 调整RuntimeConfigSection和TeamApplicationDialog组件的props传递和表单数据结构,确保使用name字段进行数据绑定和提交 -- 同步更新TeamApplicationManageDialog的保存逻辑,向后端提交name字段而非ID +- 应用分页接口新增 enabledCount 和 disabledCount 统计字段,与 totalElements 同级返回。前端可在响应的 data 对象中直接获取这两个字段,用于展示已启用和已禁用应用的总数统计。 ', 0, NULL, NULL, 0 );