refactor(module): 重构格式化,并添加菜单一键复制功能
This commit is contained in:
@@ -36,6 +36,7 @@ https://github.com/odboy-tianjun/cutejava
|
||||
- 对一些常用地前端组件封装:表格数据请求、数据字典等
|
||||
- 前后端统一异常拦截处理,统一输出异常,避免繁琐的判断
|
||||
- 支持在线用户管理与服务器性能监控,支持限制单用户登录
|
||||
- 支持一键复制菜单项,避免菜单繁琐配置
|
||||
|
||||
#### 系统功能
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
+8
-17
@@ -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 {};
|
||||
|
||||
}
|
||||
|
||||
+8
-16
@@ -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 {};
|
||||
|
||||
}
|
||||
|
||||
+8
-17
@@ -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 {};
|
||||
|
||||
}
|
||||
|
||||
+8
-17
@@ -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 {};
|
||||
|
||||
}
|
||||
|
||||
+8
-17
@@ -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)
|
||||
|
||||
+11
-3
@@ -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;
|
||||
|
||||
+1
-6
@@ -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" + "----------------------------------------------------------");
|
||||
}
|
||||
}
|
||||
+3
-4
@@ -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.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-23
@@ -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);
|
||||
}
|
||||
|
||||
-1
@@ -17,7 +17,6 @@ package cn.odboy.framework.exception.handler;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@Data
|
||||
public final class ApiError {
|
||||
|
||||
|
||||
+2
-8
@@ -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);
|
||||
}
|
||||
}
|
||||
+2
-4
@@ -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
|
||||
|
||||
+17
-48
@@ -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() {
|
||||
|
||||
+5
-5
@@ -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);
|
||||
|
||||
|
||||
+6
-6
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+9
-9
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+8
-17
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 普通缓存获取
|
||||
*
|
||||
|
||||
+2
-6
@@ -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);
|
||||
}
|
||||
|
||||
+2
-1
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+2
-4
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
-1
@@ -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 {
|
||||
|
||||
|
||||
+1
-2
@@ -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
|
||||
*/
|
||||
|
||||
-1
@@ -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(",")));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>cutejava-module-pipeline</artifactId>
|
||||
<name>devops应用模块</name>
|
||||
<name>pipeline模块</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
-1
@@ -21,7 +21,6 @@ import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class StartPipelineResultVo extends CsObject {
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+3
-2
@@ -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);
|
||||
}
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
/**
|
||||
* 流水线 常量
|
||||
+2
-4
@@ -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", "执行失败");
|
||||
/**
|
||||
* 状态码
|
||||
+2
-6
@@ -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", "不支持的类型");
|
||||
/**
|
||||
* 类型编码
|
||||
*/
|
||||
+6
-10
@@ -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());
|
||||
// 更新实例状态
|
||||
|
||||
+2
-3
@@ -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));
|
||||
|
||||
+8
-5
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-11
@@ -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));
|
||||
|
||||
+7
-4
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
|
||||
+1
-3
@@ -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<>();
|
||||
/**
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+10
-18
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
+9
-17
@@ -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
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+8
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+4
-2
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+6
-3
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+6
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+4
-3
@@ -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) {
|
||||
// 同级数据
|
||||
|
||||
+2
-2
@@ -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) {
|
||||
|
||||
+3
-3
@@ -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);
|
||||
|
||||
+3
-4
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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
Reference in New Issue
Block a user