refactor(module): 重构格式化,并添加菜单一键复制功能

This commit is contained in:
2025-07-30 21:12:14 +08:00
parent 9d49d8a7e9
commit 46f3642aed
172 changed files with 1991 additions and 1042 deletions
+1
View File
@@ -36,6 +36,7 @@ https://github.com/odboy-tianjun/cutejava
- 对一些常用地前端组件封装:表格数据请求、数据字典等
- 前后端统一异常拦截处理,统一输出异常,避免繁琐的判断
- 支持在线用户管理与服务器性能监控,支持限制单用户登录
- 支持一键复制菜单项,避免菜单繁琐配置
#### 系统功能
View File
@@ -68,14 +68,14 @@
<script>
import CutePipelineNode from '@/views/components/dev/CutePipelineNode'
import { getPipelineTemplate } from '@/api/devops/pipelineTemplate'
import { getPipelineTemplate } from '@/api/pipeline/pipelineTemplate'
import {
queryLastPipelineDetailWs,
restartPipeline,
retryPipeline,
startPipeline,
stopPipeline
} from '@/api/devops/pipelineInstance'
} from '@/api/pipeline/pipelineInstance'
import { CountArraysObjectByPropKey } from '@/utils/CsUtil'
import CsMessage from '@/utils/elementui/CsMessage'
import CsWsClient from '@/utils/CsWsClient'
@@ -22,9 +22,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import java.lang.annotation.*;
/**
* Annotation for mapping HTTP {@code DELETE} requests onto specific handler
* methods.
* 支持匿名访问 DeleteMapping
* Annotation for mapping HTTP {@code DELETE} requests onto specific handler methods. 支持匿名访问 DeleteMapping
*
* @see AnonymousGetMapping
* @see AnonymousPostMapping
@@ -42,43 +40,36 @@ public @interface AnonymousDeleteMapping {
/**
* Alias for {@link RequestMapping#name}.
*/
@AliasFor(annotation = RequestMapping.class)
String name() default "";
@AliasFor(annotation = RequestMapping.class) String name() default "";
/**
* Alias for {@link RequestMapping#value}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
@AliasFor(annotation = RequestMapping.class) String[] value() default {};
/**
* Alias for {@link RequestMapping#path}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
@AliasFor(annotation = RequestMapping.class) String[] path() default {};
/**
* Alias for {@link RequestMapping#params}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] params() default {};
@AliasFor(annotation = RequestMapping.class) String[] params() default {};
/**
* Alias for {@link RequestMapping#headers}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] headers() default {};
@AliasFor(annotation = RequestMapping.class) String[] headers() default {};
/**
* Alias for {@link RequestMapping#consumes}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] consumes() default {};
@AliasFor(annotation = RequestMapping.class) String[] consumes() default {};
/**
* Alias for {@link RequestMapping#produces}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] produces() default {};
@AliasFor(annotation = RequestMapping.class) String[] produces() default {};
}
@@ -22,8 +22,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import java.lang.annotation.*;
/**
* Annotation for mapping HTTP {@code GET} requests onto specific handler
* methods.
* Annotation for mapping HTTP {@code GET} requests onto specific handler methods.
* <p>
* 支持匿名访问 GetMapping
*
@@ -39,45 +38,38 @@ public @interface AnonymousGetMapping {
/**
* Alias for {@link RequestMapping#name}.
*/
@AliasFor(annotation = RequestMapping.class)
String name() default "";
@AliasFor(annotation = RequestMapping.class) String name() default "";
/**
* Alias for {@link RequestMapping#value}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
@AliasFor(annotation = RequestMapping.class) String[] value() default {};
/**
* Alias for {@link RequestMapping#path}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
@AliasFor(annotation = RequestMapping.class) String[] path() default {};
/**
* Alias for {@link RequestMapping#params}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] params() default {};
@AliasFor(annotation = RequestMapping.class) String[] params() default {};
/**
* Alias for {@link RequestMapping#headers}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] headers() default {};
@AliasFor(annotation = RequestMapping.class) String[] headers() default {};
/**
* Alias for {@link RequestMapping#consumes}.
*
* @since 4.3.5
*/
@AliasFor(annotation = RequestMapping.class)
String[] consumes() default {};
@AliasFor(annotation = RequestMapping.class) String[] consumes() default {};
/**
* Alias for {@link RequestMapping#produces}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] produces() default {};
@AliasFor(annotation = RequestMapping.class) String[] produces() default {};
}
@@ -22,9 +22,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import java.lang.annotation.*;
/**
* Annotation for mapping HTTP {@code PATCH} requests onto specific handler
* methods.
* 支持匿名访问 PatchMapping
* Annotation for mapping HTTP {@code PATCH} requests onto specific handler methods. 支持匿名访问 PatchMapping
*
* @see AnonymousGetMapping
* @see AnonymousPostMapping
@@ -42,43 +40,36 @@ public @interface AnonymousPatchMapping {
/**
* Alias for {@link RequestMapping#name}.
*/
@AliasFor(annotation = RequestMapping.class)
String name() default "";
@AliasFor(annotation = RequestMapping.class) String name() default "";
/**
* Alias for {@link RequestMapping#value}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
@AliasFor(annotation = RequestMapping.class) String[] value() default {};
/**
* Alias for {@link RequestMapping#path}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
@AliasFor(annotation = RequestMapping.class) String[] path() default {};
/**
* Alias for {@link RequestMapping#params}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] params() default {};
@AliasFor(annotation = RequestMapping.class) String[] params() default {};
/**
* Alias for {@link RequestMapping#headers}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] headers() default {};
@AliasFor(annotation = RequestMapping.class) String[] headers() default {};
/**
* Alias for {@link RequestMapping#consumes}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] consumes() default {};
@AliasFor(annotation = RequestMapping.class) String[] consumes() default {};
/**
* Alias for {@link RequestMapping#produces}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] produces() default {};
@AliasFor(annotation = RequestMapping.class) String[] produces() default {};
}
@@ -22,9 +22,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import java.lang.annotation.*;
/**
* Annotation for mapping HTTP {@code POST} requests onto specific handler
* methods.
* 支持匿名访问 PostMapping
* Annotation for mapping HTTP {@code POST} requests onto specific handler methods. 支持匿名访问 PostMapping
*
* @see AnonymousGetMapping
* @see AnonymousPostMapping
@@ -42,43 +40,36 @@ public @interface AnonymousPostMapping {
/**
* Alias for {@link RequestMapping#name}.
*/
@AliasFor(annotation = RequestMapping.class)
String name() default "";
@AliasFor(annotation = RequestMapping.class) String name() default "";
/**
* Alias for {@link RequestMapping#value}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
@AliasFor(annotation = RequestMapping.class) String[] value() default {};
/**
* Alias for {@link RequestMapping#path}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
@AliasFor(annotation = RequestMapping.class) String[] path() default {};
/**
* Alias for {@link RequestMapping#params}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] params() default {};
@AliasFor(annotation = RequestMapping.class) String[] params() default {};
/**
* Alias for {@link RequestMapping#headers}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] headers() default {};
@AliasFor(annotation = RequestMapping.class) String[] headers() default {};
/**
* Alias for {@link RequestMapping#consumes}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] consumes() default {};
@AliasFor(annotation = RequestMapping.class) String[] consumes() default {};
/**
* Alias for {@link RequestMapping#produces}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] produces() default {};
@AliasFor(annotation = RequestMapping.class) String[] produces() default {};
}
@@ -22,9 +22,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import java.lang.annotation.*;
/**
* Annotation for mapping HTTP {@code PUT} requests onto specific handler
* methods.
* 支持匿名访问 PutMapping
* Annotation for mapping HTTP {@code PUT} requests onto specific handler methods. 支持匿名访问 PutMapping
*
* @see AnonymousGetMapping
* @see AnonymousPostMapping
@@ -42,43 +40,36 @@ public @interface AnonymousPutMapping {
/**
* Alias for {@link RequestMapping#name}.
*/
@AliasFor(annotation = RequestMapping.class)
String name() default "";
@AliasFor(annotation = RequestMapping.class) String name() default "";
/**
* Alias for {@link RequestMapping#value}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
@AliasFor(annotation = RequestMapping.class) String[] value() default {};
/**
* Alias for {@link RequestMapping#path}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
@AliasFor(annotation = RequestMapping.class) String[] path() default {};
/**
* Alias for {@link RequestMapping#params}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] params() default {};
@AliasFor(annotation = RequestMapping.class) String[] params() default {};
/**
* Alias for {@link RequestMapping#headers}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] headers() default {};
@AliasFor(annotation = RequestMapping.class) String[] headers() default {};
/**
* Alias for {@link RequestMapping#consumes}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] consumes() default {};
@AliasFor(annotation = RequestMapping.class) String[] consumes() default {};
/**
* Alias for {@link RequestMapping#produces}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] produces() default {};
@AliasFor(annotation = RequestMapping.class) String[] produces() default {};
}
@@ -0,0 +1,34 @@
/*
* Copyright 2021-2025 Odboy
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.base;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
@EqualsAndHashCode(callSuper = false)
public class CsBaseCreateTimeTb extends CsObject {
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true)
private Date createTime;
}
@@ -0,0 +1,38 @@
/*
* Copyright 2021-2025 Odboy
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.base;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
@EqualsAndHashCode(callSuper = false)
public class CsBaseTimeTb extends CsObject {
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true)
private Date updateTime;
}
@@ -0,0 +1,34 @@
/*
* Copyright 2021-2025 Odboy
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.base;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
@EqualsAndHashCode(callSuper = false)
public class CsBaseUpdateTimeTb extends CsObject {
@TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true)
private Date updateTime;
}
@@ -21,11 +21,9 @@ import com.baomidou.mybatisplus.annotation.TableLogic;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.LastModifiedBy;
import java.lang.reflect.Field;
import java.util.Date;
/**
@@ -55,27 +53,4 @@ public class CsBaseUserTimeLogicTb extends CsObject {
@TableLogic
@TableField("available")
private Integer available;
/* 分组校验 */
public @interface Create {
}
/* 分组校验 */
public @interface Update {
}
@Override
public String toString() {
ToStringBuilder builder = new ToStringBuilder(this);
Field[] fields = this.getClass().getDeclaredFields();
try {
for (Field f : fields) {
f.setAccessible(true);
builder.append(f.getName(), f.get(this)).append("\n");
}
} catch (Exception e) {
builder.append("toString builder encounter an error");
}
return builder.toString();
}
}
@@ -28,7 +28,6 @@ import org.springframework.data.annotation.LastModifiedBy;
import java.lang.reflect.Field;
import java.util.Date;
@Getter
@Setter
@EqualsAndHashCode(callSuper = false)
@@ -15,6 +15,7 @@
*/
package cn.odboy.base;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -30,14 +31,21 @@ import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class CsResultVo<T> extends CsObject {
public class CsPageResultVo<T> extends CsObject {
private T content;
private long totalElements;
public static <T> CsResultVo<List<T>> emptyListData() {
CsResultVo<List<T>> result = new CsResultVo<>();
public static <T> CsPageResultVo<List<T>> emptyListData() {
CsPageResultVo<List<T>> result = new CsPageResultVo<>();
result.setTotalElements(0);
result.setContent(new ArrayList<>());
return result;
}
public static <T> CsPageResultVo<List<T>> listData(IPage<T> page) {
CsPageResultVo<List<T>> result = new CsPageResultVo<>();
result.setTotalElements(page.getTotal());
result.setContent(page.getRecords());
return result;
}
}
@@ -22,11 +22,7 @@ import lombok.Getter;
@AllArgsConstructor
public enum FileTypeEnum {
/* 文件类型 */
IMAGE("image", "图片"),
DOC("doc", "文档"),
VOICE("voice", "音频"),
VIDEO("video", "视频"),
OTHER("other", "其他");
IMAGE("image", "图片"), DOC("doc", "文档"), VOICE("voice", "音频"), VIDEO("video", "视频"), OTHER("other", "其他");
private final String code;
private final String description;
@@ -43,11 +43,6 @@ public class BootApplication {
String port = env.getProperty("server.port");
String path = StrUtil.isEmpty(env.getProperty("config.servlet.context-path")) ? "" : env.getProperty("config.servlet.context-path");
log.info(
"\n----------------------------------------------------------\n\t"
+ "Application is running! Access URLs:\n\t"
+ "Local: \t\thttp://localhost:" + port + path + "/\n\t"
+ "External: \thttp://" + ip + ":" + port + path + "/\n\t"
+ "Swagger文档: \thttp://" + ip + ":" + port + path + "/doc.html\n"
+ "----------------------------------------------------------");
"\n----------------------------------------------------------\n\t" + "Application is running! Access URLs:\n\t" + "Local: \t\thttp://localhost:" + port + path + "/\n\t" + "External: \thttp://" + ip + ":" + port + path + "/\n\t" + "Swagger文档: \thttp://" + ip + ":" + port + path + "/doc.html\n" + "----------------------------------------------------------");
}
}
@@ -27,7 +27,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Slf4j
@SuppressWarnings({"unchecked", "all"})
public class CsSpringBeanHolder implements ApplicationContextAware, DisposableBean {
@@ -37,8 +36,7 @@ public class CsSpringBeanHolder implements ApplicationContextAware, DisposableBe
private static boolean addCallback = true;
/**
* 针对 某些初始化方法, 在SpringContextHolder 未初始化时 提交回调方法。
* 在SpringContextHolder 初始化后, 进行回调使用
* 针对 某些初始化方法, 在SpringContextHolder 未初始化时 提交回调方法。 在SpringContextHolder 初始化后, 进行回调使用
*
* @param callBack 回调函数
*/
@@ -110,7 +108,8 @@ public class CsSpringBeanHolder implements ApplicationContextAware, DisposableBe
*/
private static void assertContextInjected() {
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext属性未注入, 请在applicationContext" + ".xml中定义SpringContextHolder或在SpringBoot启动类中注册SpringContextHolder.");
throw new IllegalStateException(
"applicaitonContext属性未注入, 请在applicationContext" + ".xml中定义SpringContextHolder或在SpringBoot启动类中注册SpringContextHolder.");
}
}
@@ -58,25 +58,14 @@ public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.enable(properties.getSwagger().getEnabled())
.pathMapping("/")
.apiInfo(apiInfo())
.select()
.paths(PathSelectors.regex("^(?!/error).*"))
.paths(PathSelectors.any())
.build()
return new Docket(DocumentationType.SWAGGER_2).enable(properties.getSwagger().getEnabled()).pathMapping("/").apiInfo(apiInfo()).select()
.paths(PathSelectors.regex("^(?!/error).*")).paths(PathSelectors.any()).build()
//添加登陆认证
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
.securitySchemes(securitySchemes()).securityContexts(securityContexts());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.description("一个简单且易上手的 Spring boot 后台管理框架")
.title("CuteJava 接口文档")
.version("1.4.1")
.build();
return new ApiInfoBuilder().description("一个简单且易上手的 Spring boot 后台管理框架").title("CuteJava 接口文档").version("1.4.1").build();
}
private List<SecurityScheme> securitySchemes() {
@@ -98,12 +87,9 @@ public class SwaggerConfig {
Set<String> urls = CsAnonTagUtil.getAllAnonymousUrl(applicationContext);
urls = urls.stream().filter(url -> !"/".equals(url)).collect(Collectors.toSet());
String regExp = "^(?!" + apiPath + String.join("|" + apiPath, urls) + ").*$";
return SecurityContext.builder()
.securityReferences(defaultAuth())
.operationSelector(o -> o.requestMappingPattern()
return SecurityContext.builder().securityReferences(defaultAuth()).operationSelector(o -> o.requestMappingPattern()
// 排除不需要认证的接口
.matches(regExp))
.build();
.matches(regExp)).build();
}
private List<SecurityReference> defaultAuth() {
@@ -134,9 +120,7 @@ public class SwaggerConfig {
}
private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {
List<T> filteredMappings = mappings.stream()
.filter(mapping -> mapping.getPatternParser() == null)
.collect(Collectors.toList());
List<T> filteredMappings = mappings.stream().filter(mapping -> mapping.getPatternParser() == null).collect(Collectors.toList());
mappings.clear();
mappings.addAll(filteredMappings);
}
@@ -17,7 +17,6 @@ package cn.odboy.framework.exception.handler;
import lombok.Data;
@Data
public final class ApiError {
@@ -60,13 +60,7 @@ public class MpCustomP6SpyLogger implements MessageFormattingStrategy {
sql = sql.replaceAll("\\s+", " ").trim();
}
// 格式化并加上颜色
return String.format(
"CuteJava - %s%s%s %s[%s] %sREVIEW_SQL [Interval: %dms]%s -> %s;",
RED, now, RESET,
GREEN, Thread.currentThread().getName(),
BLUE,
elapsed, RESET,
sql
);
return String.format("CuteJava - %s%s%s %s[%s] %sREVIEW_SQL [Interval: %dms]%s -> %s;", RED, now, RESET, GREEN, Thread.currentThread().getName(), BLUE,
elapsed, RESET, sql);
}
}
@@ -34,13 +34,11 @@ import java.io.IOException;
@SuppressWarnings({"unchecked", "all"})
@ConditionalOnWebApplication
@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled",
havingValue = "true", matchIfMissing = true)
@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true", matchIfMissing = true)
public class RemoveDruidAdConfig {
/**
* 方法名: removeDruidAdFilterRegistrationBean
* 方法描述 除去页面底部的广告
* 方法名: removeDruidAdFilterRegistrationBean 方法描述 除去页面底部的广告
*
* @param properties com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties
* @return org.springframework.boot.web.servlet.FilterRegistrationBean
@@ -18,7 +18,6 @@ package cn.odboy.framework.mybatisplus.core;
import cn.hutool.core.util.StrUtil;
import cn.odboy.base.CsBaseUserTimeTb;
import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.util.CsFileUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
@@ -74,9 +73,8 @@ public class CsMpCmdGenUtil {
public void gen(String moduleName, String tablePrefix, List<String> tableNames) {
this.parentModuleName = moduleName;
// 1.数据库配置
DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig
.Builder(this.databaseUrl, this.databaseUsername, this.databasePassword)
.driverClassName(this.driverClassName);
DataSourceConfig.Builder dataSourceConfigBuilder =
new DataSourceConfig.Builder(this.databaseUrl, this.databaseUsername, this.databasePassword).driverClassName(this.driverClassName);
dataSourceConfigBuilder.dbQuery(DB_QUERY);
dataSourceConfigBuilder.keyWordsHandler(new MySqlKeyWordsHandler());
// 1.1.快速生成器
@@ -103,8 +101,7 @@ public class CsMpCmdGenUtil {
// 5.策略配置
// 设置需要生成的表名
// 设置过滤表前缀
fastAutoGenerator.strategyConfig(getStrategyConfigConsumer(tableNames)
);
fastAutoGenerator.strategyConfig(getStrategyConfigConsumer(tableNames));
if (tablePrefix != null) {
// 表前缀, 可多个
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.addTablePrefix(tablePrefix));
@@ -119,10 +116,8 @@ public class CsMpCmdGenUtil {
// 开启生成@RestController控制器
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder().enableRestStyle());
// 如果不需要生成Controller, fastAutoGenerator.templateConfig(templateConfig -> templateConfig.controller(""))。5.3.Service策略配置:格式化service接口和实现类的文件名称, 去掉默认的ServiceName前面的I
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder
.serviceBuilder()
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl"));
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.serviceBuilder().formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImpl"));
// 5.4.Mapper策略配置
// 格式化 mapper文件名,格式化xml实现类文件名称
fastAutoGenerator.strategyConfig(getStrategyConfigConsumer());
@@ -131,31 +126,19 @@ public class CsMpCmdGenUtil {
}
private static Consumer<StrategyConfig.Builder> getEntityConfigConsumer() {
return strategyConfigBuilder -> strategyConfigBuilder
.entityBuilder()
.enableLombok()
return strategyConfigBuilder -> strategyConfigBuilder.entityBuilder().enableLombok()
// 如果不需要生成注解, 去掉.enableTableFieldAnnotation()
.enableTableFieldAnnotation()
.enableFileOverride()
.naming(NamingStrategy.underline_to_camel)
.columnNaming(NamingStrategy.underline_to_camel)
.enableTableFieldAnnotation().enableFileOverride().naming(NamingStrategy.underline_to_camel).columnNaming(NamingStrategy.underline_to_camel)
.idType(IdType.AUTO);
}
private static Consumer<StrategyConfig.Builder> getStrategyConfigConsumer(List<String> tableNames) {
return strategyConfigBuilder -> strategyConfigBuilder
.enableCapitalMode()
.enableSkipView()
.disableSqlFilter()
.addInclude(tableNames)
return strategyConfigBuilder -> strategyConfigBuilder.enableCapitalMode().enableSkipView().disableSqlFilter().addInclude(tableNames)
// 实体类生成策略
.entityBuilder()
.superClass(CsBaseUserTimeTb.class)
.addIgnoreColumns("create_time", "update_time", "create_by", "update_by")
.entityBuilder().superClass(CsBaseUserTimeTb.class).addIgnoreColumns("create_time", "update_time", "create_by", "update_by")
// 开启生成实体时生成字段注解。
// 会在实体类的属性前,添加[@TableField("nickname")]
.enableTableFieldAnnotation()
.disableSerialVersionUID()
.enableTableFieldAnnotation().disableSerialVersionUID()
// 阶段2:Mapper策略配置
.mapperBuilder()
// 开启 @Mapper 注解。
@@ -172,8 +155,7 @@ public class CsMpCmdGenUtil {
// 会在控制类中加[@RestController]注解。
.enableRestStyle()
// 开启驼峰转连字符
.enableHyphenStyle()
.build();
.enableHyphenStyle().build();
}
private Consumer<PackageConfig.Builder> getPackageConfigConsumer() {
@@ -181,33 +163,20 @@ public class CsMpCmdGenUtil {
if (StrUtil.isBlank(this.parentModuleName)) {
throw new BadRequestException("模块名称必填");
}
return packageConfigBuilder -> packageConfigBuilder
.parent(this.parentPackageName)
.moduleName(this.parentModuleName)
.entity("dal.dataobject")
.mapper("dal.mysql")
.service("service")
.serviceImpl("service.impl")
.controller("rest")
return packageConfigBuilder -> packageConfigBuilder.parent(this.parentPackageName).moduleName(this.parentModuleName).entity("dal.dataobject")
.mapper("dal.mysql").service("service").serviceImpl("service.impl").controller("controller")
.pathInfo(Collections.singletonMap(OutputFile.xml, mapperPath));
}
private static Consumer<GlobalConfig.Builder> getGlobalConfigConsumer() {
String outputDir = CsFileUtil.getTmpDirPath() + "CodeGen";
return globalConfigBuilder -> globalConfigBuilder
.enableSwagger()
.outputDir(outputDir)
.author("codegen")
.commentDate("yyyy-MM-dd")
String outputDir = projectRootPath + "CodeGen";
return globalConfigBuilder -> globalConfigBuilder.enableSwagger().outputDir(outputDir).author("codegen").commentDate("yyyy-MM-dd")
.dateType(DateType.TIME_PACK);
}
private static Consumer<StrategyConfig.Builder> getStrategyConfigConsumer() {
return strategyConfigBuilder -> strategyConfigBuilder
.mapperBuilder()
.mapperAnnotation(Mapper.class)
.formatMapperFileName("%sMapper")
.formatXmlFileName("%sMapper");
return strategyConfigBuilder -> strategyConfigBuilder.mapperBuilder().mapperAnnotation(Mapper.class).formatMapperFileName("%sMapper")
.formatXmlFileName("%sMapper").entityBuilder().formatFileName("%sTb");
}
private static Consumer<DataSourceConfig.Builder> getDataSourceConfigConsumer() {
@@ -15,7 +15,7 @@
*/
package cn.odboy.framework.mybatisplus.core.interfaces;
import cn.odboy.base.CsResultVo;
import cn.odboy.base.CsPageResultVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
@@ -56,13 +56,13 @@ public interface CsMpEasyService<T> extends IService<T> {
<G> List<G> queryFeatureClazzListByArgs(LambdaQueryWrapper<T> wrapper, Class<G> targetClazz);
CsResultVo<List<T>> queryClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable);
CsPageResultVo<List<T>> queryClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable);
<G> CsResultVo<List<G>> queryFeatureClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable, Class<G> targetClazz);
<G> CsPageResultVo<List<G>> queryFeatureClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable, Class<G> targetClazz);
<G, Q> CsResultVo<List<G>> queryFeatureClazzPageByArgs(Q criteria, IPage<T> pageable, Class<G> targetClazz);
<G, Q> CsPageResultVo<List<G>> queryFeatureClazzPageByArgs(Q criteria, IPage<T> pageable, Class<G> targetClazz);
<Q> CsResultVo<List<T>> queryClazzPageByArgs(Q criteria, IPage<T> pageable);
<Q> CsPageResultVo<List<T>> queryClazzPageByArgs(Q criteria, IPage<T> pageable);
int modifyClazzByArgs(LambdaQueryWrapper<T> wrapper, T entity);
@@ -18,7 +18,7 @@ package cn.odboy.framework.mybatisplus.core.interfaces;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.odboy.base.CsResultVo;
import cn.odboy.base.CsPageResultVo;
import cn.odboy.util.CsPageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -136,16 +136,16 @@ public interface CsMpMapper<E> extends BaseMapper<E> {
* @param clazz 期望的对象类型
* @return IPage<T>
*/
default <T> CsResultVo<List<T>> queryFeatureClazzPage(Pageable pageable, LambdaQueryWrapper<E> wrapper, Class<T> clazz) {
default <T> CsPageResultVo<List<T>> queryFeatureClazzPage(Pageable pageable, LambdaQueryWrapper<E> wrapper, Class<T> clazz) {
int pageNumber = pageable.getPageNumber();
int pageSize = pageable.getPageSize();
pageNumber = pageNumber <= 0 ? 1 : pageNumber;
pageSize = pageSize <= 0 ? 10 : pageSize;
IPage<E> pageInfo = this.selectPage(new Page<>(pageNumber, pageSize), wrapper);
if (CollUtil.isEmpty(pageInfo.getRecords())) {
return new CsResultVo<>(new ArrayList<>(), pageInfo.getTotal());
return new CsPageResultVo<>(new ArrayList<>(), pageInfo.getTotal());
}
return new CsResultVo<>(BeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal());
return new CsPageResultVo<>(BeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal());
}
/**
@@ -156,7 +156,7 @@ public interface CsMpMapper<E> extends BaseMapper<E> {
* @param clazz 期望的对象类型
* @return IPage<T>
*/
default <T> CsResultVo<List<T>> queryFeatureClazzPage(Pageable pageable, LambdaQueryChainWrapper<E> wrapper, Class<T> clazz) {
default <T> CsPageResultVo<List<T>> queryFeatureClazzPage(Pageable pageable, LambdaQueryChainWrapper<E> wrapper, Class<T> clazz) {
int pageNumber = pageable.getPageNumber();
int pageSize = pageable.getPageSize();
pageNumber = pageNumber <= 0 ? 1 : pageNumber;
@@ -165,7 +165,7 @@ public interface CsMpMapper<E> extends BaseMapper<E> {
if (CollUtil.isEmpty(pageInfo.getRecords())) {
return CsPageUtil.emptyListData();
}
return new CsResultVo<>(BeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal());
return new CsPageResultVo<>(BeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal());
}
/**
@@ -17,7 +17,7 @@ package cn.odboy.framework.mybatisplus.core.interfaces;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.odboy.base.CsResultVo;
import cn.odboy.base.CsPageResultVo;
import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.framework.mybatisplus.core.CsMpQUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -193,12 +193,12 @@ public class CsMpServiceImpl<M extends CsMpMapper<T>, T> extends ServiceImpl<M,
* @param wrapper 制造条件
* @param pageable 分页参数
*/
public CsResultVo<List<T>> queryClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable) {
public CsPageResultVo<List<T>> queryClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable) {
if (wrapper == null) {
wrapper = new LambdaQueryWrapper<>();
}
IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper);
return new CsResultVo<>(originPageData.getRecords(), originPageData.getTotal());
return new CsPageResultVo<>(originPageData.getRecords(), originPageData.getTotal());
}
/**
@@ -208,24 +208,24 @@ public class CsMpServiceImpl<M extends CsMpMapper<T>, T> extends ServiceImpl<M,
* @param pageable 分页参数
* @param targetClazz 目标类型
*/
public <G> CsResultVo<List<G>> queryFeatureClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable, Class<G> targetClazz) {
public <G> CsPageResultVo<List<G>> queryFeatureClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable, Class<G> targetClazz) {
if (wrapper == null) {
wrapper = new LambdaQueryWrapper<>();
}
IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper);
return new CsResultVo<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), originPageData.getTotal());
return new CsPageResultVo<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), originPageData.getTotal());
}
public <G, Q> CsResultVo<List<G>> queryFeatureClazzPageByArgs(Q criteria, IPage<T> pageable, Class<G> targetClazz) {
public <G, Q> CsPageResultVo<List<G>> queryFeatureClazzPageByArgs(Q criteria, IPage<T> pageable, Class<G> targetClazz) {
QueryWrapper<T> wrapper = CsMpQUtil.build(criteria);
IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper);
return new CsResultVo<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), originPageData.getTotal());
return new CsPageResultVo<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), originPageData.getTotal());
}
public <Q> CsResultVo<List<T>> queryClazzPageByArgs(Q criteria, IPage<T> pageable) {
public <Q> CsPageResultVo<List<T>> queryClazzPageByArgs(Q criteria, IPage<T> pageable) {
QueryWrapper<T> wrapper = CsMpQUtil.build(criteria);
IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper);
return new CsResultVo<>(originPageData.getRecords(), originPageData.getTotal());
return new CsPageResultVo<>(originPageData.getRecords(), originPageData.getTotal());
}
/**
@@ -50,28 +50,21 @@ import java.util.Map;
@AutoConfigureBefore(RedisAutoConfiguration.class)
public class RedisConfiguration extends CachingConfigurerSupport {
/**
* 自动识别json对象白名单配置(仅允许解析的包名, 范围越小越安全)<br/>
* 未配置可能导致, 登录失败, 反复登录等问题
* 自动识别json对象白名单配置(仅允许解析的包名, 范围越小越安全)<br/> 未配置可能导致, 登录失败, 反复登录等问题
*/
private static final String[] WHITELIST_STR = {
"org.springframework",
"cn.odboy.system.dal.dataobject",
"cn.odboy.system.dal.model",
"cn.odboy.pipeline.dal.dataobject",
"cn.odboy.pipeline.dal.model",
"cn.odboy.devops.framework.pipeline.model",
};
private static final String[] WHITELIST_STR =
{"org.springframework", "cn.odboy.system.dal.dataobject", "cn.odboy.system.dal.model", "cn.odboy.pipeline.dal.dataobject",
"cn.odboy.pipeline.dal.model", "cn.odboy.pipeline.framework.pipeline.model"};
/**
* 设置 redis 数据默认过期时间,默认2小时
* 设置@cacheable 序列化方式
* 设置 redis 数据默认过期时间,默认2小时 设置@cacheable 序列化方式
*/
@Bean
public RedisCacheConfiguration redisCacheConfiguration() {
FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig();
configuration = configuration.serializeValuesWith(RedisSerializationContext.
SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofHours(2));
configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer))
.entryTtl(Duration.ofHours(2));
return configuration;
}
@@ -103,9 +96,7 @@ public class RedisConfiguration extends CachingConfigurerSupport {
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisCacheConfiguration config = redisCacheConfiguration();
return RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(config)
.build();
return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();
}
/**
@@ -202,8 +202,8 @@ public class RedisHelper {
public void scanDel(String pattern) {
ScanOptions options = ScanOptions.scanOptions().match(pattern).build();
try (Cursor<byte[]> cursor = redisTemplate.executeWithStickyConnection(
(RedisCallback<Cursor<byte[]>>) connection -> (Cursor<byte[]>) new ConvertingCursor<>(
connection.scan(options), redisTemplate.getKeySerializer()::deserialize))) {
(RedisCallback<Cursor<byte[]>>)connection -> (Cursor<byte[]>)new ConvertingCursor<>(connection.scan(options),
redisTemplate.getKeySerializer()::deserialize))) {
while (cursor.hasNext()) {
redisTemplate.delete(cursor.next());
}
@@ -265,7 +265,6 @@ public class RedisHelper {
return null;
}
/**
* 普通缓存获取
*
@@ -55,12 +55,8 @@ public class RedissonConfiguration {
@Bean
public RedissonClient redissonClient() {
Config config = new Config();
config.useSingleServer()
.setAddress("redis://" + redisHost + ":" + redisPort)
.setDatabase(redisDatabase)
.setTimeout(timeout)
.setConnectionPoolSize(connectionPoolSize)
.setConnectionMinimumIdleSize(connectionMinimumIdleSize);
config.useSingleServer().setAddress("redis://" + redisHost + ":" + redisPort).setDatabase(redisDatabase).setTimeout(timeout)
.setConnectionPoolSize(connectionPoolSize).setConnectionMinimumIdleSize(connectionMinimumIdleSize);
if (StrUtil.isNotBlank(redisPassword)) {
config.useSingleServer().setPassword(redisPassword);
}
@@ -48,7 +48,8 @@ public class AsyncTheadPoolConfig implements AsyncConfigurer {
// 自定义工厂
ThreadFactory factory = r -> new Thread(r, "default-async-" + new AtomicInteger(1).getAndIncrement());
// 自定义线程池
return new ThreadPoolExecutor(asyncTaskPool.getCorePoolSize(), asyncTaskPool.getMaxPoolSize(), asyncTaskPool.getKeepAliveSeconds(), TimeUnit.SECONDS, new ArrayBlockingQueue<>(asyncTaskPool.getQueueCapacity()), factory, new ThreadPoolExecutor.CallerRunsPolicy());
return new ThreadPoolExecutor(asyncTaskPool.getCorePoolSize(), asyncTaskPool.getMaxPoolSize(), asyncTaskPool.getKeepAliveSeconds(), TimeUnit.SECONDS,
new ArrayBlockingQueue<>(asyncTaskPool.getQueueCapacity()), factory, new ThreadPoolExecutor.CallerRunsPolicy());
}
/**
@@ -35,14 +35,12 @@ public class DateStringArraysToListDateConverter implements Converter<String[],
if (source.length == 0) {
return Collections.emptyList();
}
return Arrays.stream(source)
.map(s -> {
return Arrays.stream(source).map(s -> {
try {
return sdf.parse(s);
} catch (ParseException e) {
throw new IllegalArgumentException("Invalid date string: " + s);
}
})
.collect(Collectors.toList());
}).collect(Collectors.toList());
}
}
@@ -19,7 +19,6 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WsConfig {
@@ -22,8 +22,7 @@ import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;
/**
* 解决启动io.undertow.websockets.jsr UT026010: Buffer pool was not
* set on WebSocketDeploymentInfo, the default pool will be used的警告
* 解决启动io.undertow.websockets.jsr UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used的警告
*
* @date 2024-06-07
*/
@@ -28,7 +28,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@Component
@ServerEndpoint("/websocket/{sid}")
@@ -160,10 +160,7 @@ public final class CsCollUtil extends cn.hutool.core.collection.CollUtil {
* @return /
*/
public static BigDecimal streamBigDecimalMax(List<BigDecimal> data) {
return data.stream()
.filter(Objects::nonNull)
.reduce(BigDecimal::max)
.orElse(null);
return data.stream().filter(Objects::nonNull).reduce(BigDecimal::max).orElse(null);
}
/**
@@ -175,10 +172,7 @@ public final class CsCollUtil extends cn.hutool.core.collection.CollUtil {
* @return /
*/
public static BigDecimal streamBigDecimalMin(List<BigDecimal> data) {
return data.stream()
.filter(Objects::nonNull)
.reduce(BigDecimal::min)
.orElse(null);
return data.stream().filter(Objects::nonNull).reduce(BigDecimal::min).orElse(null);
}
/**
@@ -190,10 +184,7 @@ public final class CsCollUtil extends cn.hutool.core.collection.CollUtil {
* @return /
*/
public static BigDecimal streamBigDecimalAvg(List<BigDecimal> data) {
return data.stream()
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.divide(BigDecimal.valueOf(data.size()), 6, RoundingMode.FLOOR);
return data.stream().filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(data.size()), 6, RoundingMode.FLOOR);
}
public static void main(String[] args) {
@@ -144,17 +144,12 @@ public final class CsDistributedIdUtil {
// 序列号溢出,等待下一毫秒
currentTimestamp = waitNextMillis(lastTimestampValue);
}
return ((currentTimestamp - START_TIMESTAMP) << timestampLeftShift) |
(dataCenterId << dataCenterIdShift) |
(workerId << workerIdShift) |
seq;
return ((currentTimestamp - START_TIMESTAMP) << timestampLeftShift) | (dataCenterId << dataCenterIdShift) | (workerId << workerIdShift) | seq;
} else {
// 时间戳改变,重置序列号
sequence.set(0L);
lastTimestamp.set(currentTimestamp);
return ((currentTimestamp - START_TIMESTAMP) << timestampLeftShift) |
(dataCenterId << dataCenterIdShift) |
(workerId << workerIdShift);
return ((currentTimestamp - START_TIMESTAMP) << timestampLeftShift) | (dataCenterId << dataCenterIdShift) | (workerId << workerIdShift);
}
}
@@ -54,9 +54,7 @@ public final class CsFileUtil extends cn.hutool.core.io.FileUtil {
/**
* 系统临时目录
* <br>
* windows 包含路径分割符, 但Linux 不包含,
* 在windows \\==\ 前提下,
* 为安全起见 同意拼装 路径分割符,
* windows 包含路径分割符, 但Linux 不包含, 在windows \\==\ 前提下, 为安全起见 同意拼装 路径分割符,
* <pre>
* java.io.tmpdir
* windows : C:\Users/xxx\AppData\Local\Temp\
@@ -192,8 +190,8 @@ public final class CsFileUtil extends cn.hutool.core.io.FileUtil {
if (value instanceof String) {
String strValue = (String)value;
// 检查并处理以特殊字符开头的值
if (strValue.startsWith(SYMBOL_EQUAL) || strValue.startsWith(SYMBOL_ADD)
|| strValue.startsWith(SYMBOL_SUBTRACT) || strValue.startsWith(SYMBOL_AT)) {
if (strValue.startsWith(SYMBOL_EQUAL) || strValue.startsWith(SYMBOL_ADD) || strValue.startsWith(SYMBOL_SUBTRACT) || strValue.startsWith(
SYMBOL_AT)) {
// 添加单引号前缀
strValue = "'" + strValue;
}
@@ -382,8 +380,7 @@ public final class CsFileUtil extends cn.hutool.core.io.FileUtil {
fileName = fileName.replaceAll("^\\.+/", "");
// 保留文件名中最后一个 "." 字符,过滤掉其他 "."
fileName = fileName.replaceAll("^(.*)(\\.[^.]*)$", "$1").replaceAll("\\.", "") +
fileName.replaceAll("^(.*)(\\.[^.]*)$", "$2");
fileName = fileName.replaceAll("^(.*)(\\.[^.]*)$", "$1").replaceAll("\\.", "") + fileName.replaceAll("^(.*)(\\.[^.]*)$", "$2");
return fileName;
}
@@ -45,7 +45,6 @@ public final class CsIPUtil {
return null;
}
/**
* 获取当前机器的IP
*
@@ -39,16 +39,13 @@ public final class CsListUtil {
* @param classifier 对象T属性表达式, 比如: User::getName
*/
public static <T, K> List<T> distinctByArgs(List<T> items, Function<? super T, ? extends K> classifier) {
return items.stream()
.collect(Collectors.groupingBy(classifier))
.values().stream()
.map(monitorItem -> monitorItem.iterator().next())
return items.stream().collect(Collectors.groupingBy(classifier)).values().stream().map(monitorItem -> monitorItem.iterator().next())
.collect(Collectors.toList());
}
/**
* list转map, 保留新值 -> Map<String, User> userMap = items.stream().collect(Collectors.toMap(User::getName, user -> user)) <br>
* list转map, 保留旧值 -> Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getName, user -> user, (existing, replacement) -> existing));
* list转map, 保留新值 -> Map<String, User> userMap = items.stream().collect(Collectors.toMap(User::getName, user -> user)) <br> list转map, 保留旧值 -> Map<String,
* User> userMap = users.stream().collect(Collectors.toMap(User::getName, user -> user, (existing, replacement) -> existing));
*/
public static void main(String[] args) {
List<CsBaseUserTimeTb> entities = new ArrayList<>();
@@ -15,7 +15,7 @@
*/
package cn.odboy.util;
import cn.odboy.base.CsResultVo;
import cn.odboy.base.CsPageResultVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -52,36 +52,36 @@ public final class CsPageUtil extends cn.hutool.core.util.PageUtil {
/**
* Page 数据处理
*/
public static <T> CsResultVo<List<T>> toPage(IPage<T> page) {
return new CsResultVo<>(page.getRecords(), page.getTotal());
public static <T> CsPageResultVo<List<T>> toPage(IPage<T> page) {
return new CsPageResultVo<>(page.getRecords(), page.getTotal());
}
/**
* 自定义分页
*/
public static <T> CsResultVo<List<T>> toPage(List<T> list) {
return new CsResultVo<>(list, list.size());
public static <T> CsPageResultVo<List<T>> toPage(List<T> list) {
return new CsPageResultVo<>(list, list.size());
}
/**
* 返回空数据
*/
public static <T> CsResultVo<List<T>> emptyListData() {
return new CsResultVo<>(new ArrayList<>(), 0);
public static <T> CsPageResultVo<List<T>> emptyListData() {
return new CsPageResultVo<>(new ArrayList<>(), 0);
}
/**
* 返回空数据
*/
public static <T> CsResultVo<T> emptyData() {
return new CsResultVo<>(null, 0);
public static <T> CsPageResultVo<T> emptyData() {
return new CsPageResultVo<>(null, 0);
}
/**
* 自定义分页
*/
public static <T> CsResultVo<List<T>> toPage(List<T> list, long totalElements) {
return new CsResultVo<>(list, totalElements);
public static <T> CsPageResultVo<List<T>> toPage(List<T> list, long totalElements) {
return new CsPageResultVo<>(list, totalElements);
}
public static <T> Page<T> getCount(BaseMapper<T> baseMapper) {
@@ -189,7 +189,6 @@ public final class CsRsaEncryptUtil {
return new RsaKeyPair(publicKeyString, privateKeyString);
}
/**
* RSA密钥对对象
*/
@@ -18,9 +18,7 @@ public final class CsStringUtil extends org.apache.commons.lang3.StringUtils {
/**
* 驼峰命名法工具
*
* @return toCamelCase(" hello_world ") == "helloWorld"
* toCapitalizeCamelCase("hello_world") == "HelloWorld"
* toUnderScoreCase("helloWorld") = "hello_world"
* @return toCamelCase(" hello_world ") == "helloWorld" toCapitalizeCamelCase("hello_world") == "HelloWorld" toUnderScoreCase("helloWorld") = "hello_world"
*/
public static String toCamelCase(String s) {
if (s == null) {
@@ -50,9 +48,7 @@ public final class CsStringUtil extends org.apache.commons.lang3.StringUtils {
/**
* 驼峰命名法工具
*
* @return toCamelCase(" hello_world ") == "helloWorld"
* toCapitalizeCamelCase("hello_world") == "HelloWorld"
* toUnderScoreCase("helloWorld") = "hello_world"
* @return toCamelCase(" hello_world ") == "helloWorld" toCapitalizeCamelCase("hello_world") == "HelloWorld" toUnderScoreCase("helloWorld") = "hello_world"
*/
public static String toCapitalizeCamelCase(String s) {
if (s == null) {
@@ -65,9 +61,7 @@ public final class CsStringUtil extends org.apache.commons.lang3.StringUtils {
/**
* 驼峰命名法工具
*
* @return toCamelCase(" hello_world ") == "helloWorld"
* toCapitalizeCamelCase("hello_world") == "HelloWorld"
* toUnderScoreCase("helloWorld") = "hello_world"
* @return toCamelCase(" hello_world ") == "helloWorld" toCapitalizeCamelCase("hello_world") == "HelloWorld" toUnderScoreCase("helloWorld") = "hello_world"
*/
public static String toUnderScoreCase(String s) {
if (s == null) {
@@ -100,7 +94,6 @@ public final class CsStringUtil extends org.apache.commons.lang3.StringUtils {
return sb.toString();
}
/**
* 获得当天是周几
*/
@@ -44,11 +44,7 @@ public final class CsValidUtil {
public static <T> void validate(T object) {
Set<ConstraintViolation<T>> violations = VALIDATOR.validate(object, Default.class);
if (!violations.isEmpty()) {
throw new IllegalArgumentException(violations
.stream()
.map(ConstraintViolation::getMessage)
.collect(Collectors.joining(","))
);
throw new IllegalArgumentException(violations.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(",")));
}
}
}
+1 -1
View File
@@ -8,7 +8,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cutejava-module-pipeline</artifactId>
<name>devops应用模块</name>
<name>pipeline模块</name>
<dependencies>
<dependency>
@@ -16,7 +16,7 @@
package cn.odboy.devops.dal.dataobject;
import cn.odboy.base.CsObject;
import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.constant.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.model.PipelineNodeOperateButtonVo;
import com.alibaba.fastjson2.annotation.JSONField;
import com.anwen.mongo.annotation.ID;
@@ -21,7 +21,6 @@ import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class StartPipelineResultVo extends CsObject {
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.dal.redis;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceTb;
import cn.odboy.framework.redis.RedisHelper;
import lombok.RequiredArgsConstructor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.framework.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.constant.PipelineStatusEnum;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.service.core.PipelineInstanceNodeDetailService;
import cn.odboy.devops.service.core.PipelineInstanceNodeService;
@@ -33,7 +33,8 @@ public abstract class AbstractPipelineNodeJobService {
return pipelineInstanceNodeService.getPipelineInstanceNodeByArgs(instanceId, code);
}
public void addPipelineInstanceNodeDetailLog(PipelineInstanceNodeTb pipelineInstanceNode, String stepName, PipelineStatusEnum stepStatus, String stepMsg, Date finishTime) {
public void addPipelineInstanceNodeDetailLog(PipelineInstanceNodeTb pipelineInstanceNode, String stepName, PipelineStatusEnum stepStatus, String stepMsg,
Date finishTime) {
if (pipelineInstanceNode != null) {
pipelineInstanceNodeDetailService.addLog(pipelineInstanceNode.getId(), pipelineInstanceNode.getCode(), stepName, stepStatus, stepMsg, finishTime);
}
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.devops.constant.pipeline;
package cn.odboy.devops.framework.pipeline.constant;
/**
* 流水线 常量
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.devops.constant.pipeline;
package cn.odboy.devops.framework.pipeline.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -24,9 +24,7 @@ import lombok.Getter;
@Getter
@AllArgsConstructor
public enum PipelineStatusEnum {
PENDING("pending", "#C0C4CC", "未开始"),
RUNNING("running", "#409EFF", "运行中"),
SUCCESS("success", "#67C23A", "执行成功"),
PENDING("pending", "#C0C4CC", "未开始"), RUNNING("running", "#409EFF", "运行中"), SUCCESS("success", "#67C23A", "执行成功"),
FAIL("fail", "#F56C6C", "执行失败");
/**
* 状态码
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.devops.constant.pipeline;
package cn.odboy.devops.framework.pipeline.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -24,11 +24,7 @@ import lombok.Getter;
@Getter
@AllArgsConstructor
public enum PipelineTypeEnum {
BACKEND("backend", "后端"),
FRONT("front", "前端"),
MOBILE("mobile", "移动端"),
ANDROID("pc", "PC端"),
UN_SUPPORT("un_support", "不支持的类型");
BACKEND("backend", "后端"), FRONT("front", "前端"), MOBILE("mobile", "移动端"), ANDROID("pc", "PC端"), UN_SUPPORT("un_support", "不支持的类型");
/**
* 类型编码
*/
@@ -17,8 +17,8 @@ package cn.odboy.devops.framework.pipeline.core;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineStatusEnum;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.dal.dataobject.PipelineInstanceTb;
import cn.odboy.devops.dal.mysql.PipelineInstanceMapper;
@@ -156,7 +156,8 @@ public class PipelineJobBean implements InterruptableJob {
}
// 检查实例节点状态
ThreadUtil.safeSleep(3000);
PipelineInstanceNodeTb runningInstanceNode = pipelineInstanceNodeService.getPipelineInstanceNodeByArgs(instanceId, pipelineNodeTemplateVo.getCode());
PipelineInstanceNodeTb runningInstanceNode =
pipelineInstanceNodeService.getPipelineInstanceNodeByArgs(instanceId, pipelineNodeTemplateVo.getCode());
if (PipelineStatusEnum.SUCCESS.getCode().equals(runningInstanceNode.getCurrentNodeStatus())) {
pipelineStatusEnum = PipelineStatusEnum.SUCCESS;
pipelineInstanceTb.setCurrentNodeStatus(pipelineStatusEnum.getCode());
@@ -236,13 +237,8 @@ public class PipelineJobBean implements InterruptableJob {
pipelineInstanceTb.setCurrentNodeStatus(PipelineStatusEnum.FAIL.getCode());
// 更新节点状态
PipelineInstanceNodeService pipelineInstanceNodeService = CsSpringBeanHolder.getBean(PipelineInstanceNodeService.class);
pipelineInstanceNodeService.finishPipelineInstanceNodeByArgs(
this.currentInstanceId,
this.currentNodeCode,
PipelineStatusEnum.FAIL,
"用户主动停止",
new Date()
);
pipelineInstanceNodeService.finishPipelineInstanceNodeByArgs(this.currentInstanceId, this.currentNodeCode, PipelineStatusEnum.FAIL,
"用户主动停止", new Date());
}
pipelineInstanceTb.setStatus(PipelineStatusEnum.FAIL.getCode());
// 更新实例状态
@@ -16,7 +16,7 @@
package cn.odboy.devops.framework.pipeline.core;
import cn.hutool.core.util.IdUtil;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceTb;
import cn.odboy.framework.exception.BadRequestException;
import lombok.extern.slf4j.Slf4j;
@@ -85,8 +85,7 @@ public class PipelineJobManage {
}
/**
* 中断正在执行的任务<br/>
* 任务终止需要配合响应中断或停止信号
* 中断正在执行的任务<br/> 任务终止需要配合响应中断或停止信号
*/
public void interruptJob(Long instanceId) throws SchedulerException {
JobKey jobKey = JobKey.jobKey(String.format(JOB_KEY, instanceId));
@@ -15,8 +15,8 @@
*/
package cn.odboy.devops.framework.pipeline.core;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult;
import cn.odboy.devops.framework.pipeline.model.PipelineNodeTemplateVo;
import cn.odboy.devops.service.core.PipelineInstanceNodeService;
@@ -50,16 +50,19 @@ public class PipelineNodeJobBean implements Job {
try {
String serviceName = PipelineConst.EXECUTOR_PREFIX + nodeCode;
PipelineNodeJobExecutor pipelineNodeJobExecutor = CsSpringBeanHolder.getBean(serviceName);
pipelineInstanceNodeService.updatePipelineInstanceNodeByArgs(instanceId, nodeCode, PipelineStatusEnum.RUNNING, PipelineStatusEnum.RUNNING.getDesc());
pipelineInstanceNodeService.updatePipelineInstanceNodeByArgs(instanceId, nodeCode, PipelineStatusEnum.RUNNING,
PipelineStatusEnum.RUNNING.getDesc());
PipelineNodeJobExecuteResult executeResult = pipelineNodeJobExecutor.execute(jobDataMap);
jobExecutionContext.getMergedJobDataMap().put(PipelineConst.LAST_NODE_RESULT, executeResult);
pipelineInstanceNodeService.finishPipelineInstanceNodeByArgs(instanceId, nodeCode, PipelineStatusEnum.SUCCESS, PipelineStatusEnum.SUCCESS.getDesc(), new Date());
pipelineInstanceNodeService.finishPipelineInstanceNodeByArgs(instanceId, nodeCode, PipelineStatusEnum.SUCCESS, PipelineStatusEnum.SUCCESS.getDesc(),
new Date());
} catch (BadRequestException e) {
log.error("流水线节点执行异常", e);
pipelineInstanceNodeService.finishPipelineInstanceNodeByArgs(instanceId, nodeCode, PipelineStatusEnum.FAIL, e.getMessage(), new Date());
} catch (Exception e) {
log.error("流水线节点执行异常", e);
pipelineInstanceNodeService.finishPipelineInstanceNodeByArgs(instanceId, nodeCode, PipelineStatusEnum.FAIL, PipelineStatusEnum.FAIL.getDesc(), new Date());
pipelineInstanceNodeService.finishPipelineInstanceNodeByArgs(instanceId, nodeCode, PipelineStatusEnum.FAIL, PipelineStatusEnum.FAIL.getDesc(),
new Date());
}
}
}
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.framework.pipeline.core;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceTb;
import cn.odboy.devops.framework.pipeline.model.PipelineNodeTemplateVo;
import cn.odboy.framework.exception.BadRequestException;
@@ -49,16 +49,10 @@ public class PipelineNodeJobManage {
String keyName = String.format(JOB_KEY, instanceId, pipelineNodeTemplate.getCode());
// 构建 JobDetail
JobKey jobKey = JobKey.jobKey(keyName);
JobDetail jobDetail = JobBuilder
.newJob(PipelineNodeJobBean.class)
.withIdentity(jobKey)
.build();
JobDetail jobDetail = JobBuilder.newJob(PipelineNodeJobBean.class).withIdentity(jobKey).build();
// 构建Trigger
TriggerKey triggerKey = TriggerKey.triggerKey(keyName);
Trigger cronTrigger = TriggerBuilder.newTrigger()
.withIdentity(triggerKey)
.startNow()
.build();
Trigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).startNow().build();
// 任务参数
JobDataMap jobDataMap = cronTrigger.getJobDataMap();
jobDataMap.put(PipelineConst.INSTANCE_ID, pipelineInstance.getInstanceId());
@@ -94,8 +88,7 @@ public class PipelineNodeJobManage {
}
/**
* 中断正在执行的任务<br/>
* 任务终止需要配合响应中断或停止信号
* 中断正在执行的任务<br/> 任务终止需要配合响应中断或停止信号
*/
public void interruptJob(@NotNull String instanceId, @NotNull String nodeCode) throws SchedulerException {
JobKey jobKey = JobKey.jobKey(String.format(JOB_KEY, instanceId, nodeCode));
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.framework.pipeline.log;
import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.constant.PipelineStatusEnum;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.framework.exception.BadRequestException;
@@ -66,9 +66,11 @@ public class PipelineNodeStepLogAspect extends AbstractPipelineNodeJobService {
}
PipelineNodeStepLog pipelineNodeStepLog = method.getAnnotation(PipelineNodeStepLog.class);
try {
addPipelineInstanceNodeDetailLog(currentNodeInfo, pipelineNodeStepLog.value(), PipelineStatusEnum.RUNNING, PipelineStatusEnum.RUNNING.getDesc(), null);
addPipelineInstanceNodeDetailLog(currentNodeInfo, pipelineNodeStepLog.value(), PipelineStatusEnum.RUNNING, PipelineStatusEnum.RUNNING.getDesc(),
null);
Object result = joinPoint.proceed();
addPipelineInstanceNodeDetailLog(currentNodeInfo, pipelineNodeStepLog.value(), PipelineStatusEnum.SUCCESS, PipelineStatusEnum.SUCCESS.getDesc(), new Date());
addPipelineInstanceNodeDetailLog(currentNodeInfo, pipelineNodeStepLog.value(), PipelineStatusEnum.SUCCESS, PipelineStatusEnum.SUCCESS.getDesc(),
new Date());
return result;
} catch (BadRequestException e) {
log.error("执行失败", e);
@@ -76,7 +78,8 @@ public class PipelineNodeStepLogAspect extends AbstractPipelineNodeJobService {
throw e;
} catch (Throwable e) {
log.error("执行失败", e);
addPipelineInstanceNodeDetailLog(currentNodeInfo, pipelineNodeStepLog.value(), PipelineStatusEnum.FAIL, PipelineStatusEnum.FAIL.getDesc(), new Date());
addPipelineInstanceNodeDetailLog(currentNodeInfo, pipelineNodeStepLog.value(), PipelineStatusEnum.FAIL, PipelineStatusEnum.FAIL.getDesc(),
new Date());
throw e;
}
}
@@ -16,7 +16,7 @@
package cn.odboy.devops.framework.pipeline.model;
import cn.odboy.base.CsObject;
import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.constant.PipelineStatusEnum;
import lombok.Getter;
import lombok.Setter;
@@ -57,9 +57,7 @@ public class PipelineNodeTemplateVo extends CsObject {
*/
protected String detailType = "";
/**
* 默认参数<br/>
* execute: 执行调用
* describe: 明细调用
* 默认参数<br/> execute: 执行调用 describe: 明细调用
*/
protected Map<String, Object> parameters = new HashMap<>();
/**
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.core;
import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.constant.PipelineStatusEnum;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeDetailTb;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import com.anwen.mongo.service.IService;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.core;
import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.constant.PipelineStatusEnum;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.dal.dataobject.PipelineInstanceTb;
import com.anwen.mongo.service.IService;
@@ -16,7 +16,7 @@
package cn.odboy.devops.service.core.impl;
import cn.hutool.core.collection.CollUtil;
import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.constant.PipelineStatusEnum;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeDetailTb;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.service.core.PipelineInstanceNodeDetailService;
@@ -55,28 +55,22 @@ public class PipelineInstanceNodeDetailServiceImpl extends ServiceImpl<PipelineI
@Override
public PipelineInstanceNodeDetailTb getPipelineInstanceNodeDetailByArgs(Long nodeId, String nodeCode, String stepName) {
return one(new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeDetailTb.class)
.eq(PipelineInstanceNodeDetailTb::getNodeId, nodeId).eq(PipelineInstanceNodeDetailTb::getNodeCode, nodeCode)
.eq(PipelineInstanceNodeDetailTb::getStepName, stepName)
);
return one(new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeDetailTb.class).eq(PipelineInstanceNodeDetailTb::getNodeId, nodeId)
.eq(PipelineInstanceNodeDetailTb::getNodeCode, nodeCode).eq(PipelineInstanceNodeDetailTb::getStepName, stepName));
}
@Override
public void removeByNodeIds(List<Long> nodeIds) {
if (CollUtil.isNotEmpty(nodeIds)) {
remove(new LambdaUpdateChainWrapper<>(getBaseMapper(), PipelineInstanceNodeDetailTb.class)
.in(PipelineInstanceNodeDetailTb::getNodeId, nodeIds)
);
remove(new LambdaUpdateChainWrapper<>(getBaseMapper(), PipelineInstanceNodeDetailTb.class).in(PipelineInstanceNodeDetailTb::getNodeId, nodeIds));
}
}
@Override
public PipelineInstanceNodeDetailTb getLastPipelineInstanceNodeDetailByArgs(PipelineInstanceNodeTb instanceNode) {
List<PipelineInstanceNodeDetailTb> pipelineInstanceNodeDetailList = list(new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeDetailTb.class)
.eq(PipelineInstanceNodeDetailTb::getNodeId, instanceNode.getId())
.eq(PipelineInstanceNodeDetailTb::getNodeCode, instanceNode.getCode())
.orderByDesc(PipelineInstanceNodeDetailTb::getStartTime)
);
List<PipelineInstanceNodeDetailTb> pipelineInstanceNodeDetailList = list(
new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeDetailTb.class).eq(PipelineInstanceNodeDetailTb::getNodeId, instanceNode.getId())
.eq(PipelineInstanceNodeDetailTb::getNodeCode, instanceNode.getCode()).orderByDesc(PipelineInstanceNodeDetailTb::getStartTime));
// 明细为空,返回节点状态
if (pipelineInstanceNodeDetailList.isEmpty()) {
PipelineInstanceNodeDetailTb pipelineInstanceNodeDetailTb = new PipelineInstanceNodeDetailTb();
@@ -110,10 +104,8 @@ public class PipelineInstanceNodeDetailServiceImpl extends ServiceImpl<PipelineI
@Override
public List<PipelineInstanceNodeDetailTb> queryPipelineInstanceNodeDetailByArgs(PipelineInstanceNodeTb instanceNode) {
return list(new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeDetailTb.class)
.eq(PipelineInstanceNodeDetailTb::getNodeId, instanceNode.getId())
.eq(PipelineInstanceNodeDetailTb::getNodeCode, instanceNode.getCode())
.orderByAsc(PipelineInstanceNodeDetailTb::getStartTime)
);
return list(
new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeDetailTb.class).eq(PipelineInstanceNodeDetailTb::getNodeId, instanceNode.getId())
.eq(PipelineInstanceNodeDetailTb::getNodeCode, instanceNode.getCode()).orderByAsc(PipelineInstanceNodeDetailTb::getStartTime));
}
}
@@ -16,7 +16,7 @@
package cn.odboy.devops.service.core.impl;
import cn.hutool.core.collection.CollUtil;
import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.constant.PipelineStatusEnum;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.dal.dataobject.PipelineInstanceTb;
import cn.odboy.devops.framework.pipeline.model.PipelineNodeTemplateVo;
@@ -75,10 +75,8 @@ public class PipelineInstanceNodeServiceImpl extends ServiceImpl<PipelineInstanc
}
public PipelineInstanceNodeTb getPipelineInstanceNodeByArgs(Long instanceId, String code) {
return one(new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeTb.class)
.eq(PipelineInstanceNodeTb::getInstanceId, instanceId)
.eq(PipelineInstanceNodeTb::getCode, code)
);
return one(new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeTb.class).eq(PipelineInstanceNodeTb::getInstanceId, instanceId)
.eq(PipelineInstanceNodeTb::getCode, code));
}
@Override
@@ -93,10 +91,9 @@ public class PipelineInstanceNodeServiceImpl extends ServiceImpl<PipelineInstanc
}
}
// 更新节点状态
List<PipelineInstanceNodeTb> instanceNodeList = list(new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeTb.class)
.eq(PipelineInstanceNodeTb::getInstanceId, pipelineInstanceTb.getInstanceId())
.eq(PipelineInstanceNodeTb::getCode, penddingNodeList)
);
List<PipelineInstanceNodeTb> instanceNodeList = list(
new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeTb.class).eq(PipelineInstanceNodeTb::getInstanceId,
pipelineInstanceTb.getInstanceId()).eq(PipelineInstanceNodeTb::getCode, penddingNodeList));
if (CollUtil.isNotEmpty(instanceNodeList)) {
Date nowTime = new Date();
for (PipelineInstanceNodeTb pipelineInstanceNodeTb : instanceNodeList) {
@@ -107,20 +104,15 @@ public class PipelineInstanceNodeServiceImpl extends ServiceImpl<PipelineInstanc
}
updateBatchByIds(instanceNodeList);
// 删除节点明细数据
List<Long> nodeIds = instanceNodeList.stream()
.map(PipelineInstanceNodeTb::getId)
.distinct()
.collect(Collectors.toList());
List<Long> nodeIds = instanceNodeList.stream().map(PipelineInstanceNodeTb::getId).distinct().collect(Collectors.toList());
pipelineInstanceNodeDetailService.removeByNodeIds(nodeIds);
}
}
@Override
public List<PipelineInstanceNodeTb> queryPipelineInstanceNodeListByInstanceId(Long instanceId) {
return list(new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeTb.class)
.eq(PipelineInstanceNodeTb::getInstanceId, instanceId)
.orderByAsc(PipelineInstanceNodeTb::getId)
);
return list(new LambdaQueryChainWrapper<>(getBaseMapper(), PipelineInstanceNodeTb.class).eq(PipelineInstanceNodeTb::getInstanceId, instanceId)
.orderByAsc(PipelineInstanceNodeTb::getId));
}
@Override
@@ -18,8 +18,8 @@ package cn.odboy.devops.service.core.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineStatusEnum;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeDetailTb;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.dal.dataobject.PipelineInstanceTb;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.dal.dataobject.PipelineTemplateTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.dal.dataobject.PipelineTemplateTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -15,7 +15,7 @@
*/
package cn.odboy.devops.service.pipeline;
import cn.odboy.devops.constant.pipeline.PipelineConst;
import cn.odboy.devops.framework.pipeline.constant.PipelineConst;
import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.AbstractPipelineNodeJobService;
import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor;
@@ -30,22 +30,26 @@ import java.util.List;
public class PipelineNodeBuildJavaBiz {
@PipelineNodeStepLog("构建开始")
public void buildJavaStart(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void buildJavaStart(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(1000);
}
@PipelineNodeStepLog("构建中")
public void startGitlabPipeline(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void startGitlabPipeline(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(2000);
}
@PipelineNodeStepLog("上传包到OSS")
public void uploadPackageToOss(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void uploadPackageToOss(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(2000);
}
@PipelineNodeStepLog("构建完成")
public void buildJavaFinish(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void buildJavaFinish(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(1000);
}
}
@@ -30,12 +30,14 @@ import java.util.List;
public class PipelineNodeDemoBiz {
@PipelineNodeStepLog("开始")
public void start(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void start(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(2000);
}
@PipelineNodeStepLog("完成")
public void finish(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void finish(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(2000);
}
}
@@ -30,17 +30,20 @@ import java.util.List;
@Service
public class PipelineNodeDeployJavaBiz {
@PipelineNodeStepLog("部署开始")
public void deployStart(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void deployStart(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(1000);
}
@PipelineNodeStepLog("部署中")
public void deployJavaByWithContextName(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult, PipelineTemplateTb templateType) {
public void deployJavaByWithContextName(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env,
List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult, PipelineTemplateTb templateType) {
ThreadUtil.safeSleep(2000);
}
@PipelineNodeStepLog("部署完成")
public void deployFinish(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void deployFinish(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(1000);
}
}
@@ -29,22 +29,26 @@ import java.util.List;
@Service
public class PipelineNodeInitBiz {
@PipelineNodeStepLog("初始化开始")
public void initStart(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void initStart(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(1000);
}
@PipelineNodeStepLog("Master分支合并到Release分支")
public void mergeMasterToRelease(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void mergeMasterToRelease(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(2000);
}
@PipelineNodeStepLog("新建Release分支")
public void createReleaseBranch(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void createReleaseBranch(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(2000);
}
@PipelineNodeStepLog("初始化完成")
public void initFinish(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void initFinish(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(1000);
}
}
@@ -20,7 +20,6 @@ import cn.odboy.devops.dal.dataobject.PipelineInstanceNodeTb;
import cn.odboy.devops.framework.pipeline.log.PipelineNodeStepLog;
import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult;
import cn.odboy.devops.framework.pipeline.model.PipelineNodeTemplateVo;
import cn.odboy.framework.exception.BadRequestException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -30,17 +29,20 @@ import java.util.List;
@Service
public class PipelineNodeMergeBranchBiz {
@PipelineNodeStepLog("分支合并开始")
public void mergeBranchStart(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void mergeBranchStart(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(1000);
}
@PipelineNodeStepLog("集成区分支合并到release分支")
public void integrationAreaBranchMergeRelease(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void integrationAreaBranchMergeRelease(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env,
List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(2000);
}
@PipelineNodeStepLog("分支合并完成")
public void mergeBranchFinish(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList, PipelineNodeJobExecuteResult lastNodeResult) {
public void mergeBranchFinish(PipelineInstanceNodeTb pipelineInstanceNode, String contextName, String env, List<PipelineNodeTemplateVo> templateList,
PipelineNodeJobExecuteResult lastNodeResult) {
ThreadUtil.safeSleep(1000);
}
}
@@ -1,7 +1,7 @@
package cn.odboy.system.controller;
import cn.odboy.base.CsPageArgs;
import cn.odboy.base.CsResultVo;
import cn.odboy.base.CsPageResultVo;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.model.SystemCreateDeptArgs;
import cn.odboy.system.dal.model.SystemQueryDeptArgs;
@@ -40,7 +40,7 @@ public class SystemDeptController {
@ApiOperation("查询部门")
@PostMapping
@PreAuthorize("@el.check('user:list','dept:list')")
public ResponseEntity<CsResultVo<List<SystemDeptTb>>> queryDept(@Validated @RequestBody CsPageArgs<SystemQueryDeptArgs> args) throws Exception {
public ResponseEntity<CsPageResultVo<List<SystemDeptTb>>> queryDept(@Validated @RequestBody CsPageArgs<SystemQueryDeptArgs> args) throws Exception {
SystemQueryDeptArgs criteria = args.getArgs();
List<SystemDeptTb> depts = systemDeptService.queryAllDept(criteria, true);
return new ResponseEntity<>(CsPageUtil.toPage(depts), HttpStatus.OK);
@@ -49,7 +49,8 @@ public class SystemDeptController {
@ApiOperation("查询部门:根据ID获取同级与上级数据")
@PostMapping("/queryDeptSuperiorTree")
@PreAuthorize("@el.check('user:list','dept:list')")
public ResponseEntity<CsResultVo<Set<SystemDeptTb>>> queryDeptSuperiorTree(@RequestBody List<Long> ids, @RequestParam(defaultValue = "false") Boolean exclude) {
public ResponseEntity<CsPageResultVo<Set<SystemDeptTb>>> queryDeptSuperiorTree(@RequestBody List<Long> ids,
@RequestParam(defaultValue = "false") Boolean exclude) {
Set<SystemDeptTb> deptSet = new LinkedHashSet<>();
for (Long id : ids) {
// 同级数据
@@ -1,7 +1,7 @@
package cn.odboy.system.controller;
import cn.odboy.base.CsPageArgs;
import cn.odboy.base.CsResultVo;
import cn.odboy.base.CsPageResultVo;
import cn.odboy.system.dal.dataobject.SystemDictTb;
import cn.odboy.system.dal.model.SystemCreateDictArgs;
import cn.odboy.system.dal.model.SystemQueryDictArgs;
@@ -45,7 +45,7 @@ public class SystemDictController {
@ApiOperation("查询字典")
@PostMapping
@PreAuthorize("@el.check('dict:list')")
public ResponseEntity<CsResultVo<List<SystemDictTb>>> queryDictByArgs(@Validated @RequestBody CsPageArgs<SystemQueryDictArgs> args) {
public ResponseEntity<CsPageResultVo<List<SystemDictTb>>> queryDictByArgs(@Validated @RequestBody CsPageArgs<SystemQueryDictArgs> args) {
Page<SystemDictTb> page;
SystemQueryDictArgs criteria = args.getArgs();
if (args.getSize() != null) {
@@ -1,7 +1,7 @@
package cn.odboy.system.controller;
import cn.odboy.base.CsPageArgs;
import cn.odboy.base.CsResultVo;
import cn.odboy.base.CsPageResultVo;
import cn.odboy.system.dal.dataobject.SystemDictDetailTb;
import cn.odboy.system.dal.model.SystemCreateDictDetailArgs;
import cn.odboy.system.dal.model.SystemQueryDictDetailArgs;
@@ -29,13 +29,13 @@ public class SystemDictDetailController {
@ApiOperation("查询字典详情")
@PostMapping
public ResponseEntity<CsResultVo<List<SystemDictDetailTb>>> queryDictDetailByCrud(@Validated @RequestBody CsPageArgs<SystemQueryDictDetailArgs> args) {
public ResponseEntity<CsPageResultVo<List<SystemDictDetailTb>>> queryDictDetailByCrud(@Validated @RequestBody CsPageArgs<SystemQueryDictDetailArgs> args) {
return queryDictDetailByArgs(args);
}
@ApiOperation("查询字典详情")
@PostMapping(value = "/queryDictDetailByArgs")
public ResponseEntity<CsResultVo<List<SystemDictDetailTb>>> queryDictDetailByArgs(@Validated @RequestBody CsPageArgs<SystemQueryDictDetailArgs> args) {
public ResponseEntity<CsPageResultVo<List<SystemDictDetailTb>>> queryDictDetailByArgs(@Validated @RequestBody CsPageArgs<SystemQueryDictDetailArgs> args) {
SystemQueryDictDetailArgs criteria = args.getArgs();
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
return new ResponseEntity<>(systemDictDetailService.queryDictDetailByArgs(criteria, page), HttpStatus.OK);
@@ -1,7 +1,7 @@
package cn.odboy.system.controller;
import cn.odboy.base.CsPageArgs;
import cn.odboy.base.CsResultVo;
import cn.odboy.base.CsPageResultVo;
import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.model.SystemCreateJobArgs;
import cn.odboy.system.dal.model.SystemQueryJobArgs;
@@ -21,7 +21,6 @@ import java.io.IOException;
import java.util.List;
import java.util.Set;
@RestController
@RequiredArgsConstructor
@Api(tags = "系统:岗位管理")
@@ -39,7 +38,7 @@ public class SystemJobController {
@ApiOperation("查询岗位")
@PostMapping(value = "/queryAllEnableJob")
@PreAuthorize("@el.check('job:list','user:list')")
public ResponseEntity<CsResultVo<List<SystemJobTb>>> queryJobByArgs(@Validated @RequestBody CsPageArgs<SystemQueryJobArgs> args) {
public ResponseEntity<CsPageResultVo<List<SystemJobTb>>> queryJobByArgs(@Validated @RequestBody CsPageArgs<SystemQueryJobArgs> args) {
SystemQueryJobArgs criteria = args.getArgs();
Page<SystemJobTb> page = new Page<>(criteria.getPage(), criteria.getSize());
return new ResponseEntity<>(systemJobService.queryJobByArgs(criteria, page), HttpStatus.OK);
@@ -48,7 +47,7 @@ public class SystemJobController {
@ApiOperation("查询岗位")
@PostMapping
@PreAuthorize("@el.check('job:list','user:list')")
public ResponseEntity<CsResultVo<List<SystemJobTb>>> queryJobByCrud(@Validated @RequestBody CsPageArgs<SystemQueryJobArgs> args) {
public ResponseEntity<CsPageResultVo<List<SystemJobTb>>> queryJobByCrud(@Validated @RequestBody CsPageArgs<SystemQueryJobArgs> args) {
return queryJobByArgs(args);
}
@@ -1,7 +1,7 @@
package cn.odboy.system.controller;
import cn.odboy.base.CsPageArgs;
import cn.odboy.base.CsResultVo;
import cn.odboy.base.CsPageResultVo;
import cn.odboy.constant.FileTypeEnum;
import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemLocalStorageTb;
@@ -33,7 +33,7 @@ public class SystemLocalStorageController {
@ApiOperation("查询文件")
@PostMapping
@PreAuthorize("@el.check('storage:list')")
public ResponseEntity<CsResultVo<List<SystemLocalStorageTb>>> queryLocalStorage(@Validated @RequestBody CsPageArgs<SystemQueryStorageArgs> args) {
public ResponseEntity<CsPageResultVo<List<SystemLocalStorageTb>>> queryLocalStorage(@Validated @RequestBody CsPageArgs<SystemQueryStorageArgs> args) {
SystemQueryStorageArgs criteria = args.getArgs();
Page<SystemLocalStorageTb> page = new Page<>(criteria.getPage(), criteria.getSize());
return new ResponseEntity<>(localStorageService.queryLocalStorage(criteria, page), HttpStatus.OK);

Some files were not shown because too many files have changed in this diff Show More