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>) 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 @@ + + + + + + + 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 @@