!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: redis:
host: localhost host: localhost
port: 6379 port: 6379
# 密码(如没有密码请注释掉) # redis 密码必须配置
# password: password: ruoyi123
database: 0 database: 0
timeout: 10s timeout: 10s
ssl.enabled: false ssl.enabled: false

View File

@ -92,6 +92,8 @@ spring:
server-addr: ${spring.cloud.nacos.server-addr} server-addr: ${spring.cloud.nacos.server-addr}
dataId: sentinel-${spring.application.name}.json dataId: sentinel-${spring.application.name}.json
groupId: ${spring.cloud.nacos.config.group} groupId: ${spring.cloud.nacos.config.group}
username: ${spring.cloud.nacos.username}
password: ${spring.cloud.nacos.password}
namespace: ${spring.profiles.active} namespace: ${spring.profiles.active}
data-type: json data-type: json
rule-type: gw-flow rule-type: gw-flow

View File

@ -1,6 +1,6 @@
FROM rabbitmq:3.13.3-management FROM rabbitmq:3.13.3-management
MAINTAINER Lion Li LABEL maintainer="Lion Li"
ADD ./rabbitmq_delayed_message_exchange-3.13.0.ez /plugins ADD ./rabbitmq_delayed_message_exchange-3.13.0.ez /plugins

View File

@ -13,7 +13,7 @@
<description>RuoYi-Cloud-Plus微服务系统</description> <description>RuoYi-Cloud-Plus微服务系统</description>
<properties> <properties>
<revision>2.2.0-BETA2</revision> <revision>2.2.0</revision>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>17</java.version> <java.version>17</java.version>

View File

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

View File

@ -20,6 +20,7 @@ public class RemoteFileServiceMock implements RemoteFileService {
* @param file * @param file
* @return * @return
*/ */
@Override
public RemoteFile upload(String name, String originalFilename, String contentType, byte[] file) { public RemoteFile upload(String name, String originalFilename, String contentType, byte[] file) {
log.warn("服务调用异常 -> 降级处理"); log.warn("服务调用异常 -> 降级处理");
return null; return null;
@ -31,11 +32,18 @@ public class RemoteFileServiceMock implements RemoteFileService {
* @param ossIds ossId * @param ossIds ossId
* @return url * @return url
*/ */
@Override
public String selectUrlByIds(String ossIds) { public String selectUrlByIds(String ossIds) {
log.warn("服务调用异常 -> 降级处理"); log.warn("服务调用异常 -> 降级处理");
return StringUtils.EMPTY; return StringUtils.EMPTY;
} }
/**
* ossId
*
* @param ossIds ossId
* @return
*/
@Override @Override
public List<RemoteFile> selectByIds(String ossIds) { public List<RemoteFile> selectByIds(String ossIds) {
log.warn("服务调用异常 -> 降级处理"); log.warn("服务调用异常 -> 降级处理");

View File

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

View File

@ -20,6 +20,7 @@ public class RemoteMessageServiceStub implements RemoteMessageService {
* @param sessionKey session id * @param sessionKey session id
* @param message * @param message
*/ */
@Override
public void publishMessage(Long sessionKey, String message) { public void publishMessage(Long sessionKey, String message) {
try { try {
remoteMessageService.publishMessage(sessionKey, message); remoteMessageService.publishMessage(sessionKey, message);
@ -28,6 +29,12 @@ public class RemoteMessageServiceStub implements RemoteMessageService {
} }
} }
/**
* ()
*
* @param message
*/
@Override
public void publishAll(String message) { public void publishAll(String message) {
try { try {
remoteMessageService.publishAll(message); 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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/auth/logs \ RUN mkdir -p /ruoyi/auth/logs \
/ruoyi/auth/temp \ /ruoyi/auth/temp \
@ -9,6 +11,10 @@ RUN mkdir -p /ruoyi/auth/logs \
WORKDIR /ruoyi/auth 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="" ENV SERVER_PORT=9210 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
EXPOSE ${SERVER_PORT} 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.domain.vo.LoginVo;
import org.dromara.auth.form.SocialLoginBody; import org.dromara.auth.form.SocialLoginBody;
import org.dromara.auth.service.IAuthStrategy; import org.dromara.auth.service.IAuthStrategy;
import org.dromara.auth.service.SysLoginService;
import org.dromara.common.core.exception.ServiceException; 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.core.utils.ValidatorUtils;
import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
@ -43,7 +43,6 @@ import java.util.Optional;
public class SocialAuthStrategy implements IAuthStrategy { public class SocialAuthStrategy implements IAuthStrategy {
private final SocialProperties socialProperties; private final SocialProperties socialProperties;
private final SysLoginService loginService;
@DubboReference @DubboReference
private RemoteSocialService remoteSocialService; private RemoteSocialService remoteSocialService;
@ -83,7 +82,7 @@ public class SocialAuthStrategy implements IAuthStrategy {
} }
RemoteSocialVo socialVo; RemoteSocialVo socialVo;
if (TenantHelper.isEnable()) { 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()) { if (opt.isEmpty()) {
throw new ServiceException("对不起,你没有权限登录当前租户!"); throw new ServiceException("对不起,你没有权限登录当前租户!");
} }

View File

@ -14,7 +14,7 @@
</description> </description>
<properties> <properties>
<revision>2.2.0-BETA2</revision> <revision>2.2.0</revision>
<spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version> <spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
<sentinel.version>1.8.8</sentinel.version> <sentinel.version>1.8.8</sentinel.version>
<seata.version>1.7.1</seata.version> <seata.version>1.7.1</seata.version>

View File

@ -14,7 +14,7 @@
</description> </description>
<properties> <properties>
<revision>2.2.0-BETA2</revision> <revision>2.2.0</revision>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
@ -40,6 +40,7 @@
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 权限认证服务 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-satoken</artifactId> <artifactId>ruoyi-common-satoken</artifactId>
@ -88,91 +89,105 @@
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 定时任务 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-job</artifactId> <artifactId>ruoyi-common-job</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- RPC服务 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-dubbo</artifactId> <artifactId>ruoyi-common-dubbo</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 分布式事务 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-seata</artifactId> <artifactId>ruoyi-common-seata</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 自定义负载均衡 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-loadbalancer</artifactId> <artifactId>ruoyi-common-loadbalancer</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- oss服务 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-oss</artifactId> <artifactId>ruoyi-common-oss</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 限流 --> <!-- 限流功能 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-ratelimiter</artifactId> <artifactId>ruoyi-common-ratelimiter</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 幂等功能 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-idempotent</artifactId> <artifactId>ruoyi-common-idempotent</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 邮件模块 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-mail</artifactId> <artifactId>ruoyi-common-mail</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 短信模块 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sms</artifactId> <artifactId>ruoyi-common-sms</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- logstash日志推送模块 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-logstash</artifactId> <artifactId>ruoyi-common-logstash</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- ES搜索引擎服务 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-elasticsearch</artifactId> <artifactId>ruoyi-common-elasticsearch</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 限流模块 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sentinel</artifactId> <artifactId>ruoyi-common-sentinel</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- skywalking日志收集模块 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-skylog</artifactId> <artifactId>ruoyi-common-skylog</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- prometheus监控 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-prometheus</artifactId> <artifactId>ruoyi-common-prometheus</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 通用翻译功能 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-translation</artifactId> <artifactId>ruoyi-common-translation</artifactId>
@ -193,6 +208,7 @@
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 数据加解密模块 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-encrypt</artifactId> <artifactId>ruoyi-common-encrypt</artifactId>
@ -206,24 +222,28 @@
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- websocket模块 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-websocket</artifactId> <artifactId>ruoyi-common-websocket</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 授权认证 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-social</artifactId> <artifactId>ruoyi-common-social</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 配置中心 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-nacos</artifactId> <artifactId>ruoyi-common-nacos</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 消息总线模块 -->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-bus</artifactId> <artifactId>ruoyi-common-bus</artifactId>

View File

@ -12,7 +12,7 @@
<artifactId>ruoyi-common-bus</artifactId> <artifactId>ruoyi-common-bus</artifactId>
<description> <description>
ruoyi-common-bus 模块 ruoyi-common-bus 消息总线模块
</description> </description>
<dependencies> <dependencies>
@ -25,6 +25,11 @@
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>--> <!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-bus-kafka</artifactId>--> <!-- <artifactId>spring-cloud-starter-bus-kafka</artifactId>-->
<!-- </dependency>-->
<!-- rocketmq -->
<!-- <dependency>-->
<!-- <groupId>com.alibaba.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-bus-rocketmq</artifactId>-->
<!-- </dependency>--> <!-- </dependency>-->
</dependencies> </dependencies>
</project> </project>

View File

@ -34,6 +34,34 @@ public class StreamUtils {
return collection.stream().filter(function).collect(Collectors.toList()); 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 * collection
* *

View File

@ -18,6 +18,13 @@ public class ValidatorUtils {
private static final Validator VALID = SpringUtils.getBean(Validator.class); private static final Validator VALID = SpringUtils.getBean(Validator.class);
/**
*
*
* @param object
* @param groups
* @throws ConstraintViolationException
*/
public static <T> void validate(T object, Class<?>... groups) { public static <T> void validate(T object, Class<?>... groups) {
Set<ConstraintViolation<T>> validate = VALID.validate(object, groups); Set<ConstraintViolation<T>> validate = VALID.validate(object, groups);
if (!validate.isEmpty()) { if (!validate.isEmpty()) {

View File

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

View File

@ -7,10 +7,10 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.exc.MismatchedInputException; 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.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@ -30,6 +30,13 @@ public class JsonUtils {
return OBJECT_MAPPER; return OBJECT_MAPPER;
} }
/**
* JSON
*
* @param object
* @return JSONnullnull
* @throws RuntimeException JSON
*/
public static String toJsonString(Object object) { public static String toJsonString(Object object) {
if (ObjectUtil.isNull(object)) { if (ObjectUtil.isNull(object)) {
return null; 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) { public static <T> T parseObject(String text, Class<T> clazz) {
if (StringUtils.isEmpty(text)) { if (StringUtils.isEmpty(text)) {
return null; 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) { public static <T> T parseObject(byte[] bytes, Class<T> clazz) {
if (ArrayUtil.isEmpty(bytes)) { if (ArrayUtil.isEmpty(bytes)) {
return null; 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) { public static <T> T parseObject(String text, TypeReference<T> typeReference) {
if (StringUtils.isBlank(text)) { if (StringUtils.isBlank(text)) {
return null; return null;
@ -74,6 +108,13 @@ public class JsonUtils {
} }
} }
/**
* JSONDict
*
* @param text JSON
* @return DictJSONnull
* @throws RuntimeException IO
*/
public static Dict parseMap(String text) { public static Dict parseMap(String text) {
if (StringUtils.isBlank(text)) { if (StringUtils.isBlank(text)) {
return null; 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) { public static List<Dict> parseArrayMap(String text) {
if (StringUtils.isBlank(text)) { if (StringUtils.isBlank(text)) {
return null; 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) { public static <T> List<T> parseArray(String text, Class<T> clazz) {
if (StringUtils.isEmpty(text)) { if (StringUtils.isEmpty(text)) {
return new ArrayList<>(); 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> <artifactId>ruoyi-common-nacos</artifactId>
<description> <description>
ruoyi-common-nacos ruoyi-common-nacos 配置中心
</description> </description>
<dependencies> <dependencies>

View File

@ -65,6 +65,12 @@ public class RedisUtils {
consumer.accept(msg); consumer.accept(msg);
} }
/**
*
*
* @param channelKey key
* @param msg
*/
public static <T> void publish(String channelKey, T msg) { public static <T> void publish(String channelKey, T msg) {
RTopic topic = CLIENT.getTopic(channelKey); RTopic topic = CLIENT.getTopic(channelKey);
topic.publish(msg); topic.publish(msg);

View File

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

View File

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

View File

@ -16,15 +16,12 @@ import org.springframework.core.task.VirtualThreadTaskExecutor;
@AutoConfiguration @AutoConfiguration
public class UndertowConfig implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> { public class UndertowConfig implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {
/**
* Undertow websocket
*/
@Override @Override
public void customize(UndertowServletWebServerFactory factory) { public void customize(UndertowServletWebServerFactory factory) {
// 默认不直接分配内存 如果项目中使用了 websocket 建议直接分配 // 默认不直接分配内存 如果项目中使用了 websocket 建议直接分配
factory.addDeploymentInfoCustomizers(deploymentInfo -> { factory.addDeploymentInfoCustomizers(deploymentInfo -> {
WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo(); WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo();
webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(false, 512)); webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(true, 1024));
deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo); deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo);
// 使用虚拟线程 // 使用虚拟线程
if (SpringUtils.isVirtual()) { if (SpringUtils.isVirtual()) {

View File

@ -1,5 +1,6 @@
package org.dromara.common.websocket.interceptor; package org.dromara.common.websocket.interceptor;
import cn.dev33.satoken.exception.NotLoginException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
@ -31,9 +32,14 @@ public class PlusWebSocketInterceptor implements HandshakeInterceptor {
*/ */
@Override @Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) { public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
try {
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
attributes.put(LOGIN_USER_KEY, loginUser); attributes.put(LOGIN_USER_KEY, loginUser);
return true; 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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/gateway/logs \ RUN mkdir -p /ruoyi/gateway/logs \
/ruoyi/gateway/temp \ /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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/gen/logs RUN mkdir -p /ruoyi/gen/logs

View File

@ -21,33 +21,53 @@ public interface I${ClassName}Service {
/** /**
* 查询${functionName} * 查询${functionName}
*
* @param ${pkColumn.javaField} 主键
* @return ${functionName}
*/ */
${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}); ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField});
#if($table.crud) #if($table.crud)
/** /**
* 查询${functionName}列表 * 分页查询${functionName}列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return ${functionName}分页列表
*/ */
TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery); TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery);
#end #end
/** /**
* 查询${functionName}列表 * 查询符合条件的${functionName}列表
*
* @param bo 查询条件
* @return ${functionName}列表
*/ */
List<${ClassName}Vo> queryList(${ClassName}Bo bo); List<${ClassName}Vo> queryList(${ClassName}Bo bo);
/** /**
* 新增${functionName} * 新增${functionName}
*
* @param bo ${functionName}
* @return 是否新增成功
*/ */
Boolean insertByBo(${ClassName}Bo bo); Boolean insertByBo(${ClassName}Bo bo);
/** /**
* 修改${functionName} * 修改${functionName}
*
* @param bo ${functionName}
* @return 是否修改成功
*/ */
Boolean updateByBo(${ClassName}Bo bo); Boolean updateByBo(${ClassName}Bo bo);
/** /**
* 校验并批量删除${functionName}信息 * 校验并批量删除${functionName}信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/ */
Boolean deleteWithValidByIds(Collection<${pkColumn.javaType}> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<${pkColumn.javaType}> ids, Boolean isValid);
} }

View File

@ -35,6 +35,9 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
/** /**
* 查询${functionName} * 查询${functionName}
*
* @param ${pkColumn.javaField} 主键
* @return ${functionName}
*/ */
@Override @Override
public ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}){ public ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}){
@ -43,7 +46,11 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
#if($table.crud) #if($table.crud)
/** /**
* 查询${functionName}列表 * 分页查询${functionName}列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return ${functionName}分页列表
*/ */
@Override @Override
public TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery) { public TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery) {
@ -54,7 +61,10 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
#end #end
/** /**
* 查询${functionName}列表 * 查询符合条件的${functionName}列表
*
* @param bo 查询条件
* @return ${functionName}列表
*/ */
@Override @Override
public List<${ClassName}Vo> queryList(${ClassName}Bo bo) { public List<${ClassName}Vo> queryList(${ClassName}Bo bo) {
@ -91,6 +101,9 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
/** /**
* 新增${functionName} * 新增${functionName}
*
* @param bo ${functionName}
* @return 是否新增成功
*/ */
@Override @Override
public Boolean insertByBo(${ClassName}Bo bo) { public Boolean insertByBo(${ClassName}Bo bo) {
@ -106,6 +119,9 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
/** /**
* 修改${functionName} * 修改${functionName}
*
* @param bo ${functionName}
* @return 是否修改成功
*/ */
@Override @Override
public Boolean updateByBo(${ClassName}Bo bo) { 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 @Override
public Boolean deleteWithValidByIds(Collection<${pkColumn.javaType}> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<${pkColumn.javaType}> ids, Boolean isValid) {

View File

@ -1,6 +1,6 @@
export interface ${BusinessName}VO { export interface ${BusinessName}VO {
#foreach ($column in $columns) #foreach ($column in $columns)
#if($column.insert || $column.edit) #if($column.list)
/** /**
* $column.columnComment * $column.columnComment
*/ */
@ -35,6 +35,7 @@ export interface ${BusinessName}Form extends BaseEntity {
} }
export interface ${BusinessName}Query #if(!${treeCode})extends PageQuery #end{ export interface ${BusinessName}Query #if(!${treeCode})extends PageQuery #end{
#foreach ($column in $columns) #foreach ($column in $columns)
#if($column.query) #if($column.query)
/** /**
@ -47,4 +48,11 @@ export interface ${BusinessName}Query #if(!${treeCode})extends PageQuery #end{
#end #end
#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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/job/logs \ RUN mkdir -p /ruoyi/job/logs \
/ruoyi/job/temp \ /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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/resource/logs \ RUN mkdir -p /ruoyi/resource/logs \
/ruoyi/resource/temp \ /ruoyi/resource/temp \

View File

@ -81,6 +81,7 @@ public class RemoteFileServiceImpl implements RemoteFileService {
* @param ossIds ossId * @param ossIds ossId
* @return * @return
*/ */
@Override
public List<RemoteFile> selectByIds(String ossIds){ public List<RemoteFile> selectByIds(String ossIds){
List<SysOssVo> sysOssVos = sysOssService.listByIds(StringUtils.splitTo(ossIds, Convert::toLong)); List<SysOssVo> sysOssVos = sysOssService.listByIds(StringUtils.splitTo(ossIds, Convert::toLong));
return MapstructUtils.convert(sysOssVos, RemoteFile.class); return MapstructUtils.convert(sysOssVos, RemoteFile.class);

View File

@ -26,6 +26,7 @@ public class RemoteMailServiceImpl implements RemoteMailService {
* @param subject * @param subject
* @param text * @param text
*/ */
@Override
public void send(String to, String subject, String text) throws ServiceException { public void send(String to, String subject, String text) throws ServiceException {
MailUtils.sendText(to, subject, text); 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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/system/logs \ RUN mkdir -p /ruoyi/system/logs \
/ruoyi/system/temp \ /ruoyi/system/temp \

View File

@ -75,8 +75,6 @@ public class SysDeptController extends BaseController {
public R<Void> add(@Validated @RequestBody SysDeptBo dept) { public R<Void> add(@Validated @RequestBody SysDeptBo dept) {
if (!deptService.checkDeptNameUnique(dept)) { if (!deptService.checkDeptNameUnique(dept)) {
return R.fail("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在"); return R.fail("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
} else if (StringUtils.isNotBlank(dept.getDeptCategory()) && !deptService.checkDeptCategoryUnique(dept)) {
return R.fail("新增部门'" + dept.getDeptName() + "'失败,部门类别编码已存在");
} }
return toAjax(deptService.insertDept(dept)); return toAjax(deptService.insertDept(dept));
} }
@ -92,8 +90,6 @@ public class SysDeptController extends BaseController {
deptService.checkDeptDataScope(deptId); deptService.checkDeptDataScope(deptId);
if (!deptService.checkDeptNameUnique(dept)) { if (!deptService.checkDeptNameUnique(dept)) {
return R.fail("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); 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)) { } else if (dept.getParentId().equals(deptId)) {
return R.fail("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); return R.fail("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
} else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())) { } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())) {

View File

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

View File

@ -18,6 +18,12 @@ public class RemoteDeptServiceImpl implements RemoteDeptService {
private final ISysDeptService sysDeptService; private final ISysDeptService sysDeptService;
/**
* ID
*
* @param deptIds ID
* @return
*/
@Override @Override
public String selectDeptNameByIds(String deptIds) { public String selectDeptNameByIds(String deptIds) {
return sysDeptService.selectDeptNameByIds(deptIds); return sysDeptService.selectDeptNameByIds(deptIds);

View File

@ -23,7 +23,12 @@ public class RemoteDictServiceImpl implements RemoteDictService {
private final ISysDictTypeService sysDictTypeService; private final ISysDictTypeService sysDictTypeService;
/**
*
*
* @param dictType
* @return
*/
@Override @Override
public List<RemoteDictDataVo> selectDictDataByType(String dictType) { public List<RemoteDictDataVo> selectDictDataByType(String dictType) {
List<SysDictDataVo> list = sysDictTypeService.selectDictDataByType(dictType); List<SysDictDataVo> list = sysDictTypeService.selectDictDataByType(dictType);

View File

@ -26,6 +26,11 @@ public class RemoteLogServiceImpl implements RemoteLogService {
private final ISysOperLogService operLogService; private final ISysOperLogService operLogService;
private final ISysLogininforService logininforService; private final ISysLogininforService logininforService;
/**
*
*
* @param remoteOperLogBo
*/
@Async @Async
@Override @Override
public void saveLog(RemoteOperLogBo remoteOperLogBo) { public void saveLog(RemoteOperLogBo remoteOperLogBo) {
@ -33,6 +38,11 @@ public class RemoteLogServiceImpl implements RemoteLogService {
operLogService.insertOperlog(sysOperLogBo); operLogService.insertOperlog(sysOperLogBo);
} }
/**
* 访
*
* @param remoteLogininforBo 访
*/
@Async @Async
@Override @Override
public void saveLogininfor(RemoteLogininforBo remoteLogininforBo) { public void saveLogininfor(RemoteLogininforBo remoteLogininforBo) {

View File

@ -26,7 +26,10 @@ public class RemoteSocialServiceImpl implements RemoteSocialService {
private final ISysSocialService sysSocialService; private final ISysSocialService sysSocialService;
/** /**
* authId * authId
*
* @param authId id
* @return
*/ */
@Override @Override
public List<RemoteSocialVo> selectByAuthId(String authId) { public List<RemoteSocialVo> selectByAuthId(String authId) {
@ -34,6 +37,11 @@ public class RemoteSocialServiceImpl implements RemoteSocialService {
return MapstructUtils.convert(list, RemoteSocialVo.class); return MapstructUtils.convert(list, RemoteSocialVo.class);
} }
/**
*
*
* @param bo
*/
@Override @Override
public List<RemoteSocialVo> queryList(RemoteSocialBo bo) { public List<RemoteSocialVo> queryList(RemoteSocialBo bo) {
SysSocialBo params = MapstructUtils.convert(bo, SysSocialBo.class); SysSocialBo params = MapstructUtils.convert(bo, SysSocialBo.class);
@ -43,6 +51,8 @@ public class RemoteSocialServiceImpl implements RemoteSocialService {
/** /**
* *
*
* @param bo
*/ */
@Override @Override
public void insertByBo(RemoteSocialBo bo) { public void insertByBo(RemoteSocialBo bo) {
@ -51,6 +61,8 @@ public class RemoteSocialServiceImpl implements RemoteSocialService {
/** /**
* *
*
* @param bo
*/ */
@Override @Override
public void updateByBo(RemoteSocialBo bo) { public void updateByBo(RemoteSocialBo bo) {
@ -59,6 +71,9 @@ public class RemoteSocialServiceImpl implements RemoteSocialService {
/** /**
* *
*
* @param socialId ID
* @return
*/ */
@Override @Override
public Boolean deleteWithValidById(Long socialId) { public Boolean deleteWithValidById(Long socialId) {

View File

@ -46,6 +46,13 @@ public class RemoteUserServiceImpl implements RemoteUserService {
private final ISysDeptService deptService; private final ISysDeptService deptService;
private final SysUserMapper userMapper; private final SysUserMapper userMapper;
/**
*
*
* @param username
* @param tenantId id
* @return
*/
@Override @Override
public LoginUser getUserInfo(String username, String tenantId) throws UserException { public LoginUser getUserInfo(String username, String tenantId) throws UserException {
return TenantHelper.dynamic(tenantId, () -> { return TenantHelper.dynamic(tenantId, () -> {
@ -62,6 +69,13 @@ public class RemoteUserServiceImpl implements RemoteUserService {
}); });
} }
/**
* id
*
* @param userId id
* @param tenantId id
* @return
*/
@Override @Override
public LoginUser getUserInfo(Long userId, String tenantId) throws UserException { public LoginUser getUserInfo(Long userId, String tenantId) throws UserException {
return TenantHelper.dynamic(tenantId, () -> { return TenantHelper.dynamic(tenantId, () -> {
@ -78,6 +92,13 @@ public class RemoteUserServiceImpl implements RemoteUserService {
}); });
} }
/**
*
*
* @param phonenumber
* @param tenantId id
* @return
*/
@Override @Override
public LoginUser getUserInfoByPhonenumber(String phonenumber, String tenantId) throws UserException { public LoginUser getUserInfoByPhonenumber(String phonenumber, String tenantId) throws UserException {
return TenantHelper.dynamic(tenantId, () -> { return TenantHelper.dynamic(tenantId, () -> {
@ -94,6 +115,13 @@ public class RemoteUserServiceImpl implements RemoteUserService {
}); });
} }
/**
*
*
* @param email
* @param tenantId id
* @return
*/
@Override @Override
public LoginUser getUserInfoByEmail(String email, String tenantId) throws UserException { public LoginUser getUserInfoByEmail(String email, String tenantId) throws UserException {
return TenantHelper.dynamic(tenantId, () -> { return TenantHelper.dynamic(tenantId, () -> {
@ -110,6 +138,12 @@ public class RemoteUserServiceImpl implements RemoteUserService {
}); });
} }
/**
* openid
*
* @param openid openid
* @return
*/
@Override @Override
public XcxLoginUser getUserInfoByOpenid(String openid) throws UserException { public XcxLoginUser getUserInfoByOpenid(String openid) throws UserException {
// todo 自行实现 userService.selectUserByOpenid(openid); // todo 自行实现 userService.selectUserByOpenid(openid);
@ -131,6 +165,12 @@ public class RemoteUserServiceImpl implements RemoteUserService {
return loginUser; return loginUser;
} }
/**
*
*
* @param remoteUserBo
* @return
*/
@Override @Override
public Boolean registerUserInfo(RemoteUserBo remoteUserBo) throws UserException, ServiceException { public Boolean registerUserInfo(RemoteUserBo remoteUserBo) throws UserException, ServiceException {
SysUserBo sysUserBo = MapstructUtils.convert(remoteUserBo, SysUserBo.class); SysUserBo sysUserBo = MapstructUtils.convert(remoteUserBo, SysUserBo.class);
@ -219,7 +259,7 @@ public class RemoteUserServiceImpl implements RemoteUserService {
loginUser.setRolePermission(permissionService.getRolePermission(userVo.getUserId())); loginUser.setRolePermission(permissionService.getRolePermission(userVo.getUserId()));
TenantHelper.dynamic(userVo.getTenantId(), () -> { TenantHelper.dynamic(userVo.getTenantId(), () -> {
SysDeptVo dept = null; SysDeptVo dept = null;
if (ObjectUtil.isNotNull(userVo.getUserId())) { if (ObjectUtil.isNotNull(userVo.getDeptId())) {
dept = deptService.selectDeptById(userVo.getDeptId()); dept = deptService.selectDeptById(userVo.getDeptId());
} }
loginUser.setDeptName(ObjectUtil.isNull(dept) ? "" : dept.getDeptName()); loginUser.setDeptName(ObjectUtil.isNull(dept) ? "" : dept.getDeptName());
@ -246,12 +286,24 @@ public class RemoteUserServiceImpl implements RemoteUserService {
DataPermissionHelper.ignore(() -> userMapper.updateById(sysUser)); DataPermissionHelper.ignore(() -> userMapper.updateById(sysUser));
} }
/**
* ID
*
* @param userIds ids
* @return
*/
@Override @Override
public List<RemoteUserVo> selectListByIds(List<Long> userIds) { public List<RemoteUserVo> selectListByIds(List<Long> userIds) {
List<SysUserVo> sysUserVos = userService.selectUserByIds(userIds, null); List<SysUserVo> sysUserVos = userService.selectUserByIds(userIds, null);
return MapstructUtils.convert(sysUserVos, RemoteUserVo.class); return MapstructUtils.convert(sysUserVos, RemoteUserVo.class);
} }
/**
* IDID
*
* @param roleIds ids
* @return ids
*/
@Override @Override
public List<Long> selectUserIdsByRoleIds(List<Long> roleIds) { public List<Long> selectUserIdsByRoleIds(List<Long> roleIds) {
return userService.selectUserIdsByRoleIds(roleIds); return userService.selectUserIdsByRoleIds(roleIds);

View File

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

View File

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

View File

@ -223,20 +223,6 @@ public class SysDeptServiceImpl implements ISysDeptService {
return !exist; 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 org.springframework.transaction.annotation.Transactional;
import java.util.*; 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> userRoles = baseMapper.selectRolesByUserId(userId);
List<SysRoleVo> roles = selectRoleAll(); List<SysRoleVo> roles = selectRoleAll();
// 使用HashSet提高查找效率 // 使用HashSet提高查找效率
Set<Long> userRoleIds = userRoles.stream().map(SysRoleVo::getRoleId).collect(Collectors.toSet()); Set<Long> userRoleIds = StreamUtils.toSet(userRoles, SysRoleVo::getRoleId);
for (SysRoleVo role : roles) { for (SysRoleVo role : roles) {
if (userRoleIds.contains(role.getRoleId())) { if (userRoleIds.contains(role.getRoleId())) {
role.setFlag(true); role.setFlag(true);

View File

@ -26,9 +26,11 @@ public class SysSocialServiceImpl implements ISysSocialService {
private final SysSocialMapper baseMapper; private final SysSocialMapper baseMapper;
/** /**
* * ID
*
* @param id
* @return IDSysSocialVonull
*/ */
@Override @Override
public SysSocialVo queryById(String id) { public SysSocialVo queryById(String id) {
@ -36,7 +38,10 @@ public class SysSocialServiceImpl implements ISysSocialService {
} }
/** /**
* *
*
* @param bo SysSocialBo
* @return SysSocialVo
*/ */
@Override @Override
public List<SysSocialVo> queryList(SysSocialBo bo) { public List<SysSocialVo> queryList(SysSocialBo bo) {
@ -47,14 +52,22 @@ public class SysSocialServiceImpl implements ISysSocialService {
return baseMapper.selectVoList(lqw); return baseMapper.selectVoList(lqw);
} }
/**
* ID
*
* @param userId
* @return IDSysSocialVo
*/
@Override @Override
public List<SysSocialVo> queryListByUserId(Long userId) { public List<SysSocialVo> queryListByUserId(Long userId) {
return baseMapper.selectVoList(new LambdaQueryWrapper<SysSocial>().eq(SysSocial::getUserId, userId)); return baseMapper.selectVoList(new LambdaQueryWrapper<SysSocial>().eq(SysSocial::getUserId, userId));
} }
/** /**
* *
*
* @param bo SysSocialBo
* @return truefalse
*/ */
@Override @Override
public Boolean insertByBo(SysSocialBo bo) { public Boolean insertByBo(SysSocialBo bo) {
@ -73,6 +86,9 @@ public class SysSocialServiceImpl implements ISysSocialService {
/** /**
* *
*
* @param bo SysSocialBo
* @return truefalse
*/ */
@Override @Override
public Boolean updateByBo(SysSocialBo bo) { public Boolean updateByBo(SysSocialBo bo) {
@ -81,7 +97,6 @@ public class SysSocialServiceImpl implements ISysSocialService {
return baseMapper.updateById(update) > 0; return baseMapper.updateById(update) > 0;
} }
/** /**
* *
*/ */
@ -89,21 +104,22 @@ public class SysSocialServiceImpl implements ISysSocialService {
//TODO 做一些数据校验,如唯一约束 //TODO 做一些数据校验,如唯一约束
} }
/** /**
* *
*
* @param id
* @return truefalse
*/ */
@Override @Override
public Boolean deleteWithValidById(Long id) { public Boolean deleteWithValidById(Long id) {
return baseMapper.deleteById(id) > 0; return baseMapper.deleteById(id) > 0;
} }
/** /**
* authId * ID
* *
* @param authId id * @param authId ID
* @return * @return SysSocialSysSocialVo
*/ */
@Override @Override
public List<SysSocialVo> selectByAuthId(String authId) { public List<SysSocialVo> selectByAuthId(String authId) {

View File

@ -95,6 +95,9 @@ public class SysUserServiceImpl implements ISysUserService {
ids.add(user.getDeptId()); ids.add(user.getDeptId());
w.in("u.dept_id", ids); w.in("u.dept_id", ids);
}).orderByAsc("u.user_id"); }).orderByAsc("u.user_id");
if (StringUtils.isNotBlank(user.getExcludeUserIds())) {
wrapper.notIn("u.user_id", StringUtils.splitList(user.getExcludeUserIds()));
}
return wrapper; 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 m.perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
from sys_menu m from sys_menu m
left join sys_role_menu rm on m.menu_id = rm.menu_id 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} ${ew.getCustomSqlSegment}
</select> </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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/workflow/logs \ RUN mkdir -p /ruoyi/workflow/logs \
/ruoyi/workflow/temp \ /ruoyi/workflow/temp \
@ -9,6 +11,10 @@ RUN mkdir -p /ruoyi/workflow/logs \
WORKDIR /ruoyi/workflow 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="" ENV SERVER_PORT=9205 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
EXPOSE ${SERVER_PORT} EXPOSE ${SERVER_PORT}

View File

@ -2,6 +2,7 @@ package org.dromara.workflow.flowable.cmd;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import lombok.AllArgsConstructor; 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.Command;
import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity; import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
@ -59,7 +60,7 @@ public class DeleteSequenceMultiInstanceCmd implements Command<Void> {
} }
List<Long> userIdList = new ArrayList<>(); List<Long> userIdList = new ArrayList<>();
userIds.forEach(e -> { 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) { if (userId == null) {
userIdList.add(e); userIdList.add(e);
} }

View File

@ -259,23 +259,23 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
List<HistoricActivityInstance> highLightedFlowList = QueryUtils.hisActivityInstanceQuery(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list(); List<HistoricActivityInstance> highLightedFlowList = QueryUtils.hisActivityInstanceQuery(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list();
for (HistoricActivityInstance tempActivity : highLightedFlowList) { for (HistoricActivityInstance tempActivity : highLightedFlowList) {
Map<String, Object> task = new HashMap<>(); Map<String, Object> task = new HashMap<>();
if (!FlowConstant.SEQUENCE_FLOW.equals(tempActivity.getActivityType()) && switch (tempActivity.getActivityType()) {
!FlowConstant.PARALLEL_GATEWAY.equals(tempActivity.getActivityType()) && case FlowConstant.SEQUENCE_FLOW, FlowConstant.PARALLEL_GATEWAY,
!FlowConstant.EXCLUSIVE_GATEWAY.equals(tempActivity.getActivityType()) && FlowConstant.EXCLUSIVE_GATEWAY, FlowConstant.INCLUSIVE_GATEWAY -> {}
!FlowConstant.INCLUSIVE_GATEWAY.equals(tempActivity.getActivityType()) default -> {
) {
task.put("key", tempActivity.getActivityId()); task.put("key", tempActivity.getActivityId());
task.put("completed", tempActivity.getEndTime() != null); task.put("completed", tempActivity.getEndTime() != null);
task.put("activityType", tempActivity.getActivityType()); task.put("activityType", tempActivity.getActivityType());
taskList.add(task); taskList.add(task);
} }
} }
}
ProcessInstance processInstance = QueryUtils.instanceQuery(processInstanceId).singleResult(); ProcessInstance processInstance = QueryUtils.instanceQuery(processInstanceId).singleResult();
if (processInstance != null) { 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)) { if (CollUtil.isNotEmpty(runtimeNodeList)) {
Iterator<Map<String, Object>> iterator = taskList.iterator(); Iterator<Map<String, Object>> iterator = taskList.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {

View File

@ -263,7 +263,8 @@ public class ActTaskServiceImpl implements IActTaskService {
String userId = String.valueOf(LoginHelper.getUserId()); String userId = String.valueOf(LoginHelper.getUserId());
queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus()); queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus());
queryWrapper.eq(TenantHelper.isEnable(), "t.tenant_id_", TenantHelper.getTenantId()); 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())) { if (StringUtils.isNotBlank(taskBo.getName())) {
queryWrapper.like("t.name_", taskBo.getName()); queryWrapper.like("t.name_", taskBo.getName());
} }
@ -292,19 +293,6 @@ public class ActTaskServiceImpl implements IActTaskService {
return TableDataInfo.build(page); 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.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException; 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.core.utils.StringUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.workflow.domain.WfTaskBackNode; import org.dromara.workflow.domain.WfTaskBackNode;
@ -56,7 +57,7 @@ public class WfTaskBackNodeServiceImpl implements IWfTaskBackNodeService {
wfTaskBackNode.setOrderNo(0); wfTaskBackNode.setOrderNo(0);
wfTaskBackNodeMapper.insert(wfTaskBackNode); wfTaskBackNodeMapper.insert(wfTaskBackNode);
} else { } 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)) { if (ObjectUtil.isEmpty(taskNode)) {
wfTaskBackNode.setOrderNo(list.get(0).getOrderNo() + 1); wfTaskBackNode.setOrderNo(list.get(0).getOrderNo() + 1);
WfTaskBackNode node = getListByInstanceIdAndNodeId(wfTaskBackNode.getInstanceId(), wfTaskBackNode.getNodeId()); 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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/monitor/logs 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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/nacos 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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/seata-server/logs \ RUN mkdir -p /ruoyi/seata-server/logs \
/ruoyi/skywalking/agent /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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/sentinel-dashboard/logs \ RUN mkdir -p /ruoyi/sentinel-dashboard/logs \
/ruoyi/skywalking/agent /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 findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/snailjob/logs RUN mkdir -p /ruoyi/snailjob/logs