!182 发布 2.2.0

Merge pull request !182 from 疯狂的狮子Li/dev
2.X
疯狂的狮子Li 2024-07-09 02:00:21 +00:00 committed by Gitee
commit 71b6b04d62
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
60 changed files with 457 additions and 170 deletions

View File

@ -100,8 +100,8 @@ spring:
redis:
host: localhost
port: 6379
# 密码(如没有密码请注释掉)
# password:
# redis 密码必须配置
password: ruoyi123
database: 0
timeout: 10s
ssl.enabled: false

View File

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

View File

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

View File

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

View File

@ -15,7 +15,7 @@
</description>
<properties>
<revision>2.2.0-BETA2</revision>
<revision>2.2.0</revision>
</properties>
<dependencyManagement>

View File

@ -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("服务调用异常 -> 降级处理");

View File

@ -15,5 +15,10 @@ public interface RemoteMessageService {
*/
void publishMessage(Long sessionKey, String message);
/**
* ()
*
* @param message
*/
void publishAll(String message);
}

View File

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

View File

@ -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}

View File

@ -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("对不起,你没有权限登录当前租户!");
}

View File

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

View File

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

View File

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

View File

@ -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
*

View File

@ -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()) {

View File

@ -12,7 +12,7 @@
<artifactId>ruoyi-common-dubbo</artifactId>
<description>
ruoyi-common-dubbo
ruoyi-common-dubbo RPC服务
</description>
<dependencies>

View File

@ -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 JSONnullnull
* @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 {
}
}
/**
* JSONDict
*
* @param text JSON
* @return DictJSONnull
* @throws RuntimeException IO
*/
public static Dict parseMap(String text) {
if (StringUtils.isBlank(text)) {
return null;
@ -88,6 +129,13 @@ public class JsonUtils {
}
}
/**
* JSONDict
*
* @param text JSON
* @return Dictnull
* @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<>();

View File

@ -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;
}
}

View File

@ -11,7 +11,7 @@
<artifactId>ruoyi-common-nacos</artifactId>
<description>
ruoyi-common-nacos
ruoyi-common-nacos 配置中心
</description>
<dependencies>

View File

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

View File

@ -12,7 +12,7 @@
<artifactId>ruoyi-common-satoken</artifactId>
<description>
ruoyi-common-satoken
ruoyi-common-satoken 权限认证服务
</description>
<dependencies>

View File

@ -193,7 +193,11 @@ public class LoginHelper {
* @return
*/
public static boolean isLogin() {
return getLoginUser() != null;
try {
return getLoginUser() != null;
} catch (Exception e) {
return false;
}
}
}

View File

@ -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()) {

View File

@ -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;
}
}
/**

View File

@ -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 \

View File

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

View File

@ -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);
}

View File

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

View File

@ -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;
}

View File

@ -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 \

View File

@ -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 \

View File

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

View File

@ -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);
}

View File

@ -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 \

View File

@ -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())) {

View File

@ -103,6 +103,11 @@ public class SysUserBo extends BaseEntity {
*/
private Long roleId;
/**
* ()
*/
private String excludeUserIds;
public SysUserBo(Long userId) {
this.userId = userId;
}

View File

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

View File

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

View File

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

View File

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

View File

@ -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);
}
/**
* IDID
*
* @param roleIds ids
* @return ids
*/
@Override
public List<Long> selectUserIdsByRoleIds(List<Long> roleIds) {
return userService.selectUserIdsByRoleIds(roleIds);

View File

@ -100,13 +100,6 @@ public interface ISysDeptService {
*/
boolean checkDeptNameUnique(SysDeptBo dept);
/**
*
*
* @param dept
* @return
*/
boolean checkDeptCategoryUnique(SysDeptBo dept);
/**
*

View File

@ -12,45 +12,60 @@ import java.util.List;
*/
public interface ISysSocialService {
/**
*
* ID
*
* @param id
* @return IDSysSocialVonull
*/
SysSocialVo queryById(String id);
/**
*
*
* @param bo SysSocialBo
* @return SysSocialVo
*/
List<SysSocialVo> queryList(SysSocialBo bo);
/**
*
* ID
*
* @param userId
* @return IDSysSocialVo
*/
List<SysSocialVo> queryListByUserId(Long userId);
/**
*
*
* @param bo SysSocialBo
* @return truefalse
*/
Boolean insertByBo(SysSocialBo bo);
/**
*
*
* @param bo SysSocialBo
* @return truefalse
*/
Boolean updateByBo(SysSocialBo bo);
/**
*
*
* @param id
* @return truefalse
*/
Boolean deleteWithValidById(Long id);
/**
* authId SysSocial SysUser SysSocialAuthResult
* ID
*
* @param authId ID
* @return SysSocial
* @return SysSocialSysSocialVo
*/
List<SysSocialVo> selectByAuthId(String authId);
}

View File

@ -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;
}
/**
*
*

View File

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

View File

@ -26,9 +26,11 @@ public class SysSocialServiceImpl implements ISysSocialService {
private final SysSocialMapper baseMapper;
/**
*
* ID
*
* @param id
* @return IDSysSocialVonull
*/
@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 IDSysSocialVo
*/
@Override
public List<SysSocialVo> queryListByUserId(Long userId) {
return baseMapper.selectVoList(new LambdaQueryWrapper<SysSocial>().eq(SysSocial::getUserId, userId));
}
/**
*
*
*
* @param bo SysSocialBo
* @return truefalse
*/
@Override
public Boolean insertByBo(SysSocialBo bo) {
@ -73,6 +86,9 @@ public class SysSocialServiceImpl implements ISysSocialService {
/**
*
*
* @param bo SysSocialBo
* @return truefalse
*/
@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 truefalse
*/
@Override
public Boolean deleteWithValidById(Long id) {
return baseMapper.deleteById(id) > 0;
}
/**
* authId
* ID
*
* @param authId id
* @return
* @param authId ID
* @return SysSocialSysSocialVo
*/
@Override
public List<SysSocialVo> selectByAuthId(String authId) {

View File

@ -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;
}

View File

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

View File

@ -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}

View File

@ -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);
}

View File

@ -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()) {

View File

@ -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();
}
/**
*
*

View File

@ -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());

View File

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

View File

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

View File

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

View File

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

View File

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