commit
71b6b04d62
|
|
@ -100,8 +100,8 @@ spring:
|
|||
redis:
|
||||
host: localhost
|
||||
port: 6379
|
||||
# 密码(如没有密码请注释掉)
|
||||
# password:
|
||||
# redis 密码必须配置
|
||||
password: ruoyi123
|
||||
database: 0
|
||||
timeout: 10s
|
||||
ssl.enabled: false
|
||||
|
|
|
|||
|
|
@ -92,6 +92,8 @@ spring:
|
|||
server-addr: ${spring.cloud.nacos.server-addr}
|
||||
dataId: sentinel-${spring.application.name}.json
|
||||
groupId: ${spring.cloud.nacos.config.group}
|
||||
username: ${spring.cloud.nacos.username}
|
||||
password: ${spring.cloud.nacos.password}
|
||||
namespace: ${spring.profiles.active}
|
||||
data-type: json
|
||||
rule-type: gw-flow
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
FROM rabbitmq:3.13.3-management
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
ADD ./rabbitmq_delayed_message_exchange-3.13.0.ez /plugins
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
2
pom.xml
2
pom.xml
|
|
@ -13,7 +13,7 @@
|
|||
<description>RuoYi-Cloud-Plus微服务系统</description>
|
||||
|
||||
<properties>
|
||||
<revision>2.2.0-BETA2</revision>
|
||||
<revision>2.2.0</revision>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<java.version>17</java.version>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
</description>
|
||||
|
||||
<properties>
|
||||
<revision>2.2.0-BETA2</revision>
|
||||
<revision>2.2.0</revision>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ public class RemoteFileServiceMock implements RemoteFileService {
|
|||
* @param file 文件信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public RemoteFile upload(String name, String originalFilename, String contentType, byte[] file) {
|
||||
log.warn("服务调用异常 -> 降级处理");
|
||||
return null;
|
||||
|
|
@ -31,11 +32,18 @@ public class RemoteFileServiceMock implements RemoteFileService {
|
|||
* @param ossIds ossId串逗号分隔
|
||||
* @return url串逗号分隔
|
||||
*/
|
||||
@Override
|
||||
public String selectUrlByIds(String ossIds) {
|
||||
log.warn("服务调用异常 -> 降级处理");
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过ossId查询列表
|
||||
*
|
||||
* @param ossIds ossId串逗号分隔
|
||||
* @return 列表
|
||||
*/
|
||||
@Override
|
||||
public List<RemoteFile> selectByIds(String ossIds) {
|
||||
log.warn("服务调用异常 -> 降级处理");
|
||||
|
|
|
|||
|
|
@ -15,5 +15,10 @@ public interface RemoteMessageService {
|
|||
*/
|
||||
void publishMessage(Long sessionKey, String message);
|
||||
|
||||
/**
|
||||
* 发布订阅的消息(群发)
|
||||
*
|
||||
* @param message 消息内容
|
||||
*/
|
||||
void publishAll(String message);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ public class RemoteMessageServiceStub implements RemoteMessageService {
|
|||
* @param sessionKey session主键 一般为用户id
|
||||
* @param message 消息文本
|
||||
*/
|
||||
@Override
|
||||
public void publishMessage(Long sessionKey, String message) {
|
||||
try {
|
||||
remoteMessageService.publishMessage(sessionKey, message);
|
||||
|
|
@ -28,6 +29,12 @@ public class RemoteMessageServiceStub implements RemoteMessageService {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发布订阅的消息(群发)
|
||||
*
|
||||
* @param message 消息内容
|
||||
*/
|
||||
@Override
|
||||
public void publishAll(String message) {
|
||||
try {
|
||||
remoteMessageService.publishAll(message);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/auth/logs \
|
||||
/ruoyi/auth/temp \
|
||||
|
|
@ -9,6 +11,10 @@ RUN mkdir -p /ruoyi/auth/logs \
|
|||
|
||||
WORKDIR /ruoyi/auth
|
||||
|
||||
# 补全alpine镜像缺失字体问题
|
||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||
RUN apk add fontconfig && apk add --update ttf-dejavu && fc-cache --force
|
||||
|
||||
ENV SERVER_PORT=9210 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
|
||||
|
||||
EXPOSE ${SERVER_PORT}
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ import org.apache.dubbo.config.annotation.DubboReference;
|
|||
import org.dromara.auth.domain.vo.LoginVo;
|
||||
import org.dromara.auth.form.SocialLoginBody;
|
||||
import org.dromara.auth.service.IAuthStrategy;
|
||||
import org.dromara.auth.service.SysLoginService;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.ValidatorUtils;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
|
|
@ -43,7 +43,6 @@ import java.util.Optional;
|
|||
public class SocialAuthStrategy implements IAuthStrategy {
|
||||
|
||||
private final SocialProperties socialProperties;
|
||||
private final SysLoginService loginService;
|
||||
|
||||
@DubboReference
|
||||
private RemoteSocialService remoteSocialService;
|
||||
|
|
@ -83,7 +82,7 @@ public class SocialAuthStrategy implements IAuthStrategy {
|
|||
}
|
||||
RemoteSocialVo socialVo;
|
||||
if (TenantHelper.isEnable()) {
|
||||
Optional<RemoteSocialVo> opt = list.stream().filter(x -> x.getTenantId().equals(loginBody.getTenantId())).findAny();
|
||||
Optional<RemoteSocialVo> opt = StreamUtils.findAny(list, x -> x.getTenantId().equals(loginBody.getTenantId()));
|
||||
if (opt.isEmpty()) {
|
||||
throw new ServiceException("对不起,你没有权限登录当前租户!");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
</description>
|
||||
|
||||
<properties>
|
||||
<revision>2.2.0-BETA2</revision>
|
||||
<revision>2.2.0</revision>
|
||||
<spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
|
||||
<sentinel.version>1.8.8</sentinel.version>
|
||||
<seata.version>1.7.1</seata.version>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
</description>
|
||||
|
||||
<properties>
|
||||
<revision>2.2.0-BETA2</revision>
|
||||
<revision>2.2.0</revision>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
|
|
@ -40,6 +40,7 @@
|
|||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 权限认证服务 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-satoken</artifactId>
|
||||
|
|
@ -88,91 +89,105 @@
|
|||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 定时任务 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-job</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- RPC服务 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-dubbo</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 分布式事务 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-seata</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 自定义负载均衡 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-loadbalancer</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- oss服务 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-oss</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 限流 -->
|
||||
<!-- 限流功能 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-ratelimiter</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 幂等功能 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-idempotent</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 邮件模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-mail</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 短信模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-sms</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- logstash日志推送模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-logstash</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- ES搜索引擎服务 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-elasticsearch</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 限流模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-sentinel</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- skywalking日志收集模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-skylog</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- prometheus监控 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-prometheus</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 通用翻译功能 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-translation</artifactId>
|
||||
|
|
@ -193,6 +208,7 @@
|
|||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 数据加解密模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-encrypt</artifactId>
|
||||
|
|
@ -206,24 +222,28 @@
|
|||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- websocket模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-websocket</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 授权认证 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-social</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 配置中心 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-nacos</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 消息总线模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-bus</artifactId>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
<artifactId>ruoyi-common-bus</artifactId>
|
||||
|
||||
<description>
|
||||
ruoyi-common-bus 模块
|
||||
ruoyi-common-bus 消息总线模块
|
||||
</description>
|
||||
|
||||
<dependencies>
|
||||
|
|
@ -25,6 +25,11 @@
|
|||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.springframework.cloud</groupId>-->
|
||||
<!-- <artifactId>spring-cloud-starter-bus-kafka</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
<!-- rocketmq -->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.alibaba.cloud</groupId>-->
|
||||
<!-- <artifactId>spring-cloud-starter-bus-rocketmq</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,34 @@ public class StreamUtils {
|
|||
return collection.stream().filter(function).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 找到流中满足条件的第一个元素
|
||||
*
|
||||
* @param collection 需要查询的集合
|
||||
* @param function 过滤方法
|
||||
* @return 找到符合条件的第一个元素,没有则返回null
|
||||
*/
|
||||
public static <E> E findFirst(Collection<E> collection, Predicate<E> function) {
|
||||
if (CollUtil.isEmpty(collection)) {
|
||||
return null;
|
||||
}
|
||||
return collection.stream().filter(function).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 找到流中任意一个满足条件的元素
|
||||
*
|
||||
* @param collection 需要查询的集合
|
||||
* @param function 过滤方法
|
||||
* @return 找到符合条件的任意一个元素,没有则返回null
|
||||
*/
|
||||
public static <E> Optional<E> findAny(Collection<E> collection, Predicate<E> function) {
|
||||
if (CollUtil.isEmpty(collection)) {
|
||||
return Optional.empty();
|
||||
}
|
||||
return collection.stream().filter(function).findAny();
|
||||
}
|
||||
|
||||
/**
|
||||
* 将collection拼接
|
||||
*
|
||||
|
|
|
|||
|
|
@ -18,6 +18,13 @@ public class ValidatorUtils {
|
|||
|
||||
private static final Validator VALID = SpringUtils.getBean(Validator.class);
|
||||
|
||||
/**
|
||||
* 对给定对象进行参数校验,并根据指定的校验组进行校验
|
||||
*
|
||||
* @param object 要进行校验的对象
|
||||
* @param groups 校验组
|
||||
* @throws ConstraintViolationException 如果校验不通过,则抛出参数校验异常
|
||||
*/
|
||||
public static <T> void validate(T object, Class<?>... groups) {
|
||||
Set<ConstraintViolation<T>> validate = VALID.validate(object, groups);
|
||||
if (!validate.isEmpty()) {
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
<artifactId>ruoyi-common-dubbo</artifactId>
|
||||
|
||||
<description>
|
||||
ruoyi-common-dubbo
|
||||
ruoyi-common-dubbo RPC服务
|
||||
</description>
|
||||
|
||||
<dependencies>
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@ import com.fasterxml.jackson.core.JsonProcessingException;
|
|||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.exc.MismatchedInputException;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -30,6 +30,13 @@ public class JsonUtils {
|
|||
return OBJECT_MAPPER;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将对象转换为JSON格式的字符串
|
||||
*
|
||||
* @param object 要转换的对象
|
||||
* @return JSON格式的字符串,如果对象为null,则返回null
|
||||
* @throws RuntimeException 如果转换过程中发生JSON处理异常,则抛出运行时异常
|
||||
*/
|
||||
public static String toJsonString(Object object) {
|
||||
if (ObjectUtil.isNull(object)) {
|
||||
return null;
|
||||
|
|
@ -41,6 +48,15 @@ public class JsonUtils {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将JSON格式的字符串转换为指定类型的对象
|
||||
*
|
||||
* @param text JSON格式的字符串
|
||||
* @param clazz 要转换的目标对象类型
|
||||
* @param <T> 目标对象的泛型类型
|
||||
* @return 转换后的对象,如果字符串为空则返回null
|
||||
* @throws RuntimeException 如果转换过程中发生IO异常,则抛出运行时异常
|
||||
*/
|
||||
public static <T> T parseObject(String text, Class<T> clazz) {
|
||||
if (StringUtils.isEmpty(text)) {
|
||||
return null;
|
||||
|
|
@ -52,6 +68,15 @@ public class JsonUtils {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将字节数组转换为指定类型的对象
|
||||
*
|
||||
* @param bytes 字节数组
|
||||
* @param clazz 要转换的目标对象类型
|
||||
* @param <T> 目标对象的泛型类型
|
||||
* @return 转换后的对象,如果字节数组为空则返回null
|
||||
* @throws RuntimeException 如果转换过程中发生IO异常,则抛出运行时异常
|
||||
*/
|
||||
public static <T> T parseObject(byte[] bytes, Class<T> clazz) {
|
||||
if (ArrayUtil.isEmpty(bytes)) {
|
||||
return null;
|
||||
|
|
@ -63,6 +88,15 @@ public class JsonUtils {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将JSON格式的字符串转换为指定类型的对象,支持复杂类型
|
||||
*
|
||||
* @param text JSON格式的字符串
|
||||
* @param typeReference 指定类型的TypeReference对象
|
||||
* @param <T> 目标对象的泛型类型
|
||||
* @return 转换后的对象,如果字符串为空则返回null
|
||||
* @throws RuntimeException 如果转换过程中发生IO异常,则抛出运行时异常
|
||||
*/
|
||||
public static <T> T parseObject(String text, TypeReference<T> typeReference) {
|
||||
if (StringUtils.isBlank(text)) {
|
||||
return null;
|
||||
|
|
@ -74,6 +108,13 @@ public class JsonUtils {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将JSON格式的字符串转换为Dict对象
|
||||
*
|
||||
* @param text JSON格式的字符串
|
||||
* @return 转换后的Dict对象,如果字符串为空或者不是JSON格式则返回null
|
||||
* @throws RuntimeException 如果转换过程中发生IO异常,则抛出运行时异常
|
||||
*/
|
||||
public static Dict parseMap(String text) {
|
||||
if (StringUtils.isBlank(text)) {
|
||||
return null;
|
||||
|
|
@ -88,6 +129,13 @@ public class JsonUtils {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将JSON格式的字符串转换为Dict对象的列表
|
||||
*
|
||||
* @param text JSON格式的字符串
|
||||
* @return 转换后的Dict对象的列表,如果字符串为空则返回null
|
||||
* @throws RuntimeException 如果转换过程中发生IO异常,则抛出运行时异常
|
||||
*/
|
||||
public static List<Dict> parseArrayMap(String text) {
|
||||
if (StringUtils.isBlank(text)) {
|
||||
return null;
|
||||
|
|
@ -99,6 +147,15 @@ public class JsonUtils {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将JSON格式的字符串转换为指定类型对象的列表
|
||||
*
|
||||
* @param text JSON格式的字符串
|
||||
* @param clazz 要转换的目标对象类型
|
||||
* @param <T> 目标对象的泛型类型
|
||||
* @return 转换后的对象的列表,如果字符串为空则返回空列表
|
||||
* @throws RuntimeException 如果转换过程中发生IO异常,则抛出运行时异常
|
||||
*/
|
||||
public static <T> List<T> parseArray(String text, Class<T> clazz) {
|
||||
if (StringUtils.isEmpty(text)) {
|
||||
return new ArrayList<>();
|
||||
|
|
|
|||
|
|
@ -1,37 +0,0 @@
|
|||
package org.dromara.common.mail.config;
|
||||
|
||||
import org.dromara.common.mail.config.properties.MailProperties;
|
||||
import org.dromara.common.mail.utils.MailAccount;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
/**
|
||||
* JavaMail 配置
|
||||
*
|
||||
* @author Michelle.Chung
|
||||
*/
|
||||
@AutoConfiguration
|
||||
@EnableConfigurationProperties(MailProperties.class)
|
||||
public class MailConfig {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnProperty(value = "mail.enabled", havingValue = "true")
|
||||
public MailAccount mailAccount(MailProperties mailProperties) {
|
||||
MailAccount account = new MailAccount();
|
||||
account.setHost(mailProperties.getHost());
|
||||
account.setPort(mailProperties.getPort());
|
||||
account.setAuth(mailProperties.getAuth());
|
||||
account.setFrom(mailProperties.getFrom());
|
||||
account.setUser(mailProperties.getUser());
|
||||
account.setPass(mailProperties.getPass());
|
||||
account.setSocketFactoryPort(mailProperties.getPort());
|
||||
account.setStarttlsEnable(mailProperties.getStarttlsEnable());
|
||||
account.setSslEnable(mailProperties.getSslEnable());
|
||||
account.setTimeout(mailProperties.getTimeout());
|
||||
account.setConnectionTimeout(mailProperties.getConnectionTimeout());
|
||||
return account;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
<artifactId>ruoyi-common-nacos</artifactId>
|
||||
|
||||
<description>
|
||||
ruoyi-common-nacos
|
||||
ruoyi-common-nacos 配置中心
|
||||
</description>
|
||||
|
||||
<dependencies>
|
||||
|
|
|
|||
|
|
@ -65,6 +65,12 @@ public class RedisUtils {
|
|||
consumer.accept(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发布消息到指定的频道
|
||||
*
|
||||
* @param channelKey 通道key
|
||||
* @param msg 发送数据
|
||||
*/
|
||||
public static <T> void publish(String channelKey, T msg) {
|
||||
RTopic topic = CLIENT.getTopic(channelKey);
|
||||
topic.publish(msg);
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
<artifactId>ruoyi-common-satoken</artifactId>
|
||||
|
||||
<description>
|
||||
ruoyi-common-satoken
|
||||
ruoyi-common-satoken 权限认证服务
|
||||
</description>
|
||||
|
||||
<dependencies>
|
||||
|
|
|
|||
|
|
@ -193,7 +193,11 @@ public class LoginHelper {
|
|||
* @return 结果
|
||||
*/
|
||||
public static boolean isLogin() {
|
||||
return getLoginUser() != null;
|
||||
try {
|
||||
return getLoginUser() != null;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,15 +16,12 @@ import org.springframework.core.task.VirtualThreadTaskExecutor;
|
|||
@AutoConfiguration
|
||||
public class UndertowConfig implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {
|
||||
|
||||
/**
|
||||
* 设置 Undertow 的 websocket 缓冲池
|
||||
*/
|
||||
@Override
|
||||
public void customize(UndertowServletWebServerFactory factory) {
|
||||
// 默认不直接分配内存 如果项目中使用了 websocket 建议直接分配
|
||||
factory.addDeploymentInfoCustomizers(deploymentInfo -> {
|
||||
WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo();
|
||||
webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(false, 512));
|
||||
webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(true, 1024));
|
||||
deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo);
|
||||
// 使用虚拟线程
|
||||
if (SpringUtils.isVirtual()) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package org.dromara.common.websocket.interceptor;
|
||||
|
||||
import cn.dev33.satoken.exception.NotLoginException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.system.api.model.LoginUser;
|
||||
|
|
@ -31,9 +32,14 @@ public class PlusWebSocketInterceptor implements HandshakeInterceptor {
|
|||
*/
|
||||
@Override
|
||||
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
attributes.put(LOGIN_USER_KEY, loginUser);
|
||||
return true;
|
||||
try {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
attributes.put(LOGIN_USER_KEY, loginUser);
|
||||
return true;
|
||||
} catch (NotLoginException e) {
|
||||
log.error("WebSocket 认证失败'{}',无法访问系统资源", e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/gateway/logs \
|
||||
/ruoyi/gateway/temp \
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/gen/logs
|
||||
|
||||
|
|
|
|||
|
|
@ -21,33 +21,53 @@ public interface I${ClassName}Service {
|
|||
|
||||
/**
|
||||
* 查询${functionName}
|
||||
*
|
||||
* @param ${pkColumn.javaField} 主键
|
||||
* @return ${functionName}
|
||||
*/
|
||||
${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField});
|
||||
|
||||
#if($table.crud)
|
||||
/**
|
||||
* 查询${functionName}列表
|
||||
* 分页查询${functionName}列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return ${functionName}分页列表
|
||||
*/
|
||||
TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery);
|
||||
#end
|
||||
|
||||
/**
|
||||
* 查询${functionName}列表
|
||||
* 查询符合条件的${functionName}列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return ${functionName}列表
|
||||
*/
|
||||
List<${ClassName}Vo> queryList(${ClassName}Bo bo);
|
||||
|
||||
/**
|
||||
* 新增${functionName}
|
||||
*
|
||||
* @param bo ${functionName}
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(${ClassName}Bo bo);
|
||||
|
||||
/**
|
||||
* 修改${functionName}
|
||||
*
|
||||
* @param bo ${functionName}
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(${ClassName}Bo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除${functionName}信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<${pkColumn.javaType}> ids, Boolean isValid);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,9 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
|
|||
|
||||
/**
|
||||
* 查询${functionName}
|
||||
*
|
||||
* @param ${pkColumn.javaField} 主键
|
||||
* @return ${functionName}
|
||||
*/
|
||||
@Override
|
||||
public ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}){
|
||||
|
|
@ -43,7 +46,11 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
|
|||
|
||||
#if($table.crud)
|
||||
/**
|
||||
* 查询${functionName}列表
|
||||
* 分页查询${functionName}列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return ${functionName}分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery) {
|
||||
|
|
@ -54,7 +61,10 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
|
|||
#end
|
||||
|
||||
/**
|
||||
* 查询${functionName}列表
|
||||
* 查询符合条件的${functionName}列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return ${functionName}列表
|
||||
*/
|
||||
@Override
|
||||
public List<${ClassName}Vo> queryList(${ClassName}Bo bo) {
|
||||
|
|
@ -91,6 +101,9 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
|
|||
|
||||
/**
|
||||
* 新增${functionName}
|
||||
*
|
||||
* @param bo ${functionName}
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(${ClassName}Bo bo) {
|
||||
|
|
@ -106,6 +119,9 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
|
|||
|
||||
/**
|
||||
* 修改${functionName}
|
||||
*
|
||||
* @param bo ${functionName}
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(${ClassName}Bo bo) {
|
||||
|
|
@ -122,7 +138,11 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
|
|||
}
|
||||
|
||||
/**
|
||||
* 批量删除${functionName}
|
||||
* 校验并批量删除${functionName}信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<${pkColumn.javaType}> ids, Boolean isValid) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
export interface ${BusinessName}VO {
|
||||
#foreach ($column in $columns)
|
||||
#if($column.insert || $column.edit)
|
||||
#if($column.list)
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
|
|
@ -35,6 +35,7 @@ export interface ${BusinessName}Form extends BaseEntity {
|
|||
}
|
||||
|
||||
export interface ${BusinessName}Query #if(!${treeCode})extends PageQuery #end{
|
||||
|
||||
#foreach ($column in $columns)
|
||||
#if($column.query)
|
||||
/**
|
||||
|
|
@ -47,4 +48,11 @@ export interface ${BusinessName}Query #if(!${treeCode})extends PageQuery #end{
|
|||
#end
|
||||
#end
|
||||
#end
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/job/logs \
|
||||
/ruoyi/job/temp \
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/resource/logs \
|
||||
/ruoyi/resource/temp \
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ public class RemoteFileServiceImpl implements RemoteFileService {
|
|||
* @param ossIds ossId串逗号分隔
|
||||
* @return 列表
|
||||
*/
|
||||
@Override
|
||||
public List<RemoteFile> selectByIds(String ossIds){
|
||||
List<SysOssVo> sysOssVos = sysOssService.listByIds(StringUtils.splitTo(ossIds, Convert::toLong));
|
||||
return MapstructUtils.convert(sysOssVos, RemoteFile.class);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ public class RemoteMailServiceImpl implements RemoteMailService {
|
|||
* @param subject 标题
|
||||
* @param text 内容
|
||||
*/
|
||||
@Override
|
||||
public void send(String to, String subject, String text) throws ServiceException {
|
||||
MailUtils.sendText(to, subject, text);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/system/logs \
|
||||
/ruoyi/system/temp \
|
||||
|
|
|
|||
|
|
@ -75,8 +75,6 @@ public class SysDeptController extends BaseController {
|
|||
public R<Void> add(@Validated @RequestBody SysDeptBo dept) {
|
||||
if (!deptService.checkDeptNameUnique(dept)) {
|
||||
return R.fail("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
|
||||
} else if (StringUtils.isNotBlank(dept.getDeptCategory()) && !deptService.checkDeptCategoryUnique(dept)) {
|
||||
return R.fail("新增部门'" + dept.getDeptName() + "'失败,部门类别编码已存在");
|
||||
}
|
||||
return toAjax(deptService.insertDept(dept));
|
||||
}
|
||||
|
|
@ -92,8 +90,6 @@ public class SysDeptController extends BaseController {
|
|||
deptService.checkDeptDataScope(deptId);
|
||||
if (!deptService.checkDeptNameUnique(dept)) {
|
||||
return R.fail("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
|
||||
} else if (StringUtils.isNotBlank(dept.getDeptCategory()) && !deptService.checkDeptCategoryUnique(dept)) {
|
||||
return R.fail("修改部门'" + dept.getDeptName() + "'失败,部门类别编码已存在");
|
||||
} else if (dept.getParentId().equals(deptId)) {
|
||||
return R.fail("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
|
||||
} else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())) {
|
||||
|
|
|
|||
|
|
@ -103,6 +103,11 @@ public class SysUserBo extends BaseEntity {
|
|||
*/
|
||||
private Long roleId;
|
||||
|
||||
/**
|
||||
* 排除不查询的用户(工作流用)
|
||||
*/
|
||||
private String excludeUserIds;
|
||||
|
||||
public SysUserBo(Long userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,12 @@ public class RemoteDeptServiceImpl implements RemoteDeptService {
|
|||
|
||||
private final ISysDeptService sysDeptService;
|
||||
|
||||
/**
|
||||
* 通过部门ID查询部门名称
|
||||
*
|
||||
* @param deptIds 部门ID串逗号分隔
|
||||
* @return 部门名称串逗号分隔
|
||||
*/
|
||||
@Override
|
||||
public String selectDeptNameByIds(String deptIds) {
|
||||
return sysDeptService.selectDeptNameByIds(deptIds);
|
||||
|
|
|
|||
|
|
@ -23,7 +23,12 @@ public class RemoteDictServiceImpl implements RemoteDictService {
|
|||
|
||||
private final ISysDictTypeService sysDictTypeService;
|
||||
|
||||
|
||||
/**
|
||||
* 根据字典类型查询字典数据
|
||||
*
|
||||
* @param dictType 字典类型
|
||||
* @return 字典数据集合信息
|
||||
*/
|
||||
@Override
|
||||
public List<RemoteDictDataVo> selectDictDataByType(String dictType) {
|
||||
List<SysDictDataVo> list = sysDictTypeService.selectDictDataByType(dictType);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,11 @@ public class RemoteLogServiceImpl implements RemoteLogService {
|
|||
private final ISysOperLogService operLogService;
|
||||
private final ISysLogininforService logininforService;
|
||||
|
||||
/**
|
||||
* 保存系统日志
|
||||
*
|
||||
* @param remoteOperLogBo 日志实体
|
||||
*/
|
||||
@Async
|
||||
@Override
|
||||
public void saveLog(RemoteOperLogBo remoteOperLogBo) {
|
||||
|
|
@ -33,6 +38,11 @@ public class RemoteLogServiceImpl implements RemoteLogService {
|
|||
operLogService.insertOperlog(sysOperLogBo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存访问记录
|
||||
*
|
||||
* @param remoteLogininforBo 访问实体
|
||||
*/
|
||||
@Async
|
||||
@Override
|
||||
public void saveLogininfor(RemoteLogininforBo remoteLogininforBo) {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,10 @@ public class RemoteSocialServiceImpl implements RemoteSocialService {
|
|||
private final ISysSocialService sysSocialService;
|
||||
|
||||
/**
|
||||
* 根据 authId 查询用户信息
|
||||
* 根据 authId 查询用户授权信息
|
||||
*
|
||||
* @param authId 认证id
|
||||
* @return 授权信息
|
||||
*/
|
||||
@Override
|
||||
public List<RemoteSocialVo> selectByAuthId(String authId) {
|
||||
|
|
@ -34,6 +37,11 @@ public class RemoteSocialServiceImpl implements RemoteSocialService {
|
|||
return MapstructUtils.convert(list, RemoteSocialVo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
*
|
||||
* @param bo 社会化关系业务对象
|
||||
*/
|
||||
@Override
|
||||
public List<RemoteSocialVo> queryList(RemoteSocialBo bo) {
|
||||
SysSocialBo params = MapstructUtils.convert(bo, SysSocialBo.class);
|
||||
|
|
@ -43,6 +51,8 @@ public class RemoteSocialServiceImpl implements RemoteSocialService {
|
|||
|
||||
/**
|
||||
* 保存社会化关系
|
||||
*
|
||||
* @param bo 社会化关系业务对象
|
||||
*/
|
||||
@Override
|
||||
public void insertByBo(RemoteSocialBo bo) {
|
||||
|
|
@ -51,6 +61,8 @@ public class RemoteSocialServiceImpl implements RemoteSocialService {
|
|||
|
||||
/**
|
||||
* 更新社会化关系
|
||||
*
|
||||
* @param bo 社会化关系业务对象
|
||||
*/
|
||||
@Override
|
||||
public void updateByBo(RemoteSocialBo bo) {
|
||||
|
|
@ -59,6 +71,9 @@ public class RemoteSocialServiceImpl implements RemoteSocialService {
|
|||
|
||||
/**
|
||||
* 删除社会化关系
|
||||
*
|
||||
* @param socialId 社会化关系ID
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidById(Long socialId) {
|
||||
|
|
|
|||
|
|
@ -46,6 +46,13 @@ public class RemoteUserServiceImpl implements RemoteUserService {
|
|||
private final ISysDeptService deptService;
|
||||
private final SysUserMapper userMapper;
|
||||
|
||||
/**
|
||||
* 通过用户名查询用户信息
|
||||
*
|
||||
* @param username 用户名
|
||||
* @param tenantId 租户id
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public LoginUser getUserInfo(String username, String tenantId) throws UserException {
|
||||
return TenantHelper.dynamic(tenantId, () -> {
|
||||
|
|
@ -62,6 +69,13 @@ public class RemoteUserServiceImpl implements RemoteUserService {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过用户id查询用户信息
|
||||
*
|
||||
* @param userId 用户id
|
||||
* @param tenantId 租户id
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public LoginUser getUserInfo(Long userId, String tenantId) throws UserException {
|
||||
return TenantHelper.dynamic(tenantId, () -> {
|
||||
|
|
@ -78,6 +92,13 @@ public class RemoteUserServiceImpl implements RemoteUserService {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过手机号查询用户信息
|
||||
*
|
||||
* @param phonenumber 手机号
|
||||
* @param tenantId 租户id
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public LoginUser getUserInfoByPhonenumber(String phonenumber, String tenantId) throws UserException {
|
||||
return TenantHelper.dynamic(tenantId, () -> {
|
||||
|
|
@ -94,6 +115,13 @@ public class RemoteUserServiceImpl implements RemoteUserService {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过邮箱查询用户信息
|
||||
*
|
||||
* @param email 邮箱
|
||||
* @param tenantId 租户id
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public LoginUser getUserInfoByEmail(String email, String tenantId) throws UserException {
|
||||
return TenantHelper.dynamic(tenantId, () -> {
|
||||
|
|
@ -110,6 +138,12 @@ public class RemoteUserServiceImpl implements RemoteUserService {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过openid查询用户信息
|
||||
*
|
||||
* @param openid openid
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public XcxLoginUser getUserInfoByOpenid(String openid) throws UserException {
|
||||
// todo 自行实现 userService.selectUserByOpenid(openid);
|
||||
|
|
@ -131,6 +165,12 @@ public class RemoteUserServiceImpl implements RemoteUserService {
|
|||
return loginUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册用户信息
|
||||
*
|
||||
* @param remoteUserBo 用户信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public Boolean registerUserInfo(RemoteUserBo remoteUserBo) throws UserException, ServiceException {
|
||||
SysUserBo sysUserBo = MapstructUtils.convert(remoteUserBo, SysUserBo.class);
|
||||
|
|
@ -219,7 +259,7 @@ public class RemoteUserServiceImpl implements RemoteUserService {
|
|||
loginUser.setRolePermission(permissionService.getRolePermission(userVo.getUserId()));
|
||||
TenantHelper.dynamic(userVo.getTenantId(), () -> {
|
||||
SysDeptVo dept = null;
|
||||
if (ObjectUtil.isNotNull(userVo.getUserId())) {
|
||||
if (ObjectUtil.isNotNull(userVo.getDeptId())) {
|
||||
dept = deptService.selectDeptById(userVo.getDeptId());
|
||||
}
|
||||
loginUser.setDeptName(ObjectUtil.isNull(dept) ? "" : dept.getDeptName());
|
||||
|
|
@ -246,12 +286,24 @@ public class RemoteUserServiceImpl implements RemoteUserService {
|
|||
DataPermissionHelper.ignore(() -> userMapper.updateById(sysUser));
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过用户ID查询用户列表
|
||||
*
|
||||
* @param userIds 用户ids
|
||||
* @return 用户列表
|
||||
*/
|
||||
@Override
|
||||
public List<RemoteUserVo> selectListByIds(List<Long> userIds) {
|
||||
List<SysUserVo> sysUserVos = userService.selectUserByIds(userIds, null);
|
||||
return MapstructUtils.convert(sysUserVos, RemoteUserVo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过角色ID查询用户ID
|
||||
*
|
||||
* @param roleIds 角色ids
|
||||
* @return 用户ids
|
||||
*/
|
||||
@Override
|
||||
public List<Long> selectUserIdsByRoleIds(List<Long> roleIds) {
|
||||
return userService.selectUserIdsByRoleIds(roleIds);
|
||||
|
|
|
|||
|
|
@ -100,13 +100,6 @@ public interface ISysDeptService {
|
|||
*/
|
||||
boolean checkDeptNameUnique(SysDeptBo dept);
|
||||
|
||||
/**
|
||||
* 校验部门类别编码是否唯一
|
||||
*
|
||||
* @param dept 部门信息
|
||||
* @return 结果
|
||||
*/
|
||||
boolean checkDeptCategoryUnique(SysDeptBo dept);
|
||||
|
||||
/**
|
||||
* 校验部门是否有数据权限
|
||||
|
|
|
|||
|
|
@ -12,45 +12,60 @@ import java.util.List;
|
|||
*/
|
||||
public interface ISysSocialService {
|
||||
|
||||
|
||||
/**
|
||||
* 查询社会化关系
|
||||
* 根据ID查询社会化关系
|
||||
*
|
||||
* @param id 社会化关系的唯一标识符
|
||||
* @return 返回与给定ID对应的SysSocialVo对象,如果未找到则返回null
|
||||
*/
|
||||
SysSocialVo queryById(String id);
|
||||
|
||||
/**
|
||||
* 查询社会化关系列表
|
||||
*
|
||||
* @param bo 用于过滤查询条件的SysSocialBo对象
|
||||
* @return 返回符合条件的SysSocialVo对象列表
|
||||
*/
|
||||
List<SysSocialVo> queryList(SysSocialBo bo);
|
||||
|
||||
/**
|
||||
* 查询社会化关系列表
|
||||
* 根据用户ID查询社会化关系列表
|
||||
*
|
||||
* @param userId 用户的唯一标识符
|
||||
* @return 返回与给定用户ID相关联的SysSocialVo对象列表
|
||||
*/
|
||||
List<SysSocialVo> queryListByUserId(Long userId);
|
||||
|
||||
/**
|
||||
* 新增授权关系
|
||||
*
|
||||
* @param bo 包含新增授权关系信息的SysSocialBo对象
|
||||
* @return 返回新增操作的结果,成功返回true,失败返回false
|
||||
*/
|
||||
Boolean insertByBo(SysSocialBo bo);
|
||||
|
||||
/**
|
||||
* 更新社会化关系
|
||||
*
|
||||
* @param bo 包含更新信息的SysSocialBo对象
|
||||
* @return 返回更新操作的结果,成功返回true,失败返回false
|
||||
*/
|
||||
|
||||
Boolean updateByBo(SysSocialBo bo);
|
||||
|
||||
/**
|
||||
* 删除社会化关系信息
|
||||
*
|
||||
* @param id 要删除的社会化关系的唯一标识符
|
||||
* @return 返回删除操作的结果,成功返回true,失败返回false
|
||||
*/
|
||||
Boolean deleteWithValidById(Long id);
|
||||
|
||||
|
||||
/**
|
||||
* 根据 authId 查询 SysSocial 表和 SysUser 表,返回 SysSocialAuthResult 映射的对象
|
||||
* 根据认证ID查询社会化关系和用户信息
|
||||
*
|
||||
* @param authId 认证ID
|
||||
* @return SysSocial
|
||||
* @return 返回包含SysSocial和用户信息的SysSocialVo对象列表
|
||||
*/
|
||||
List<SysSocialVo> selectByAuthId(String authId);
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -223,20 +223,6 @@ public class SysDeptServiceImpl implements ISysDeptService {
|
|||
return !exist;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验部门类别编码是否唯一
|
||||
*
|
||||
* @param dept 部门信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public boolean checkDeptCategoryUnique(SysDeptBo dept) {
|
||||
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysDept>()
|
||||
.eq(SysDept::getDeptCategory, dept.getDeptCategory())
|
||||
.ne(ObjectUtil.isNotNull(dept.getDeptId()), SysDept::getDeptId, dept.getDeptId()));
|
||||
return !exist;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验部门是否有数据权限
|
||||
*
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@ import org.springframework.stereotype.Service;
|
|||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 角色 业务层处理
|
||||
|
|
@ -106,7 +105,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
|
|||
List<SysRoleVo> userRoles = baseMapper.selectRolesByUserId(userId);
|
||||
List<SysRoleVo> roles = selectRoleAll();
|
||||
// 使用HashSet提高查找效率
|
||||
Set<Long> userRoleIds = userRoles.stream().map(SysRoleVo::getRoleId).collect(Collectors.toSet());
|
||||
Set<Long> userRoleIds = StreamUtils.toSet(userRoles, SysRoleVo::getRoleId);
|
||||
for (SysRoleVo role : roles) {
|
||||
if (userRoleIds.contains(role.getRoleId())) {
|
||||
role.setFlag(true);
|
||||
|
|
|
|||
|
|
@ -26,9 +26,11 @@ public class SysSocialServiceImpl implements ISysSocialService {
|
|||
|
||||
private final SysSocialMapper baseMapper;
|
||||
|
||||
|
||||
/**
|
||||
* 查询社会化关系
|
||||
* 根据ID查询社会化关系
|
||||
*
|
||||
* @param id 社会化关系的唯一标识符
|
||||
* @return 返回与给定ID对应的SysSocialVo对象,如果未找到则返回null
|
||||
*/
|
||||
@Override
|
||||
public SysSocialVo queryById(String id) {
|
||||
|
|
@ -36,7 +38,10 @@ public class SysSocialServiceImpl implements ISysSocialService {
|
|||
}
|
||||
|
||||
/**
|
||||
* 授权列表
|
||||
* 查询社会化关系列表
|
||||
*
|
||||
* @param bo 用于过滤查询条件的SysSocialBo对象
|
||||
* @return 返回符合条件的SysSocialVo对象列表
|
||||
*/
|
||||
@Override
|
||||
public List<SysSocialVo> queryList(SysSocialBo bo) {
|
||||
|
|
@ -47,14 +52,22 @@ public class SysSocialServiceImpl implements ISysSocialService {
|
|||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户ID查询社会化关系列表
|
||||
*
|
||||
* @param userId 用户的唯一标识符
|
||||
* @return 返回与给定用户ID相关联的SysSocialVo对象列表
|
||||
*/
|
||||
@Override
|
||||
public List<SysSocialVo> queryListByUserId(Long userId) {
|
||||
return baseMapper.selectVoList(new LambdaQueryWrapper<SysSocial>().eq(SysSocial::getUserId, userId));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 新增社会化关系
|
||||
* 新增授权关系
|
||||
*
|
||||
* @param bo 包含新增授权关系信息的SysSocialBo对象
|
||||
* @return 返回新增操作的结果,成功返回true,失败返回false
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(SysSocialBo bo) {
|
||||
|
|
@ -73,6 +86,9 @@ public class SysSocialServiceImpl implements ISysSocialService {
|
|||
|
||||
/**
|
||||
* 更新社会化关系
|
||||
*
|
||||
* @param bo 包含更新信息的SysSocialBo对象
|
||||
* @return 返回更新操作的结果,成功返回true,失败返回false
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(SysSocialBo bo) {
|
||||
|
|
@ -81,7 +97,6 @@ public class SysSocialServiceImpl implements ISysSocialService {
|
|||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
|
|
@ -89,21 +104,22 @@ public class SysSocialServiceImpl implements ISysSocialService {
|
|||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 删除社会化关系
|
||||
* 删除社会化关系信息
|
||||
*
|
||||
* @param id 要删除的社会化关系的唯一标识符
|
||||
* @return 返回删除操作的结果,成功返回true,失败返回false
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidById(Long id) {
|
||||
return baseMapper.deleteById(id) > 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据 authId 查询用户信息
|
||||
* 根据认证ID查询社会化关系和用户信息
|
||||
*
|
||||
* @param authId 认证id
|
||||
* @return 授权信息
|
||||
* @param authId 认证ID
|
||||
* @return 返回包含SysSocial和用户信息的SysSocialVo对象列表
|
||||
*/
|
||||
@Override
|
||||
public List<SysSocialVo> selectByAuthId(String authId) {
|
||||
|
|
|
|||
|
|
@ -95,6 +95,9 @@ public class SysUserServiceImpl implements ISysUserService {
|
|||
ids.add(user.getDeptId());
|
||||
w.in("u.dept_id", ids);
|
||||
}).orderByAsc("u.user_id");
|
||||
if (StringUtils.isNotBlank(user.getExcludeUserIds())) {
|
||||
wrapper.notIn("u.user_id", StringUtils.splitList(user.getExcludeUserIds()));
|
||||
}
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
m.perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
|
||||
from sys_menu m
|
||||
left join sys_role_menu rm on m.menu_id = rm.menu_id
|
||||
left join sys_role r on sur.role_id = r.role_id
|
||||
left join sys_role r on rm.role_id = r.role_id
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/workflow/logs \
|
||||
/ruoyi/workflow/temp \
|
||||
|
|
@ -9,6 +11,10 @@ RUN mkdir -p /ruoyi/workflow/logs \
|
|||
|
||||
WORKDIR /ruoyi/workflow
|
||||
|
||||
# 补全alpine镜像缺失字体问题
|
||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||
RUN apk add fontconfig && apk add --update ttf-dejavu && fc-cache --force
|
||||
|
||||
ENV SERVER_PORT=9205 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
|
||||
|
||||
EXPOSE ${SERVER_PORT}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package org.dromara.workflow.flowable.cmd;
|
|||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.flowable.common.engine.impl.interceptor.Command;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandContext;
|
||||
import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
|
||||
|
|
@ -59,7 +60,7 @@ public class DeleteSequenceMultiInstanceCmd implements Command<Void> {
|
|||
}
|
||||
List<Long> userIdList = new ArrayList<>();
|
||||
userIds.forEach(e -> {
|
||||
Long userId = assignees.stream().filter(id -> ObjectUtil.equals(id, e)).findFirst().orElse(null);
|
||||
Long userId = StreamUtils.findFirst(assignees, id -> ObjectUtil.equals(id, e));
|
||||
if (userId == null) {
|
||||
userIdList.add(e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -259,23 +259,23 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|||
List<HistoricActivityInstance> highLightedFlowList = QueryUtils.hisActivityInstanceQuery(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list();
|
||||
for (HistoricActivityInstance tempActivity : highLightedFlowList) {
|
||||
Map<String, Object> task = new HashMap<>();
|
||||
if (!FlowConstant.SEQUENCE_FLOW.equals(tempActivity.getActivityType()) &&
|
||||
!FlowConstant.PARALLEL_GATEWAY.equals(tempActivity.getActivityType()) &&
|
||||
!FlowConstant.EXCLUSIVE_GATEWAY.equals(tempActivity.getActivityType()) &&
|
||||
!FlowConstant.INCLUSIVE_GATEWAY.equals(tempActivity.getActivityType())
|
||||
) {
|
||||
task.put("key", tempActivity.getActivityId());
|
||||
task.put("completed", tempActivity.getEndTime() != null);
|
||||
task.put("activityType", tempActivity.getActivityType());
|
||||
taskList.add(task);
|
||||
switch (tempActivity.getActivityType()) {
|
||||
case FlowConstant.SEQUENCE_FLOW, FlowConstant.PARALLEL_GATEWAY,
|
||||
FlowConstant.EXCLUSIVE_GATEWAY, FlowConstant.INCLUSIVE_GATEWAY -> {}
|
||||
default -> {
|
||||
task.put("key", tempActivity.getActivityId());
|
||||
task.put("completed", tempActivity.getEndTime() != null);
|
||||
task.put("activityType", tempActivity.getActivityType());
|
||||
taskList.add(task);
|
||||
}
|
||||
}
|
||||
}
|
||||
ProcessInstance processInstance = QueryUtils.instanceQuery(processInstanceId).singleResult();
|
||||
if (processInstance != null) {
|
||||
taskList = taskList.stream().filter(e -> !e.get("activityType").equals(FlowConstant.END_EVENT)).collect(Collectors.toList());
|
||||
taskList = StreamUtils.filter(taskList, e -> !e.get("activityType").equals(FlowConstant.END_EVENT));
|
||||
}
|
||||
//查询出运行中节点
|
||||
List<Map<String, Object>> runtimeNodeList = taskList.stream().filter(e -> !(Boolean) e.get("completed")).collect(Collectors.toList());
|
||||
List<Map<String, Object>> runtimeNodeList = StreamUtils.filter(taskList, e -> !(Boolean) e.get("completed"));
|
||||
if (CollUtil.isNotEmpty(runtimeNodeList)) {
|
||||
Iterator<Map<String, Object>> iterator = taskList.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
|
|
|
|||
|
|
@ -263,7 +263,8 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|||
String userId = String.valueOf(LoginHelper.getUserId());
|
||||
queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus());
|
||||
queryWrapper.eq(TenantHelper.isEnable(), "t.tenant_id_", TenantHelper.getTenantId());
|
||||
queryWrapper.and(w1 -> w1.eq("t.assignee_", userId).or(w2 -> w2.isNull("t.assignee_").apply("exists ( select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' " + "and (LINK.USER_ID_ = {0} or ( LINK.GROUP_ID_ IN " + getInParam(roleIds) + " ) ))", userId)));
|
||||
String ids = StreamUtils.join(roleIds, x -> "'" + x + "'");
|
||||
queryWrapper.and(w1 -> w1.eq("t.assignee_", userId).or(w2 -> w2.isNull("t.assignee_").apply("exists ( select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' and (LINK.USER_ID_ = {0} or ( LINK.GROUP_ID_ IN ({1}) ) ))", userId, ids)));
|
||||
if (StringUtils.isNotBlank(taskBo.getName())) {
|
||||
queryWrapper.like("t.name_", taskBo.getName());
|
||||
}
|
||||
|
|
@ -292,19 +293,6 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
private String getInParam(List<String> param) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("(");
|
||||
for (int i = 0; i < param.size(); i++) {
|
||||
sb.append("'").append(param.get(i)).append("'");
|
||||
if (i != param.size() - 1) {
|
||||
sb.append(",");
|
||||
}
|
||||
}
|
||||
sb.append(")");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询当前租户所有待办任务
|
||||
*
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.workflow.domain.WfTaskBackNode;
|
||||
|
|
@ -56,7 +57,7 @@ public class WfTaskBackNodeServiceImpl implements IWfTaskBackNodeService {
|
|||
wfTaskBackNode.setOrderNo(0);
|
||||
wfTaskBackNodeMapper.insert(wfTaskBackNode);
|
||||
} else {
|
||||
WfTaskBackNode taskNode = list.stream().filter(e -> e.getNodeId().equals(wfTaskBackNode.getNodeId()) && e.getOrderNo() == 0).findFirst().orElse(null);
|
||||
WfTaskBackNode taskNode = StreamUtils.findFirst(list, e -> e.getNodeId().equals(wfTaskBackNode.getNodeId()) && e.getOrderNo() == 0);
|
||||
if (ObjectUtil.isEmpty(taskNode)) {
|
||||
wfTaskBackNode.setOrderNo(list.get(0).getOrderNo() + 1);
|
||||
WfTaskBackNode node = getListByInstanceIdAndNodeId(wfTaskBackNode.getInstanceId(), wfTaskBackNode.getNodeId());
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/monitor/logs
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/nacos
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/seata-server/logs \
|
||||
/ruoyi/skywalking/agent
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/sentinel-dashboard/logs \
|
||||
/ruoyi/skywalking/agent
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||
FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds
|
||||
#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds
|
||||
#FROM findepi/graalvm:java17-native
|
||||
FROM openjdk:17.0.2-oraclelinux8
|
||||
|
||||
MAINTAINER Lion Li
|
||||
LABEL maintainer="Lion Li"
|
||||
|
||||
RUN mkdir -p /ruoyi/snailjob/logs
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue