diff --git a/.env.example b/.env.example
index 36176a83..95a1cb98 100644
--- a/.env.example
+++ b/.env.example
@@ -1,6 +1,9 @@
-SERVICE_PORT=1081
VOLUME_BASE=/data/orion-visor-space/docker-volumes
+SERVICE_PORT=1081
+SPRING_PROFILES_ACTIVE=prod
+SECRET_KEY=uQeacXV8b3isvKLK
+
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_DATABASE=orion_visor
@@ -11,5 +14,4 @@ MYSQL_ROOT_PASSWORD=Data@123456
REDIS_HOST=redis
REDIS_PASSWORD=Data@123456
-SECRET_KEY=uQeacXV8b3isvKLK
DEMO_MODE=false
diff --git a/README.md b/README.md
index c90eb550..fbd34739 100644
--- a/README.md
+++ b/README.md
@@ -64,6 +64,7 @@
* 🎭 演示环境部分功能不可用, 完整功能请本地部署!
* 📛 演示环境请不要随便删除数据!
* 📧 如果演示环境不可用请联系我!
+* 📨 **作者已被毕(cai)业(yuan) 寻java高级内推 望京/5号/10号线 有坑位的联系我哦** 微信: `ljh1553488`
## 快速开始
diff --git a/docker-compose-testing.yml b/docker-compose-testing.yml
index 9a6ef02a..a34a6977 100644
--- a/docker-compose-testing.yml
+++ b/docker-compose-testing.yml
@@ -1,11 +1,13 @@
version: '3.3'
+
services:
service:
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-service:latest
privileged: true
ports:
- - 1081:80
+ - 9200:9200
environment:
+ - SPRING_PROFILES_ACTIVE=prod
- MYSQL_HOST=mysql
- MYSQL_PORT=3306
- MYSQL_DATABASE=orion_visor
@@ -19,18 +21,18 @@ services:
- /data/orion-visor-space/docker-volumes/service/root-orion:/root/orion
healthcheck:
test: [ "CMD", "curl", "http://127.0.0.1:9200/orion-visor/api/server/bootstrap/health" ]
- interval: 3s
- timeout: 300s
- retries: 200
- start_period: 3s
+ interval: 15s
+ timeout: 5s
+ retries: 10
+ start_period: 15s
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
- links:
- - mysql
- - redis
+ networks:
+ - orion-visor-net
+
mysql:
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-mysql:latest
privileged: true
@@ -44,13 +46,15 @@ services:
volumes:
- /data/orion-visor-space/docker-volumes/mysql/var-lib-mysql:/var/lib/mysql
- /data/orion-visor-space/docker-volumes/mysql/var-lib-mysql-files:/var/lib/mysql-files
- - /data/orion-visor-space/docker-volumes/mysql/etc-mysql:/etc/mysql
healthcheck:
test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/3306" ]
- interval: 3s
- timeout: 60s
+ interval: 15s
+ timeout: 5s
retries: 10
- start_period: 3s
+ start_period: 5s
+ networks:
+ - orion-visor-net
+
redis:
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:latest
privileged: true
@@ -63,10 +67,13 @@ services:
command: sh -c "redis-server /usr/local/redis.conf --requirepass $${REDIS_PASSWORD}"
healthcheck:
test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ]
- interval: 3s
- timeout: 60s
+ interval: 15s
+ timeout: 5s
retries: 10
- start_period: 3s
+ start_period: 5s
+ networks:
+ - orion-visor-net
+
testing:
build:
context: ./docker/e2e
@@ -75,5 +82,9 @@ services:
depends_on:
service:
condition: service_healthy
- links:
- - service
+ networks:
+ - orion-visor-net
+
+networks:
+ orion-visor-net:
+ driver: bridge
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 712c0baf..554775f9 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,11 +1,24 @@
version: '3.3'
+
services:
+ ui:
+ image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-ui:latest
+ ports:
+ - ${SERVICE_PORT:-1081}:80
+ restart: unless-stopped
+ depends_on:
+ service:
+ condition: service_healthy
+ networks:
+ - orion-visor-net
+
service:
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-service:latest
privileged: true
ports:
- - ${SERVICE_PORT:-1081}:80
+ - 9200:9200
environment:
+ - SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE:-prod}
- MYSQL_HOST=${MYSQL_HOST:-mysql}
- MYSQL_PORT=${MYSQL_PORT:-3306}
- MYSQL_DATABASE=${MYSQL_DATABASE:-orion_visor}
@@ -17,20 +30,21 @@ services:
- DEMO_MODE=${DEMO_MODE:-false}
volumes:
- ${VOLUME_BASE:-/data/orion-visor-space/docker-volumes}/service/root-orion:/root/orion
+ restart: unless-stopped
healthcheck:
test: [ "CMD", "curl", "http://127.0.0.1:9200/orion-visor/api/server/bootstrap/health" ]
interval: 15s
- timeout: 300s
+ timeout: 5s
retries: 15
- start_period: 3s
+ start_period: 30s
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
- links:
- - mysql
- - redis
+ networks:
+ - orion-visor-net
+
mysql:
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-mysql:latest
privileged: true
@@ -44,13 +58,16 @@ services:
volumes:
- ${VOLUME_BASE:-/data/orion-visor-space/docker-volumes}/mysql/var-lib-mysql:/var/lib/mysql
- ${VOLUME_BASE:-/data/orion-visor-space/docker-volumes}/mysql/var-lib-mysql-files:/var/lib/mysql-files
- - ${VOLUME_BASE:-/data/orion-visor-space/docker-volumes}/mysql/etc-mysql:/etc/mysql
+ restart: unless-stopped
healthcheck:
test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/3306" ]
interval: 15s
- timeout: 60s
- retries: 15
- start_period: 3s
+ timeout: 5s
+ retries: 10
+ start_period: 10s
+ networks:
+ - orion-visor-net
+
redis:
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:latest
privileged: true
@@ -61,18 +78,28 @@ services:
volumes:
- ${VOLUME_BASE:-/data/orion-visor-space/docker-volumes}/redis/data:/data
command: sh -c "redis-server /usr/local/redis.conf --requirepass $${REDIS_PASSWORD}"
+ restart: unless-stopped
healthcheck:
test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ]
interval: 15s
- timeout: 60s
- retries: 15
- start_period: 3s
+ timeout: 5s
+ retries: 10
+ start_period: 10s
+ networks:
+ - orion-visor-net
+
adminer:
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:latest
ports:
- 8081:8080
+ environment:
+ - ADMINER_DEFAULT_SERVER=${MYSQL_HOST:-mysql}
depends_on:
mysql:
condition: service_healthy
- links:
- - mysql
+ networks:
+ - orion-visor-net
+
+networks:
+ orion-visor-net:
+ driver: bridge
\ No newline at end of file
diff --git a/docker/adminer/build.sh b/docker/adminer/build.sh
index 1fc8f212..13a832ec 100644
--- a/docker/adminer/build.sh
+++ b/docker/adminer/build.sh
@@ -1,5 +1,6 @@
#/bin/bash
-version=2.3.5
+set -e
+version=2.3.6
docker build -t orion-visor-adminer:${version} .
docker tag orion-visor-adminer:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:${version}
docker tag orion-visor-adminer:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:latest
diff --git a/docker/e2e/testsuite.yaml b/docker/e2e/testsuite.yaml
index bffd45ae..b4ea5899 100644
--- a/docker/e2e/testsuite.yaml
+++ b/docker/e2e/testsuite.yaml
@@ -2,7 +2,7 @@
# yaml-language-server: $schema=https://linuxsuren.github.io/api-testing/api-testing-schema.json
name: orion-visor
api: |
- {{default "http://orion-visor-service:80" (env "SERVER")}}
+ {{default "http://orion-visor-service:9200" (env "SERVER")}}
items:
- name: login
request:
diff --git a/docker/mysql/build.sh b/docker/mysql/build.sh
index 2e0f0b5b..6a86ae67 100644
--- a/docker/mysql/build.sh
+++ b/docker/mysql/build.sh
@@ -1,5 +1,6 @@
#/bin/bash
-version=2.3.5
+set -e
+version=2.3.6
cp -r ../../sql ./sql
docker build -t orion-visor-mysql:${version} .
rm -rf ./sql
diff --git a/docker/mysql/my.cnf b/docker/mysql/my.cnf
index ac9388c4..5f6867b7 100644
--- a/docker/mysql/my.cnf
+++ b/docker/mysql/my.cnf
@@ -12,7 +12,7 @@ socket=/var/run/mysqld/mysqld.sock
# 数据目录
datadir=/var/lib/mysql
# 不区分大小 0区分 1不区分
-lower_case_table_names=1
+lower_case_table_names=0
# 服务器时区
default-time_zone='+8:00'
# 服务端字符集
diff --git a/docker/push.sh b/docker/push.sh
index a559d6fa..795edce5 100644
--- a/docker/push.sh
+++ b/docker/push.sh
@@ -1,10 +1,13 @@
#/bin/bash
-version=2.3.5
+set -e
+version=2.3.6
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:${version}
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-mysql:${version}
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:${version}
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-service:${version}
+docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-ui:${version}
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:latest
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-mysql:latest
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:latest
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-service:latest
+docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-ui:latest
diff --git a/docker/redis/build.sh b/docker/redis/build.sh
index e9a121ec..3d515286 100644
--- a/docker/redis/build.sh
+++ b/docker/redis/build.sh
@@ -1,5 +1,6 @@
#/bin/bash
-version=2.3.5
+set -e
+version=2.3.6
docker build -t orion-visor-redis:${version} .
docker tag orion-visor-redis:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:${version}
docker tag orion-visor-redis:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:latest
diff --git a/docker/service/Dockerfile b/docker/service/Dockerfile
index 8dbe19fa..0215fad6 100644
--- a/docker/service/Dockerfile
+++ b/docker/service/Dockerfile
@@ -1,4 +1,4 @@
-FROM nginx:alpine
+FROM openjdk:8-jdk-alpine
USER root
WORKDIR /app
# 系统时区
@@ -7,18 +7,14 @@ ARG TZ=Asia/Shanghai
RUN \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk update && \
+ apk add curl && \
+ apk add udev && \
apk add tzdata && \
- apk add dmidecode && \
- apk add openjdk8
+ apk add dmidecode
# 设置时区
RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
echo '${TZ}' > /etc/timezone
-# 删除原 nginx 配置
-RUN rm -rf /etc/nginx/conf.d/*
# 复制包
COPY ./orion-visor-launch.jar /app/app.jar
-COPY ./dist /usr/share/nginx/html
-COPY ./entrypoint.sh /app/entrypoint.sh
-COPY ./nginx.conf /etc/nginx/conf.d
# 启动
-ENTRYPOINT [ "sh", "/app/entrypoint.sh" ]
+CMD ["java", "-jar", "/app/app.jar"]
diff --git a/docker/service/build.sh b/docker/service/build.sh
index 1adc7b36..dd50ff64 100644
--- a/docker/service/build.sh
+++ b/docker/service/build.sh
@@ -1,9 +1,8 @@
#/bin/bash
-version=2.3.5
+set -e
+version=2.3.6
mv ../../orion-visor-launch/target/orion-visor-launch.jar ./orion-visor-launch.jar
-mv ../../orion-visor-ui/dist ./dist
docker build -t orion-visor-service:${version} .
rm -rf ./orion-visor-launch.jar
-rm -rf ./dist
docker tag orion-visor-service:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-service:${version}
docker tag orion-visor-service:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-service:latest
diff --git a/docker/service/entrypoint.sh b/docker/service/entrypoint.sh
deleted file mode 100644
index fc3cd826..00000000
--- a/docker/service/entrypoint.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-cd /app
-nohup java -jar app.jar --spring.profiles.active=prod 2>&1 &
-nginx -g 'daemon off;'
\ No newline at end of file
diff --git a/docker/ui/Dockerfile b/docker/ui/Dockerfile
new file mode 100644
index 00000000..a807e5fd
--- /dev/null
+++ b/docker/ui/Dockerfile
@@ -0,0 +1,18 @@
+FROM nginx:alpine
+# 系统时区
+ARG TZ=Asia/Shanghai
+# 添加包
+RUN \
+ sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
+ apk update && \
+ apk add tzdata
+# 设置时区
+RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
+ echo '${TZ}' > /etc/timezone
+# 删除原 nginx 配置
+RUN rm -rf /etc/nginx/conf.d/*
+# 复制包
+COPY ./dist /usr/share/nginx/html
+COPY ./nginx.conf /etc/nginx/conf.d
+# 启动
+CMD ["nginx", "-g", "daemon off;"]
diff --git a/docker/ui/build.sh b/docker/ui/build.sh
new file mode 100644
index 00000000..a44ba37a
--- /dev/null
+++ b/docker/ui/build.sh
@@ -0,0 +1,9 @@
+#/bin/bash
+set -e
+version=2.3.6
+mv ../../orion-visor-ui/dist ./dist
+docker build -t orion-visor-ui:${version} .
+rm -rf ./orion-visor-launch.jar
+rm -rf ./dist
+docker tag orion-visor-ui:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-ui:${version}
+docker tag orion-visor-ui:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-ui:latest
diff --git a/docker/service/nginx.conf b/docker/ui/nginx.conf
similarity index 90%
rename from docker/service/nginx.conf
rename to docker/ui/nginx.conf
index c8ef796f..ec9925bc 100644
--- a/docker/service/nginx.conf
+++ b/docker/ui/nginx.conf
@@ -19,7 +19,7 @@ server {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# web history 模式 404
@@ -27,7 +27,7 @@ server {
}
location /orion-visor/api {
- proxy_pass http://localhost:9200/orion-visor/api;
+ proxy_pass http://service:9200/orion-visor/api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@@ -35,7 +35,7 @@ server {
}
location /orion-visor/keep-alive {
- proxy_pass http://localhost:9200/orion-visor/keep-alive;
+ proxy_pass http://service:9200/orion-visor/keep-alive;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
diff --git a/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AppConst.java b/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AppConst.java
index 6399a32d..c139a629 100644
--- a/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AppConst.java
+++ b/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AppConst.java
@@ -36,7 +36,7 @@ public interface AppConst extends OrionConst {
/**
* 同 ${orion.version} 迭代时候需要手动更改
*/
- String VERSION = "2.3.5";
+ String VERSION = "2.3.6";
/**
* 同 ${spring.application.name}
diff --git a/orion-visor-common/src/main/java/org/dromara/visor/common/entity/PageRequest.java b/orion-visor-common/src/main/java/org/dromara/visor/common/entity/BaseQueryRequest.java
similarity index 86%
rename from orion-visor-common/src/main/java/org/dromara/visor/common/entity/PageRequest.java
rename to orion-visor-common/src/main/java/org/dromara/visor/common/entity/BaseQueryRequest.java
index 409cb4dc..4e62520b 100644
--- a/orion-visor-common/src/main/java/org/dromara/visor/common/entity/PageRequest.java
+++ b/orion-visor-common/src/main/java/org/dromara/visor/common/entity/BaseQueryRequest.java
@@ -31,15 +31,15 @@ import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/**
- * 公共页码请求
+ * 基本查询请求
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/12 23:14
*/
@Data
-@Schema(name = "PageRequest", description = "公共页码请求")
-public class PageRequest {
+@Schema(name = "BaseQueryRequest", description = "基本查询请求")
+public class BaseQueryRequest implements IPageRequest, IOrderRequest {
@NotNull(groups = Page.class)
@Min(value = 1, groups = Page.class)
@@ -53,4 +53,7 @@ public class PageRequest {
@Schema(description = "大小")
private Integer limit;
+ @Schema(description = "查询排序")
+ private Integer order;
+
}
diff --git a/orion-visor-common/src/main/java/org/dromara/visor/common/entity/IOrderRequest.java b/orion-visor-common/src/main/java/org/dromara/visor/common/entity/IOrderRequest.java
new file mode 100644
index 00000000..b8efe8cc
--- /dev/null
+++ b/orion-visor-common/src/main/java/org/dromara/visor/common/entity/IOrderRequest.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 - present Dromara, All rights reserved.
+ *
+ * https://visor.dromara.org
+ * https://visor.dromara.org.cn
+ * https://visor.orionsec.cn
+ *
+ * Members:
+ * Jiahang Li - ljh1553488six@139.com - author
+ *
+ * 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 org.dromara.visor.common.entity;
+
+/**
+ * 查询排序请求
+ *
+ * @author Jiahang Li
+ * @version 1.0.0
+ * @since 2025/3/17 22:04
+ */
+public interface IOrderRequest {
+
+ /**
+ * 查询排序
+ *
+ * @return sort 0DESC 1ASC 其他不排序
+ */
+ Integer getOrder();
+
+}
diff --git a/orion-visor-common/src/main/java/org/dromara/visor/common/entity/IPageRequest.java b/orion-visor-common/src/main/java/org/dromara/visor/common/entity/IPageRequest.java
new file mode 100644
index 00000000..e9f0eddf
--- /dev/null
+++ b/orion-visor-common/src/main/java/org/dromara/visor/common/entity/IPageRequest.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2023 - present Dromara, All rights reserved.
+ *
+ * https://visor.dromara.org
+ * https://visor.dromara.org.cn
+ * https://visor.orionsec.cn
+ *
+ * Members:
+ * Jiahang Li - ljh1553488six@139.com - author
+ *
+ * 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 org.dromara.visor.common.entity;
+
+/**
+ * 页码请求
+ *
+ * @author Jiahang Li
+ * @version 1.0.0
+ * @since 2025/3/17 22:02
+ */
+public interface IPageRequest {
+
+ /**
+ * 页码
+ *
+ * @return page
+ */
+ Integer getPage();
+
+ /**
+ * 大小
+ *
+ * @return limit
+ */
+ Integer getLimit();
+
+}
diff --git a/orion-visor-dependencies/pom.xml b/orion-visor-dependencies/pom.xml
index 2f4470f0..8b403dd1 100644
--- a/orion-visor-dependencies/pom.xml
+++ b/orion-visor-dependencies/pom.xml
@@ -14,7 +14,7 @@
https://github.com/dromara/orion-visor
- 2.3.5
+ 2.3.6
2.7.17
2.7.15
1.5.0
diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/java/org/dromara/visor/framework/mybatis/core/domain/BaseDO.java b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/java/org/dromara/visor/framework/mybatis/core/domain/BaseDO.java
index f34eb502..e15ccd3e 100644
--- a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/java/org/dromara/visor/framework/mybatis/core/domain/BaseDO.java
+++ b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/java/org/dromara/visor/framework/mybatis/core/domain/BaseDO.java
@@ -22,11 +22,12 @@
*/
package org.dromara.visor.framework.mybatis.core.domain;
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
import org.apache.ibatis.type.JdbcType;
import org.dromara.visor.common.constant.Const;
@@ -41,10 +42,17 @@ import java.util.Date;
* @since 2023/6/23 18:42
*/
@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
public class BaseDO implements Serializable {
private static final long serialVersionUID = 1L;
+ @Schema(description = "id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
@Schema(description = "创建时间")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@@ -70,4 +78,4 @@ public class BaseDO implements Serializable {
@TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.TINYINT)
private Boolean deleted;
-}
+}
\ No newline at end of file
diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/java/org/dromara/visor/framework/mybatis/core/query/DataQuery.java b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/java/org/dromara/visor/framework/mybatis/core/query/DataQuery.java
index aa52f133..cb175fba 100644
--- a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/java/org/dromara/visor/framework/mybatis/core/query/DataQuery.java
+++ b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/java/org/dromara/visor/framework/mybatis/core/query/DataQuery.java
@@ -23,7 +23,6 @@
package org.dromara.visor.framework.mybatis.core.query;
import cn.orionsec.kit.lang.define.wrapper.DataGrid;
-import cn.orionsec.kit.lang.define.wrapper.IPageRequest;
import cn.orionsec.kit.lang.define.wrapper.PageRequest;
import cn.orionsec.kit.lang.define.wrapper.Pager;
import cn.orionsec.kit.lang.utils.Exceptions;
@@ -33,11 +32,16 @@ import cn.orionsec.kit.lang.utils.collect.Lists;
import cn.orionsec.kit.lang.utils.reflect.Classes;
import cn.orionsec.kit.spring.SpringHolder;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.interfaces.Func;
import com.baomidou.mybatisplus.core.conditions.interfaces.Join;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import org.dromara.visor.common.constant.Const;
+import org.dromara.visor.common.entity.IOrderRequest;
+import org.dromara.visor.common.entity.IPageRequest;
+import org.dromara.visor.common.enums.BooleanBit;
import org.dromara.visor.common.utils.SqlUtils;
import org.dromara.visor.framework.mybatis.core.domain.BaseDO;
@@ -96,9 +100,9 @@ public class DataQuery {
return new DataQuery<>(dao, wrapper);
}
- public DataQuery page(org.dromara.visor.common.entity.PageRequest page) {
- org.dromara.visor.common.entity.PageRequest pr = Valid.notNull(page, "page is null");
- this.page = new PageRequest(pr.getPage(), pr.getLimit());
+ public DataQuery page(IPageRequest request) {
+ Valid.notNull(request, "page is null");
+ this.page = new PageRequest(request.getPage(), request.getLimit());
return this;
}
@@ -130,15 +134,30 @@ public class DataQuery {
return then;
}
- public DataQuery limit(IPageRequest page) {
- return this.last(Pager.of(page).getSql());
+ public DataQuery order(IOrderRequest request, SFunction column) {
+ BooleanBit sorted = BooleanBit.of(request.getOrder());
+ if (sorted == null) {
+ return this;
+ }
+ return this.order(sorted.booleanValue(), column);
}
- public DataQuery limit(int limit) {
+ @SuppressWarnings("unchecked")
+ public DataQuery order(boolean asc, SFunction column) {
+ // 设置排序
+ if (wrapper instanceof Func) {
+ ((Func extends T, SFunction extends T, ?>>) wrapper).orderBy(true, asc, column);
+ return this;
+ } else {
+ throw Exceptions.argument("wrapper not implements Func");
+ }
+ }
+
+ public DataQuery limit(Number limit) {
return this.last(SqlUtils.limit(limit));
}
- public DataQuery limit(int offset, int limit) {
+ public DataQuery limit(Number offset, Number limit) {
return this.last(SqlUtils.limit(offset, limit));
}
diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-entity-do.java.vm b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-entity-do.java.vm
index e11b516b..25166243 100644
--- a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-entity-do.java.vm
+++ b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-entity-do.java.vm
@@ -26,6 +26,7 @@ import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import org.dromara.visor.framework.mybatis.core.domain.BaseDO;
import lombok.*;
+import lombok.experimental.SuperBuilder;
import java.util.*;
import java.math.*;
@@ -38,7 +39,7 @@ import java.math.*;
* @since ${date}
*/
@Data
-@Builder
+@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@@ -66,17 +67,8 @@ public class ${entity} {
#if("$!field.comment" != "")
@Schema(description = "${field.comment}")
#end
-#if(${field.keyFlag})
-## 主键
- #if(${field.keyIdentityFlag})
- @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
- #elseif(!$null.isNull(${idType}) && "$!idType" != "")
- @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
- #elseif(${field.convert})
- @TableId("${field.annotationColumnName}")
- #end
## 普通字段
-#elseif(${field.fill})
+#if(${field.fill})
## ----- 存在字段填充设置 -----
#if(${field.convert})
@TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-entity-request-query.java.vm b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-entity-request-query.java.vm
index ddb8269f..037c99e6 100644
--- a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-entity-request-query.java.vm
+++ b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-entity-request-query.java.vm
@@ -25,11 +25,9 @@ package ${currentPackage};
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
-import org.dromara.visor.common.entity.PageRequest;
+import org.dromara.visor.common.entity.BaseQueryRequest;
import javax.validation.constraints.Size;
-import java.util.*;
-import java.math.*;
/**
* $!{table.comment} 查询请求对象
@@ -44,7 +42,7 @@ import java.math.*;
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(name = "${type}QueryRequest", description = "$!{table.comment} 查询请求对象")
-public class ${type}QueryRequest extends PageRequest {
+public class ${type}QueryRequest extends BaseQueryRequest {
@Schema(description = "搜索")
private String searchValue;
diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service-impl.java.vm b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service-impl.java.vm
index 839fd3e2..0e3e1090 100644
--- a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service-impl.java.vm
+++ b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service-impl.java.vm
@@ -144,10 +144,11 @@ public class ${table.serviceImplName} implements ${table.serviceName} {
@Override
public List<${type}VO> get${type}List(${type}QueryRequest request) {
// 条件
- LambdaQueryWrapper<${type}DO> wrapper = this.buildQueryWrapper(request)
- .orderByDesc(${type}DO::getId);
+ LambdaQueryWrapper<${type}DO> wrapper = this.buildQueryWrapper(request);
// 查询
- return ${typeLower}DAO.of(wrapper).list(${type}Convert.MAPPER::to);
+ return ${typeLower}DAO.of(wrapper)
+ .order(request, ${type}DO::getId)
+ .list(${type}Convert.MAPPER::to);
}
#if($meta.enableCache)
@@ -176,12 +177,12 @@ public class ${table.serviceImplName} implements ${table.serviceName} {
@Override
public DataGrid<${type}VO> get${type}Page(${type}QueryRequest request) {
// 条件
- LambdaQueryWrapper<${type}DO> wrapper = this.buildQueryWrapper(request)
- .orderByDesc(${type}DO::getId);
+ LambdaQueryWrapper<${type}DO> wrapper = this.buildQueryWrapper(request);
// 查询
return ${typeLower}DAO.of()
- .page(request)
.wrapper(wrapper)
+ .page(request)
+ .order(request, ${type}DO::getId)
.dataGrid(${type}Convert.MAPPER::to);
}
diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-api.ts.vm b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-api.ts.vm
index bada0235..1d8ca732 100644
--- a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-api.ts.vm
+++ b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-api.ts.vm
@@ -1,5 +1,5 @@
-import type { DataGrid, Pagination } from '@/types/global';
-import type { TableData } from '@arco-design/web-vue/es/table/interface';
+import type { TableData } from '@arco-design/web-vue';
+import type { DataGrid, OrderDirection, Pagination } from '@/types/global';
import axios from 'axios';
import qs from 'query-string';
@@ -32,7 +32,7 @@ export interface ${vue.featureEntity}UpdateRequest extends ${vue.featureEntity}C
/**
* ${table.comment}查询请求
*/
-export interface ${vue.featureEntity}QueryRequest extends Pagination {
+export interface ${vue.featureEntity}QueryRequest extends Pagination, OrderDirection {
searchValue?: string;
#foreach($field in ${table.fields})
#if("$field.propertyType" == "String" || "$field.propertyType" == "Date")
diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-card-list.vue.vm b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-card-list.vue.vm
index 6a1a7da6..d0be119d 100644
--- a/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-card-list.vue.vm
+++ b/orion-visor-framework/orion-visor-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-card-list.vue.vm
@@ -3,12 +3,14 @@
search-input-placeholder="输入搜索值"
:create-card-position="false"
:loading="loading"
- :field-config="fieldConfig"
+ :field-config="cardFieldConfig"
:list="list"
:pagination="pagination"
:card-layout-cols="cardColLayout"
:filter-count="filterCount"
:add-permission="['${package.ModuleName}:${typeHyphen}:create']"
+ :query-order="queryOrder"
+ :fields-hook="fieldsHook"
@add="emits('openAdd')"
@reset="reset"
@search="fetchCardData"
@@ -74,16 +76,12 @@
-
- 修改
-
+ 修改
-
- 删除
-
+ 删除
@@ -94,17 +92,13 @@
-
- 修改
-
+ 修改
-
- 删除
-
+ 删除
@@ -118,26 +112,29 @@
+
+
+
+
diff --git a/orion-visor-ui/src/components/asset/host-group/tree-selector/index.vue b/orion-visor-ui/src/components/asset/host-group/tree-selector/index.vue
index b51c3e8c..7dd5b31e 100644
--- a/orion-visor-ui/src/components/asset/host-group/tree-selector/index.vue
+++ b/orion-visor-ui/src/components/asset/host-group/tree-selector/index.vue
@@ -47,7 +47,7 @@
const initOptions = async () => {
setLoading(true);
try {
- treeData.value = await cacheStore.loadHostGroups();
+ treeData.value = await cacheStore.loadHostGroupTree();
} catch (e) {
} finally {
setLoading(false);
diff --git a/orion-visor-ui/src/components/asset/host-group/tree/index.vue b/orion-visor-ui/src/components/asset/host-group/tree/index.vue
index 6a3ebda0..d4c62fae 100644
--- a/orion-visor-ui/src/components/asset/host-group/tree/index.vue
+++ b/orion-visor-ui/src/components/asset/host-group/tree/index.vue
@@ -310,7 +310,7 @@
const fetchTreeData = async (force = false) => {
try {
emits('setLoading', true);
- const groups = await cacheStore.loadHostGroups(force);
+ const groups = await cacheStore.loadHostGroupTree(force);
treeData.value = groups || [];
} catch (e) {
} finally {
diff --git a/orion-visor-ui/src/components/asset/host/authorized-host-modal/types/table.columns.ts b/orion-visor-ui/src/components/asset/host/authorized-host-modal/types/table.columns.ts
index d0ee6680..2ef2b5cf 100644
--- a/orion-visor-ui/src/components/asset/host/authorized-host-modal/types/table.columns.ts
+++ b/orion-visor-ui/src/components/asset/host/authorized-host-modal/types/table.columns.ts
@@ -1,4 +1,4 @@
-import type { TableColumnData } from '@arco-design/web-vue/es/table/interface';
+import type { TableColumnData } from '@arco-design/web-vue';
const columns = [
{
diff --git a/orion-visor-ui/src/components/exec/template/modal/table.columns.ts b/orion-visor-ui/src/components/exec/template/modal/table.columns.ts
index e65abd91..41334713 100644
--- a/orion-visor-ui/src/components/exec/template/modal/table.columns.ts
+++ b/orion-visor-ui/src/components/exec/template/modal/table.columns.ts
@@ -1,4 +1,4 @@
-import type { TableColumnData } from '@arco-design/web-vue/es/table/interface';
+import type { TableColumnData } from '@arco-design/web-vue';
const columns = [
{
diff --git a/orion-visor-ui/src/components/meta/history/modal/table.columns.ts b/orion-visor-ui/src/components/meta/history/modal/table.columns.ts
index 753ec630..9e8cf395 100644
--- a/orion-visor-ui/src/components/meta/history/modal/table.columns.ts
+++ b/orion-visor-ui/src/components/meta/history/modal/table.columns.ts
@@ -1,4 +1,4 @@
-import type { TableColumnData } from '@arco-design/web-vue/es/table/interface';
+import type { TableColumnData } from '@arco-design/web-vue';
import { dateFormat } from '@/utils';
const columns = [
diff --git a/orion-visor-ui/src/components/view/card-list/components/card-field-adjust.vue b/orion-visor-ui/src/components/view/card-list/components/card-field-adjust.vue
new file mode 100644
index 00000000..aed7f01f
--- /dev/null
+++ b/orion-visor-ui/src/components/view/card-list/components/card-field-adjust.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ field.label }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/orion-visor-ui/src/components/view/card-list/components/card-header.vue b/orion-visor-ui/src/components/view/card-list/components/card-header.vue
index 46f6eba4..57ad712d 100644
--- a/orion-visor-ui/src/components/view/card-list/components/card-header.vue
+++ b/orion-visor-ui/src/components/view/card-list/components/card-header.vue
@@ -90,6 +90,13 @@
@click="bubblesEmitter(HeaderEmitter.RESET)">
+
+
+
+
@@ -110,13 +117,14 @@
import { triggerMouseEvent } from '@/utils/event';
import { HeaderEmitter } from '../types/emits';
import useEmitter from '@/hooks/emitter';
+ import CardFieldAdjust from './card-field-adjust.vue';
+ import CardSortAdjust from './card-sort-adjust.vue';
const props = defineProps();
const emits = defineEmits(['emitter']);
- const { bubblesEmitter } = useEmitter(emits);
-
const appStore = useAppStore();
+ const { bubblesEmitter } = useEmitter(emits);
const filterRef = ref();
diff --git a/orion-visor-ui/src/components/view/card-list/components/card-sort-adjust.vue b/orion-visor-ui/src/components/view/card-list/components/card-sort-adjust.vue
new file mode 100644
index 00000000..8034e566
--- /dev/null
+++ b/orion-visor-ui/src/components/view/card-list/components/card-sort-adjust.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 升序排序
+
+
+ 降序排序
+
+
+
+
+
+
+
+
+
+
+
diff --git a/orion-visor-ui/src/components/view/card-list/index.vue b/orion-visor-ui/src/components/view/card-list/index.vue
index c4c769f8..d1d2454a 100644
--- a/orion-visor-ui/src/components/view/card-list/index.vue
+++ b/orion-visor-ui/src/components/view/card-list/index.vue
@@ -80,12 +80,12 @@